自动化立体仓库 - WMS系统
whycq
2024-07-23 0301e6673ac109b076f4feba47a9cee0ef033afa
src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
@@ -186,6 +186,80 @@
        });
    }
    /*
    加工出库
     */
    @Transactional
    public void processOut(List<TaskDto> agvTaskDtos, Long userId) {
        Date now = new Date();
        agvTaskDtos.forEach(taskDto -> {
            List<AgvLocDetl> agvLocDetls = agvLocDetlService.selectByTaskDto(taskDto);
            //AgvLocDetl agvLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no", taskDto.getLocNo()));
            //工作档所需参数
            long wrkSts = 21L;
            String sourceLocNo = taskDto.getLocNo();
            String targetLocNo = taskDto.getAgvStaNo();
            //String barcode = agvLocDetls.get(0).getSuppCode();
            String containerCode = taskDto.getLocDtos().get(0).getContainerCode();
            //判断是否全板出库
            int ioType = 107;
            //生成工作档
            AgvWrkMast wrkMast = createWrkMast(ioType,wrkSts,sourceLocNo,targetLocNo,containerCode,now,userId,Short.valueOf(containerCode.substring(0,2)));
            //生成工作档明细
            taskDto.getLocDtos().forEach(locDto -> {
                if (!BaseController.isJSON(locDto.getOrderNo())) {
                    //明细档所需参数
                    createWrkDetlReWrite(locDto.getMatnr(),
                            wrkMast.getWrkNo(),
                            locDto.getOrderNo(),
                            locDto.getBatch(),
                            locDto.getAnfme(),
                            locDto.getContainerCode(),
                            now,
                            userId,
                            locDto.getCsocode(),
                            locDto.getIsoseq(),
                            locDto.getProcessSts());
                }else {
                    List<OrderDto> orderDtoList = JSON.parseArray(locDto.getOrderNo(), OrderDto.class);
                    orderDtoList.forEach(orderDto -> {
                        //明细档所需参数
                        createWrkDetlReWrite(locDto.getMatnr(),
                                wrkMast.getWrkNo(),
                                orderDto.getOrderNo(),
                                locDto.getBatch(),
                                orderDto.getAnfme(),
                                locDto.getContainerCode(),
                                now,
                                userId,
                                locDto.getCsocode(),
                                locDto.getIsoseq(),
                                locDto.getProcessSts());
                    });
                }
                //修改订单信息
                modifyOrderDetl(locDto, userId);
            });
//            //修改订单信息
//            modifyOrderDetl(taskDto.getLocDtos().get(0), userId);
            //更新源站点信息
            String locSts = "R";
            updateAgvLocMast(agvLocMastService.selectById(sourceLocNo),locSts);
            //更新目标站点状态
            //locSts = ioType == 101 ? "S" : "Q";
            updateAgvBasDevp(agvBasDevpService.selectById(targetLocNo),"S",Short.valueOf(containerCode.substring(0,2)),containerCode);
        });
    }
    //拣料入库
    @Transactional
    public void pickIn(List<AgvWrkMast> agvWrkMastList){
@@ -207,6 +281,7 @@
            agvWrkMast.setLocNo(agvWrkMast.getSourceLocNo());
            agvWrkMast.setSourceLocNo(locNo);
            agvWrkMast.setIoTime(now);
            agvWrkMast.setLogErrMemo("createWaitPainWrkMastStart");
            agvWrkMastService.updateById(agvWrkMast);
            List<AgvWrkDetl> agvWrkDetlList = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", agvWrkMast.getWrkNo()));
@@ -365,6 +440,8 @@
            locType = 4;
        } else if (containerType == 20 && agvBasDevp.getFloor() == 3) {
            locType = 2;
        } else if (containerType == 30) {
            locType = 3;
        } else {
            locType = agvBasDevp.getLocType1();
        }
@@ -382,6 +459,11 @@
        //检索库位,选择合适的库位
        AgvLocMast agvLocMast = new AgvLocMast();
        //查询库存
        AgvLocMast locMast = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("barcode", containerCode));
        if (!Cools.isEmpty(locMast)) {
            throw new CoolException("当前货架已在库存中,无法进行入库");
        }
        //查询入库通知档
        List<AgvWaitPakin> agvWaitPakinList = agvWaitPakinService.selectByContainerCode(containerCode);
@@ -416,6 +498,11 @@
            //更新源站点状态
            updateAgvBasDevp(agvBasDevp,"R",containerType);
        }else {
            //查询工作档
            AgvWrkMast agvWrkMast1 = agvWrkMastService.selectByContainerCode(containerCode);
            if (!Cools.isEmpty(agvWrkMast1)) {
                throw new CoolException("当前货架已有入库任务,无法进行入库");
            }
            agvLocMast = agvCommonService.getLocNo(locType,agvBasDevp.getFloor(),true,true);
            // 生成工作档 10.空板入库
            createWrkMast(10,201L,agvBasDevp.getDevNo(),agvLocMast.getLocNo(),containerCode,now,userId,containerType);
@@ -489,10 +576,10 @@
                LocDetlAdjustParam.LocDetlAdjust adjust = iterator1.next();
                if (adjust.getCount() == 0) { continue; }
                if (locDetl.getMatnr().equals(adjust.getMatnr()) && Cools.eq(locDetl.getBatch(), adjust.getBatch()) && Cools.eq(locDetl.getSuppCode(),adjust.getSuppCode()) && Cools.eq(locDetl.getThreeCode(),adjust.getThreeCode()) && Cools.eq(locDetl.getDeadTime(),adjust.getDeadTime())) {
                    if (!locDetl.getAnfme().equals(adjust.getCount())) {
                    if (!locDetl.getAnfme().equals(adjust.getCount()) || !locDetl.getProcessSts().equals(adjust.getProcessSts())) {
                        // todo 盘点记录
                        // 修改库存
                        if (!agvLocDetlService.updateAnfme(adjust.getCount(), locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch(),locDetl.getThreeCode(),locDetl.getDeadTime())) {
                        if (!agvLocDetlService.updateAnfmeProcess(adjust.getCount(), locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch(),locDetl.getThreeCode(),locDetl.getDeadTime(),adjust.getProcessSts())) {
                            throw new CoolException(locDetl.getLocNo() + "库位," + locDetl.getMatnr() + "商品," + locDetl.getBatch() + "序列码修改数量失败");
                        }
                        // 保存调整记录
@@ -523,7 +610,7 @@
        // 删除库存
        for (AgvLocDetl locDetl : locDetls) {
            // todo 盘点记录
            if (!agvLocDetlService.updateAnfme(-1.0D, locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch(),locDetl.getThreeCode(),locDetl.getDeadTime())) {
            if (!agvLocDetlService.updateAnfmeProcess(-1.0D, locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch(),locDetl.getThreeCode(),locDetl.getDeadTime(),locDetl.getProcessSts())) {
                throw new CoolException("删除" + locDetl.getLocNo() + "库位," + locDetl.getMatnr() + "商品," + locDetl.getBatch() + "序列码库存明细失败");
            }
            // 保存调整记录
@@ -805,6 +892,7 @@
                        }
                    }else {
                        agvLocMastService.updateLocStsByLocNo(locNo,"D",wrkMast.getBarcode(),wrkMast.getWhsType().shortValue());
                        agvBasDevpService.updateLocStsAndBarcodeByDevNo(devNo,"O","",null);
                    }
                } else if (wrkMast.getIoType() == 113) {
@@ -1006,6 +1094,7 @@
        wrkMast.setAppeTime(now);
        wrkMast.setModiUser(userId);
        wrkMast.setModiTime(now);
        wrkMast.setLogErrMemo("createWaitPainWrkMastStart");
        if (!agvWrkMastService.insertByIncrease(wrkMast)) {
            throw new CoolException("保存工作档失败");