自动化立体仓库 - WMS系统
skyouc
3 天以前 66042dcaa96d66edaf56a863d5576207a13c2db5
no message
3个文件已修改
466 ■■■■ 已修改文件
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 374 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -41,6 +41,8 @@
import java.math.RoundingMode;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/**
@@ -1256,12 +1258,6 @@
        wrkMast.setModiUser(userId);
        wrkMast.setModiTime(now);
        wrkMast.setBarcode(locMast.getBarcode());
        WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("source_loc_no", locDetl.getLocNo()));
        if (!Objects.isNull(wrkMast1)) {
            throw new CoolException("源库位已出库,请等待任务完成后,再执行!!");
        }
        if (!wrkMastService.insert(wrkMast)) {
            throw new CoolException("保存工作档失败,出库库位号:" + locDetl.getLocNo());
        }
@@ -1315,7 +1311,7 @@
     * @version 1.0
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    @Transactional
    public synchronized R callAgvMove(AgvCallParams params, Long userId) {
        if (Objects.isNull(params.getOrgSite())) {
            throw new CoolException("源站点不能为空!!");
@@ -1473,9 +1469,19 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R callEmptyCar(AgvCallParams params, Long userId) {
        BasAreas basAreas = basAreasService.selectOne(new EntityWrapper<BasAreas>().eq("name", params.getOrgSite()));
        BasStation station1 = basStationService.selectOne(new EntityWrapper<BasStation>().eq("dev_no", params.getTarSite()));
        if (Objects.isNull(station1) || Objects.isNull(basAreas)) {
            return R.error("目标站点或库区不存在,请联系管理!!");
        }
        List<String> list = Arrays.asList("SSX01", "SSX02", "SSX03", "SSX04", "SSX05", "SSX06", "SSX07", "SSX08", "SSX09", "SSX10");
        if (Long.parseLong(station1.getAreaId()) != basAreas.getId() && !list.contains(params.getTarSite())) {
            return R.error("起始区和目标站点不在同一个库区,请重新操作!!");
        }
        List<LocCache> locCaches = locCacheService.selectList(new EntityWrapper<LocCache>()
                .eq("loc_sts", LocStsType.LOC_STS_TYPE_D.type)
@@ -1492,20 +1498,6 @@
        }
        generateCacheOutTask(station, locCaches.get(0), userId);
        // HIKApiDTO hikApiDTO =new HIKApiDTO()
        // .setOrg(locCaches.get(0).getLocNo())
        // .setOrgType("05")
        // .setTar(params.getTarSite())
        // .setTarType("05")
        // .setTaskType("GT5")
        // .setPriority("1")
        // .setCtnrType("2")
        // ;
        // HIKResultDTO hikResultDTO = sendAgvTask(hikApiDTO,
        // HIKApiConstant.AGV_CALL_IN_PATH);
        // if (!hikResultDTO.isSuccess()){
        // return R.error(hikResultDTO.getMessage());
        // }
        return R.ok();
    }
@@ -1696,29 +1688,32 @@
        if (Objects.isNull(param.getCombMats()) || param.getCombMats().isEmpty()) {
            throw new CoolException("组托明细不能为空!!");
        }
        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
                .eq("wrk_sts", 14)
                .eq("io_type", 104)
                .eq("barcode", param.getBarcode()));
        if (Objects.isNull(wrkMast)) {
            throw new CoolException("任务档信息不存在!!");
            throw new CoolException("任务档信息不存在,请检查托盘:" + param.getBarcode() + "任务档是否已完成出库 !!");
        }
        for (CombParam.CombMat combMat : param.getCombMats()) {
            BasStationDetl stationDetl = basStationDetlService.selectOne(new EntityWrapper<BasStationDetl>()
                    .eq("zpallet", param.getCarBarcode())
                    .eq("three_code", combMat.getThreeCode()));
                    .eq(!Objects.isNull(combMat.getMatnr()), "matnr", combMat.getMatnr())
                    .eq(!Objects.isNull(combMat.getThreeCode()), "three_code", combMat.getThreeCode()));
            if (Objects.isNull(stationDetl)) {
                throw new CoolException("明细内容不存在!!");
            }
            WrkDetl wrkDetl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>()
                    .eq("matnr", stationDetl.getMatnr())
                    .eq("wrk_no", wrkMast.getWrkNo())
                    .eq("supp_code", combMat.getSuppCode()));
                    .eq("supp_code", stationDetl.getSuppCode()));
            if (Objects.isNull(wrkDetl)) {
                //TODO 新插入
                Mat mat = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", stationDetl.getMatnr())
                Mat mat = matService.selectOne(new EntityWrapper<Mat>()
                        .eq("matnr", stationDetl.getMatnr())
                        .eq("supp_code", combMat.getSuppCode()));
                if (Objects.isNull(mat)) {
                    throw new CoolException("物料基础信息已不存在!!");
@@ -1728,7 +1723,7 @@
                detl.setAnfme(combMat.getAnfme());
                detl.setBarcode(wrkMast.getBarcode());
                detl.setZpallet(param.getBarcode());
                detl.setBoxType1(combMat.getBoxType1());
                detl.setBoxType1(param.getBoxType1());
                detl.setStandby1(combMat.getSuppCode());
                detl.setThreeCode(combMat.getThreeCode());
                detl.setAdjustQty(combMat.getAdjustQty());
@@ -1745,7 +1740,7 @@
                double val = Math.round((combMat.getAnfme() + wrkDetl.getAnfme()) * 10000) / 10000.0;
                WrkDetl detl = new WrkDetl();
                detl.setOrderNo(stationDetl.getOrderNo());
                detl.setBoxType1(combMat.getBoxType1());
                detl.setBoxType1(wrkDetl.getBoxType1());
                detl.setZpallet(param.getBarcode());
                detl.setBarcode(param.getBarcode());
                detl.setThreeCode(combMat.getThreeCode());
@@ -1893,6 +1888,12 @@
        if (Cools.isEmpty(basStation)) {
            throw new CoolException("请输入正确的站点号");
        }
        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", params.getOrgBarcode()));
        if (Objects.isNull(wrkMast)) {
            throw new CoolException("出库任务档信息不存在!!");
        }
        for (CollectionPakinParams.CombMat combMat : params.getCombMats()) {
            if (combMat.getWorkQty().compareTo(BigDecimal.ZERO) == 0) {
                continue;
@@ -1908,8 +1909,23 @@
            BasStationDetl basStationDetl = basStationDetlService.selectOne(new EntityWrapper<BasStationDetl>()
                    .eq("dev_no", basStation.getDevNo())
                    .eq("matnr", combMat.getMatnr())
                    .eq("batch", combMat.getBatch())
                    .eq("order_no", combMat.getOrderNo())
                    .eq(!Cools.isEmpty(combMat.getBatch()), "batch", combMat.getBatch())
                    .eq(!Cools.isEmpty(combMat.getStandby1()), "standby1", combMat.getStandby1()));
            Wrapper<WrkDetl> wrapper = new EntityWrapper<WrkDetl>()
                    .eq("wrk_no", wrkMast.getWrkNo())
                    .eq("matnr", combMat.getMatnr())
                    .eq("supp_coode", combMat.getStandby1());
////                    .eq(!Objects.isNull(params.getBoxType1()), "boxType1", params.getBoxType1())
//
//            if (!Objects.isNull(params.getBoxType1())) {
//                wrapper.eq("box_type1", params.getBoxType1());
//            }
//            WrkDetl wrkDetl = wrkDetlService.selectOne(wrapper);
            if (Cools.isEmpty(basStationDetl)) {
                basStationDetl = new BasStationDetl();
                Mat mat = matService.selectByMatnr(combMat.getMatnr());
@@ -1921,12 +1937,18 @@
                        .setBarcode(params.getTarBarcode())
                        .setZpallet(params.getTarBarcode())
                        .setBatch(combMat.getBatch())
                        .setBoxType1(params.getBoxType1())
                        .setSuppCode(combMat.getStandby1())
                        .setStandby1(combMat.getStandby1())
                        .setAnfme(combMat.getWorkQty().doubleValue());
//                if (!Objects.isNull(wrkDetl) && !wrkDetl.getMatnr().equals(combMat.getMatnr())) {
//                    throw new CoolException("请检查隔层是否绑定正确!!");
//                }
                if (!basStationDetlService.insert(basStationDetl)) {
                    throw new CoolException("插入明细失败");
                }
            } else {
                BigDecimal anfme = new BigDecimal(basStationDetl.getAnfme().toString()).add(combMat.getWorkQty());
                basStationDetl.setAnfme(anfme.doubleValue());
@@ -1974,7 +1996,6 @@
    @Override
    public R collectionPakinView(CollectionPakinParams params) {
        WrkMast wrkMast = wrkMastService.selectByBarcode(params.getOrgBarcode());
        if (Cools.isEmpty(wrkMast)) {
            throw new CoolException("未找到任务");
@@ -1982,14 +2003,15 @@
        if (wrkMast.getIoType().equals(TaskIOType.ALL_OUT.type)
                && wrkMast.getIoType().equals(TaskIOType.PICK_OUT.type)) {
            throw new CoolException("人物类型错误");
            throw new CoolException("任务类型错误");
        }
        wrkDetlService.selectList(new EntityWrapper<WrkDetl>()
                .eq(!Objects.isNull(params.getMatnr()), "matnr", params.getMatnr())
        List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>()
                .like(!Objects.isNull(params.getMatnr()), "matnr", params.getMatnr())
                .eq(!Objects.isNull(params.getBoxType1()), "box_type1", params.getBoxType1())
                .eq("wrk_no", wrkMast.getWrkNo()));
        List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
//        List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
        if (Cools.isEmpty(wrkDetls)) {
            throw new CoolException("未找到任务明细");
        }
@@ -2392,17 +2414,17 @@
            }
            // 修改库位状态: F.在库 ====>>> R.出库预约/P.拣料/盘点/并板出库中
            locMast = locMastService.selectById(locMast.getLocNo());
//            if (locMast.getLocSts().equals(LocStsType.LOC_STS_TYPE_F.type)
//                    || locMast.getLocSts().equals(LocStsType.LOC_STS_TYPE_D.type)) {
            locMast.setLocSts(ioType == 101 ? "R" : "P");
            locMast.setModiUser(userId);
            locMast.setModiTime(now);
            if (!locMastService.updateById(locMast)) {
                throw new CoolException("预约库位状态失败,库位号:" + locMast.getLocNo());
            if (locMast.getLocSts().equals(LocStsType.LOC_STS_TYPE_F.type)
                    || locMast.getLocSts().equals(LocStsType.LOC_STS_TYPE_D.type)) {
                locMast.setLocSts(ioType == 101 ? "R" : "P");
                locMast.setModiUser(userId);
                locMast.setModiTime(now);
                if (!locMastService.updateById(locMast)) {
                    throw new CoolException("预约库位状态失败,库位号:" + locMast.getLocNo());
                }
            } else {
                throw new CoolException(locMast.getLocNo() + "库位不是在库状态");
            }
//            } else {
//                throw new CoolException(locMast.getLocNo() + "库位不是在库状态");
//            }
        }
    }
@@ -2526,7 +2548,6 @@
                .setAppeTime(new Date())
                .setModiUser(userId)
                .setModiTime(new Date());
        if (!taskService.insert(task)) {
            throw new CoolException("保存工作档失败");
        }
@@ -2614,8 +2635,6 @@
                throw new CoolException("更新目标库位状态失败");
            }
        }
    }
    public HIKResultDTO sendAgvTask(HIKApiDTO haiKangApiDTO, String path) {
@@ -2867,7 +2886,6 @@
            return R.error("台车编码不能为空!");
        }
        List<TaskDetl> taskDetls = taskDetlService.selectList(new EntityWrapper<TaskDetl>()
//                .eq(!Objects.isNull(params.getMatnr()), "matnr", params.getMatnr())
                .eq("zpallet", params.getCarBarcode()));
        taskDetls.forEach(taskDetl -> {
@@ -2900,58 +2918,155 @@
        if (Objects.isNull(params.getTarSite())) {
            return R.error("目标站点不能为空!!");
        }
        BasStation devNo = basStationService.selectOne(new EntityWrapper<BasStation>().eq("dev_no", params.getTarSite()));
        if (Objects.isNull(devNo) || !devNo.getLocSts().equals(LocStsType.LOC_STS_TYPE_O.type)) {
            return R.error("目标站点忙碌中!!");
        }
        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", locCache.getLocNo()));
        if (Objects.isNull(locDetls) || locDetls.isEmpty()) {
            return R.error("台车上没有对应明细信息!!");
        }
        List<LocDto> locDtos = new ArrayList<>();
        locDetls.forEach(locDetl -> {
            OrderPakout orderPakout = orderPakoutService.selectOne(new EntityWrapper<OrderPakout>()
            List<OrderPakout> orderPakouts = orderPakoutService.selectList(new EntityWrapper<OrderPakout>()
                    .eq("doc_type", 5)
                    .eq("number", locDetl.getOrderNo()));
            if (!Objects.isNull(orderPakout)) {
            if (Objects.isNull(orderPakouts) || orderPakouts.isEmpty()) {
                throw new CoolException("单据信息不存在或已上报完成!!");
            }
            for (OrderPakout orderPakout : orderPakouts) {
                OrderDetlPakout orderDetl = orderDetlPakoutService.selectOne(new EntityWrapper<OrderDetlPakout>()
                        .eq("matnr", locDetl.getMatnr())
                        .eq("supp_code", locDetl.getSuppCode())
                        .eq("order_no", orderPakout.getOrderNo()));
                if (Objects.isNull(orderDetl)) {
                    continue;
                }
                locDetl.setMemo(orderPakout.getShipCode());
                locDetl.setOrderNo(orderPakout.getOrderNo());
            }
            OrderDetlPakout orderDetl = orderDetlPakoutService.selectOne(new EntityWrapper<OrderDetlPakout>()
                    .eq("matnr", locDetl.getMatnr())
                    .eq("supp_code", locDetl.getSuppCode())
                    .eq("order_no", orderPakout.getOrderNo()));
            if (Objects.isNull(orderDetl)) {
                throw new CoolException("订单明细不存在!!");
            }
            LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(),
                    locDetl.getAnfme());
            locDto.setFrozen(locDetl.getFrozen());
            locDto.setFrozenLoc(locCache.getFrozen());
//            List<BasStation> basStations = basStationService.selectList(new EntityWrapper<BasStation>().in("area_id", areaIds));
//            List<String> collect = basStations.stream().map(BasStation::getDevNo).collect(Collectors.toList());
//            locDto.setAgvStaNos(collect);
            locDto.setAgvStaNo(params.getTarSite());
            locDto.setBrand(orderDetl.getBrand());
            locDto.setSuppCode(orderDetl.getSuppCode());
            locDto.setStandby1(orderDetl.getStandby1());
            locDto.setStandby2(orderDetl.getStandby2());
            locDto.setStandby3(orderDetl.getStandby3());
            locDto.setBoxType1(orderDetl.getBoxType1());
            locDto.setBoxType2(orderDetl.getBoxType2());
            locDto.setBoxType3(orderDetl.getBoxType3());
            locDtos.add(locDto);
                LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(), locDetl.getAnfme());
                locDto.setFrozen(locDetl.getFrozen());
                locDto.setFrozenLoc(locCache.getFrozen());
                locDto.setAgvStaNo(params.getTarSite());
                locDto.setBrand(orderDetl.getBrand());
                locDto.setSuppCode(orderDetl.getSuppCode());
                locDto.setStandby1(orderDetl.getStandby1());
                locDto.setStandby2(orderDetl.getStandby2());
                locDto.setStandby3(orderDetl.getStandby3());
                locDto.setBoxType1(orderDetl.getBoxType1());
                locDto.setBoxType2(orderDetl.getBoxType2());
                locDto.setBoxType3(orderDetl.getBoxType3());
                locDtos.add(locDto);
            }
//            exist.add(locDetl.getLocNo());
        });
        generateAgvTaskByTc(locDtos);
        return R.ok();
    }
    /**
     * 获取站点明细信息
     *
     * @param params
     * @return
     */
    @Override
    public R getStationInfos(AgvCallParams params) {
        if (Objects.isNull(params.getOrgSite())) {
            return R.error("站点不能为空!!");
        }
        if (Objects.isNull(params.getCarBarcode())) {
            return R.error("站点台车不能为空!!");
        }
//        if (!Cools.isEmpty(params.getMatnr())) {
//            return R.error("物料信息不能为空!!");
//        }
        BasStation station = basStationService.selectOne(new EntityWrapper<BasStation>()
                .eq("dev_no", params.getOrgSite())
                .eq("barcode", params.getCarBarcode()));
        if (Objects.isNull(station)) {
            throw new CoolException("台车与站点绑定关系不存在,请联系管理员!");
        }
        List<BasStationDetl> stationDetls = basStationDetlService.selectList(new EntityWrapper<BasStationDetl>()
                .like(!Cools.isEmpty(params.getMatnr()), "matnr", params.getMatnr())
                .eq("dev_no", station.getDevNo()));
        if (!stationDetls.isEmpty()) {
            return R.ok().add(stationDetls);
        }
        return R.ok();
    }
    /**
     * 站点物料解绑
     *
     * @param params
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R unbindMatnr(CombParam params) {
        if (Objects.isNull(params.getCombMats()) || params.getCombMats().isEmpty()) {
            return R.error("明细不能为空!!");
        }
        for (CombParam.CombMat combMat : params.getCombMats()) {
            if (Objects.isNull(combMat)) {
                continue;
            }
            OrderPakin order = orderPakinService.selectOne(new EntityWrapper<OrderPakin>().eq("order_no", combMat.getOrderNo()));
            if (Objects.isNull(order)) {
                return R.error("为查询到订单,请确认是否为库口组托信息!!");
            }
            //入库
            OrderDetlPakin detlPakin = orderDetlPakinService.selectOne(new EntityWrapper<OrderDetlPakin>()
                    .eq("order_no", combMat.getOrderNo())
                    .eq("matnr", combMat.getMatnr())
                    .eq("supp_code", combMat.getStandby1()));
            if (!Objects.isNull(detlPakin)) {
                Double v = Math.round((detlPakin.getWorkQty() - combMat.getAnfme()) * 10000) / 10000.0;
                detlPakin.setWorkQty(v);
                if (!orderDetlPakinService.update(detlPakin, new EntityWrapper<OrderDetlPakin>()
                        .eq("order_no", combMat.getOrderNo())
                        .eq("matnr", combMat.getMatnr())
                        .eq("supp_code", combMat.getStandby1()))) {
                    throw new CoolException("订单明细更新失败!!");
                }
                if (!basStationDetlService.delete(new EntityWrapper<BasStationDetl>().eq("order_no", combMat.getOrderNo())
                        .eq("matnr", combMat.getMatnr())
                        .eq("supp_code", combMat.getStandby1()))) {
                    throw new CoolException("站点数据删除失败!!");
                }
                WaitPakin waitPakin = waitPakinService.selectOne(new EntityWrapper<WaitPakin>()
                        .eq("order_no", combMat.getOrderNo())
                        .eq("matnr", combMat.getMatnr())
                        .eq("supp_code", combMat.getStandby1()));
                if (!Objects.isNull(waitPakin)) {
                    if (!waitPakinService.delete(new EntityWrapper<WaitPakin>().eq("order_no", combMat.getOrderNo())
                            .eq("matnr", combMat.getMatnr())
                            .eq("supp_code", combMat.getStandby1()))) {
                        throw new CoolException("原组托档删除失败!!");
                    }
                }
            } else {
                throw new CoolException("订单明细绑定关系不存在!!");
            }
        }
        return R.ok();
    }
    @Transactional(rollbackFor = Exception.class)
    public void generateAgvTaskByTc(List<LocDto> locDtos) {
        List<LocDto> locDtoArrayList = new ArrayList<>();
        for (LocDto locDto : locDtos){
            if (locDto.getFrozen()!=1 && locDto.getFrozenLoc()!=1){
        for (LocDto locDto : locDtos) {
            if (locDto.getFrozen() != 1 && locDto.getFrozenLoc() != 1) {
                locDtoArrayList.add(locDto);
            }
        }
@@ -2979,7 +3094,9 @@
        List<TaskDto> taskDtos = new ArrayList<>();
        // 根据 (库位 & 出库站) 分组; 理想状态:一组为一次出库任务
        for (LocDto locDto : locDtos) {
            if (locDto.isLack()) { continue; }
            if (locDto.isLack()) {
                continue;
            }
            TaskDto taskDto = new TaskDto(locDto.getLocNo(), locDto.getAgvStaNo(), locDto);
            if (TaskDto.hasAgv(taskDtos, taskDto)) {
                TaskDto dto = TaskDto.findAgv(taskDtos, taskDto);
@@ -2996,12 +3113,13 @@
                BasStation station = basStationService.selectOne(new EntityWrapper<BasStation>()
                        .in("loc_sts", Arrays.asList(LocStsType.LOC_STS_TYPE_O.type, LocStsType.LOC_STS_TYPE_O.type))
                        .eq("dev_no", taskDto.getAgvStaNo()));
                if (Objects.isNull(station)) { throw new CoolException("数据错误,站点不存在或已使用!!"); }
                if (Objects.isNull(station)) {
                    throw new CoolException("数据错误,站点不存在或已使用!!");
                }
                workService.agvStockOut(station, taskDto, 9527L);
            });
        });
    }
    /**
     * 确认捆包出库
@@ -3059,19 +3177,15 @@
                                    }
                                });
                            }
                            task.setWrkSts(TaskStatusType.AGV_INVENTORY_UPDATED_OUT.type);
                            if (!taskService.update(task, new EntityWrapper<Task>().eq("wrk_no", taskDetl.getWrkNo()))) {
                                throw new CoolException("任务信息更新失败!!");
                            }
                        }
                    });
                }
            }
            task.setWrkSts(TaskStatusType.AGV_INVENTORY_UPDATED_OUT.type);
            if (!taskService.update(task, new EntityWrapper<Task>().eq("wrk_no", task.getWrkNo()))) {
                throw new CoolException("任务信息更新失败!!");
            }
        }
        //TODO 比对实际出库数量和任务档数量是否相等,修改原任务档为53,生成新的入库任务
        return R.ok("呼叫成功!!");
    }
@@ -3105,6 +3219,17 @@
            return R.error("没有可用空板!!");
        }
        locMast.setLocSts(LocStsType.LOC_STS_TYPE_R.type);
        if (!locMastService.update(locMast, new EntityWrapper<LocMast>().eq("loc_no", locMast.getLocNo()))) {
            throw new CoolException(locMast.getLocNo() + "出库预约失败!!");
        }
        WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("source_loc_no", locMast.getLocNo()));
        if (!Objects.isNull(wrkMast1)) {
            throw new CoolException("任务档已生成,请不要重复操作!!");
        }
        int workNo = commonService.getWorkNo(0);
        //TODO 生成并板出库任务
        WrkMast wrkMast = new WrkMast();
        wrkMast.setIoType(104);
@@ -3118,7 +3243,7 @@
        wrkMast.setCrnNo(locMast.getCrnNo());
        wrkMast.setIoTime(new Date());
        wrkMast.setWrkDate(new Date());
        wrkMast.setWrkNo(commonService.getWorkNo(0));
        wrkMast.setWrkNo(workNo);
        wrkMast.setTaskType("crn");
        if (!wrkMastService.insert(wrkMast)) {
@@ -3128,6 +3253,59 @@
        return R.ok().add(wrkMast);
    }
    /**
     * 获取出库台车所有信息
     *
     * @param params
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R getTcAllInfos(AgvCallParams params) {
        if (Objects.isNull(params.getCarBarcode())) {
            return R.error("台车码不能为空!!");
        }
//        Task task = taskService.selectOne(new EntityWrapper<Task>().eq("barcode", params.getCarBarcode()));
//        if (Objects.isNull(task)) {
//            throw new CoolException("任务档不存在!!");
//        }
//        if (Objects.isNull(task.getSourceLocNo())) {
//            throw new CoolException("请检查任务类型是否属于出库捆绑!!");
//        }
        LocCache locCache = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("barcode", params.getCarBarcode()));
        if (Objects.isNull(locCache)) {
            return R.error("当前台车不在缓冲库区!!");
        }
        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", locCache.getLocNo()));
        if (!Objects.isNull(locDetls) && !locDetls.isEmpty()) {
            locDetls.forEach(locDetl -> {
                OrderPakout orderPakout = orderPakoutService.selectOne(new EntityWrapper<OrderPakout>()
                        .eq("number", locDetl.getOrderNo()));
                if (!Objects.isNull(orderPakout)) {
                    locDetl.setMemo(orderPakout.getShipCode());
                }
            });
        }
        try {
            Map<String, List<LocDetl>> listMap = locDetls.stream().collect(Collectors.groupingBy(LocDetl::getMemo));
            if (!Cools.isEmpty(params.getShipCode())) {
                List<LocDetl> detlList = listMap.get(params.getShipCode());
                return R.ok().add(detlList);
            }
        } catch (Exception e) {
            log.error(e.getMessage());
        }
        return R.ok().add(locDetls);
//        Map<String, List<LocDetl>> listMap = locDetls.stream().collect(Collectors.groupingBy(LocDetl::getMemo));
//        if (!Objects.isNull(params.getShipCode())) {
//            List<LocDetl> detlList = listMap.get(params.getShipCode());
//            return R.ok().add(detlList);
//        } else {
//            return R.ok().add(locDetls);
//        }
    }
    /**
     * 生成移库任务
@@ -3176,12 +3354,12 @@
        LocCache loc = findAvailableLocByAreaType(LocAreaType.LOC_AREA_TYPE_IN_CACHE);
        if (loc != null) return loc;
        // 2. Try SO Area
        loc = findAvailableLocByAreaType(LocAreaType.LOC_AREA_TYPE_SO);
        if (loc != null) return loc;
        // 3. Try EO Area
        loc = findAvailableLocByAreaType(LocAreaType.LOC_AREA_TYPE_EO);
//        // 2. Try SO Area
//        loc = findAvailableLocByAreaType(LocAreaType.LOC_AREA_TYPE_SO);
//        if (loc != null) return loc;
//
//        // 3. Try EO Area
//        loc = findAvailableLocByAreaType(LocAreaType.LOC_AREA_TYPE_EO);
        return loc;
    }
@@ -3195,9 +3373,7 @@
        }
        return locCacheService.selectOne(new EntityWrapper<LocCache>()
                .eq("area_id", area.getId())
                .eq("frozen", 0)
                .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type)
                .orderAsc(Arrays.asList("loc_no"))
                .last("OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY"));
                .orderAsc(Arrays.asList("loc_no")));
    }
}
src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java
@@ -164,18 +164,18 @@
            locNo = wrkMast.getLocNo();
            locSts = "O";
            // 库位转移
            if (wrkMast.getIoType() == 11) {
                // 库位转移:源库位
                LocCache locMast = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", wrkMast.getSourceLocNo()));
                if (Cools.isEmpty(locMast)) {
                    throw new CoolException("取消库位转移失败,源库位不存在:" + wrkMast.getSourceLocNo());
                }
                locMast.setLocSts(wrkMast.getFullPlt().equalsIgnoreCase("N") ? "D" : "F");
                locMast.setModiTime(now);
                locMast.setModiUser(userId);
                locCacheService.update(locMast, new EntityWrapper<LocCache>().eq("loc_no", locMast.getLocNo()));
            }
//            // 库位转移
//            if (wrkMast.getIoType() == 11) {
//                // 库位转移:源库位
//                LocCache locMast = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", wrkMast.getSourceLocNo()));
//                if (Cools.isEmpty(locMast)) {
//                    throw new CoolException("取消库位转移失败,源库位不存在:" + wrkMast.getSourceLocNo());
//                }
//                locMast.setLocSts(wrkMast.getFullPlt().equalsIgnoreCase("N") ? "D" : "F");
//                locMast.setModiTime(now);
//                locMast.setModiUser(userId);
//                locCacheService.update(locMast, new EntityWrapper<LocCache>().eq("loc_no", locMast.getLocNo()));
//            }
            BasStation station = basStationService.selectOne(new EntityWrapper<BasStation>().eq("dev_no", wrkMast.getSourceStaNo()));
            if (station.getLocSts().equals("R")) {
@@ -213,16 +213,12 @@
            }
            BasStation station = basStationService.selectOne(new EntityWrapper<BasStation>().eq("dev_no", wrkMast.getStaNo()));
            if (station.getLocSts().equals("S")) {
                station.setLocSts("O");
                station.setBarcode("");
                station.setModiTime(new Date());
                station.setModiUser(userId);
                if (!basStationService.updateById(station)) {
                    throw new CoolException("更新源站点状态失败");
                }
            } else {
                throw new CoolException("更新源站点状态失败,目标库位状态:" + station.getLocSts());
            station.setLocSts("O");
            station.setBarcode("");
            station.setModiTime(new Date());
            station.setModiUser(userId);
            if (!basStationService.updateById(station)) {
                throw new CoolException("更新源站点状态失败");
            }
        } else if (wrkMast.getIoType() == 1) {
            List<WaitPakin> waitPakins = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", wrkMast.getBarcode()));
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -11,6 +11,7 @@
import com.zy.asrs.entity.param.FullStoreParam;
import com.zy.asrs.entity.param.LocDetlAdjustParam;
import com.zy.asrs.entity.param.StockOutParam;
import com.zy.asrs.enums.ContainerType;
import com.zy.asrs.enums.LocAreaType;
import com.zy.asrs.mapper.LocMastMapper;
import com.zy.asrs.entity.result.FindLocNoAttributeVo;
@@ -120,6 +121,22 @@
//        List<String> matnrs = param.getList().stream().map(FullStoreParam.MatCodeStore::getMatnr).distinct().collect(Collectors.toList());
//        List<String> batchs = param.getList().stream().map(FullStoreParam.MatCodeStore::getBatch).distinct().collect(Collectors.toList());
        FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(param.getList().get(0));
//        BasContainer container = basContainerService.selectOne(new EntityWrapper<BasContainer>().eq("barcode", param.getBarcode()));
//        if (Objects.isNull(container)) {
//            throw new CoolException("容器编码未维护,请维护后再操作!!");
//        }
//
//        Integer whsType = 1;
//        Short lcoType = 1;
//        //用于判断料箱托盘,料箱,笼框
//        if (!container.getType().equals(ContainerType.CONTAINER_TYPE_BOX.type)) {
//            whsType = 2;
//            if (container.getType().equals(ContainerType.CONTAINER_TYPE_SALVER.type)) {
//                lcoType = 2;
//            }
//        }
        StartupDto dto = commonService.getLocNo(1, param.getDevpNo(), sourceStaNo.getDevNo(), findLocNoAttributeVo, locTypeDto);
        if (Cools.isEmpty(dto)) {
            throw new CoolException("查询库位失败!!==》startupFullPutStore ==》 commonService.getLocNo");
@@ -478,6 +495,7 @@
            wrkDetl.setZpallet(wrkMast.getBarcode());
            wrkDetl.setIoTime(now);
            wrkDetl.setWrkNo(workNo);
            wrkDetl.setBoxType1(locDto.getBoxType1());
            wrkDetl.setBatch(locDto.getBatch());
            wrkDetl.setOrderNo(locDto.getOrderNo());
            wrkDetl.setAnfme(locDto.getAnfme()); // 数量
@@ -575,6 +593,7 @@
            wrkDetl.setOrderId(checkOrderDetls.getId());
            wrkDetl.setZpallet(wrkMast.getBarcode());
            wrkDetl.setIoTime(now);
            wrkDetl.setBoxType1(locDto.getBoxType1());
            wrkDetl.setWrkNo(workNo);
            wrkDetl.setBatch(locDto.getBatch());
            wrkDetl.setOrderNo(locDto.getOrderNo());
@@ -665,6 +684,7 @@
                    .setIoTime(new Date())
                    .setOrderNo(locDto.getOrderNo())
                    .setAnfme(locDto.getAnfme())
                    .setBoxType1(locDto.getBoxType1())
                    .setZpallet(locCache.getBarcode())
                    .setBatch(locDto.getBatch())
                    .setAppeUser(userId)
@@ -991,6 +1011,7 @@
            wrkDetl.sync(locDetl);
            wrkDetl.setWrkNo(workNo);
            wrkDetl.setIoTime(now);
            wrkDetl.setBoxType1(locDetl.getBoxType1());
            wrkDetl.setAnfme(locDetl.getAnfme());
            wrkDetl.setAppeTime(now);
            wrkDetl.setAppeUser(userId);
@@ -1109,11 +1130,21 @@
                if (locDetl.getMatnr().equals(adjust.getMatnr()) && Cools.eq(locDetl.getBatch(), adjust.getBatch())) {
                    if (!locDetl.getAnfme().equals(adjust.getCount())) {
                        // todo 盘点记录
                        // 修改库存
                        if (!locDetlService.updateAnfme(adjust.getCount(), locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch(), locDetl.getBrand(),
                                locDetl.getStandby1(), locDetl.getStandby2(), locDetl.getStandby3(), locDetl.getBoxType1(), locDetl.getBoxType2(), locDetl.getBoxType3())) {
                            throw new CoolException(locDetl.getLocNo() + "库位," + locDetl.getMatnr() + "商品," + locDetl.getBatch() + "批号修改数量失败");
                        locDetl.setSuppCode(adjust.getSuppCode());
                        locDetl.setBoxType1(adjust.getBoxType1());
                        locDetl.setAnfme(adjust.getCount());
                        locDetl.setStandby1(adjust.getSuppCode());
//                        locDetl.setZpallet(locDetl.getZpallet());
                        if (!locDetlService.update(locDetl, new EntityWrapper<LocDetl>().eq("loc_no", locDetl.getLocNo()))) {
                            throw new CoolException(locDetl.getLocNo() + "库位," + locDetl.getMatnr() + "商品," + locDetl.getSuppCode() + "供应商修改数量失败");
                        }
                        // 修改库存
//                        if (!locDetlService.updateAnfme(adjust.getCount(), locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch(), locDetl.getBrand(),
//                                locDetl.getStandby1(), locDetl.getStandby2(), locDetl.getStandby3(), locDetl.getBoxType1(), locDetl.getBoxType2(), locDetl.getBoxType3())) {
//                            throw new CoolException(locDetl.getLocNo() + "库位," + locDetl.getMatnr() + "商品," + locDetl.getBatch() + "批号修改数量失败");
//                        }
                        // 保存调整记录
                        AdjDetl adjDetl = new AdjDetl();
                        adjDetl.setLocNo(locDetl.getLocNo());
@@ -1125,8 +1156,10 @@
                        adjDetl.setModiUser(userId);
                        adjDetl.setAppeTime(now);
                        adjDetl.setAppeUser(userId);
                        adjDetlService.save(adjDetl, userId);
                        if (!adjDetlService.insert(adjDetl)) {
                            throw new CoolException("调整记录保存失败!!");
                        }
//                        adjDetlService.save(adjDetl, userId);
                        if (updateFlag) {
                            wrkMast.setWrkNo(commonService.getWorkNo(3));
                            wrkMast.setIoType(23);
@@ -1141,6 +1174,7 @@
                        WrkDetlLog wrkDetl = new WrkDetlLog();
                        wrkDetl.sync(locDetl);
                        wrkDetl.setWrkNo(wrkMast.getWrkNo());
                        wrkDetl.setBoxType1(locDetl.getBoxType1());
                        wrkDetl.setIoTime(wrkMast.getIoTime());
                        wrkDetl.setAnfme(adjust.getCount());
                        wrkDetl.setAppeTime(now);
@@ -1162,7 +1196,7 @@
            // todo 盘点记录
            if (!locDetlService.updateAnfme(-1.0D, locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch(), locDetl.getBrand(),
                    locDetl.getStandby1(), locDetl.getStandby2(), locDetl.getStandby3(), locDetl.getBoxType1(), locDetl.getBoxType2(), locDetl.getBoxType3())) {
                throw new CoolException("删除" + locDetl.getLocNo() + "库位," + locDetl.getMatnr() + "商品," + locDetl.getBatch() + "批号库存明细失败");
//                throw new CoolException("删除" + locDetl.getLocNo() + "库位," + locDetl.getMatnr() + "商品," + locDetl.getBatch() + "批号库存明细失败");
            }
            // 保存调整记录
            AdjDetl adjDetl = new AdjDetl();
@@ -1215,6 +1249,9 @@
            locDetl.setZpallet(locMast.getBarcode());
            locDetl.setAnfme(adjust.getCount()); // 数量
            locDetl.setModiUser(userId); // 操作人员信息
            locDetl.setSuppCode(adjust.getSuppCode());
            locDetl.setStandby1(adjust.getSuppCode());
            locDetl.setBoxType1(adjust.getBoxType1());
            locDetl.setModiTime(now);
            locDetl.setAppeUser(userId);
            locDetl.setAppeTime(now);
@@ -1249,6 +1286,7 @@
            wrkDetl.sync(locDetl);
            wrkDetl.setWrkNo(wrkMast.getWrkNo());
            wrkDetl.setIoTime(wrkMast.getIoTime());
            wrkDetl.setBoxType1(locDetl.getBoxType1());
            wrkDetl.setAnfme(adjust.getCount());
            wrkDetl.setAppeTime(now);
            wrkDetl.setModiTime(now);