自动化立体仓库 - WMS系统
dubin
2026-01-20 67826a2c51bbc013db409dd1a5e29dd4ba52fd72
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -73,8 +73,6 @@
    @Autowired
    private ManLocDetlMapper manLocDetlMapper;
    @Autowired
    private MatBarcodeService matBarcodeService;
    @Autowired
    private AdjDetlService adjDetlService;
@@ -84,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) {
@@ -96,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()));
@@ -130,24 +121,7 @@
            for (DetlDto detlDto : detlDtos) {
                Mat mat = matService.selectByMatnr(detlDto.getMatnr());
                if (Cools.isEmpty(mat)) {
                    throw new CoolException(detlDto.getMatnr() + "商品档案不存在");
                }
                //校验当前物料与托盘绑定信息是否正确
                MatBarcode matBarcode = new MatBarcode();
                MatBarcode mb = matBarcodeService.selectbyMatnr(detlDto.getMatnr());
                if (mb != null){
                    if (!mb.getZpallet().equals(param.getBarcode())){
                        throw new CoolException(detlDto.getMatnr() + "该物料与其他托盘绑定,请先解绑");
                    }
                }else {
                    matBarcode.setZpallet(param.getBarcode());//托盘码
                    matBarcode.setMatnr(mat.getMatnr());//物料号
                    matBarcode.setMaktx(mat.getMaktx());//物料名称
                    matBarcode.setSpecs(mat.getSpecs());//规格
                    matBarcode.setModel(mat.getModel());//型号
                    if (!matBarcodeService.insert(matBarcode)) {
                        throw new CoolException("物料与托盘绑定失败");
                    }
                    throw new CoolException(detlDto.getMatnr() + "商品档案不存在---->" +  detlDto.getMatnr());
                }
                WaitPakin waitPakin = new WaitPakin();
                waitPakin.sync(mat);
@@ -193,23 +167,6 @@
                Mat mat = matService.selectByMatnr(orderDetl.getMatnr());
                if (Cools.isEmpty(mat)) {
                    throw new CoolException(orderDetl.getMatnr() + "商品档案不存在");
                }
                //校验当前物料与托盘绑定信息是否正确
                MatBarcode matBarcode = new MatBarcode();
                MatBarcode mb = matBarcodeService.selectbyMatnr(orderDetl.getMatnr());
                if (mb != null){
                    if (!mb.getZpallet().equals(param.getBarcode())){
                        throw new CoolException(orderDetl.getMatnr() + "该物料与其他托盘绑定,请先解绑");
                    }
                }else {
                    matBarcode.setZpallet(param.getBarcode());//托盘码
                    matBarcode.setMatnr(mat.getMatnr());//物料号
                    matBarcode.setMaktx(mat.getMaktx());//物料名称
                    matBarcode.setSpecs(mat.getSpecs());//规格
                    matBarcode.setModel(mat.getModel());//型号
                    if (!matBarcodeService.insert(matBarcode)) {
                        throw new CoolException("物料与托盘绑定失败");
                    }
                }
                WaitPakin waitPakin = new WaitPakin();
                waitPakin.sync(mat);
@@ -678,21 +635,27 @@
    @Override
    @Transactional
    public void adjustNew(MobileAdjustParam param, Boolean re, Long userId) {
    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() + "盘点记录:";
        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.setLocNo(wrkMast.getSourceLocNo()); // 库位
        adjDetl.setBarcode( param.getBarcode()); //  托盘码
        adjDetl.setWorkNo(wrkMast.getWrkNo().toString()); //并板对应的工作号
        for (CombParam.CombMat wrkDetl : combMats) {
            WrkDetl wrkDetlOld = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>()
@@ -703,84 +666,94 @@
            adjDetl.setMatnr(wrkDetl.getMatnr());
//            adjDetl.setBatch(wrkDetl.getBatch());
            adjDetl.setAdjQty(wrkDetl.getAnfme());
            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(new Date());
                wrkDetlService.insert(detl);
                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);
                adjDetl.setOriQty(0.0); // 原数量
                adjDetlService.insert(adjDetl);
            } else if (wrkDetlOld.getAnfme() != wrkDetl.getAnfme()) {
            }
//            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());
                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() + " 未知异常,请联系管理员");
            }
        }
        log.info(recordRecordLog);
    }
    @Override
    public void combToWms(WaitPakin waitPakin) {
        int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet", waitPakin.getBarcode()));
        int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet", waitPakin.getBarcode()));
        WrkMast wrkMast = wrkMastService.selectByBarcode(waitPakin.getBarcode());
        int countwait = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet", waitPakin.getBarcode()));
        if (countLoc > 0 || (countWrk > 0 && wrkMast.getWrkSts() != 15)) {
            throw new CoolException("组托档/工作档/库存条码数据已存在===>>" + waitPakin.getBarcode());
    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() + " 不是盘点类型");
        }
        Date now = new Date();
        // 生成入库通知档
        List<DetlDto> detlDtos = new ArrayList<>();
        Mat byId = matService.selectById(waitPakin.getModiUser());
        DetlDto detlDto = new DetlDto(byId.getMatnr(), waitPakin.getBatch(), waitPakin.getAnfme(), waitPakin.getProType(), waitPakin.getTemp2(), waitPakin.getOutOrderNo());
            detlDto.setMemo(detlDto.getMemo());
            if (DetlDto.has(detlDtos, detlDto)) {
                DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch());
                assert one != null;
                one.setAnfme(one.getAnfme() + detlDto.getAnfme());
            } else {
                detlDtos.add(detlDto);
        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();
            }
        for (DetlDto dto : detlDtos) {
            Mat mat = matService.selectByMatnr(dto.getMatnr());
            if (Cools.isEmpty(mat)) {
                throw new CoolException(dto.getMatnr() + "商品档案不存在");
            // 更新数量
            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();
            }
            WaitPakin waitPakin1 = new WaitPakin();
            waitPakin1.sync(mat);
            waitPakin1.setProType(dto.getProType());
            waitPakin1.setTemp2(dto.getTemp2());
            waitPakin1.setOutOrderNo(dto.getOutOrderNo());
            waitPakin1.setBatch(dto.getBatch());
            waitPakin1.setZpallet(waitPakin.getBarcode());   // 托盘码
            waitPakin1.setIoStatus("N");     // 入出状态
            waitPakin1.setAnfme(dto.getAnfme());  // 数量
            waitPakin1.setStatus("Y");    // 状态
            waitPakin1.setAppeUser(waitPakin.getAppeUser());
            waitPakin1.setAppeTime(now);
            waitPakin1.setModiUser(waitPakin.getAppeUser());
            waitPakin1.setModiTime(now);
            waitPakin1.setMemo(detlDto.getMemo());
            if (!waitPakinService.insert(waitPakin1)) {
                throw new CoolException("保存入库通知档失败");
            // 数量保持不变
            else if (wrkDetlOld.getAnfme().equals(wrkDetl.getAnfme())) {
                recordRecordLog = recordRecordLog + "\n" + "一条明细保持不变:" + "\t商品编号:" + wrkDetl.getMatnr() + "\t批号:" + wrkDetl.getBatch() + "\t数量:" + wrkDetlOld.getAnfme();
                continue;
            }
        }
        log.info(recordRecordLog);
    }
}