自动化立体仓库 - WMS系统
skyouc
5 天以前 08915b05c42b2ba97a8bb0809aeb48802ae63b46
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -68,6 +68,8 @@
    private BasAreasService basAreasService;
    @Autowired
    private CommonService commonService;
    @Autowired
    private OrderPakoutService orderPakoutService;
    public ReturnT<String> start(WrkMast wrkMast) {
        // 4.入库完成
@@ -152,9 +154,13 @@
                            locDetl = new LocDetl();
                            locDetl.sync(wrkDetl);
                            locDetl.setAreaId(locMast.getAreaId());
                            locMast.setAreaName(locMast.getAreaName());
                            locDetl.setAreaName(locMast.getAreaName());
                            locDetl.setLocNo(wrkMast.getLocNo()); // 库位号
                            locDetl.setAnfme(wrkDetl.getAnfme()); // 数量
                            locDetl.setBoxType1(wrkDetl.getBoxType1());
                            locDetl.setSuppCode(wrkDetl.getSuppCode());
                            locDetl.setThreeCode(wrkDetl.getThreeCode());
                            locDetl.setStandby1(wrkDetl.getSuppCode());
                            locDetl.setZpallet(wrkDetl.getZpallet()); // 托盘条码
                            locDetl.setModiTime(now);
                            locDetl.setAppeTime(now);
@@ -244,7 +250,11 @@
                            locDetl.setLocNo(wrkMast.getLocNo()); // 库位号
                            locDetl.setAnfme(wrkDetl.getAnfme()); // 数量
                            locDetl.setAreaId(locMast.getAreaId());
                            locMast.setAreaName(locMast.getAreaName());
                            locDetl.setAreaName(locMast.getAreaName());
                            locDetl.setBoxType1(wrkDetl.getBoxType1());
                            locDetl.setSuppCode(wrkDetl.getSuppCode());
                            locDetl.setThreeCode(wrkDetl.getThreeCode());
                            locDetl.setStandby1(wrkDetl.getSuppCode());
                            locDetl.setZpallet(wrkDetl.getZpallet()); // 托盘条码
                            locDetl.setModiTime(now);
                            locDetl.setAppeTime(now);
@@ -350,34 +360,71 @@
                            .selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
                    if (wrkDetls54.isEmpty()) {
                        // exceptionHandle("并板入库 ===>> 工作明细档为空;[workNo={0}]", wrkMast.getWrkNo());
                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                        return FAIL.setMsg("并板入库 ===>> 工作明细档为空; [workNo=" + wrkMast.getWrkNo() + "],[locNo="
                                + wrkMast.getLocNo() + "]");
                    }
//                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//                        return FAIL.setMsg("并板入库 ===>> 工作明细档为空; [workNo=" + wrkMast.getWrkNo() + "],[locNo="
//                                + wrkMast.getLocNo() + "]");
                    } else {
                    // 修改库存明细数量,如无库存,曾新增
                    for (WrkDetl wrkDetl : wrkDetls54) {
                        LocDetl locDetl = locDetlService.selectItem(locMast.getLocNo(), wrkDetl.getMatnr(),
                                wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(),
                                wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(),
                                wrkDetl.getBoxType3());
                            LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>()
                                    .eq("supp_code", wrkDetl.getSuppCode())
                                    .eq("matnr", wrkDetl.getMatnr())
                                    .eq("loc_no", locMast.getLocNo()));
                        if (null != locDetl) {
                            if (!locDetlService.updateAnfme(wrkDetl.getAnfme(), locMast.getLocNo(), wrkDetl.getMatnr(),
                                    wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(),
                                    wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(),
                                    wrkDetl.getBoxType2(), wrkDetl.getBoxType3())) {
                                // exceptionHandle("并板入库 ===>> 修改库存明细数量失败;[workNo={0}],[matnr={1}]",
                                // wrkMast.getWrkNo(), wrkDetl.getMatnr());
                                // 更新订单完成数量
                                OrderDetlPakin detlPakin = orderDetlPakinService.selectOne(new EntityWrapper<OrderDetlPakin>()
//                                                .eq("three_code", wrkDetl.getThreeCode()) //TODO 并板时需要修改BSCODE为订单bscode
                                        .eq("supp_code", wrkDetl.getSuppCode())
                                        .eq("matnr", wrkDetl.getMatnr())
                                        .eq("order_no", wrkDetl.getOrderNo()));
                                try {
                                    if (!Cools.isEmpty(detlPakin)) {
                                        double v = Math.round((wrkDetl.getAnfme() - locDetl.getAnfme()) * 10000) / 10000.0;
                                        double v1 = Math.round((detlPakin.getQty() + v) * 10000) / 10000.0;
                                        detlPakin.setQty(v1);
                                        detlPakin.setWorkQty(v1);
                                        detlPakin.setAdjustQty(wrkDetl.getAdjustQty());
                                        detlPakin.setSplusQty(wrkDetl.getSplusQty());
                                        if (!orderDetlPakinService.update(detlPakin, new EntityWrapper<OrderDetlPakin>()
                                                .eq("matnr", detlPakin.getMatnr())
                                                .eq("supp_code", detlPakin.getSuppCode())
                                                .eq("order_no", detlPakin.getOrderNo()))) {
                                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                                            return FAIL.setMsg("并板入库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo()
                                                    + "],[locNo=" + wrkMast.getLocNo() + "]");
                                        }
                                    }
                                } catch (Exception e) {
                                    log.error(e.getMessage());
                                }
                                LocDetl detl = new LocDetl();
                                detl.setAnfme(wrkDetl.getAnfme());
                                detl.setStandby1(wrkDetl.getSuppCode());
                                detl.setBoxType1(locDetl.getBoxType1());
                                detl.setOrderNo(wrkDetl.getOrderNo());
                                if (!locDetlService.update(detl, new EntityWrapper<LocDetl>()
                                        .eq("loc_no", locMast.getLocNo())
                                        .eq("matnr", wrkDetl.getMatnr())
                                        .eq("supp_code", wrkDetl.getSuppCode()))) {
                                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                                return FAIL.setMsg("并板入库 ===>> 修改库存明细数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo="
                                        + wrkMast.getLocNo() + "]");
                            }
                        } else {
                            locDetl = new LocDetl();
                            locDetl.sync(wrkDetl);
                            locDetl.setLocNo(wrkMast.getLocNo()); // 库位号
                            locDetl.setAnfme(wrkDetl.getAnfme()); // 数量
                            locDetl.setAreaId(locMast.getAreaId());
                            locMast.setAreaName(locMast.getAreaName());
                                locDetl.setAreaName(locMast.getAreaName());
                                locDetl.setBoxType1(wrkDetl.getBoxType1());
                                locDetl.setSuppCode(wrkDetl.getSuppCode());
                                locDetl.setThreeCode(wrkDetl.getThreeCode());
                                locDetl.setStandby1(wrkDetl.getSuppCode());
                            locDetl.setZpallet(wrkDetl.getZpallet()); // 托盘条码
                            locDetl.setModiTime(now);
                            locDetl.setAppeTime(now);
@@ -387,65 +434,9 @@
                                        + wrkMast.getLocNo() + "]");
                            }
                        }
//                        OrderPakin orderPakin = orderPakinService.selectOne(new EntityWrapper<OrderPakin>().eq("order_no", pakin.getOrderNo()));
//                        if (Objects.isNull(orderPakin)) {
//                            throw new CoolException("数据错误,订单信息不存在!!");
//                        }
//
//                        if (!orderPakin.getDocType().equals(0)) {
//                            // 更新订单完成数量
//                            OrderDetlPakin orderDetlPakin = orderDetlPakinService.selectItem(pakin.getOrderNo(),
//                                    pakin.getMatnr(), pakin.getBatch(), pakin.getBrand(), pakin.getStandby1(),
//                                    pakin.getStandby2(), pakin.getStandby3(),
//                                    pakin.getBoxType1(), pakin.getBoxType2(), pakin.getBoxType3());
//                            if (orderDetlPakin == null) {
//                                orderDetlPakin = orderDetlPakinService.selectItem(pakin.getOrderNo(), pakin.getMatnr(),
//                                        pakin.getBatch(),
//                                        pakin.getBrand(), pakin.getStandby1(), pakin.getStandby2(),
//                                        pakin.getStandby3(),
//                                        pakin.getBoxType1(), pakin.getBoxType2(), pakin.getBoxType3());
//                            }
//                            try {
//                                if (!Cools.isEmpty(orderDetlPakin)) {
//                                    if (!orderDetlPakinService.increaseQtyByOrderNo(pakin.getOrderNo(),
//                                            pakin.getMatnr(),
//                                            orderDetlPakin.getBatch(), pakin.getBrand(), pakin.getStandby1(),
//                                            pakin.getStandby2(), pakin.getStandby3(),
//                                            pakin.getBoxType1(), pakin.getBoxType2(), pakin.getBoxType3(),
//                                            pakin.getAnfme())) {
//                                        throw new CoolException("AGV全板入库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo()
//                                                + "],[locNo=" + wrkMast.getLocNo() + "]");
//                                    }
//                                }
//                            } catch (Exception ignore) {
//
//                            }
//                        }
                        // 更新订单完成数量
                        OrderDetlPakin orderDetlPakin = orderDetlPakinService.selectItem(wrkDetl.getOrderNo(),
                                wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(),
                                wrkDetl.getStandby2(), wrkDetl.getStandby3(), "1",
                                wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
                        try {
                            if (!Cools.isEmpty(orderDetlPakin)) {
                                if (!orderDetlPakinService.increaseQtyByOrderNo(wrkDetl.getOrderNo(),
                                        wrkDetl.getMatnr(),
                                        orderDetlPakin.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(),
                                        wrkDetl.getStandby2(), wrkDetl.getStandby3(),
                                        "1", wrkDetl.getBoxType2(), wrkDetl.getBoxType3(),
                                        wrkDetl.getAnfme())) {
                                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                                    return FAIL.setMsg("并板入库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo()
                                            + "],[locNo=" + wrkMast.getLocNo() + "]");
                                }
                            }
                        } catch (Exception ignore) {
                        }
                    }
                    // 修改库位状态 Q ====>> F
                    if (locMast.getLocSts().equals("Q")) {
                        locMast.setLocSts("F");
@@ -462,9 +453,11 @@
                    }
                    String agvSta = null;
                    if (wrkMast.getIoType() == TaskIOType.MERGE_IN.type) {
                    if (wrkMast.getIoType().equals(TaskIOType.MERGE_IN.type)) {
                        agvSta = wrkMast.getPauseMk();
                    }
                    List<BasStationDetl> basStationDetls = basStationDetlService.selectList(new EntityWrapper<BasStationDetl>().eq("dev_no", agvSta));
                    if (Objects.isNull(basStationDetls) || basStationDetls.isEmpty()) {
                    // . 删除缓存站点明细
                    if (!Objects.isNull(agvSta)) {
                        // 修改目标站点信息
@@ -472,10 +465,12 @@
                        if (Objects.isNull(station)) {
                            throw new CoolException("站点不存在!!");
                        }
                        basStationDetlService.delete(new EntityWrapper<BasStationDetl>().eq("dev_no", station.getDevNo()));
                            basStationDetlService.delete(new EntityWrapper<BasStationDetl>()
                                    .eq("dev_no", station.getDevNo()));
                        station.setLocSts(LocStsType.LOC_STS_TYPE_D.type);
                        if (!basStationService.updateById(station)) {
                            throw new CoolException("站点状态更新失败!!");
                            }
                        }
                    }
                    break;
@@ -484,17 +479,15 @@
                    // 根据工作号,查询工作明细档
                    List<WrkDetl> wrkDetls57 = wrkDetlService
                            .selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
                    if (wrkDetls57.isEmpty()) {
                    if (!wrkDetls57.isEmpty()) {
                        // exceptionHandle("盘点入库 ===>> 工作明细档为空;[workNo={0}]", wrkMast.getWrkNo());
                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                        return FAIL.setMsg("盘点入库 ===>> 工作明细档为空; [workNo=" + wrkMast.getWrkNo() + "],[locNo="
                                + wrkMast.getLocNo() + "]");
                    }
                    for (WrkDetl wrkDetl : wrkDetls57) {
                        if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
                            // 更新订单完成数量
                            CheckOrderDetl checkOrderDetl = checkOrderDetlService.selectById(wrkDetl.getOrderId());
                                if (!Objects.isNull(checkOrderDetl)) {
                            LocDetl locDetl = locDetlService.selectById(checkOrderDetl.getLocDetlId());
                                    if (!Objects.isNull(locDetl)) {
                            BigDecimal oriAnfme = new BigDecimal(locDetl.getAnfme());
                            locDetl.setAnfme(checkOrderDetl.getDiffQty()
                                    .compareTo(BigDecimal.ZERO) == 0
@@ -509,9 +502,12 @@
                                return FAIL.setMsg("盘点入库 ===>> 修改库存差异数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo="
                                        + wrkMast.getLocNo() + "]");
                            }
                                    }
                                }
                            }
                        }
                    }
                        }
                    }
                    // 修改库位状态 Q ====>> F
                    if (locMast.getLocSts().equals("Q")) {
                        locMast.setLocSts(wrkMast.getFullPlt().equals("Y") ? "F" : "D");
@@ -620,6 +616,7 @@
                        return FAIL.setMsg("全板出库 ===>> 工作明细档为空; [workNo=" + wrkMast.getWrkNo() + "],[locNo="
                                + wrkMast.getSourceLocNo() + "]");
                    }
                    for (WrkDetl wrkDetl : wrkDetls101) {
                        // 更新订单完成数量
                        OrderDetlPakout orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(),
@@ -668,6 +665,10 @@
                        }
                    }
                    break;
                case 104:
                    break;
                case 103:
//                    List<WrkDetl> wrkDetls103 = wrkDetlService
//                            .selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
@@ -677,7 +678,7 @@
//                        return FAIL.setMsg("全板出库 ===>> 工作明细档为空; [workNo=" + wrkMast.getWrkNo() + "],[locNo="
//                                + wrkMast.getSourceLocNo() + "]");
//                    }
//
//                    for (WrkDetl wrkDetl : wrkDetls103) {
//                        // 更新订单完成数量
//                        OrderDetlPakout orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(),
@@ -819,14 +820,13 @@
     */
    @Transactional(rollbackFor = Exception.class)
    public ReturnT<String> agvDoOut(Task task) {
        Date now = new Date();
        LocCache locMast = locCacheService
                .selectOne(new EntityWrapper<LocCache>().eq("loc_no", task.getSourceLocNo()));
        Date now = new Date();
        if (task.getIoType().equals(101)) {
            if (Objects.isNull(locMast)) {
                throw new RuntimeException("数据错误:库位信息不能为空!!");
            }
        if (task.getIoType().equals(101)) {
            List<TaskDetl> wrkDetls101 = taskDetlService
                    .selectList(new EntityWrapper<TaskDetl>().eq("wrk_no", task.getWrkNo()));
            if (wrkDetls101.isEmpty()) {
@@ -834,6 +834,7 @@
                return FAIL.setMsg(
                        "全板出库 ===>> 工作明细档为空; [workNo=" + task.getWrkNo() + "],[locNo=" + task.getSourceLocNo() + "]");
            }
            BasStation devNo = basStationService
                    .selectOne(new EntityWrapper<BasStation>().eq("dev_no", task.getStaNo()));
            if (Objects.isNull(devNo)) {
@@ -847,31 +848,24 @@
            }
            for (TaskDetl wrkDetl : wrkDetls101) {
                // 更新订单完成数量
                OrderDetlPakout orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(),
                        wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(),
                        wrkDetl.getStandby2(), wrkDetl.getStandby3(),
                        wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
                if (orderDetlPakout == null) {
                    orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
                            wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(),
                            wrkDetl.getStandby3(),
                            wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
                }
                // 更新备货出库单完成数量
                OrderPakout orderPakout = orderPakoutService.selectOne(new EntityWrapper<OrderPakout>().eq("order_no", wrkDetl.getOrderNo()));
                if (!Objects.isNull(orderPakout) && orderPakout.getDocType() == 5) {
                try {
                    if (!Cools.isEmpty(orderDetlPakout)) {
                        if (!Cools.isEmpty(orderPakout)) {
                        if (!orderDetlPakoutService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
                                orderDetlPakout.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(),
                                    "1", wrkDetl.getBrand(), wrkDetl.getStandby1(),
                                wrkDetl.getStandby2(), wrkDetl.getStandby3(),
                                wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(),
                                wrkDetl.getAnfme())) {
                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                            return FAIL.setMsg("全板出库 ===>> 更新订单完成数量失败; [workNo=" + task.getWrkNo() + "],[locNo="
                                return FAIL.setMsg("备货出库单 ===>> 更新订单完成数量失败; [workNo=" + task.getWrkNo() + "],[locNo="
                                    + task.getSourceLocNo() + "]");
                        }
                    }
                } catch (Exception ignore) {
                        log.error(ignore.getMessage(), ignore);
                    }
                }
                BasStationDetl stationDetl = new BasStationDetl();
@@ -882,6 +876,42 @@
                    throw new CoolException("站点明细保存失败!!");
                }
            }
//            for (TaskDetl wrkDetl : wrkDetls101) {
//                // 更新订单完成数量
//                OrderDetlPakout orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(),
//                        wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(),
//                        wrkDetl.getStandby2(), wrkDetl.getStandby3(),
//                        wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
//                if (orderDetlPakout == null) {
//                    orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
//                            wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(),
//                            wrkDetl.getStandby3(),
//                            wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
//                }
//                try {
//                    if (!Cools.isEmpty(orderDetlPakout)) {
//                        if (!orderDetlPakoutService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
//                                orderDetlPakout.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(),
//                                wrkDetl.getStandby2(), wrkDetl.getStandby3(),
//                                wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(),
//                                wrkDetl.getAnfme())) {
//                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//                            return FAIL.setMsg("全板出库 ===>> 更新订单完成数量失败; [workNo=" + task.getWrkNo() + "],[locNo="
//                                    + task.getSourceLocNo() + "]");
//                        }
//                    }
//                } catch (Exception ignore) {
//
//                }
//
//                BasStationDetl stationDetl = new BasStationDetl();
//                BeanUtils.copyProperties(wrkDetl, stationDetl);
//                stationDetl.setDevNo(devNo.getDevNo())
//                        .setOrderNo(wrkDetl.getOrderNo());
//                if (!basStationDetlService.insert(stationDetl)) {
//                    throw new CoolException("站点明细保存失败!!");
//                }
//            }
            // 删除工作档源库位的库存明细
            if (!locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", task.getSourceLocNo()))) {
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -889,12 +919,12 @@
                        "全板出库 ===>> 删除库存明细失败; [workNo=" + task.getWrkNo() + "],[locNo=" + task.getSourceLocNo() + "]");
            }
            // 修改源库位状态 R ===>> O
            if (locMast.getLocSts().equals(LocStsType.LOC_STS_TYPE_R.type)) {
            if (locMast.getLocSts().equals(LocStsType.LOC_STS_TYPE_R.type) || locMast.getLocSts().equals(LocStsType.LOC_STS_TYPE_P.type)) {
                locMast.setLocSts(LocStsType.LOC_STS_TYPE_O.type);
                locMast.setBarcode("");
                locMast.setModiTime(now);
                locMast.setIoTime(now);
                if (!locCacheService.updateById(locMast)) {
                if (!locCacheService.update(locMast, new EntityWrapper<LocCache>().eq("loc_no", locMast.getLocNo()))) {
                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                    return FAIL.setMsg("全板出库 ===>> 修改源库位状态失败; [workNo=" + task.getWrkNo() + "],[locNo="
                            + task.getSourceLocNo() + "]");
@@ -908,24 +938,19 @@
                throw new CoolException("任务状态修改失败!!");
            }
        } else if (task.getIoType().equals(110)) {
            if (Objects.isNull(locMast)) {
                throw new RuntimeException("数据错误:库位信息不能为空!!");
            }
            // 修改源库位状态 R ===>> O
            if (locMast.getLocSts().equals(LocStsType.LOC_STS_TYPE_R.type)) {
                locMast.setLocSts(LocStsType.LOC_STS_TYPE_O.type);
                locMast.setBarcode("");
                locMast.setModiTime(now);
                locMast.setIoTime(now);
                if (!locCacheService.updateById(locMast)) {
                if (!locCacheService.update(locMast, new EntityWrapper<LocCache>().eq("loc_no", locMast.getLocNo()))) {
                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                    return FAIL.setMsg("全板出库 ===>> 修改源库位状态失败; [workNo=" + task.getWrkNo() + "],[locNo="
                            + task.getSourceLocNo() + "]");
                }
            } else {
                throw new CoolException("当前库位状态" + locMast.getLocSts() + ", 无法执行出库操作!!");
            }
            BasStation devNo = basStationService
                    .selectOne(new EntityWrapper<BasStation>().eq("dev_no", task.getStaNo()));
            if (Objects.isNull(devNo)) {
@@ -948,75 +973,122 @@
                return FAIL.setMsg("拣料出库 ===>> 工作明细档为空; [workNo=" + task.getWrkNo() + "],[locNo="
                        + task.getSourceLocNo() + "]");
            }
            for (TaskDetl wrkDetl : wrkDetls103) {
                // 更新订单完成数量
                OrderDetlPakout orderDetlPakout = orderDetlPakoutService.
                        selectOne(new EntityWrapper<OrderDetlPakout>()
                                .eq("matnr", wrkDetl.getMatnr())
                                .eq("supp_code", wrkDetl.getSuppCode())
                                .eq("order_no", wrkDetl.getOrderNo()));
                try {
                    if (!Cools.isEmpty(orderDetlPakout)) {
                        if (!orderDetlPakoutService.increaseQtyByOrderNo(wrkDetl.getOrderNo(),
                                wrkDetl.getMatnr(),
                                orderDetlPakout.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(),
                                wrkDetl.getStandby2(), wrkDetl.getStandby3(),
                                wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(),
                                wrkDetl.getAnfme())) {
                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                            return FAIL.setMsg("拣料出库 ===>> 更新订单完成数量失败; [workNo=" + task.getWrkNo()
                                    + "],[locNo=" + task.getSourceLocNo() + "]");
                        }
                    }
                    //TODO 修改站点状态预约目标库位,以及站点库位信息
                    LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>()
                            .eq("matnr", wrkDetl.getMatnr())
                            .eq("supp_code", wrkDetl.getSuppCode())
                            .eq("loc_no", task.getSourceLocNo()));
                    if (Objects.isNull(locDetl) ) {
                        throw new CoolException("库存数据错误,请联系管理员!!");
                    }
                    Double sulp = Math.round((locDetl.getAnfme() - wrkDetl.getAnfme()) * 10000) / 10000.0;
                    locDetl.setAnfme(sulp);
                    if (!locDetlService.update(locDetl, new EntityWrapper<LocDetl>().eq("loc_no", locDetl.getLocNo())
                            .eq("matnr", locDetl.getMatnr())
                            .eq("supp_code", locDetl.getSuppCode()))) {
                        return FAIL.setMsg("拣料出库 ===>> 更新订单完成数量失败; [workNo=" + task.getWrkNo()
                                + "],[locNo=" + task.getSourceLocNo() + "]");
                    }
                } catch (Exception ignore) {
                    log.error(ignore.getMessage());
                }
            }
//            for (TaskDetl wrkDetl : wrkDetls103) {
//                // 更新订单完成数量
//                OrderDetlPakout orderDetlPakout = orderDetlPakoutService.
//                        selectOne(new EntityWrapper<OrderDetlPakout>()
//                                .eq("matnr", wrkDetl.getMatnr())
//                                .eq("supp_code", wrkDetl.getSuppCode())
//                                .eq("order_no", wrkDetl.getOrderNo()));
//                try {
//                    if (!Cools.isEmpty(orderDetlPakout)) {
//                        if (!orderDetlPakoutService.increaseQtyByOrderNo(wrkDetl.getOrderNo(),
//                                wrkDetl.getMatnr(),
//                                orderDetlPakout.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(),
//                                wrkDetl.getStandby2(), wrkDetl.getStandby3(),
//                                wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(),
//                                wrkDetl.getAnfme())) {
//                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//                            return FAIL.setMsg("拣料出库 ===>> 更新订单完成数量失败; [workNo=" + task.getWrkNo()
//                                    + "],[locNo=" + task.getSourceLocNo() + "]");
//                        }
//                    }
//                    //TODO 修改站点状态预约目标库位,以及站点库位信息
//                    LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>()
//                            .eq("matnr", wrkDetl.getMatnr())
//                            .eq("supp_code", wrkDetl.getSuppCode())
//                            .eq("loc_no", task.getSourceLocNo()));
//                    if (Objects.isNull(locDetl) ) {
//                        throw new CoolException("库存数据错误,请联系管理员!!");
//                    }
//                    Double sulp = Math.round((locDetl.getAnfme() - wrkDetl.getAnfme()) * 10000) / 10000.0;
//                    locDetl.setAnfme(sulp);
//                    if (!locDetlService.update(locDetl, new EntityWrapper<LocDetl>().eq("loc_no", locDetl.getLocNo())
//                            .eq("matnr", locDetl.getMatnr())
//                            .eq("supp_code", locDetl.getSuppCode()))) {
//                        return FAIL.setMsg("拣料出库 ===>> 更新订单完成数量失败; [workNo=" + task.getWrkNo()
//                                + "],[locNo=" + task.getSourceLocNo() + "]");
//                    }
//                } catch (Exception ignore) {
//                    log.error(ignore.getMessage());
//                }
//            }
//            if (locMast.getLocSts().equals(LocStsType.LOC_STS_TYPE_P.type) || locMast.getLocSts().equals(LocStsType.LOC_STS_TYPE_R.type)) {
//                locMast.setLocSts(LocStsType.LOC_STS_TYPE_S.type);
//                locMast.setBarcode("");
//                locMast.setModiTime(now);
//                locMast.setIoTime(now);
//                if (!locCacheService.updateById(locMast)) {
//                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//                    return FAIL.setMsg("拣料出库 ===>> 修改源库位状态失败; [workNo=" + task.getWrkNo() + "],[locNo="
//                            + task.getSourceLocNo() + "]");
//                }
//            } else {
//                throw new CoolException("当前库位状态" + locMast.getLocSts() + ", 无法执行出库操作!!");
//            }
//
//            BasStation basStation = basStationService.selectOne(new EntityWrapper<BasStation>().eq("dev_no", task.getStaNo()));
//            // 修改源库位状态 R ===>> O
//            if (basStation.getLocSts().equals(LocStsType.LOC_STS_TYPE_F.type) || basStation.getLocSts().equals(LocStsType.LOC_STS_TYPE_P.type)) {
//                basStation.setLocSts(LocStsType.LOC_STS_TYPE_R.type);
//                basStation.setBarcode("");
//                basStation.setModiTime(now);
//                basStation.setIoTime(now);
//                if (!basStationService.updateById(basStation)) {
//                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//                    return FAIL.setMsg("拣料出库 ===>> 修改源库位状态失败; [workNo=" + task.getWrkNo() + "],[locNo="
//                            + task.getSourceLocNo() + "]");
//                }
//            } else {
//                throw new CoolException("当前库位状态" + basStation.getLocSts() + ", 无法执行出库操作!!");
//            }
//            Task task1 = new Task();
//            int workNo = commonService.getWorkNo(0);
            task.setIoType(task.getIoType() - 50);
            task.setLocNo(task.getSourceLocNo());
            task.setWrkSts(TaskStatusType.AGV_IN_START.type);
            if (!taskService.update(task, new EntityWrapper<Task>().eq("wrk_no", task.getWrkNo()))) {
                throw new CoolException("任务拣货完成状态更新失败!!");
            }
            // 修改源库位状态 R ===>> O
            if (locMast.getLocSts().equals(LocStsType.LOC_STS_TYPE_R.type)) {
                locMast.setLocSts(LocStsType.LOC_STS_TYPE_S.type);
                locMast.setBarcode("");
                locMast.setModiTime(now);
                locMast.setIoTime(now);
                if (!locCacheService.updateById(locMast)) {
                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                    return FAIL.setMsg("拣料出库 ===>> 修改源库位状态失败; [workNo=" + task.getWrkNo() + "],[locNo="
                            + task.getSourceLocNo() + "]");
                }
            } else {
                throw new CoolException("当前库位状态" + locMast.getLocSts() + ", 无法执行出库操作!!");
            }
//            task1.setWrkNo(workNo);
//            task1.setIoType(task.getIoType() - 50);
//            task1.setLocNo(task.getSourceLocNo());
//            task1.setIsNewIn("M1");
//            task1.setSourceStaNo(task.getStaNo());
//            task1.setWrkSts(TaskStatusType.AGV_IN_START.type);
//
//            if (!taskService.insert(task1)) {
//                throw new CoolException("拣货入库任务生成失败!!");
//            }
//
//            List<TaskDetl> taskDetls = taskDetlService.selectList(new EntityWrapper<TaskDetl>().eq("wrk_no", task.getWrkNo()));
//            taskDetls.forEach(detl -> {
//                detl.setWrkNo(task1.getWrkNo());
//                if (!taskDetlService.update(detl, new EntityWrapper<TaskDetl>().eq("wrk_no", detl.getWrkNo()))) {
//                    throw new CoolException("任务明细修改失败!!");
//                }
//            });
//            task.setWrkSts(TaskStatusType.AGV_INVENTORY_UPDATED_OUT.type);
//            if (!taskService.updateById(task)) {
//                throw new CoolException("任务状态修改失败!!");
//            }
        }
        return SUCCESS;
    }
    @Transactional(rollbackFor = Exception.class)
    public ReturnT<String> agvDoIn(Task wrkMast) {
        if (wrkMast.getIsNewIn().equals("XM1")) {
            wrkMast.setWrkSts(TaskStatusType.AGV_INVENTORY_UPDATED_IN.type);
            wrkMast.setModiTime(new Date());
            if (!taskService.updateById(wrkMast)) {
                throw new CoolException("任务状态修改失败!!");
            }
            return SUCCESS;
        }
        if (wrkMast.getTaskType().equals("agv_back")) {
            wrkMast.setWrkSts(TaskStatusType.AGV_INVENTORY_UPDATED_IN.type);
            wrkMast.setModiTime(new Date());
            if (!taskService.updateById(wrkMast)) {
                throw new CoolException("任务状态修改失败!!");
            }
            return SUCCESS;
        }
        LocCache locCache = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", wrkMast.getLocNo()));
        if (!Objects.isNull(wrkMast.getSourceStaNo())) {
            BasStation station = basStationService.selectOne(new EntityWrapper<BasStation>()
@@ -1028,8 +1100,10 @@
                }
                station.setBarcode("");
                if (!basStationService.updateById(station)) {
                    basStationDetlService.delete(new EntityWrapper<BasStationDetl>().eq("dev_no", station.getDevNo()));
                    throw new CoolException("站点状态修改失败!!");
                }
                basStationDetlService.delete(new EntityWrapper<BasStationDetl>().eq("dev_no", station.getDevNo()));
            }
        }
@@ -1110,7 +1184,8 @@
            locCache.setBarcode(wrkMast.getBarcode());
            locCache.setModiTime(new Date());
            locCache.setIoTime(new Date());
            if (!locCacheService.updateById(locCache)) {
            if (!locCacheService.update(locCache, new EntityWrapper<LocCache>().eq("loc_no", locCache.getLocNo()))) {
                throw new CoolException("库位状态修改失败!");
            }
            wrkMast.setWrkSts(TaskStatusType.AGV_INVENTORY_UPDATED_IN.type);
@@ -1137,81 +1212,89 @@
            // 根据工作号,查询工作明细档
            List<TaskDetl> wrkDetls53 = taskDetlService
                    .selectList(new EntityWrapper<TaskDetl>().eq("wrk_no", wrkMast.getWrkNo()));
            if (wrkDetls53.isEmpty()) {
                // exceptionHandle("拣料入库 ===>> 工作明细档为空;[workNo={0}]", wrkMast.getWrkNo());
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                return FAIL.setMsg("拣料入库 ===>> 工作明细档为空; [workNo=" + wrkMast.getWrkNo() + "],[locNo="
            for (TaskDetl wrkDetl : wrkDetls53) {
                LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>()
                        .eq("supp_code", wrkDetl.getSuppCode())
                        .eq("matnr", wrkDetl.getMatnr())
                        .eq("loc_no", wrkMast.getLocNo()));
                if (null != locDetl) {
                    Double v = Math.round((locDetl.getAnfme() - wrkDetl.getAnfme()) * 10000) / 10000.0;
                    locDetl.setBoxType1(wrkDetl.getBoxType1());
                    locDetl.setOrderNo(wrkDetl.getOrderNo());
                    locDetl.setStandby1(wrkDetl.getSuppCode());
                    locDetl.setAnfme(v);
                    if (v.compareTo(0.0) == 0) {
                        if (!locDetlService.delete(new EntityWrapper<LocDetl>()
                                .eq("supp_code", wrkDetl.getSuppCode())
                                .eq("matnr", wrkDetl.getMatnr())
                                .eq("loc_no", wrkMast.getLocNo()))) {
                            return FAIL.setMsg("拣料入库 ===>> 修改库存明细数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo="
                        + wrkMast.getLocNo() + "]");
            }
            for (TaskDetl wrkDetl : wrkDetls53) {
                LocDetl locDetl = locDetlService.selectItem(locCache.getLocNo(), wrkDetl.getMatnr(),
                        wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(),
                        wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(),
                        wrkDetl.getBoxType3());
                if (null != locDetl) {
                    if (!locDetlService.updateAnfme(locDetl.getAnfme() - wrkDetl.getAnfme(), locCache.getLocNo(),
                            wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(),
                            wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(),
                            wrkDetl.getBoxType2(), wrkDetl.getBoxType3())) {
                        // exceptionHandle("拣料入库 ===>> 修改库存明细数量失败;[workNo={0}],[locNo={1}]",
                        // wrkMast.getWrkNo(), wrkMast.getLocNo());
                    } else {
                        if (!locDetlService.update(locDetl, new EntityWrapper<LocDetl>()
                                .eq("supp_code", wrkDetl.getSuppCode())
                                .eq("matnr", wrkDetl.getMatnr())
                                .eq("loc_no", wrkMast.getLocNo()))) {
                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                        return FAIL.setMsg("拣料入库 ===>> 修改库存明细数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo="
                                + wrkMast.getLocNo() + "]");
                    }
                }
                }
                // 更新订单完成数量
                OrderDetlPakout orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(),
                        wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(),
                        wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
                        wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
                if (orderDetlPakout == null) {
                    orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
                            wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(),
                            wrkDetl.getStandby2(), wrkDetl.getStandby3(),
                            wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
                }
                try {
                    if (!Cools.isEmpty(orderDetlPakout)) {
                        if (!orderDetlPakinService.increaseQtyByOrderNo(wrkDetl.getOrderNo(),
                                wrkDetl.getMatnr(),
                                orderDetlPakout.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(),
                                wrkDetl.getStandby2(), wrkDetl.getStandby3(),
                                wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(),
                                wrkDetl.getAnfme())) {
                            // exceptionHandle("拣料入库 ===>> 更新订单完成数量失败;[workNo={0}],[locNo={1}]",
                            // wrkMast.getWrkNo(), wrkMast.getLocNo());
                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                            return FAIL.setMsg("拣料入库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo()
                                    + "],[locNo=" + wrkMast.getLocNo() + "]");
                        }
                    }
                } catch (Exception ignore) {
                }
                OrderDetlPakout orderDetlPakout = orderDetlPakoutService
                        .selectOne(new EntityWrapper<OrderDetlPakout>()
                                .eq("order_no", wrkDetl.getOrderNo())
                                .eq("supp_code", wrkDetl.getSuppCode())
                                .eq("matnr", wrkDetl.getMatnr()));
                if (!Cools.isEmpty(orderDetlPakout)) {
                    double v = Math.round((orderDetlPakout.getQty() + wrkDetl.getAnfme()) * 10000) / 10000.0;
                    orderDetlPakout.setQty(v);
                    if (!orderDetlPakoutService.update(orderDetlPakout, new EntityWrapper<OrderDetlPakout>()
                            .eq("order_no", wrkDetl.getOrderNo())
                            .eq("supp_code", wrkDetl.getSuppCode())
                            .eq("matnr", wrkDetl.getMatnr()))) {
                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                        return FAIL.setMsg("拣料入库 ===>> 修改库存明细数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo="
                                + wrkMast.getLocNo() + "]");
                    }
                }
            }
            Date now = new Date();
            List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>()
                    .eq("loc_no", locCache.getLocNo()));
            if (Objects.isNull(locDetls) || locDetls.isEmpty()) {
                locCache.setLocSts("D");
            } else {
                Double sum = locDetls.stream().mapToDouble(LocDetl::getAnfme).sum();
                if (sum.compareTo(0.0) == 0) {
                    locCache.setLocSts("D");
                } else {
            // 修改库位状态 Q ====>> F
            if (locCache.getLocSts().equals("Q")) {
                locCache.setLocSts("F");
                }
            }
                locCache.setBarcode(wrkMast.getBarcode());
                locCache.setIoTime(now);
                locCache.setModiTime(now);
                if (!locCacheService.updateById(locCache)) {
            if (!locCacheService.update(locCache, new EntityWrapper<LocCache>().eq("loc_no", locCache.getLocNo()))) {
                    // exceptionHandle("拣料入库 ===>> 修改库位状态失败;[workNo={0}],[locNo={1}]",
                    // wrkMast.getWrkNo(), wrkMast.getLocNo());
                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                    return FAIL.setMsg("拣料入库 ===>> 修改库位状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo="
                            + wrkMast.getLocNo() + "]");
                }
            }
            // 修改工作主档状态
            wrkMast.setWrkSts(TaskStatusType.AGV_INVENTORY_UPDATED_IN.type);
            wrkMast.setModiTime(now);
            if (!taskService.updateById(wrkMast)) {
                // exceptionHandle("更新入库完成状态失败;[workNo={0}]", wrkMast.getWrkNo());
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                return FAIL
                        .setMsg("更新入库完成状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");