自动化立体仓库 - WMS系统
dubin
3 天以前 979f2505861b77b8702604739486b62f1e339e76
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -71,6 +71,10 @@
    private ManLocDetlService manLocDetlService;
    @Autowired
    private ManLocDetlMapper manLocDetlMapper;
    @Autowired
    private MatBarcodeService matBarcodeService;
    @Autowired
    private AdjDetlService adjDetlService;
    @Override
@@ -105,94 +109,133 @@
        Date now = new Date();
        // 无单组托
//        if (Cools.isEmpty(param.getOrderNo())) {
//
//            // 生成入库通知档
//            List<DetlDto> detlDtos = new ArrayList<>();
//            param.getCombMats().forEach(elem -> {
//                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;
//                    one.setAnfme(one.getAnfme() + detlDto.getAnfme());
//                } else {
//                    detlDtos.add(detlDto);
//                }
//            });
//
//
//            for (DetlDto detlDto : detlDtos) {
//                Mat mat = matService.selectByMatnr(detlDto.getMatnr());
//                if (Cools.isEmpty(mat)) {
//                    throw new CoolException(detlDto.getMatnr() + "商品档案不存在");
//                }
//                WaitPakin waitPakin = new WaitPakin();
//                waitPakin.sync(mat);
//                waitPakin.setBatch(detlDto.getBatch());
//                waitPakin.setZpallet(param.getBarcode());   // 托盘码
//                waitPakin.setIoStatus("N");     // 入出状态
//                waitPakin.setAnfme(detlDto.getAnfme());  // 数量
//                waitPakin.setStatus("Y");    // 状态
//                waitPakin.setAppeUser(userId);
//                waitPakin.setAppeTime(now);
//                waitPakin.setModiUser(userId);
//                waitPakin.setModiTime(now);
//                if (!waitPakinService.insert(waitPakin)) {
//                    throw new CoolException("保存入库通知档失败");
//                }
//            }
//            // 关联组托
//        } else {
        if (Cools.isEmpty(param.getOrderNo())) {
        Order order = orderService.selectOne(new EntityWrapper<Order>().eq("temp1", param.getOrderNo()));
        if (Cools.isEmpty(order) || order.getSettle() > 2) {
            throw new CoolException("单据编号已过期");
            // 生成入库通知档
            List<DetlDto> detlDtos = new ArrayList<>();
            param.getCombMats().forEach(elem -> {
                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;
                    one.setAnfme(one.getAnfme() + detlDto.getAnfme());
                } else {
                    detlDtos.add(detlDto);
                }
            });
            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("物料与托盘绑定失败");
                    }
                }
                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");     // 入出状态
                waitPakin.setAnfme(detlDto.getAnfme());  // 数量
                waitPakin.setStatus("Y");    // 状态
                waitPakin.setAppeUser(userId);
                waitPakin.setAppeTime(now);
                waitPakin.setModiUser(userId);
                waitPakin.setModiTime(now);
                waitPakin.setMemo(detlDto.getMemo());
                if (!waitPakinService.insert(waitPakin)) {
                    throw new CoolException("保存入库通知档失败");
                }
            }
            // 关联组托
        } else {
            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() + "入库数量不合法");
                }
                // 修改订单作业数量
                if (!orderDetlService.increaseWorkQty(orderDetl, elem.getAnfme())) {
                    throw new CoolException("修改单据作业数量失败");
                }
                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);
                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("保存入库通知档失败");
                }
            });
            orderService.updateSettle(order.getId(), 2L, userId);
        }
        // 生成入库通知档
        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() + "入库数量不合法");
            }
            // 修改订单作业数量
            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);
            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);
        //  }
    }
@@ -366,7 +409,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;
@@ -491,7 +535,6 @@
//
//        }
//    }
    @Override
    @Transactional
    public void pakoutByOrder(JSONObject param, Long userId) {
@@ -630,4 +673,127 @@
            throw new CoolException(locDetl.getLocNo() + "库位不是在库状态");
        }
    }
    @Override
    @Transactional
    public void adjustNew(MobileAdjustParam 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() + " 无有效工作档");
        }
        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());
        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());
                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(), 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() + " 未知异常,请联系管理员");
            }
        }
        log.info(recordRecordLog);
    }
    @Override
    public void combToWms(WaitPakin waitPakin) {
        // 判断是否有相同条码的数据
//        if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>().
//                eq("zpallet", waitPakin.getBarcode()).eq("io_status", "N")) > 0) {
//            throw new CoolException(waitPakin.getBarcode() + "数据正在进行入库");
//        }
        if (waitPakin.getBarcode().length() != 8) {
            throw new CoolException("条码长度不是8位===>>" + waitPakin.getBarcode());
        }
        int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet", waitPakin.getBarcode()));
        int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet", waitPakin.getBarcode()));
        int countwait = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet", waitPakin.getBarcode()));
        if (countLoc > 0 || countWrk > 0) {
            throw new CoolException("组托档/工作档/库存条码数据已存在===>>" + waitPakin.getBarcode());
        }
        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);
            }
        for (DetlDto dto : detlDtos) {
            Mat mat = matService.selectByMatnr(dto.getMatnr());
            if (Cools.isEmpty(mat)) {
                throw new CoolException(dto.getMatnr() + "商品档案不存在");
            }
            //校验当前物料与托盘绑定信息是否正确
            MatBarcode mb = matBarcodeService.selectbyMatnr(dto.getMatnr());
            if (mb != null){
                if (!mb.getZpallet().equals(waitPakin.getBarcode())){
                    throw new CoolException(detlDto.getMatnr() + "该物料与其他托盘绑定,请先解绑");
                }
            }
            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("保存入库通知档失败");
            }
        }
    }
}