自动化立体仓库 - WMS系统
skyouc
11 小时以前 a57445f55e84b7cf6bd26cf152a0ffa7f62f54f2
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -6,8 +6,10 @@
import com.zy.asrs.entity.*;
import com.zy.asrs.enums.LocStsType;
import com.zy.asrs.service.*;
import com.zy.asrs.service.impl.BasStationServiceImpl;
import com.zy.asrs.service.impl.LocCacheServiceImpl;
import com.zy.asrs.service.impl.OrderPakinServiceImpl;
import com.zy.asrs.service.impl.TaskDetlServiceImpl;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import lombok.extern.slf4j.Slf4j;
@@ -50,6 +52,10 @@
    private OrderPakinService orderPakinService;
    @Autowired
    private TaskService taskService;
    @Autowired
    private TaskDetlService taskDetlService;
    @Autowired
    private BasStationServiceImpl basStationService;
    public ReturnT<String> start(WrkMast wrkMast) {
        // 4.入库完成
@@ -471,18 +477,16 @@
                                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())) {
//                                    exceptionHandle("全板出库 ===>> 更新订单完成数量失败;[workNo={0}],[locNo={1}]",
//                                            wrkMast.getWrkNo(), wrkMast.getLocNo());
                                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                                    return FAIL.setMsg("全板出库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
                                }
                            }
                        } catch (Exception ignore) {
                        }
                    }
                    // 删除工作档源库位的库存明细
                    if (!locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getSourceLocNo()))) {
//                        exceptionHandle("全板出库 ===>> 删除库存明细失败;[workNo={0}],[sourceLocNo={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                        return FAIL.setMsg("全板出库 ===>> 删除库存明细失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
                    }
@@ -493,7 +497,6 @@
                        locMast.setModiTime(now);
                        locMast.setIoTime(now);
                        if (!locMastService.updateById(locMast)) {
//                            exceptionHandle("全板出库 ===>> 修改源库位状态失败;[workNo={0}],[sourceLocNo={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                            return FAIL.setMsg("全板出库 ===>> 修改源库位状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
                        }
@@ -575,11 +578,103 @@
     * @version 1.0
     */
    @Transactional(rollbackFor = Exception.class)
    public ReturnT<String> AgvStart(Task wrkMast) {
        Date now = new Date();
    public ReturnT<String> AgvStart(Task task) {
        // 4.入库完成
        if (task.getWrkSts() == 4) {
            return agvDoIn(task);
            // 14.出库完成
        } else if (task.getWrkSts() == 14) {
            return agvDoOut(task);
        }
        return SUCCESS;
    }
    /**
     * @author Ryan
     * @date 2025/9/25
     * @description: AGV出库任务
     * @version 1.0
     */
    public ReturnT<String> agvDoOut(Task task) {
        if (task.getIoType().equals(101)) {
            Date now = new Date();
            LocCache locMast = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no" ,task.getSourceLocNo()));
            if (Objects.isNull(locMast)) {
                throw new RuntimeException("数据错误:库位信息不能为空!!");
            }
            List<TaskDetl> wrkDetls101 = taskDetlService.selectList(new EntityWrapper<TaskDetl>().eq("wrk_no", task.getWrkNo()));
            if (wrkDetls101.isEmpty()) {
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                return FAIL.setMsg("全板出库 ===>> 工作明细档为空; [workNo=" + task.getWrkNo() + "],[locNo=" + task.getSourceLocNo() + "]");
            }
            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) {
                }
            }
            // 删除工作档源库位的库存明细
            if (!locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", task.getSourceLocNo()))) {
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                return FAIL.setMsg("全板出库 ===>> 删除库存明细失败; [workNo=" + task.getWrkNo() + "],[locNo=" + task.getSourceLocNo() + "]");
            }
            // 修改源库位状态 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)) {
                    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)) {
                throw new CoolException("站点:" + task.getSourceStaNo() + ", 不存在!!");
            }
            devNo.setLocSts(LocStsType.LOC_STS_TYPE_F.type);
            devNo.setModiTime(new Date());
            if (!basStationService.updateById(devNo)) {
                throw new CoolException("站点信息修改失败!!");
            }
//            task.setWrkSts(15L);
//            if (!taskService.updateById(task)) {
//                throw new CoolException("任务状态修改失败!!");
//            }
        } else {
        }
        return SUCCESS;
    }
    @Transactional(rollbackFor = Exception.class)
    public ReturnT<String> agvDoIn(Task wrkMast) {
        LocCache locCache = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", wrkMast.getLocNo()));
        if (Objects.isNull(locCache)) {
            throw new CoolException("数据错误,库位不存在!!");
        }
        if (!locCache.getLocSts().equals(LocStsType.LOC_STS_TYPE_S.type)) {
            throw new CoolException("当前库位状态为:" + LocStsType.LOC_STS_TYPE_S.type + "." + LocStsType.LOC_STS_TYPE_S.desc + ",不是出库预约状态");
        }
        List<WaitPakin> apallet = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", wrkMast.getBarcode()));
        if (Objects.isNull(apallet)) {
@@ -624,12 +719,6 @@
        if (Objects.isNull(pakins) || pakins.isEmpty()) {
            throw new CoolException("单据不存在!!");
        }
        pakins.forEach(orderPakin -> {
            orderPakin.setSettle(4L);
            if (!orderPakinService.updateById(orderPakin)) {
                throw new CoolException("单据修改失败!!");
            }
        });
        return SUCCESS;
    }