自动化立体仓库 - WMS系统
zhangchao
2024-11-02 68de8850d0c2fb4e5efef77ad92275ff05686708
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -84,6 +84,10 @@
    private DocTypeService docTypeService;
    @Autowired
    private AgvWaitPakinService agvWaitPakinService;
    @Autowired
    private AgvLocDetlService agvLocDetlService;
    @Autowired
    private FlowLogService flowLogService;
    @Override
    @Transactional
@@ -114,13 +118,13 @@
        wrkMast.setSourceStaNo(dto.getSourceStaNo());
        wrkMast.setStaNo(dto.getStaNo());
        wrkMast.setLocNo(dto.getLocNo());
        wrkMast.setBarcode(param.getBarcode()); // 托盘码
        wrkMast.setBarcode(param.getBarcode()); // 货架码
        wrkMast.setFullPlt("Y"); // 满板:Y
        wrkMast.setPicking("N"); // 拣料
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setEmptyMk("N"); // 空板
        wrkMast.setLinkMis("N");
        wrkMast.setCtnType(sourceStaNo.getCtnType()); // 容器类型
        wrkMast.setCtnType(sourceStaNo.getCtnType()); // 货架类型
        wrkMast.setAppeUser(userId);
        wrkMast.setAppeTime(now);
        wrkMast.setModiUser(userId);
@@ -284,6 +288,7 @@
            }
        }
        ArrayList<String> outerLocs = new ArrayList<>();
        //检测是否为浅库位
        boolean sign=false;
        String th = "";
@@ -301,17 +306,32 @@
                    LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", outerLoc));
                    if (locMast != null) {
                        if (!locMast.getLocSts().equals("O") && !locMast.getLocSts().equals("R")) {
                            sign = true;
                            th = "库位号:" + locNo + " 浅库位有非空库位!";
                            break;
//                            sign = true;
//                            th = "库位号:" + locNo + " 浅库位有非空库位!";
//                            break;
                            OutLocDto outLocDto = new OutLocDto();
                            outLocDto.setLocNo(locMast.getLocNo());
                            List<LocDetlDto> locDetlDtos1 = new ArrayList<>();
                            for (LocDetl locDetl : locDetlService.selectByLocNo(locMast.getLocNo())) {
                                LocDetlDto locDetlDto = new LocDetlDto();
                                locDetlDto.setLocDetl(locDetl);
                                locDetlDto.setCount(locDetl.getAnfme());
                                locDetlDtos1.add(locDetlDto);
                            }
                            outLocDto.setLocDetlDtos(locDetlDtos1);
                            if (!outerLocs.contains(locMast.getLocNo())) {
                                dtos.add(outLocDto);
                                outerLocs.add(locMast.getLocNo());
                            }
                        }
                    }
                }
            }
        }
        if (sign){
            throw new CoolException("出库失败;"+th);
        }
//        if (sign){
//            throw new CoolException("出库失败;"+th);
//        }
        //**************325、331、333、339站点额外逻辑代码**************
        HashMap<String, Object> tmpMap = new HashMap<>();
@@ -484,6 +504,7 @@
        wrkMast.setCrnNo(outMost?outCrnNo:locMast.getCrnNo());
        wrkMast.setSourceStaNo(sourceStaNo); // 源站
        wrkMast.setStaNo(stnNo); // 目标站
        wrkMast.setPltType(locMast.getPltType());
        if(ioType == 101 && taskDto.getStaNo()>=300){
            wrkMast.setSourceStaNo(346); // 源站
            wrkMast.setStaNo(346); // 目标站
@@ -511,26 +532,53 @@
            }
            Mat mat = matService.selectByMatnr(locDto.getMatnr());
            assert mat != null;
            WrkDetl wrkDetl = new WrkDetl();
            wrkDetl.sync(mat);
            wrkDetl.setZpallet(wrkMast.getBarcode());
            wrkDetl.setIoTime(now);
            wrkDetl.setWrkNo(workNo);
            wrkDetl.setBatch(locDto.getBatch());
            wrkDetl.setOrderNo(locDto.getOrderNo());
            wrkDetl.setAnfme(locDto.getAnfme()); // 数量
            wrkDetl.setAppeTime(now);
            wrkDetl.setAppeUser(userId);
            wrkDetl.setModiTime(now);
            wrkDetl.setModiUser(userId);
            wrkDetl.setSuppCode(locDto.getContainerCode());
            wrkDetl.setThreeCode(locDto.getCsocode());
            wrkDetl.setDeadTime(locDto.getIsoseq());
            if (!wrkDetlService.insert(wrkDetl)) {
                throw new CoolException("保存工作档明细失败");
            if (!BaseController.isJSON(locDto.getOrderNo())) {
                WrkDetl wrkDetl = new WrkDetl();
                wrkDetl.sync(mat);
                wrkDetl.setZpallet(wrkMast.getBarcode());
                wrkDetl.setIoTime(now);
                wrkDetl.setWrkNo(workNo);
                wrkDetl.setBatch(locDto.getBatch());
                wrkDetl.setOrderNo(locDto.getOrderNo());
                wrkDetl.setAnfme(locDto.getAnfme()); // 数量
                wrkDetl.setAppeTime(now);
                wrkDetl.setAppeUser(userId);
                wrkDetl.setModiTime(now);
                wrkDetl.setModiUser(userId);
                wrkDetl.setSuppCode(locDto.getContainerCode());
                wrkDetl.setThreeCode(locDto.getCsocode());
                wrkDetl.setDeadTime(locDto.getIsoseq());
                if (!wrkDetlService.insert(wrkDetl)) {
                    throw new CoolException("保存工作档明细失败");
                }
                //补货单则生成AGV入库通知档
                generateAgvWaitpakin(wrkDetl);
            }else {
                List<OrderDto> orderDtoList = JSON.parseArray(locDto.getOrderNo(), OrderDto.class);
                orderDtoList.forEach(orderDto -> {
                    WrkDetl wrkDetl = new WrkDetl();
                    wrkDetl.sync(mat);
                    wrkDetl.setZpallet(wrkMast.getBarcode());
                    wrkDetl.setIoTime(now);
                    wrkDetl.setWrkNo(workNo);
                    wrkDetl.setBatch(locDto.getBatch());
                    wrkDetl.setOrderNo(orderDto.getOrderNo());
                    wrkDetl.setAnfme(orderDto.getAnfme()); // 数量
                    wrkDetl.setAppeTime(now);
                    wrkDetl.setAppeUser(userId);
                    wrkDetl.setModiTime(now);
                    wrkDetl.setModiUser(userId);
                    wrkDetl.setSuppCode(locDto.getContainerCode());
                    wrkDetl.setThreeCode(locDto.getCsocode());
                    wrkDetl.setDeadTime(locDto.getIsoseq());
                    if (!wrkDetlService.insert(wrkDetl)) {
                        throw new CoolException("保存工作档明细失败");
                    }
                    //补货单则生成AGV入库通知档
                    generateAgvWaitpakin(wrkDetl);
                });
            }
            //补货单则生成AGV入库通知档
            generateAgvWaitpakin(wrkDetl);
            // 修改订单明细
            if (!BaseController.isJSON(locDto.getOrderNo())) {
@@ -557,8 +605,9 @@
                        orderDetl = orderDetlService.selectItem(orderDto.getOrderNo(), locDto.getMatnr(), null,locDto.getCsocode(),locDto.getIsoseq());
                    }
                    if(locAnfme > orderDetl.getAnfme()){
                        orderAnfme = orderDetl.getAnfme();
                    orderAnfme = orderDetl.getAnfme() - orderDetl.getQty();
                    if(locAnfme > orderAnfme){
                        locAnfme -= orderAnfme;
                    }else {
                        orderAnfme = locAnfme;
@@ -612,7 +661,7 @@
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setEmptyMk("Y"); // 空板
        wrkMast.setLinkMis("N");
        wrkMast.setCtnType(sourceStaNo.getCtnType()); // 容器类型
        wrkMast.setCtnType(sourceStaNo.getCtnType()); // 货架类型
        // 操作人员数据
        wrkMast.setAppeUser(userId);
        wrkMast.setAppeTime(new Date());
@@ -799,7 +848,7 @@
        wrkMast.setPicking("N"); // 拣料
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setEmptyMk(sourceLoc.getLocSts().equals("D")?"Y":"N"); // 空板
        wrkMast.setBarcode(sourceLoc.getBarcode()); // 托盘码
        wrkMast.setBarcode(sourceLoc.getBarcode()); // 货架码
        wrkMast.setLinkMis("N");
        wrkMast.setAppeUser(userId);
        wrkMast.setAppeTime(now);
@@ -1075,10 +1124,12 @@
            throw new CoolException("当前工作状态无法取消");
        }
        // 订单关联
        long flowId = snowflakeIdWorker.nextId();
        List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
        for (WrkDetl wrkDetl : wrkDetls) {
            if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
                if (!BaseController.isJSON(wrkDetl.getOrderNo())) {
                    if (!orderDetlService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme(),wrkDetl.getThreeCode(),wrkDetl.getDeadTime())) {
                        throw new CoolException("订单数据回滚失败");
                    }
@@ -1106,6 +1157,7 @@
                    }
                }
            }
        }
        // 取消操作人员记录
        wrkMast.setManuType("手动取消");