自动化立体仓库 - WMS系统
#
1
2 天以前 1d469834074a19ce291f70a783d9d7725430a6fa
#
10个文件已修改
344 ■■■■ 已修改文件
src/main/java/com/zy/asrs/mapper/OrderDetlPakinMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/OrderDetlPakinService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 65 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OrderDetlPakinServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/SaveOrderSyncScheduler.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java 123 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/service/CommonService.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/OrderDetlPakinMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/pakStore/stockOut.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/pakStore/stockOut.html 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/OrderDetlPakinMapper.java
@@ -60,4 +60,5 @@
    List<OrderDetlPakin> selectOrderDetls(@Param("orderNo")String orderNo,@Param("sku")String sku,@Param("upc") String upc);
    List<OrderDetlPakin> selectOrderDetlsByOrderNo(@Param("orderNo")String orderNo);
    boolean morpt(@Param("orderNo")String orderNo);
}
src/main/java/com/zy/asrs/service/OrderDetlPakinService.java
@@ -35,6 +35,7 @@
    boolean increaseQtyByOrderNo(String orderNo, String matnr, String batch, String brand, String standby1, String standby2, String standby3
            , String boxType1, String boxType2, String boxType3, Double qty);
    boolean morpt(String orderNo);
    /**
     * 入出库任务生成时,更新单据表中作业数量
     * @param orderId
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -917,44 +917,37 @@
        }
        Date now = new Date();
        boolean result = false;
        String orderNo = null;
        String orderNo1 = null;
        for (CombParam.CombMat combMat : param.getCombMats()) {
            if(combMat.getSupplier().equals("1")){
                List<OrderDetlPakin> orderDetlPakins = orderDetlPakinService.selectList(new EntityWrapper<OrderDetlPakin>()
                List<OrderDetlPakin> orderDetlPakins2 = orderDetlPakinService.selectList(new EntityWrapper<OrderDetlPakin>()
                        .eq("matnr", combMat.getMatnr()).eq("box_type3", combMat.getOrderNo())
                        .eq("standby1", combMat.getStandby1()).eq("standby2", combMat.getStandby2())
                        .eq("standby3", combMat.getStandby3()).eq("box_type2","BU-00001"));//1时检索和得
                if (orderDetlPakins.size() > 0) {
                    orderNo = orderDetlPakins.get(0).getOrderNo();
                    combMat.setBoxType1(orderDetlPakins.get(0).getBoxType1());
                    combMat.setBoxType2(orderDetlPakins.get(0).getBoxType2());
                    combMat.setBoxType3(orderDetlPakins.get(0).getBoxType3());
                    combMat.setMemo(orderDetlPakins.get(0).getMemo());
                    combMat.setSupp(orderDetlPakins.get(0).getSupp());
                    combMat.setSuppCode(orderDetlPakins.get(0).getSuppCode());
                    combMat.setManu(orderDetlPakins.get(0).getManu());//仓库编码
                        .eq("box_type2","BU-00001"));
                if (orderDetlPakins2.size() > 0) {
                    orderNo1 = orderDetlPakins2.get(0).getOrderNo();
                } else {
                    throw new CoolException("未查询到相关订单===>>" + param.getBarcode());
                }
            }else{
                //0
                List<OrderDetlPakin> orderDetlPakins = orderDetlPakinService.selectList(new EntityWrapper<OrderDetlPakin>()
                        .eq("matnr", combMat.getMatnr()).eq("box_type3", combMat.getOrderNo())
                        .eq("standby1", combMat.getStandby1()).eq("standby2", combMat.getStandby2())
                        .eq("standby3", combMat.getStandby3()).eq("box_type2","shyucheng.test"));
                if (orderDetlPakins.size() > 0) {
                    orderNo = orderDetlPakins.get(0).getOrderNo();
                    combMat.setBoxType1(orderDetlPakins.get(0).getBoxType1());
                    combMat.setBoxType2(orderDetlPakins.get(0).getBoxType2());
                    combMat.setBoxType3(orderDetlPakins.get(0).getBoxType3());
                    combMat.setMemo(orderDetlPakins.get(0).getMemo());
                    combMat.setSupp(orderDetlPakins.get(0).getSupp());
                    combMat.setSuppCode(orderDetlPakins.get(0).getSuppCode());
                    combMat.setManu(orderDetlPakins.get(0).getManu());//仓库编码
                } else {
                    throw new CoolException("未查询到相关订单===>>" + param.getBarcode());
                }
                result = true;
            }
            //0
            List<OrderDetlPakin> orderDetlPakins = orderDetlPakinService.selectList(new EntityWrapper<OrderDetlPakin>()
                    .eq("matnr", combMat.getMatnr()).eq("box_type3", combMat.getOrderNo())
                    .eq("standby1", combMat.getStandby1()).eq("standby2", combMat.getStandby2())
                    .eq("standby3", combMat.getStandby3()).eq("box_type2","shyucheng.test"));
            if (orderDetlPakins.size() > 0) {
                orderNo = orderDetlPakins.get(0).getOrderNo();
                combMat.setBoxType1(orderDetlPakins.get(0).getBoxType1());
                combMat.setBoxType2(orderDetlPakins.get(0).getBoxType2());
                combMat.setBoxType3(orderDetlPakins.get(0).getBoxType3());
                combMat.setMemo(orderDetlPakins.get(0).getMemo());
                combMat.setSupp(orderDetlPakins.get(0).getSupp());
                combMat.setSuppCode(orderDetlPakins.get(0).getSuppCode());
                combMat.setManu(orderDetlPakins.get(0).getManu());//仓库编码
            } else {
                throw new CoolException("未查询到相关订单===>>" + param.getBarcode());
            }
        }
@@ -965,10 +958,18 @@
        if (Cools.isEmpty(order) || order.getSettle() > 2) {
            throw new CoolException("单据编号已过期");
        }
        Order order1 = orderService.selectByNo(orderNo);
        if (Cools.isEmpty(order1) || order1.getSettle() > 2) {
            throw new CoolException("单据编号已过期");
        }
        if(result){
            order1.setPayType(1);//  y->h
            order1.setSalesman(orderNo1);
            orderService.updateById(order1);
        }
        // 生成入库通知档
        List<DetlDto> detlDtos = new ArrayList<>();
        param.getCombMats().forEach(elem -> {
            // 订单明细数量校验
//                OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), elem.getMatnr(), elem.getBatch());
            OrderDetl orderDetl = OrderInAndOutUtil.selectItem(Boolean.TRUE, order.getId(), elem.getMatnr(), elem.getBatch(),elem.getBrand(),elem.getStandby1(),elem.getStandby2(),elem.getStandby3(),
src/main/java/com/zy/asrs/service/impl/OrderDetlPakinServiceImpl.java
@@ -112,4 +112,10 @@
    public List<OrderDetlPakin> selectOrderDetlsByOrderNo(String orderNo){
        return this.baseMapper.selectOrderDetlsByOrderNo(orderNo);
    }
    @Override
    public boolean morpt(String orderNo){
        return this.baseMapper.morpt(orderNo);
    }
}
src/main/java/com/zy/asrs/task/kingdee/SaveOrderSyncScheduler.java
@@ -2,6 +2,8 @@
import com.core.common.Cools;
import com.zy.asrs.entity.Order;
import com.zy.asrs.entity.OrderDetlPakin;
import com.zy.asrs.service.OrderDetlPakinService;
import com.zy.asrs.service.OrderService;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.task.kingdee.handler.SaveOrderSyncHandler;
@@ -28,7 +30,8 @@
    private SaveOrderSyncHandler saveOrderSyncHandler;
    @Autowired
    private OrderService orderService;
    @Autowired
    private OrderDetlPakinService orderDetlPakinService;
    @Value("${erp.switch.ReviewOrderSwitch}")
    private boolean ReviewOrderSwitch;
@@ -44,7 +47,7 @@
            List<Order> orders = orderService.selectComplete();
            if(orders.size() > 0){
                for (Order order : orders) {
                    if(order.getDocType() == 3 || order.getDocType() == 16){ //走新增提交审核流程
                    if(order.getDocType() == 3 || order.getDocType() == 16 || order.getPayType()!=1){ //走新增提交审核流程
                        ReturnT<String> result = saveOrderSyncHandler.start(order);//4已完成
                        if (!result.isSuccess()) {
                            log.error("单据[orderNo={}]新增保存至erp失败", order.getOrderNo());
@@ -54,7 +57,18 @@
                    }else if( order.getDocType() == 21){  //导入订单出库(领料)
                        order.setSettle(8L);
                        orderService.updateById(order);
                    }else{
                    }else if(order.getPayType() == 1 || order.getSalesman() != null){
                        Order order1 = orderService.selectByNo(order.getSalesman());
                        if(orderDetlPakinService.morpt(order.getSalesman())){
                            order.setSettle(11L); //yu/cheng/dan/deng/dai/chu/ku/dan
                            orderService.updateById(order);
//                            ReturnT<String> result = saveOrderSyncHandler.start(order1);//4已完成hui/bao/dan
//                            if (!result.isSuccess()) {
//                                log.error("单据[orderNo={}]新增保存至erp失败", order.getOrderNo());
//                            }
                        }
                    }
                    else{
                        order.setSettle(9L);//不需要新增直接审核
                        orderService.updateById(order);
                    }
src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java
@@ -1227,6 +1227,7 @@
                                List<OrderDetl> orderDetls =
                                        orderDetlService.selectByOrderId(order.getId());
                                boolean exists = orderDetls.stream()
                                        .anyMatch(o -> o.getMatnr().equals(matnr));
                                if (exists) continue;
@@ -1237,35 +1238,40 @@
//                                    supp = locSupp.getOwner();
//                                }
                                // ========= 保存明细 =========
                                OrderDetl orderDetl = new OrderDetl();
                                orderDetl.sync(mat);
                                orderDetl.setThreeCode(detlId);
                                orderDetl.setLineNumber(seq);
                                orderDetl.setAnfme(anfmeBox);
                                orderDetl.setErpAnfme(anfme);
                                orderDetl.setOrderId(order.getId());
                                orderDetl.setOrderNo(order.getOrderNo());
                                orderDetl.setSupp(supp);
                                orderDetl.setSuppCode(suppCode);
                                orderDetl.setSku(matnr);
                                orderDetl.setStandby1(s1);
                                orderDetl.setStandby2(s2);
                                orderDetl.setStandby3(s3);
                                orderDetl.setBoxType1(owner);
                                orderDetl.setBoxType2(ownerUuid);
                                orderDetl.setBoxType3(pOrderNo);
                                orderDetl.setMemo(memo);
                                orderDetl.setVolume(totalVolume);
                                orderDetl.setSafeQty(totalNumItems);
                                orderDetl.setManu(warehouse);
                                orderDetl.setCreateBy(9527L);
                                orderDetl.setCreateTime(new Date());
                                orderDetl.setUpdateBy(9527L);
                                orderDetl.setUpdateTime(new Date());
                                orderDetl.setStatus(1);
                                orderDetl.setQty(0.0D);
                                try{
                                    OrderDetl orderDetl = new OrderDetl();
                                    orderDetl.sync(mat);
                                    orderDetl.setThreeCode(detlId);
                                    orderDetl.setLineNumber(seq);
                                    orderDetl.setAnfme(anfmeBox);
                                    orderDetl.setErpAnfme(anfme);
                                    orderDetl.setOrderId(order.getId());
                                    orderDetl.setOrderNo(order.getOrderNo());
                                    orderDetl.setSupp(supp);
                                    orderDetl.setSuppCode(suppCode);
                                    orderDetl.setSku(matnr);
                                    orderDetl.setStandby1(s1);
                                    orderDetl.setStandby2(s2);
                                    orderDetl.setStandby3(s3);
                                    orderDetl.setBoxType1(owner);
                                    orderDetl.setBoxType2(ownerUuid);
                                    orderDetl.setBoxType3(pOrderNo);
                                    orderDetl.setMemo(memo);
                                    orderDetl.setVolume(totalVolume);
                                    orderDetl.setSafeQty(totalNumItems);
                                    orderDetl.setManu(warehouse);
                                    orderDetl.setCreateBy(9527L);
                                    orderDetl.setCreateTime(new Date());
                                    orderDetl.setUpdateBy(9527L);
                                    orderDetl.setUpdateTime(new Date());
                                    orderDetl.setStatus(1);
                                    orderDetl.setQty(0.0D);
                                orderDetlService.insert(orderDetl);
                                    orderDetlService.insert(orderDetl);
                                } catch (Exception e) {
                                    // 如果发生异常,记录详细的错误信息
                                    callApiLogSaveOrder(order, kingDeeUtilType, "保存明细失败,物料:" + matnr + " 错误信息:" + e.getMessage(), false);
                                }
                            }
                        }
@@ -1404,35 +1410,40 @@
                                    supp = locSupp.getOwner();
                                }
                                // ========= 保存明细 =========
                                OrderDetl orderDetl = new OrderDetl();
                                orderDetl.sync(mat);
                                orderDetl.setThreeCode(detlId);
                                orderDetl.setLineNumber(seq);
                                orderDetl.setAnfme(anfmeBox);
                                orderDetl.setErpAnfme(anfme);
                                orderDetl.setOrderId(order.getId());
                                orderDetl.setOrderNo(order.getOrderNo());
                                orderDetl.setSupp(supp);
                                orderDetl.setSuppCode(suppCode);
                                orderDetl.setSku(matnr);
                                orderDetl.setStandby1(s1);
                                orderDetl.setStandby2(s2);
                                orderDetl.setStandby3(s3);
                                orderDetl.setBoxType1(owner);
                                orderDetl.setBoxType2(ownerUuid);
                                orderDetl.setBoxType3(pOrderNo);
                                orderDetl.setMemo(memo);
                                orderDetl.setVolume(totalVolume);
                                orderDetl.setSafeQty(totalNumItems);
                                orderDetl.setManu(warehouse);
                                orderDetl.setCreateBy(9527L);
                                orderDetl.setCreateTime(new Date());
                                orderDetl.setUpdateBy(9527L);
                                orderDetl.setUpdateTime(new Date());
                                orderDetl.setStatus(1);
                                orderDetl.setQty(0.0D);
                                try{
                                    OrderDetl orderDetl = new OrderDetl();
                                    orderDetl.sync(mat);
                                    orderDetl.setThreeCode(detlId);
                                    orderDetl.setLineNumber(seq);
                                    orderDetl.setAnfme(anfmeBox);
                                    orderDetl.setErpAnfme(anfme);
                                    orderDetl.setOrderId(order.getId());
                                    orderDetl.setOrderNo(order.getOrderNo());
                                    orderDetl.setSupp(supp);
                                    orderDetl.setSuppCode(suppCode);
                                    orderDetl.setSku(matnr);
                                    orderDetl.setStandby1(s1);
                                    orderDetl.setStandby2(s2);
                                    orderDetl.setStandby3(s3);
                                    orderDetl.setBoxType1(owner);
                                    orderDetl.setBoxType2(ownerUuid);
                                    orderDetl.setBoxType3(pOrderNo);
                                    orderDetl.setMemo(memo);
                                    orderDetl.setVolume(totalVolume);
                                    orderDetl.setSafeQty(totalNumItems);
                                    orderDetl.setManu(warehouse);
                                    orderDetl.setCreateBy(9527L);
                                    orderDetl.setCreateTime(new Date());
                                    orderDetl.setUpdateBy(9527L);
                                    orderDetl.setUpdateTime(new Date());
                                    orderDetl.setStatus(1);
                                    orderDetl.setQty(0.0D);
                                orderDetlService.insert(orderDetl);
                                    orderDetlService.insert(orderDetl);
                                } catch (Exception e) {
                                    // 如果发生异常,记录详细的错误信息
                                    callApiLogSaveOrder(order, kingDeeUtilType, "保存明细失败,物料:" + matnr + " 错误信息:" + e.getMessage(), false);
                                }
                            }
                        }
                    }
src/main/java/com/zy/common/service/CommonService.java
@@ -1046,18 +1046,17 @@
        // 开始查找库位 ==============================>>
        // 1.按规则查找库位
        if (Cools.isEmpty(locMast) && sourceStaNo != 4006) {
            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
        if (Cools.isEmpty(locMast) && sourceStaNo != 4006) {//si'lou'p四楼盘点选择区域
                 List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
                    .eq("row1", nearRow)
                    .eq("loc_sts", "O").eq("whs_type", rowLastnoType.getType().longValue())
                    .orderBy("lev1", true).orderBy("bay1", true));//最浅库位
                    .orderBy("lev1", true).orderBy("bay1", true)); // 最浅库位
            for (LocMast locMast1 : locMasts) {
                if (!VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) {
                    continue;
                }
                if (Utils.BooleanWhsTypeStaIoType(rowLastno)) {
                    //获取目标库位所在巷道最深空库位
                    // 获取目标库位所在巷道最深空库位
                    LocMast locMast2 = locMastService.selectLocByLocStsPakInO(curRow, nearRow, locMast1, rowLastnoType.getType().longValue());
                    if (!Cools.isEmpty(locMast2) && locMast2.getRow1() == curRow) {
                        locMast = locMast2;
@@ -1065,12 +1064,98 @@
                    }
                }
            }
        } else {
            // 根据 findLocNoAttributeVo.getOutArea() 设置列范围
            int startBay = 1;
            int endBay = 19;
            switch (findLocNoAttributeVo.getOutArea()) {
                case 1:
                    startBay = 15;
                    endBay = 19;
                    break;
                case 2:
                    startBay = 8;
                    endBay = 14;
                    break;
                case 3:
                    startBay = 1;
                    endBay = 8;
                    break;
                default:
                    break;
            }
            // 优先从指定列范围查找
            boolean found = false;
            // 按照排号从38到32递减查找,优先查找指定列范围(如1-8、8-14、15-19)
            for (int row = 38; row >= 32; row--) {
                List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
                        .eq("row1", row)
                        .ge("bay1", startBay)
                        .le("bay1", endBay)
                        .eq("loc_sts", "O")
                        .eq("whs_type", rowLastnoType.getType().longValue())
                        .orderBy("lev1", true)
                        .orderBy("bay1", true)); // 最浅库位
                for (LocMast locMast1 : locMasts) {
                    if (!VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) {
                        continue;
                    }
                    if (Utils.BooleanWhsTypeStaIoType(rowLastno)) {
                        // 获取目标库位所在巷道最深空库位
                        LocMast locMast2 = locMastService.selectLocByLocStsPakInO(curRow, nearRow, locMast1, rowLastnoType.getType().longValue());
                        if (!Cools.isEmpty(locMast2) && locMast2.getRow1() == curRow) {
                            locMast = locMast2;
                            found = true;
                            break;
                        }
                    }
                }
                if (found) {
                    break; // 找到目标库位后跳出循环
                }
            }
            // 如果没有在优先范围内找到合适库位,继续进行全局查找(1-19列)
            if (!found) {
                // 从排号38到32查找所有列(1-19)
                for (int row = 38; row >= 32; row--) {
                    List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
                            .eq("row1", row)
                            .ge("bay1", 1)  // 查找1到19列
                            .le("bay1", 19)
                            .eq("loc_sts", "O")
                            .eq("whs_type", rowLastnoType.getType().longValue())
                            .orderBy("lev1", true)
                            .orderBy("bay1", true)); // 最浅库位
                    for (LocMast locMast1 : locMasts) {
                        if (!VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) {
                            continue;
                        }
                        if (Utils.BooleanWhsTypeStaIoType(rowLastno)) {
                            // 获取目标库位所在巷道最深空库位
                            LocMast locMast2 = locMastService.selectLocByLocStsPakInO(curRow, nearRow, locMast1, rowLastnoType.getType().longValue());
                            if (!Cools.isEmpty(locMast2) && locMast2.getRow1() == curRow) {
                                locMast = locMast2;
                                found = true;
                                break;
                            }
                        }
                    }
                    if (found) {
                        break; // 找到目标库位后跳出循环
                    }
                }
            }
        }
//        else{
//            if(findLocNoAttributeVo.getOutArea() == 1){
//
//            }
//        }
        // 递归查询
        if (Cools.isEmpty(locMast) || !locMast.getLocSts().equals("O")) {
src/main/resources/mapper/OrderDetlPakinMapper.xml
@@ -263,4 +263,10 @@
        order by update_time
    </select>
    <update id="morpt" parameterType="String">
        UPDATE man_order_detl_pakin
        SET qty = anfme, work_qty = anfme
        WHERE order_no = #{orderNo}
    </update>
</mapper>
src/main/webapp/static/js/pakStore/stockOut.js
@@ -71,11 +71,13 @@
                    layer.msg('请先提取商品库存', {icon: 2});
                } else {
                    var staNo = $("#staNoSelect").val();
                    var outStaArea = $("#outboundAreaSelect").val();
                    if (staNo === "" || staNo === null){
                        layer.msg("请选择出库口", {icon: 2});
                        return;
                    }
                    let param = {
                        outStaArea: outStaArea,
                        outSite: staNo,
                        locDetls: locDetlData
                    }
src/main/webapp/views/pakStore/stockOut.html
@@ -23,7 +23,13 @@
            box-shadow: 0 0 3px rgba(0,0,0,.3);
            padding-bottom: 20px;
        }
        #staNoSpan, #outboundAreaSpan {
            text-align: center;
            display: inline-block;
            width: 100px;
            font-size: 13px;
            margin-right: 10px; /* 增加右边间距 */
        }
        #staNoSpan {
            text-align: center;
            display: inline-block;
@@ -100,6 +106,13 @@
                <select id="staNoSelect" lay-verify="required">
                    <option value="">请选择站点</option>
                </select>
                <!-- 2.选择放货区域 -->
                <span id="outboundAreaSpan">放货区域:</span>
                <select id="outboundAreaSelect">
                    <option value="1">1</option>
                    <option value="2">2</option>
                    <option value="3">3</option>
                </select>
                <!-- 2.启动出库 -->
                <button class="layui-btn layui-btn-lg" id="btn-outbound" lay-event="outbound">启动出库</button>
            </div>