自动化立体仓库 - WMS系统
ZY
2024-10-29 34e0894214280018ac9de1bd0f8fe1ce5cd5a97f
src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
@@ -5,6 +5,7 @@
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.common.SnowflakeIdWorker;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.LocDetlAdjustParam;
@@ -73,6 +74,12 @@
    private WrkMastExecuteService wrkMastExecuteService;
    @Autowired
    private ConfigService configService;
    @Autowired
    private SnowflakeIdWorker snowflakeIdWorker;
    @Autowired
    private FlowLogService flowLogService;
    @Autowired
    private LocDetlServiceImpl locDetlService;
    /*
@@ -143,6 +150,7 @@
            //生成工作档
            AgvWrkMast wrkMast = createWrkMast(ioType,wrkSts,sourceLocNo,targetLocNo,containerCode,now,userId,Short.valueOf(containerCode.substring(0,2)),null);
            //生成工作档明细
            long flowId = snowflakeIdWorker.nextId();
            taskDto.getLocDtos().forEach(locDto -> {
                if (!BaseController.isJSON(locDto.getOrderNo())) {
                    //明细档所需参数
@@ -157,6 +165,36 @@
                            locDto.getCsocode(),
                            locDto.getIsoseq(),
                            locDto.getProcessSts());
                    OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getCsocode(), locDto.getIsoseq());
                    AgvLocDetl locDetl = agvLocDetlService.selectItem(wrkMast.getSourceLocNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getCsocode(), locDto.getIsoseq());
                    // 流水 -- 新增订单明细
//                    FlowLog flowLog = new FlowLog();
//                    flowLog.setFid(String.valueOf(flowId));
//                    flowLog.setSpare2(wrkMast.getWrkNo().toString());
//                    flowLog.setLocNo(wrkMast.getSourceLocNo());
//                    flowLog.setSpare1(containerCode);
//                    flowLog.setOpType(4L);
//                    flowLog.setOrderNo(locDto.getOrderNo());
//                    flowLog.setThreeCode(locDto.getCsocode());
//                    flowLog.setMatnr(locDto.getMatnr());
//                    flowLog.setMaktx(locDto.getMaktx());
//                    flowLog.setOrderPrevious(orderDetl.getAnfme());
//                    flowLog.setOrderCurrent(orderDetl.getAnfme());
//                    flowLog.setOrderChanged(0.0);
//
//                    flowLog.setQtyPrevious(orderDetl.getQty());
//                    flowLog.setQtyCurrent(orderDetl.getQty() + locDto.getAnfme());
//                    flowLog.setQtyChanged(locDto.getAnfme());
//
//                    flowLog.setLocPrevious(locDetl.getAnfme());
//                    flowLog.setLocCurrent(locDetl.getAnfme() - locDto.getAnfme());
//                    flowLog.setLocChanged(locDto.getAnfme());
//                    flowLog.setUserId(userId);
//                    flowLog.setAppeTime(now);
//                    if (!flowLogService.insert(flowLog)) {
//                        throw new CoolException("同步半成品调拨单流水记录失败");
//                    }
                }else {
                    List<OrderDto> orderDtoList = JSON.parseArray(locDto.getOrderNo(), OrderDto.class);
                    orderDtoList.forEach(orderDto -> {
@@ -174,6 +212,7 @@
                                locDto.getProcessSts());
                    });
                }
                //修改订单信息
                modifyOrderDetl(locDto, userId);
@@ -217,6 +256,7 @@
            //生成工作档
            AgvWrkMast wrkMast = createWrkMast(ioType,wrkSts,sourceLocNo,targetLocNo,containerCode,now,userId,Short.valueOf(containerCode.substring(0,2)),null);
            //生成工作档明细
            long flowId = snowflakeIdWorker.nextId();
            taskDto.getLocDtos().forEach(locDto -> {
                if (!BaseController.isJSON(locDto.getOrderNo())) {
                    //明细档所需参数
@@ -231,6 +271,35 @@
                            locDto.getCsocode(),
                            locDto.getIsoseq(),
                            locDto.getProcessSts());
                    OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getCsocode(), locDto.getIsoseq());
                    AgvLocDetl locDetl = agvLocDetlService.selectItem(wrkMast.getSourceLocNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getCsocode(), locDto.getIsoseq());
//                    FlowLog flowLog = new FlowLog();
//                    flowLog.setFid(String.valueOf(flowId));
//                    flowLog.setSpare2(wrkMast.getWrkNo().toString());
//                    flowLog.setLocNo(wrkMast.getSourceLocNo());
//                    flowLog.setSpare1(containerCode);
//                    flowLog.setOpType(6L);
//                    flowLog.setOrderNo(locDto.getOrderNo());
//                    flowLog.setThreeCode(locDto.getCsocode());
//                    flowLog.setMatnr(locDto.getMatnr());
//                    flowLog.setMaktx(locDto.getMaktx());
//                    flowLog.setOrderPrevious(orderDetl.getAnfme());
//                    flowLog.setOrderCurrent(orderDetl.getAnfme());
//                    flowLog.setOrderChanged(0.0);
//
//                    flowLog.setQtyPrevious(orderDetl.getQty());
//                    flowLog.setQtyCurrent(orderDetl.getQty() + locDto.getAnfme());
//                    flowLog.setQtyChanged(locDto.getAnfme());
//
//                    flowLog.setLocPrevious(locDetl.getAnfme());
//                    flowLog.setLocCurrent(locDetl.getAnfme() - locDto.getAnfme());
//                    flowLog.setLocChanged(locDto.getAnfme());
//                    flowLog.setUserId(userId);
//                    flowLog.setAppeTime(now);
//                    if (!flowLogService.insert(flowLog)) {
//                        throw new CoolException("同步半成品调拨单流水记录失败");
//                    }
                }else {
                    List<OrderDto> orderDtoList = JSON.parseArray(locDto.getOrderNo(), OrderDto.class);
                    orderDtoList.forEach(orderDto -> {
@@ -449,7 +518,7 @@
            br = 2;
        }
        if (agvBasDevp.getLocType1() != br) {
            throw new CoolException("站点异常!");
            throw new CoolException("站点类型和货架类型不符!");
        }
        if (containerType == 40) {
            locType = 5;
@@ -522,8 +591,37 @@
            //生成工作档
            AgvWrkMast wrkMast = createWrkMast(1,201L,devNo,locNo,containerCode,now,userId, containerType,agvLocMast.getPltType());
            //生成工作档明细
            long flowId = snowflakeIdWorker.nextId();
            agvWaitPakinList.forEach(wp -> {
                createWrkDetlReWrite(wp.getMatnr(),wrkMast.getWrkNo(),wp.getOrderNo(),wp.getBatch(),wp.getAnfme(),wp.getSuppCode(),now,userId,wp.getThreeCode(),wp.getDeadTime(),wp.getProcessSts());
                // 流水 -- 新增订单明细
                OrderDetl orderDetl = orderDetlService.selectItem(wp.getOrderNo(), wp.getMatnr(), wp.getThreeCode());
//                FlowLog flowLog = new FlowLog();
//                flowLog.setFid(String.valueOf(flowId));
//                flowLog.setSpare2(wrkMast.getWrkNo().toString());
//                flowLog.setLocNo(locNo);
//                flowLog.setSpare1(containerCode);
//                flowLog.setOpType(3L);
//                flowLog.setOrderNo(wp.getOrderNo());
//                flowLog.setThreeCode(wp.getThreeCode());
//                flowLog.setMatnr(wp.getMatnr());
//                flowLog.setMaktx(wp.getMaktx());
//                flowLog.setOrderPrevious(orderDetl.getAnfme());
//                flowLog.setOrderCurrent(orderDetl.getAnfme());
//                flowLog.setOrderChanged(0.0);
//                flowLog.setQtyPrevious(orderDetl.getQty()-wp.getAnfme());
//                flowLog.setQtyCurrent(orderDetl.getQty());
//                flowLog.setQtyChanged(wp.getAnfme());
//
//                flowLog.setLocPrevious(0.0D);
//                flowLog.setLocCurrent(wp.getAnfme());
//                flowLog.setLocChanged(wp.getAnfme());
//
//                flowLog.setUserId(userId);
//                flowLog.setAppeTime(now);
//                if (!flowLogService.insert(flowLog)) {
//                    throw new CoolException("同步半成品调拨单流水记录失败");
//                }
            });
            //修改入库通知档状态
            agvWaitPakinService.updateIoStatus(containerCode,"Y");
@@ -558,6 +656,10 @@
        AgvBasDevp agvBasDevp = agvBasDevpService.selectById(station);
        if(!agvBasDevp.getLocSts().equals("O")){
            throw new CoolException("当前工作位状态为" + agvBasDevp.getLocSts()+",无法进行空板出库");
        }
        AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", agvBasDevp.getDevNo()));
        if(!Cools.isEmpty(agvWrkMast)){
            throw new CoolException("有货架在往站点搬运" + agvBasDevp.getDevNo()+",无法进行空板出库");
        }
        //寻找相应类型的空货架
@@ -769,6 +871,7 @@
    @Transactional
    public void cancelWrkMast(String workNo, Long userId,Integer type) {
        AgvWrkMast wrkMast = agvWrkMastService.selectById(workNo);
        long flowId = snowflakeIdWorker.nextId();
        if (Cools.isEmpty(wrkMast)){
            throw new CoolException(workNo+"工作档不存在");
        }
@@ -834,9 +937,37 @@
                        // 回滚入库订单
                        OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("three_code", agvWaitPakin.getThreeCode()).eq("matnr", agvWaitPakin.getMatnr()).eq("order_no", agvWaitPakin.getOrderNo()));
                        orderDetl.setQty(orderDetl.getQty() - agvWaitPakin.getAnfme());
                        if (!orderDetlService.updateById(orderDetl)) {
                            throw new CoolException("订单回滚失败");
                        }
//                        FlowLog flowLog = new FlowLog();
//                        flowLog.setFid(String.valueOf(flowId));
//                        flowLog.setSpare2(wrkMast.getWrkNo().toString());
//                        flowLog.setLocNo(locNo);
//                        flowLog.setSpare1(wrkMast.getBarcode());
//                        flowLog.setOpType(3L);
//                        flowLog.setOrderNo(agvWaitPakin.getOrderNo());
//                        flowLog.setThreeCode(agvWaitPakin.getThreeCode());
//                        flowLog.setMatnr(agvWaitPakin.getMatnr());
//                        flowLog.setMaktx(agvWaitPakin.getMaktx());
//                        flowLog.setOrderPrevious(orderDetl.getAnfme());
//                        flowLog.setOrderCurrent(orderDetl.getAnfme());
//                        flowLog.setOrderChanged(0.0);
//
//                        flowLog.setQtyPrevious(orderDetl.getQty());
//                        flowLog.setQtyCurrent(orderDetl.getQty()-agvWaitPakin.getAnfme());
//                        flowLog.setQtyChanged(-agvWaitPakin.getAnfme());
//
//                        flowLog.setLocPrevious(0.0);
//                        flowLog.setLocCurrent(0.0);
//                        flowLog.setLocChanged(-agvWaitPakin.getAnfme());
//
//                        flowLog.setUserId(userId);
//                        flowLog.setAppeTime(new Date());
//                        if (!flowLogService.insert(flowLog)) {
//                            throw new CoolException("同步半成品调拨单流水记录失败");
//                        }
                        // 删除组托档
                        if (!agvWaitPakinService.delete(new EntityWrapper<AgvWaitPakin>().eq("supp_code",agvWaitPakin.getSuppCode()).eq("matnr",agvWaitPakin.getMatnr()).eq("three_code",agvWaitPakin.getThreeCode()))) {
                            throw new CoolException("入库通知档取消失败");
@@ -866,10 +997,40 @@
                        OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("three_code", agvLocDetl.getThreeCode()).eq("matnr", agvLocDetl.getMatnr()).eq("order_no", "DB" + agvLocDetl.getOrderNo()));
                        orderDetl.setQty(orderDetl.getQty() + agvLocDetl.getAnfme());
                        if (!orderDetlService.updateById(orderDetl)) {
                            throw new CoolException("保存工作明细失败");
                            throw new CoolException("更新订单明细失败");
                        }
//                        FlowLog flowLog = new FlowLog();
//                        flowLog.setFid(String.valueOf(flowId));
//                        flowLog.setSpare2(wrkMast.getWrkNo().toString());
//                        flowLog.setLocNo(locNo);
//                        flowLog.setSpare1(wrkMast.getBarcode());
//                        flowLog.setOpType(8L);
//                        flowLog.setOrderNo(agvLocDetl.getOrderNo());
//                        flowLog.setThreeCode(agvLocDetl.getThreeCode());
//                        flowLog.setMatnr(agvLocDetl.getMatnr());
//                        flowLog.setMaktx(agvLocDetl.getMaktx());
//                        flowLog.setOrderPrevious(orderDetl.getAnfme());
//                        flowLog.setOrderCurrent(orderDetl.getAnfme());
//                        flowLog.setOrderChanged(0.0);
//
//                        flowLog.setQtyPrevious(orderDetl.getQty());
//                        flowLog.setQtyCurrent(orderDetl.getQty() + agvLocDetl.getAnfme());
//                        flowLog.setQtyChanged(-agvLocDetl.getAnfme());
//
//                        flowLog.setLocPrevious(0.0);
//                        flowLog.setLocCurrent(agvLocDetl.getAnfme());
//                        flowLog.setLocChanged(agvLocDetl.getAnfme());
//
//                        flowLog.setUserId(userId);
//                        flowLog.setAppeTime(new Date());
//                        if (!flowLogService.insert(flowLog)) {
//                            throw new CoolException("同步半成品调拨单流水记录失败");
//                        }
                    }
                } else {
                }
                // 自动调拨出库取消
            } else if(wrkMast.getIoType() == 108 || wrkMast.getIoType() == 111 || wrkMast.getIoType() == 112) {
                if (wrkMast.getIoType() == 112) {
@@ -904,6 +1065,33 @@
                    if (!orderDetlService.update(orderDetl,new EntityWrapper<OrderDetl>().eq("order_no","DB" + agvLocDetl.getOrderNo()).eq("matnr", agvLocDetl.getMatnr()).eq("three_code",agvLocDetl.getThreeCode()))){
                        throw new CoolException("修改订单明细失败,请联系管理员"+agvLocDetl.getOrderNo()+agvLocDetl.getMatnr());
                    }
//                    FlowLog flowLog = new FlowLog();
//                    flowLog.setFid(String.valueOf(flowId));
//                    flowLog.setSpare2(wrkMast.getWrkNo().toString());
//                    flowLog.setLocNo(locNo);
//                    flowLog.setSpare1(wrkMast.getBarcode());
//                    flowLog.setOpType(9L);
//                    flowLog.setOrderNo(agvLocDetl.getOrderNo());
//                    flowLog.setThreeCode(agvLocDetl.getThreeCode());
//                    flowLog.setMatnr(agvLocDetl.getMatnr());
//                    flowLog.setMaktx(agvLocDetl.getMaktx());
//                    flowLog.setOrderPrevious(orderDetl.getAnfme());
//                    flowLog.setOrderCurrent(orderDetl.getAnfme());
//                    flowLog.setOrderChanged(0.0);
//
//                    flowLog.setQtyPrevious(orderDetl.getQty());
//                    flowLog.setQtyCurrent(orderDetl.getQty() - agvLocDetl.getAnfme());
//                    flowLog.setQtyChanged(- agvLocDetl.getAnfme());
//
//                    flowLog.setLocPrevious(0.0);
//                    flowLog.setLocCurrent(agvLocDetl.getAnfme());
//                    flowLog.setLocChanged(agvLocDetl.getAnfme());
//
//                    flowLog.setUserId(userId);
//                    flowLog.setAppeTime(new Date());
//                    if (!flowLogService.insert(flowLog)) {
//                        throw new CoolException("同步半成品调拨单流水记录失败");
//                    }
                }
                //出库取消
            } else {