自动化立体仓库 - WMS系统
dubin
2026-01-20 67826a2c51bbc013db409dd1a5e29dd4ba52fd72
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -11,6 +11,7 @@
import com.zy.asrs.entity.param.CombParam;
import com.zy.asrs.entity.param.MobileAdjustParam;
import com.zy.asrs.entity.param.OffSaleParam;
import com.zy.asrs.entity.param.PickInParam;
import com.zy.asrs.mapper.ManLocDetlMapper;
import com.zy.asrs.service.*;
import com.zy.common.model.DetlDto;
@@ -71,6 +72,8 @@
    private ManLocDetlService manLocDetlService;
    @Autowired
    private ManLocDetlMapper manLocDetlMapper;
    @Autowired
    private AdjDetlService adjDetlService;
    @Override
@@ -79,9 +82,6 @@
        if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) {
            throw new CoolException(BaseRes.PARAM);
        }
//        if(param.getCombMats().size()>1){
//            throw new CoolException("请提取一个商品,或者刷新重新组托!");
//        }
        // 判断是否有相同条码的数据
        if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>().
                eq("zpallet", param.getBarcode()).eq("io_status", "N")) > 0) {
@@ -91,10 +91,6 @@
        if (param.getBarcode().length() != 8) {
            throw new CoolException("条码长度不是8位===>>" + param.getBarcode());
        }
//        if (param.getCombMats().size()>1){
//            throw new CoolException("不允许混料===>>" + param.getBarcode());
//        }
        int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet", param.getBarcode()));
        int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet", param.getBarcode()));
        int countwait = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet", param.getBarcode()));
@@ -110,7 +106,8 @@
            // 生成入库通知档
            List<DetlDto> detlDtos = new ArrayList<>();
            param.getCombMats().forEach(elem -> {
                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme());
                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme(), elem.getProType(), elem.getTemp2(), elem.getOutOrderNo());
                detlDto.setMemo(detlDto.getMemo());
                if (DetlDto.has(detlDtos, detlDto)) {
                    DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch());
                    assert one != null;
@@ -124,12 +121,13 @@
            for (DetlDto detlDto : detlDtos) {
                Mat mat = matService.selectByMatnr(detlDto.getMatnr());
                if (Cools.isEmpty(mat)) {
                    throw new CoolException(detlDto.getMatnr() + "商品档案不存在");
                    throw new CoolException(detlDto.getMatnr() + "商品档案不存在---->" +  detlDto.getMatnr());
                }
                WaitPakin waitPakin = new WaitPakin();
                waitPakin.sync(mat);
                waitPakin.setProType(detlDto.getProType());
                waitPakin.setTemp2(detlDto.getTemp2());
                waitPakin.setOutOrderNo(detlDto.getOutOrderNo());
                waitPakin.setBatch(detlDto.getBatch());
                waitPakin.setZpallet(param.getBarcode());   // 托盘码
                waitPakin.setIoStatus("N");     // 入出状态
@@ -139,6 +137,7 @@
                waitPakin.setAppeTime(now);
                waitPakin.setModiUser(userId);
                waitPakin.setModiTime(now);
                waitPakin.setMemo(detlDto.getMemo());
                if (!waitPakinService.insert(waitPakin)) {
                    throw new CoolException("保存入库通知档失败");
                }
@@ -146,55 +145,55 @@
            // 关联组托
        } else {
                Order order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no", param.getOrderNo()));
                if (Cools.isEmpty(order) || order.getSettle() > 2) {
                    throw new CoolException("单据编号已过期");
            Order order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no", param.getOrderNo()));
            if (Cools.isEmpty(order) || order.getSettle() > 2) {
                throw new CoolException("单据编号已过期");
            }
            // 生成入库通知档
            List<DetlDto> detlDtos = new ArrayList<>();
            param.getCombMats().forEach(elem -> {
                // 订单明细数量校验
                //OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), elem.getMatnr(), elem.getBatch(),elem.getAnfme() );
                OrderDetl orderDetl = orderDetlService.selectById(elem.getDetlId());
                if (elem.getAnfme() > orderDetl.getEnableQty()) {
                    throw new CoolException(orderDetl.getMatnr() + "入库数量不合法");
                }
                // 生成入库通知档
                List<DetlDto> detlDtos = new ArrayList<>();
                param.getCombMats().forEach(elem -> {
                // 修改订单作业数量
                if (!orderDetlService.increaseWorkQty(orderDetl, elem.getAnfme())) {
                    throw new CoolException("修改单据作业数量失败");
                }
                    // 订单明细数量校验
                    //OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), elem.getMatnr(), elem.getBatch(),elem.getAnfme() );
                    OrderDetl orderDetl = orderDetlService.selectById(elem.getDetlId());
                    if (elem.getAnfme() > orderDetl.getEnableQty()) {
                        throw new CoolException(orderDetl.getMatnr() + "入库数量不合法");
                    }
                    // 修改订单作业数量
                    if (!orderDetlService.increaseWorkQty(orderDetl, elem.getAnfme())) {
                        throw new CoolException("修改单据作业数量失败");
                    }
                Mat mat = matService.selectByMatnr(orderDetl.getMatnr());
                if (Cools.isEmpty(mat)) {
                    throw new CoolException(orderDetl.getMatnr() + "商品档案不存在");
                }
                WaitPakin waitPakin = new WaitPakin();
                waitPakin.sync(mat);
                waitPakin.setOrderNo(order.getOrderNo());   // 单据编号
                waitPakin.setBatch(orderDetl.getBatch());     // 序列码
                waitPakin.setZpallet(param.getBarcode());   // 托盘码
                waitPakin.setIoStatus("N");     // 入出状态
                waitPakin.setAnfme(elem.getAnfme());  // 数量
                waitPakin.setStatus("Y");    // 状态
                waitPakin.setAppeUser(userId);
                waitPakin.setAppeTime(now);
                waitPakin.setModiUser(userId);
                waitPakin.setModiTime(now);
                    Mat mat = matService.selectByMatnr(orderDetl.getMatnr());
                    if (Cools.isEmpty(mat)) {
                        throw new CoolException(orderDetl.getMatnr() + "商品档案不存在");
                    }
                    WaitPakin waitPakin = new WaitPakin();
                    waitPakin.sync(mat);
                    waitPakin.setOrderNo(order.getOrderNo());   // 单据编号
                    waitPakin.setBatch(orderDetl.getBatch());     // 序列码
                    waitPakin.setZpallet(param.getBarcode());   // 托盘码
                    waitPakin.setIoStatus("N");     // 入出状态
                    waitPakin.setAnfme(elem.getAnfme());  // 数量
                    waitPakin.setStatus("Y");    // 状态
                    waitPakin.setAppeUser(userId);
                    waitPakin.setAppeTime(now);
                    waitPakin.setModiUser(userId);
                    waitPakin.setModiTime(now);
                waitPakin.setBatch(orderDetl.getBatch());
                waitPakin.setSPgNO(orderDetl.getSPgNO());
                waitPakin.setOutOrderNo(orderDetl.getOutOrderNo());
                waitPakin.setProType(orderDetl.getProType());
                waitPakin.setLuHao(orderDetl.getLuHao());
                waitPakin.setPacking(orderDetl.getPacking());
                if (!waitPakinService.insert(waitPakin)) {
                    throw new CoolException("保存入库通知档失败");
                }
            });
                    waitPakin.setBatch(orderDetl.getBatch());
                    waitPakin.setSPgNO(orderDetl.getSPgNO());
                    waitPakin.setOutOrderNo(orderDetl.getOutOrderNo());
                    waitPakin.setProType(orderDetl.getProType());
                    waitPakin.setLuHao(orderDetl.getLuHao());
                    waitPakin.setPacking(orderDetl.getPacking());
                    if (!waitPakinService.insert(waitPakin)) {
                        throw new CoolException("保存入库通知档失败");
                    }
                });
                orderService.updateSettle(order.getId(), 2L, userId);
          }
            orderService.updateSettle(order.getId(), 2L, userId);
        }
    }
@@ -368,7 +367,8 @@
//                Mat analyse = MatUtils.analyseMat(elem.getMatnr());
//                // 条码、物料代码、序列号、数量
//                DetlDto detlDto = new DetlDto(elem.getMatnr(), analyse.getMatnr(), analyse.getBarcode(), elem.getAnfme());
////                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme());
    /// /                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme());
//                if (DetlDto.has(detlDtos, detlDto)) {
//                    DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch());
//                    assert one != null;
@@ -493,7 +493,6 @@
//
//        }
//    }
    @Override
    @Transactional
    public void pakoutByOrder(JSONObject param, Long userId) {
@@ -632,4 +631,129 @@
            throw new CoolException(locDetl.getLocNo() + "库位不是在库状态");
        }
    }
    @Override
    @Transactional
    public void adjustNew(CombParam param, Boolean re, Long userId) {
        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", param.getBarcode()));
        if (Cools.isEmpty(wrkMast)) {
            throw new CoolException("托盘码:" + param.getBarcode() + " 无有效工作档");
        }
        if (wrkMast.getWrkSts() != 14){
             throw new CoolException("并板无效,工作档" + wrkMast.getWrkNo() + "未完成或已入库");
        }
        if (wrkMast.getIoType() != 104) {
            throw new CoolException("工作档:" + wrkMast.getWrkNo() + " 不是并板类型");
        }
        List<CombParam.CombMat> combMats = param.getCombMats();
        String recordRecordLog = "托盘码" + param.getBarcode() + "并板记录:";
        AdjDetl adjDetl = new AdjDetl();
        adjDetl.setAppeTime(new Date());
        adjDetl.setAppeUser(userId);
        adjDetl.setModiTime(new Date());
        adjDetl.setModiUser(userId);
        adjDetl.setLocNo(wrkMast.getSourceLocNo()); // 库位
        adjDetl.setBarcode( param.getBarcode()); //  托盘码
        adjDetl.setWorkNo(wrkMast.getWrkNo().toString()); //并板对应的工作号
        for (CombParam.CombMat wrkDetl : combMats) {
            WrkDetl wrkDetlOld = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>()
                            .eq("wrk_no", wrkMast.getWrkNo())
                            .eq("matnr", wrkDetl.getMatnr())
//                    .eq("batch",Cools.isEmpty(wrkDetl.getBatch())?"":wrkDetl.getBatch())
            );
            adjDetl.setMatnr(wrkDetl.getMatnr());
            adjDetl.setBatch(wrkDetl.getBatch());
            adjDetl.setAdjQty(wrkDetl.getAnfme()); //变更数量
            if (Cools.isEmpty(wrkDetlOld)) {
                WrkDetl detl = new WrkDetl();
                detl.sync(wrkDetl);
                detl.setWrkNo(wrkMast.getWrkNo());
                detl.setZpallet(wrkMast.getBarcode());
                detl.setIoTime(wrkMast.getIoTime()); //并板新增的物料保持原有物料的时间
                detl.setWeight(0.0); // 重量 后面如果需要 再修改
                detl.setModiUser(userId); // 修改人员
                detl.setAppeUser(userId); // 添加人员
                wrkDetlService.insert(detl); // 插入工作明细
                recordRecordLog = recordRecordLog + "\n" + "新增一条明细:" + "\t商品编号:" + wrkDetl.getMatnr() + "\t批号:" + wrkDetl.getBatch() + "\t数量:" + wrkDetl.getAnfme();
                adjDetl.setOriQty(0.0); // 原数量
                adjDetlService.insert(adjDetl);
            }
//            else if (wrkDetlOld.getAnfme() != wrkDetl.getAnfme()) {
//                wrkDetlService.updateAnfme(wrkDetl.getAnfme() + wrkDetlOld.getAnfme(), wrkMast.getWrkNo(), wrkDetl.getMatnr(), wrkDetl.getBatch());
//                recordRecordLog = recordRecordLog + "\n" + "更新一条明细:" + "\t商品编号:" + wrkDetl.getMatnr() + "\t批号:" + wrkDetl.getBatch() + "\t原数量:" + wrkDetlOld.getAnfme() + "\t新增数量:" + wrkDetl.getAnfme();
//                adjDetl.setOriQty(wrkDetlOld.getAnfme()); // 原数量
//                adjDetlService.insert(adjDetl);
//
//            }
//            else if (wrkDetlOld.getAnfme() == wrkDetl.getAnfme()) {
//                recordRecordLog = recordRecordLog + "\n" + "一条明细保持不变:" + "\t商品编号:" + wrkDetl.getMatnr() + "\t批号:" + wrkDetl.getBatch() + "\t数量:" + wrkDetlOld.getAnfme();
//                continue;
//            }
            else {
//                throw new CoolException("托盘码:" + param.getBarcode() + " 未知异常,请联系管理员");
                wrkDetlService.updateAnfme(wrkDetl.getAnfme() + wrkDetlOld.getAnfme(), wrkMast.getWrkNo(), wrkDetl.getMatnr(), wrkDetl.getBatch());
                recordRecordLog = recordRecordLog + "\n" + "更新一条明细:" + "\t商品编号:" + wrkDetl.getMatnr() + "\t批号:" + wrkDetl.getBatch() + "\t原数量:" + wrkDetlOld.getAnfme() + "\t新增数量:" + wrkDetl.getAnfme();
                adjDetl.setOriQty(wrkDetlOld.getAnfme()); // 原数量
                adjDetlService.insert(adjDetl);
            }
        }
        log.info(recordRecordLog);
    }
    @Override
    public void inventory(CombParam combParam, Boolean aTrue, Long userId) {
        WrkMast wrkMast = wrkMastService.selectByBarcode(combParam.getBarcode());
        if (Cools.isEmpty(wrkMast)) {
            throw new CoolException("托盘码:" + combParam.getBarcode() + " 无有效工作档");
        }
        if (wrkMast.getWrkSts() != 14) {
            throw new CoolException("盘点无效,工作档" + wrkMast.getWrkNo() + "未完成或已入库");
        }
        if (wrkMast.getIoType() != 107) {
            throw new CoolException("工作档:" + wrkMast.getWrkNo() + " 不是盘点类型");
        }
        List<CombParam.CombMat> combMats = combParam.getCombMats();
        String recordRecordLog = "托盘码" + combParam.getBarcode() + "盘点记录:";
        for (CombParam.CombMat wrkDetl : combMats) {
            WrkDetl wrkDetlOld = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>()
                            .eq("wrk_no", wrkMast.getWrkNo())
                            .eq("matnr", wrkDetl.getMatnr())
//                    .eq("batch",Cools.isEmpty(wrkDetl.getBatch())?"":wrkDetl.getBatch())
            );
            if (Cools.isEmpty(wrkDetlOld)) {
                WrkDetl detl = new WrkDetl();
                detl.sync(wrkDetl);
                detl.setWrkNo(wrkMast.getWrkNo());
                detl.setZpallet(wrkMast.getBarcode());
                detl.setIoTime(wrkMast.getIoTime()); //盘点新增的物料保持原有物料的时间
                detl.setWeight(0.0); // 重量 后面如果需要 再修改
                detl.setModiUser(userId); // 修改人员
                detl.setAppeUser(userId); // 添加人员
                wrkDetlService.insert(detl); // 插入工作明细
                recordRecordLog = recordRecordLog + "\n" + "新增一条明细:" + "\t商品编号:" + wrkDetl.getMatnr() + "\t批号:" + wrkDetl.getBatch() + "\t数量:" + wrkDetl.getAnfme();
            }
            // 更新数量
            else if (!wrkDetlOld.getAnfme().equals(wrkDetl.getAnfme())) {
                wrkDetlService.updateInventoryAnfme(wrkDetl.getAnfme(), wrkMast.getWrkNo(), wrkDetl.getMatnr(), wrkDetl.getBatch());
                recordRecordLog = recordRecordLog + "\n" + "更新一条明细:" + "\t商品编号:" + wrkDetl.getMatnr() + "\t批号:" + wrkDetl.getBatch() + "\t原数量:" + wrkDetlOld.getAnfme() + "\t更新数量:" + wrkDetl.getAnfme();
            }
            // 数量保持不变
            else if (wrkDetlOld.getAnfme().equals(wrkDetl.getAnfme())) {
                recordRecordLog = recordRecordLog + "\n" + "一条明细保持不变:" + "\t商品编号:" + wrkDetl.getMatnr() + "\t批号:" + wrkDetl.getBatch() + "\t数量:" + wrkDetlOld.getAnfme();
                continue;
            }
        }
        log.info(recordRecordLog);
    }
}