自动化立体仓库 - WMS系统
#
Junjie
2025-07-18 605e35dc9beab232346f47ece6691c81a6f969f9
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -326,15 +326,6 @@
                ioType = dto.isAll() ? 101 : 103;
            } else if (ioWorkType.equals(IoWorkType.CHECK_OUT)) {
                ioType = 107;
                if (Cools.isEmpty(checkOrderNo)) {
                    checkOrderNo = DateUtils.createTimeStamp();
                    InventoryCheckOrder checkOrder = new InventoryCheckOrder();
                    checkOrder.setCreateBy(userId);
                    checkOrder.setStatus("1");
                    checkOrder.setCreateTime(new Date());
                    checkOrder.setOrderNo(checkOrderNo);
                    checkOrderService.insert(checkOrder);
                }
            }
            assert ioType != null;
            // 获取库位
@@ -347,9 +338,38 @@
//            }
            // 获取路径
            StaDesc staDesc = staDescService.queryCrnStn(ioType, locMast.getCrnNo(), outSta);
            List<StaDesc> staDescs = staDescService.queryCrnStn(ioType, locMast.getCrnNo(), outSta);
            StaDesc staDesc = staDescs.get(0);
            if (locMast.getCrnNo() == 1) {
                int finalCrnStn = 1016;
                if (locMast.getRow1() <= 3) {
                    finalCrnStn = 1013;
                }
                for (StaDesc desc : staDescs) {
                    if (desc.getCrnStn() == finalCrnStn) {
                        staDesc = desc;
                        break;
                    }
                }
            }
            // 生成工作号
            int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
            if (ioType == 107) {
                if (Cools.isEmpty(checkOrderNo)) {
                    checkOrderNo = DateUtils.createTimeStamp() + "_" + workNo;
                    InventoryCheckOrder checkOrder = new InventoryCheckOrder();
                    checkOrder.setCreateBy(userId);
                    checkOrder.setStatus("1");
                    checkOrder.setArea(String.valueOf(workNo));
                    checkOrder.setCreateTime(new Date());
                    checkOrder.setOrderNo(checkOrderNo);
                    checkOrderService.insert(checkOrder);
                }
            }
            // 生成工作档
            WrkMast wrkMast = new WrkMast();
            wrkMast.setWrkNo(workNo);
@@ -395,7 +415,11 @@
                    throw new CoolException("保存工作档明细失败");
                }
                if (ioType == 107) {
                    List<InventoryCheckOrderDetl> checkOrderDetls = checkOrderDetlService.selectList(new EntityWrapper<InventoryCheckOrderDetl>().eq("order_no", checkOrderNo).eq("loc_no", dto.getLocNo()));
                    List<InventoryCheckOrderDetl> checkOrderDetls = checkOrderDetlService.selectList(new EntityWrapper<InventoryCheckOrderDetl>()
                            .eq("order_no", checkOrderNo)
                            .eq("loc_no", dto.getLocNo())
                            .eq("batch", wrkDetl.getBatch())
                    );
                    if (checkOrderDetls != null && !checkOrderDetls.isEmpty()) {
                        throw new CoolException("该库位的盘点任务已经添加到了该库位中");
                    }
@@ -406,6 +430,8 @@
                    checkOrderDetl.setBatch(detlDto.getLocDetl().getBatch());
                    checkOrderDetl.setLocNo(detlDto.getLocDetl().getLocNo());
                    checkOrderDetl.setAnfme(detlDto.getLocDetl().getAnfme());
                    checkOrderDetl.setArea(String.valueOf(workNo));
                    checkOrderDetl.setCwarehouseid(wrkDetl.getStandby1());
                    checkOrderDetl.setIoTime(new Date());
                    checkOrderDetl.setStatus("0");
                    checkOrderDetlService.insert(checkOrderDetl);
@@ -482,6 +508,19 @@
                        , locDto.getStandby1(), locDto.getStandby2(), locDto.getStandby3(), locDto.getBoxType1(), locDto.getBoxType2(), locDto.getBoxType3());
            }
            Wrapper<LocDetl> wrapper = new EntityWrapper<LocDetl>()
                    .eq("loc_no", wrkMast.getSourceLocNo())
                    .eq("matnr", orderDetlPakout.getMatnr());
            if (!Cools.isEmpty(locDto.getBatch())) {
                wrapper.eq("batch", locDto.getBatch());
            }
            if (!Cools.isEmpty(orderDetlPakout.getSpecs())) {
                wrapper.eq("specs", orderDetlPakout.getSpecs());
            }
            LocDetl locDetl = locDetlService.selectOne(wrapper);
            WrkDetl wrkDetl = new WrkDetl();
            wrkDetl.sync(orderDetlPakout);
            wrkDetl.setZpallet(wrkMast.getBarcode());
@@ -495,6 +534,10 @@
            wrkDetl.setModiTime(now);
            wrkDetl.setModiUser(userId);
            wrkDetl.setThreeCode(orderDetlPakout.getId() + "");
            wrkDetl.setSupp(orderPakout.getCstmrName());
            wrkDetl.setStockNum(locDetl.getAnfme());//库存
            wrkDetl.setStockNum2(locDetl.getWeight());//辅库存
            wrkDetl.setKpCstmrName(orderPakout.getKpCstmrName());
            //计算辅数量
            Double weight = MatUtils.calcWeight(wrkDetl.getMatnr(), wrkDetl.getAnfme());
@@ -1145,8 +1188,6 @@
        // 增删改只创建一次工作主档
        boolean updateFlag = true;
        boolean deleteFlag = true;
        boolean addFlag = true;
        // 修改数量
        Iterator<LocDetl> iterator = locDetls.iterator();
@@ -1210,107 +1251,6 @@
            }
        }
        // 删除库存
        for (LocDetl locDetl : locDetls) {
            // todo 盘点记录
            if (!locDetlService.updateAnfme(-1.0D, locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch(), locDetl.getBrand(),
                    locDetl.getStandby1(), locDetl.getStandby2(), locDetl.getStandby3(), locDetl.getBoxType1(), locDetl.getBoxType2(), locDetl.getBoxType3())) {
                throw new CoolException("删除" + locDetl.getLocNo() + "库位," + locDetl.getMatnr() + "商品," + locDetl.getBatch() + "批号库存明细失败");
            }
            // 保存调整记录
            AdjDetl adjDetl = new AdjDetl();
            adjDetl.setLocNo(locDetl.getLocNo());
            adjDetl.setMatnr(locDetl.getMatnr());
            adjDetl.setBatch(locDetl.getBatch());
            adjDetl.setOriQty(locDetl.getAnfme());
            adjDetl.setAdjQty(0.0D);
            adjDetl.setModiTime(now);
            adjDetl.setModiUser(userId);
            adjDetl.setAppeTime(now);
            adjDetl.setAppeUser(userId);
            adjDetlService.save(adjDetl, userId);
            if (deleteFlag) {
                wrkMast.setWrkNo(commonService.getWorkNo(3));
                wrkMast.setIoType(22);
                boolean res = wrkMastLogService.insert(wrkMast);
                if (!res) {
                    throw new CoolException("库存调整-删除 保存工作档失败");
                }
                deleteFlag = false;
            }
            // 添加历史工作明细
            WrkDetlLog wrkDetl = new WrkDetlLog();
            wrkDetl.sync(locDetl);
            wrkDetl.setWrkNo(wrkMast.getWrkNo());
            wrkDetl.setIoTime(wrkMast.getIoTime());
            wrkDetl.setAnfme(0.0);
            wrkDetl.setAppeTime(now);
            wrkDetl.setModiTime(now);
            wrkMast.setAppeUser(userId);
            wrkMast.setModiUser(userId);
            if (!wrkDetlLogService.insert(wrkDetl)) {
                throw new CoolException("保存工作明细失败");
            }
        }
        // 添加库存
        for (LocDetlAdjustParam.LocDetlAdjust adjust : list) {
            if (adjust.getCount() == 0.0D) {
                continue;
            }
            Mat mat = matService.selectByMatnr(adjust.getMatnr());
            LocDetl locDetl = new LocDetl();
            locDetl.sync(mat);
            locDetl.setBatch(adjust.getBatch());
            locDetl.setLocNo(locMast.getLocNo());
            locDetl.setZpallet(locMast.getBarcode());
            locDetl.setAnfme(adjust.getCount()); // 数量
            locDetl.setModiUser(userId); // 操作人员信息
            locDetl.setModiTime(now);
            locDetl.setAppeUser(userId);
            locDetl.setAppeTime(now);
            if (!locDetlService.insert(locDetl)) {
                throw new CoolException("添加" + locDetl.getLocNo() + "库位," + locDetl.getMatnr() + "商品," + locDetl.getBatch() + "批号库存明细失败");
            }
            // 保存调整记录
            AdjDetl adjDetl = new AdjDetl();
            adjDetl.setLocNo(locMast.getLocNo());
            adjDetl.setMatnr(adjust.getMatnr());
            adjDetl.setBatch(adjust.getBatch());
            adjDetl.setOriQty(0.0D);
            adjDetl.setAdjQty(adjust.getCount());
            adjDetl.setModiTime(now);
            adjDetl.setModiUser(userId);
            adjDetl.setAppeTime(now);
            adjDetl.setAppeUser(userId);
            adjDetlService.save(adjDetl, userId);
            if (addFlag) {
                wrkMast.setWrkNo(commonService.getWorkNo(3));
                wrkMast.setIoType(21);
                boolean res = wrkMastLogService.insert(wrkMast);
                if (!res) {
                    throw new CoolException("库存调整-新增 保存工作档失败");
                }
                addFlag = false;
            }
            // 添加历史工作明细
            WrkDetlLog wrkDetl = new WrkDetlLog();
            wrkDetl.sync(locDetl);
            wrkDetl.setWrkNo(wrkMast.getWrkNo());
            wrkDetl.setIoTime(wrkMast.getIoTime());
            wrkDetl.setAnfme(adjust.getCount());
            wrkDetl.setAppeTime(now);
            wrkDetl.setModiTime(now);
            wrkMast.setAppeUser(userId);
            wrkMast.setModiUser(userId);
            if (!wrkDetlLogService.insert(wrkDetl)) {
                throw new CoolException("保存工作明细失败");
            }
        }
        // 修改库位状态
        int count = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()));
        if (locMast.getLocSts().equals("F")) {