自动化立体仓库 - WMS系统
0e0806329f94356aac37b5c0a2ba900cc16ced44..8575002e3bce8a6d16633d5c1a4eed99ccf638ce
2025-12-17 skyouc
no message
857500 对比 | 目录
2025-12-17 skyouc
添加备货单接口对接
655f0e 对比 | 目录
2个文件已添加
13个文件已修改
513 ■■■■ 已修改文件
src/main/java/com/zy/api/controller/KopenApiController.java 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/entity/OrderItemsParam.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/entity/OrderParams.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/entity/OutOrderParams.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/entity/PubOrderParams.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/entity/StockUpOrderParams.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/enums/OrderWkType.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/service/KopenApiService.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/service/impl/KopenApiServiceImpl.java 280 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkMast.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/basStation/basStation.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/orderPakout/agvOut.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/controller/KopenApiController.java
@@ -5,17 +5,24 @@
import com.zy.api.entity.OrderParams;
import com.zy.api.entity.PubOrderParams;
import com.zy.api.entity.ReportOrderParam;
import com.zy.api.entity.StockUpOrderParams;
import com.zy.api.entity.SyncMatParmas;
import com.zy.api.service.KopenApiService;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Objects;
@Slf4j
@RestController
@RequestMapping("/kopen")
public class KopenApiController {
@@ -53,14 +60,10 @@
     */
    @ApiOperation("零件信息数据更新")
    @PostMapping("/sendPartsMaster")
    public R basMatUpdate(@RequestBody SyncMatParmas params) {
        if (Objects.isNull(params)) {
    public R basMatUpdate(@RequestBody List<SyncMatParmas> params) {
        if (Objects.isNull(params) || params.isEmpty()) {
            return R.error("参数不能为空!!");
        }
        if (Objects.isNull(params.getPro_komcode())) {
            return R.error("零件编码不能为空!!");
        }
        return kopenApiService.basMatupdate(params);
    }
@@ -103,4 +106,47 @@
        return kopenApiService.sendOutDispatch(params);
    }
    //  /**
    //  * 备货指示派工单反馈
    //  * @author Ryan
    //  * @date 2025/11/24 15:22
    //  * @param params
    //  * @return com.core.common.R
    //  */
    // @ApiOperation("备货指示派工单反馈")
    // @PostMapping("/getOutDispatchResult")
    // public R getOutDispatchResult(@RequestBody ReportOrderParam params) {
    //     if (Objects.isNull(params)) {
    //         return R.error("参数不能为空!!");
    //     }
    //     if (Objects.isNull(params.getKopen_id()) && Objects.isNull(params.getInv_no()) && Objects.isNull(params.getDispatch_no())) {
    //         return R.error("取消条件不能为空!!");
    //     }
    //     return kopenApiService.getOutDispatchResult(params);
    // }
    /**
     * 备货单下发
     * @author Ryan
     * @date 2025/11/24 15:21
     * @param params
     * @return com.core.common.R
     */
    @ApiOperation("备货单下发")
    @PostMapping("/getOutDetails")
    public R getOutDetails(@RequestBody StockUpOrderParams params) {
        if (Objects.isNull(params)) {
            return R.error("参数不能为空!!");
        }
        if (Objects.isNull(params.getDetails()) || params.getDetails().isEmpty()) {
            return R.error("上报订单列表不能为空!!");
        }
        return kopenApiService.getOutDetails(params);
    }
}
src/main/java/com/zy/api/entity/OrderItemsParam.java
@@ -39,4 +39,7 @@
    @ApiModelProperty("变更数量")
    private Integer new_qty;
    @ApiModelProperty("捆绑/叫料/数量数量")
    private Integer pick_qty;
}
src/main/java/com/zy/api/entity/OrderParams.java
@@ -26,7 +26,7 @@
    @ApiModelProperty("公司ID")
    private String company_id;
    @ApiModelProperty("入库类型 1: 采购入库,2: 调拨入库,3: 销售退货入库,4: 套包入库, 5:SO, 6:EO")
    @ApiModelProperty("入库类型 1: 采购入库,2: 调拨入库,3: 销售退货入库,4: 套包入库, 5:SO, 6:EO, 7:出库")
    private String type;
    @ApiModelProperty("箱号")
@@ -42,6 +42,25 @@
    private String source_location;
    @ApiModelProperty("拣货单号")
    private String pick_no;
    @ApiModelProperty("订单号")
    private String order_no;
    @ApiModelProperty("客户ID")
    private String cus_id;
    @ApiModelProperty("客户地址")
    private String cus_address;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private String update_time;
src/main/java/com/zy/api/entity/OutOrderParams.java
New file
@@ -0,0 +1,34 @@
package com.zy.api.entity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.List;
@Data
@Accessors(chain = true)
@ApiModel(value = "OutOrderParams", description = "备货订单参数")
public class OutOrderParams implements Serializable {
    @ApiModelProperty("明细备货单号")
    private String pick_no;
    @ApiModelProperty("订单号")
    private String order_no;
    @ApiModelProperty("客户")
    private String cus_id;
    @ApiModelProperty("客户地址")
    private String cus_address;
    @ApiModelProperty("业务类型")
    private String type;
    @ApiModelProperty("订单明细")
    private List<OrderItemsParam> partList;
}
src/main/java/com/zy/api/entity/PubOrderParams.java
@@ -10,7 +10,7 @@
@Data
@Accessors(chain = true)
@ApiModel(value = "PubOrderParams", description = "发布订单信息")
public class PubOrderParams extends OrderParams{
public class PubOrderParams extends OrderParams {
    @ApiModelProperty("入库物料列表")
    List<OrderItemsParam> details;
src/main/java/com/zy/api/entity/StockUpOrderParams.java
New file
@@ -0,0 +1,19 @@
package com.zy.api.entity;
import java.util.List;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
@ApiModel(value = "StockUpOrderParams", description = "备货订单参数")
public class StockUpOrderParams extends OrderParams{
    @ApiModelProperty("订单明细")
    private List<OutOrderParams> details;
}
src/main/java/com/zy/api/enums/OrderWkType.java
@@ -9,7 +9,7 @@
    ORDER_WK_BAG_IN("4", "套包入库"),
    ORDER_WK_ORDER_OUT_EO("EO", "备货指示派工单(EO)"),
    ORDER_WK_ORDER_OUT_SO("SO", "备货指示派工单(SO)"),
    ORDER_WK_ORDER_OUT("29", "备货单");
    ORDER_WK_ORDER_OUT("14", "备货单");
    OrderWkType(String val, String desc) {
        this.val = val;
@@ -28,7 +28,7 @@
            return OrderType.ORDER_IN.type;
        } else if (val.equals(OrderWkType.ORDER_WK_BAG_IN.val)) {
            return OrderType.ORDER_IN.type;
        } else if (val.equals(OrderWkType.ORDER_WK_ORDER_OUT.val)  || val.equals(OrderWkType.ORDER_WK_ORDER_OUT.val)  || val.equals(OrderWkType.ORDER_WK_ORDER_OUT.val)) {
        } else if (val.equals(OrderWkType.ORDER_WK_ORDER_OUT_EO.val)  || val.equals(OrderWkType.ORDER_WK_ORDER_OUT_SO.val)  || val.equals(OrderWkType.ORDER_WK_ORDER_OUT.val)) {
            return OrderType.ORDER_OUT.type;
        } else {
            return OrderType.ORDER_OUT.type;
src/main/java/com/zy/api/service/KopenApiService.java
@@ -1,8 +1,11 @@
package com.zy.api.service;
import java.util.List;
import com.core.common.R;
import com.zy.api.entity.PubOrderParams;
import com.zy.api.entity.ReportOrderParam;
import com.zy.api.entity.StockUpOrderParams;
import com.zy.api.entity.SyncMatParmas;
public interface KopenApiService {
@@ -24,7 +27,7 @@
     * @param matnrs
     * @return com.core.common.R
     */
    R basMatupdate(SyncMatParmas matnrs);
    R basMatupdate(List<SyncMatParmas> matnrs);
    /**
@@ -47,4 +50,13 @@
     * @return
     */
    R sendOutDispatch(PubOrderParams params);
    /**
     * 备货单下发
     * @author Ryan
     * @date 2025/11/24 15:40
     * @param params
     * @return com.core.common.R
     */
    R getOutDetails(StockUpOrderParams params);
}
src/main/java/com/zy/api/service/impl/KopenApiServiceImpl.java
@@ -4,9 +4,12 @@
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.R;
import com.core.exception.CoolException;
import com.zy.api.entity.OrderItemsParam;
import com.zy.api.entity.OrderParams;
import com.zy.api.entity.OutOrderParams;
import com.zy.api.entity.PubOrderParams;
import com.zy.api.entity.ReportOrderParam;
import com.zy.api.entity.StockUpOrderParams;
import com.zy.api.entity.SyncMatParmas;
import com.zy.api.enums.MatLocType;
import com.zy.api.enums.OrderType;
@@ -29,7 +32,9 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
@Service("kopenApiServiceImpl")
@@ -45,10 +50,10 @@
    /**
     * 接收下发订单信息
     *
     * @author Ryan
     * @date 2025/11/24 14:49
     * @param params
     * @return com.core.common.R
     * @author Ryan
     * @date 2025/11/24 14:49
     */
    @Override
    public R receiveOrders(PubOrderParams params) {
@@ -61,7 +66,7 @@
    /**
     * 上架派工单反馈
     *
     *
     * @author Ryan
     * @date 2025/11/24 15:33
     */
@@ -96,13 +101,14 @@
    }
    /* */
    /**
     * 备货指示派工单下发
     *
     * @author Ryan
     * @date 2025/11/24 15:21
     *
     * @param params
     * @return com.core.common.R
     * @author Ryan
     * @date 2025/11/24 15:21
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -126,95 +132,104 @@
        return R.ok("备货指示派工单下发成功!!");
    }
    /**
     * 备货指示派工单
     *
     * @author Ryan
     * @date 2025/12/16 9:15
     * @param params
     */
    private void outOrderAddAndUpdate(PubOrderParams params, String type) {
        if (Objects.isNull(params)) {
            throw new CoolException("参数不能为空!!");
        }
        if (Objects.isNull(params.getType())) {
            throw new CoolException("订单类型不能为空!!");
        }
    // /**
    // * 备货指示派工单
    // *
    // * @author Ryan
    // * @date 2025/12/16 9:15
    // * @param params
    // */
    // private void outOrderAddAndUpdate(PubOrderParams params, String type) {
    // if (Objects.isNull(params)) {
    // throw new CoolException("参数不能为空!!");
    // }
    // if (Objects.isNull(params.getType())) {
    // throw new CoolException("订单类型不能为空!!");
    // }
        OrderParams orderParams = JSONObject.parseObject(JSONObject.toJSONString(params), OrderParams.class);
        Order order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no", orderParams.getInv_no()));
        if (type.equals("add") && !Objects.isNull(order)) {
            throw new CoolException("单据已存在, 不可重复添加!!");
        }
        // 判断订单是否存在
        if (Objects.isNull(order)) {
            /** 不存在,新增订单 */
            generateOrders(params);
        } else {
            /** 存在,删除老订单,更新插入新订单 */
            // 删除旧订单明细
            if (!orderDetlService.delete(new EntityWrapper<OrderDetl>().eq("order_id", order.getId()))) {
                throw new CoolException("订单明细删除失败!!");
            }
            ;
            if (!orderService.deleteById(order.getId())) {
                throw new CoolException("原单据删除失败!!");
            }
            generateOrders(params);
        }
    // OrderParams orderParams =
    // JSONObject.parseObject(JSONObject.toJSONString(params), OrderParams.class);
    // Order order = orderService.selectOne(new
    // EntityWrapper<Order>().eq("order_no", orderParams.getInv_no()));
    // if (type.equals("add") && !Objects.isNull(order)) {
    // throw new CoolException("单据已存在, 不可重复添加!!");
    // }
    // // 判断订单是否存在
    // if (Objects.isNull(order)) {
    // /** 不存在,新增订单 */
    // generateOrders(params);
    // } else {
    // /** 存在,删除老订单,更新插入新订单 */
    // // 删除旧订单明细
    // if (!orderDetlService.delete(new EntityWrapper<OrderDetl>().eq("order_id",
    // order.getId()))) {
    // throw new CoolException("订单明细删除失败!!");
    // }
    // ;
    // if (!orderService.deleteById(order.getId())) {
    // throw new CoolException("原单据删除失败!!");
    // }
    // generateOrders(params);
    // }
    }
    // }
    /**
     * 基础零件变更
     *
     * @author Ryan
     * @date 2025/11/24 15:05
     * @param params
     * @return com.core.common.R
     * @author Ryan
     * @date 2025/11/24 15:05
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public synchronized R basMatupdate(SyncMatParmas params) {
        if (Objects.isNull(params.getPro_komcode())) {
            return R.error("零件编码不能为空!!");
    public synchronized R basMatupdate(List<SyncMatParmas> params) {
        if (Objects.isNull(params) || params.isEmpty()) {
            return R.error("参数不能为空!!");
        }
        Mat matnr = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", params.getPro_komcode()));
        if (!Objects.isNull(matnr)) {
            // 订单时间
            if (Utils.isValidFormat(params.getUpdate_time(), "yyyy-MM-dd HH:mm:ss")) {
                Date date1 = Utils.getFormateDate(params.getUpdate_time());
                matnr.setUpdateTime(date1);
        params.forEach(mats -> {
            if (Objects.isNull(mats) ) {
                throw new CoolException("物料编码不能为空!!");
            }
            matnr.setMaktx(params.getPro_name());
            matnr.setSpecs(params.getPro_size());
            matnr.setWeight(Double.parseDouble(params.getPro_wet()));
            matnr.setSuppCode(params.getPro_id());
            matnr.setTagId(MatLocType.getTag(params.getPro_type()));
            matnr.setManu(params.getCompany_id());
            if (!matService.updateById(matnr)) {
                throw new CoolException("物料更新失败或无需更新!!");
            Mat matnr = matService.selectByMatnr(mats.getPro_komcode());
            if (!Objects.isNull(matnr)) {
                // 订单时间
                if (Utils.isValidFormat(mats.getUpdate_time(), "yyyy-MM-dd HH:mm:ss")) {
                    Date date1 = Utils.getFormateDate(mats.getUpdate_time());
                    matnr.setUpdateTime(date1);
                }
                matnr.setMaktx(mats.getPro_name());
                matnr.setSpecs(mats.getPro_size());
                matnr.setWeight(Double.parseDouble(mats.getPro_wet()));
                matnr.setSuppCode(mats.getPro_id());
                matnr.setTagId(MatLocType.getTag(mats.getPro_type()));
                matnr.setManu(mats.getCompany_id());
                if (!matService.updateById(matnr)) {
                    throw new CoolException("物料更新失败或无需更新!!");
                }
            } else {
                if (Objects.isNull(matnr)) {
                    matnr = new Mat();
                }
                // 订单时间
                if (Utils.isValidFormat(mats.getUpdate_time(), "yyyy-MM-dd HH:mm:ss")) {
                    Date date1 = Utils.getFormateDate(mats.getUpdate_time());
                    matnr.setUpdateTime(date1);
                }
                matnr.setMaktx(mats.getPro_name());
                matnr.setMatnr(mats.getPro_komcode());
                matnr.setSpecs(mats.getPro_size());
                matnr.setWeight(Double.parseDouble(mats.getPro_wet()));
                matnr.setSuppCode(mats.getPro_id());
                matnr.setTagId(MatLocType.getTag(mats.getPro_type()));
                matnr.setManu(mats.getCompany_id());
                if (!matService.insert(matnr)) {
                    throw new CoolException("物料更新失败!!");
                }
            }
        } else {
            if (Objects.isNull(matnr)) {
                matnr = new Mat();
            }
            // 订单时间
            if (Utils.isValidFormat(params.getUpdate_time(), "yyyy-MM-dd HH:mm:ss")) {
                Date date1 = Utils.getFormateDate(params.getUpdate_time());
                matnr.setUpdateTime(date1);
            }
            matnr.setMaktx(params.getPro_name());
            matnr.setMatnr(params.getPro_komcode());
            matnr.setSpecs(params.getPro_size());
            matnr.setWeight(Double.parseDouble(params.getPro_wet()));
            matnr.setSuppCode(params.getPro_id());
            matnr.setTagId(MatLocType.getTag(params.getPro_type()));
            matnr.setManu(params.getCompany_id());
            if (!matService.insert(matnr)) {
                throw new CoolException("物料更新失败!!");
            }
        }
        });
        return R.ok("保存成功!!");
    }
@@ -234,14 +249,28 @@
            throw new CoolException("订单类型不能为空!!");
        }
        OrderParams orderParams = JSONObject.parseObject(JSONObject.toJSONString(params), OrderParams.class);
        // Order order = orderService.selectOne(new
        // EntityWrapper<Order>().eq("order_no", orderParams.getDispatch_no()));
        Order order = new Order();
        if (OrderType.ORDER_IN.type.equals(OrderWkType.getTypeVal(params.getType()))) {
            // 入库
          order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no", orderParams.getInv_no()));
            order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no",
                    orderParams.getDispatch_no()));
        } else if (OrderType.ORDER_OUT.type.equals(OrderWkType.getTypeVal(params.getType()))) {
            // 出库
           order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no", orderParams.getDispatch_no()));
            if (OrderWkType.ORDER_WK_ORDER_OUT.val.equals(params.getType())) {
                // 备货单出库
                order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no",
                        orderParams.getPick_no()));
            } else if (OrderWkType.ORDER_WK_ORDER_OUT_EO.val.equals(params.getType())
                    || OrderWkType.ORDER_WK_ORDER_OUT_SO.val.equals(params.getType())) {
                // 备货指示派工单(EO/SO)出库
                order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no",
                        orderParams.getDispatch_no()));
            }
        }
        // 出库
        if (type.equals("add") && !Objects.isNull(order)) {
            throw new CoolException("单据已存在, 不可重复添加!!");
        }
@@ -269,29 +298,40 @@
    /**
     * 生成订单信息
     *
     *
     * @param params
     */
    @Transactional(rollbackFor = Exception.class)
    public void generateOrders(PubOrderParams params) {
        // 将数据当新订单插入
        Order newOrder = new Order();
        // 派工单号
        newOrder.setOrderNo(params.getDispatch_no());
        if (OrderType.ORDER_IN.type.equals(OrderWkType.getTypeVal(params.getType()))) {
            // 入库
            newOrder.setPakinPakoutStatus(1);
            newOrder.setDocType(Long.parseLong(params.getType()));
            newOrder.setOrderNo(params.getInv_no());
            newOrder.setNumber(params.getInv_no());
        } else if (OrderType.ORDER_OUT.type.equals(OrderWkType.getTypeVal(params.getType()))) {
            // 出库
            if (OrderWkType.ORDER_WK_ORDER_OUT.val.equals(params.getType())) {
                // 备货单出库
                newOrder.setOrderNo(params.getPick_no());
                newOrder.setNumber(params.getDispatch_no());
                newOrder.setCstmrName(params.getCus_id());
                newOrder.setTel(params.getCus_address());
                newOrder.setDocType(Long.parseLong(OrderTypeEnum.STOCK.type + ""));
            } else if (OrderWkType.ORDER_WK_ORDER_OUT_EO.val.equals(params.getType())
                    || OrderWkType.ORDER_WK_ORDER_OUT_SO.val.equals(params.getType())) {
                // 备货指示派工单(EO/SO)出库
                newOrder.setDocType(Long.parseLong(OrderTypeEnum.TRANSFER.type + ""));
            }
            newOrder.setPakinPakoutStatus(2);
            newOrder.setDocType(Long.parseLong(OrderTypeEnum.TRANSFER.type + ""));
            newOrder.setOrderNo(params.getDispatch_no());
        }
        newOrder.setUuid(generateUUID(params));
        // 流水号(唯一)
        newOrder.setDefNumber(params.getKopen_id());
        // 派工单号
        newOrder.setNumber(params.getDispatch_no());
        // 箱号
        newOrder.setItemName(params.getPm_tktid());
        newOrder.setSettle(OrderSettle.ORDER_SETTLE_HOLDING.type);
@@ -323,8 +363,14 @@
                    orderItem.setAnfme(Math.round(item.getInv_qty() * 10000) / 10000.0);
                } else if (OrderType.ORDER_OUT.type.equals(OrderWkType.getTypeVal(params.getType()))) {
                    // 出库
                    newOrder.setPakinPakoutStatus(2);
                    orderItem.setAnfme(Math.round(item.getOrder_qty() * 10000) / 10000.0);
                    if (OrderWkType.ORDER_WK_ORDER_OUT.val.equals(params.getType())) {
                        // 备货单出库
                        orderItem.setAnfme(Math.round(item.getPick_qty() * 10000) / 10000.0);
                    } else if (OrderWkType.ORDER_WK_ORDER_OUT_EO.val.equals(params.getType())
                            || OrderWkType.ORDER_WK_ORDER_OUT_SO.val.equals(params.getType())) {
                        // 备货指示派工单(EO/SO)出库
                        orderItem.setAnfme(Math.round(item.getOrder_qty() * 10000) / 10000.0);
                    }
                }
                orderItem.setMatnr(matnr.getMatnr());
                orderItem.setMaktx(matnr.getMaktx());
@@ -344,4 +390,56 @@
        }
    }
    /**
     * 备货单下发
     *
     * @param params
     * @return com.core.common.R
     * @author Ryan
     * @date 2025/11/24 15:40
     */
    @Override
    public R getOutDetails(StockUpOrderParams params) {
        if (Objects.isNull(params)) {
            return R.error("参数不能为空!!");
        }
        // 校验参数
        if (Objects.isNull(params.getDispatch_no())) {
            return R.error("派工单编号不能为空!!");
        }
        if (Objects.isNull(params.getKopen_id())) {
            return R.error("流水号不能为空!!");
        }
        if (Objects.isNull(params.getCompany_id())) {
            return R.error("公司ID不能为空!!");
        }
        if (Objects.isNull(params.getDetails()) || params.getDetails().isEmpty()) {
            return R.error("订单明细不能为空!!");
        }
        List<OrderItemsParam> items = new ArrayList<>();
        if (params.getDetails() != null) {
            for (OutOrderParams detail : params.getDetails()) {
                if (detail.getPartList() != null) {
                    items.addAll(detail.getPartList());
                }
            }
        }
        params.getDetails().forEach(item -> {
            PubOrderParams pubOrderParams = new PubOrderParams();
            BeanUtils.copyProperties(params, pubOrderParams);
            pubOrderParams.setType(item.getType())
                    .setPick_no(item.getPick_no())
                    .setCus_address(item.getCus_address())
                    .setOrder_no(item.getOrder_no())
                    .setUpdate_time(params.getUpdate_time())
                    .setCus_id(item.getCus_id());
            pubOrderParams.setDetails(item.getPartList());
            addOrUpdateOrders(pubOrderParams, "add");
        });
        return R.ok("备货单下发成功!!");
    }
}
src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -247,14 +247,14 @@
    @TableField("appe_time")
    private Date appeTime;
    @ApiModelProperty(value= "")
    @ApiModelProperty(value= "并板出库(缓存区AGV站点")
    @TableField("pause_mk")
    private String pauseMk;
    @ApiModelProperty("并板出库(缓存区AGV站点)")
    @TableField(exist = false)
    private String avgSta;
//    @ApiModelProperty("并板出库(缓存区AGV站点)")
//    @TableField(exist = false)
//    private String avgSta;
    @ApiModelProperty(value= "")
    @TableField("error_time")
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -2230,7 +2230,8 @@
                wrkMast.setStaNo(staDesc.getStnNo() + ""); // 目标站
                wrkMast.setSourceLocNo(locMast.getLocNo()); // 源库位
                //小松项目,缓存出库AGV站点,用于清空缓存区库存
                wrkMast.setAvgSta(station.getDevNo());
                wrkMast.setPauseMk(station.getDevNo());
//                wrkMast.setAvgSta(station.getDevNo());;
                wrkMast.setFullPlt("Y"); // 满板:Y
                wrkMast.setPicking("N"); // 拣料
                wrkMast.setExitMk("N"); // 退出
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -1478,10 +1478,6 @@
        if (wrkMast.getWrkSts() < 11 || wrkMast.getWrkSts() == 15) {
            throw new CoolException("当前工作状态无法进行操作");
        }
        String agvSta = null;
        if (wrkMast.getIoType() == TaskIOType.MERGE_OUT.type) {
            agvSta = wrkMast.getAvgSta();
        }
        // 保存工作明细档历史档
//        if (!wrkDetlLogService.save(wrkMast.getWrkNo())) {
@@ -1516,7 +1512,10 @@
            throw new CoolException("更新工作档数据状态失败");
        }
        // 修改库位状态 Q.拣料/盘点/并板再入库
        LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", wrkMast.getLocNo()));
        if (Cools.isEmpty(locMast)) {
            throw new CoolException("库位不存在:" + wrkMast.getLocNo());
        }
        locMast.setLocSts("Q");
        locMast.setAreaId(basAreas.getId());
        locMast.setAreaName(basAreas.getName());
@@ -1527,19 +1526,7 @@
            throw new CoolException("修改库位状态失败");
        }
        // . 删除缓存站点明细
        if (!Objects.isNull(agvSta)) {
            // 修改目标站点信息
            BasStation station = basStationService.selectOne(new EntityWrapper<BasStation>().eq("dev_no", agvSta));
            if (Objects.isNull(station)) {
                throw new CoolException("站点不存在!!");
            }
            basStationDetlService.delete(new EntityWrapper<BasStationDetl>().eq("dev_no", station.getDevNo()));
            station.setLocSts(LocStsType.LOC_STS_TYPE_O.type);
            if (!basStationService.updateById(station)) {
                throw new CoolException("站点状态更新失败!!");
            }
        }
        // .修改并托入库明细托码
        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>()
                        .eq("area_id", locMast.getAreaId())
@@ -1555,21 +1542,19 @@
        }
        // .修改任务档明细托盘码
        List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
        if (!Objects.isNull(wrkDetls) && !wrkDetls.isEmpty()) {
            wrkDetls.forEach(wrkDetl -> {
               wrkDetl.setZpallet(wrkMast.getBarcode());
               wrkDetl.setBarcode(wrkMast.getBarcode());
                if (!wrkDetlService.updateById(wrkDetl)) {
            for (WrkDetl wrkDetl : wrkDetls) {
                wrkDetl.setZpallet(wrkMast.getBarcode());
                wrkDetl.setBarcode(wrkMast.getBarcode());
                if (!wrkDetlService.update(wrkDetl, new EntityWrapper<WrkDetl>()
                                .eq("matnr", wrkDetl.getMatnr())
                                .eq("standby1", wrkDetl.getStandby1())
                        .eq("wrk_no", wrkMast.getWrkNo()))) {
                    throw new CoolException("任务档明细修改失败!!");
                }
            });
            }
        }
    }
    @Override
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -6,6 +6,7 @@
import com.zy.asrs.entity.*;
import com.zy.asrs.enums.LocAreaType;
import com.zy.asrs.enums.LocStsType;
import com.zy.asrs.enums.TaskIOType;
import com.zy.asrs.service.*;
import com.zy.asrs.service.impl.*;
import com.zy.asrs.task.AbstractHandler;
@@ -424,6 +425,28 @@
                                    + wrkMast.getLocNo() + "]");
                        }
                    }
                    String agvSta = null;
                    if (wrkMast.getIoType() == TaskIOType.MERGE_OUT.type) {
                        agvSta = wrkMast.getPauseMk();
                    }
                    // . 删除缓存站点明细
                    if (!Objects.isNull(agvSta)) {
                        // 修改目标站点信息
                        BasStation station = basStationService.selectOne(new EntityWrapper<BasStation>().eq("dev_no", agvSta));
                        if (Objects.isNull(station)) {
                            throw new CoolException("站点不存在!!");
                        }
                        basStationDetlService.delete(new EntityWrapper<BasStationDetl>().eq("dev_no", station.getDevNo()));
                        station.setLocSts(LocStsType.LOC_STS_TYPE_D.type);
                        if (!basStationService.updateById(station)) {
                            throw new CoolException("站点状态更新失败!!");
                        }
                    }
                    break;
                // 盘点入库
                case 57:
src/main/webapp/static/js/basStation/basStation.js
@@ -26,6 +26,7 @@
            , {field: 'decDesc', align: 'center', title: '设备描述'}
            , {field: 'area', align: 'center', title: '区域'}
            , {field: 'locSts$', align: 'center', title: '状态'}
            , {field: 'barcode', align: 'center', title: '托盘码'}
            , {field: 'ioTime', align: 'center', title: '入出库时间'}
            , {field: 'modiUser$', align: 'center', title: '修改人员'}
            , {field: 'modiTime$', align: 'center', title: '修改时间'}
src/main/webapp/static/js/orderPakout/agvOut.js
@@ -236,7 +236,7 @@
                                                    if (tableCache[i].orderNo === stoPreTabData[j].orderNo
                                                        && tableCache[i].matnr === stoPreTabData[j].matnr
                                                        && tableCache[i].locNo === stoPreTabData[j].locNo) {
                                                        tableCache[i]['staNo'] = batchSta;
                                                        tableCache[i]['agvStaNo'] = batchSta;
                                                        arr.push(i);
                                                    }
                                                }