diff --git a/src/main/java/com/wms/controller/ExcelController.java b/src/main/java/com/wms/controller/ExcelController.java index 08c2ca0..ef81324 100644 --- a/src/main/java/com/wms/controller/ExcelController.java +++ b/src/main/java/com/wms/controller/ExcelController.java @@ -369,10 +369,10 @@ public class ExcelController { // 目标数量 BigDecimal targetNum = stockOfGoodsDto.getNumOfKanban().multiply(stockOfGoodsDto.getNumOfPerKanban()); // 计算需要多少个看板 - BigDecimal needKanbanQuantity = targetNum.subtract(stockOfGoodsDto.getRemainNumSum()).divide(stockOfGoodsDto.getNumOfPerKanban(), 2, RoundingMode.CEILING); + BigDecimal needKanbanQuantity = targetNum.subtract(stockOfGoodsDto.getRemainNumSum()).divide(stockOfGoodsDto.getNumOfPerKanban(), 0, RoundingMode.CEILING); // 设定物流数据 tempClcKanbanRequirementExcelVo.setGoodsId(stockOfGoodsDto.getGoodsId()); - tempClcKanbanRequirementExcelVo.setRequireNum(needKanbanQuantity.multiply(stockOfGoodsDto.getNumOfPerKanban())); + tempClcKanbanRequirementExcelVo.setReleasePoint(stockOfGoodsDto.getReleasePoint()); // 设定看板 List needKanbanList = new ArrayList<>(); for (KanbanEntity kanbanEntity : stockOfGoodsDto.getKanbanList()) { diff --git a/src/main/java/com/wms/controller/KateWorkQueryController.java b/src/main/java/com/wms/controller/KateWorkQueryController.java index f17f6bf..92242eb 100644 --- a/src/main/java/com/wms/controller/KateWorkQueryController.java +++ b/src/main/java/com/wms/controller/KateWorkQueryController.java @@ -487,7 +487,7 @@ public class KateWorkQueryController { TotalNumOfType = TotalNumOfType.add(BigDecimal.ONE); BigDecimal targetNum = stockOfGoodsDto.getNumOfKanban().multiply(stockOfGoodsDto.getNumOfPerKanban()); // 计算需要多少个看板 - BigDecimal needKanbanQuantity = targetNum.subtract(stockOfGoodsDto.getRemainNumSum()).divide(stockOfGoodsDto.getNumOfPerKanban(), 2, RoundingMode.CEILING); + BigDecimal needKanbanQuantity = targetNum.subtract(stockOfGoodsDto.getRemainNumSum()).divide(stockOfGoodsDto.getNumOfPerKanban(), 0, RoundingMode.CEILING); TotalNumOfPc = TotalNumOfPc.add(needKanbanQuantity.multiply(stockOfGoodsDto.getNumOfPerKanban())); TotalNumOfBox = TotalNumOfBox.add(needKanbanQuantity); if (stockOfGoodsDto.getBoxType().contains("810")) { diff --git a/src/main/java/com/wms/controller/TaskController.java b/src/main/java/com/wms/controller/TaskController.java index e4f3213..60b697a 100644 --- a/src/main/java/com/wms/controller/TaskController.java +++ b/src/main/java/com/wms/controller/TaskController.java @@ -2030,6 +2030,12 @@ public class TaskController { } } } + boolean hasPickTasksAgain = pickTaskService.exists(new LambdaQueryWrapper() + .eq(PickTask::getVehicleId, requestBackQuery.getVehicleId())); + if (hasPickTasksAgain) { + // 防止生成回库任务时正好又生成拣选任务 + throw new Exception("生成新的拣选任务,不可回库。"); + } response.setCode(ResponseCode.OK.getCode()); response.setMessage("可以回库。"); } else { @@ -2042,7 +2048,7 @@ public class TaskController { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); logger.error("处理回库请求异常,{}", convertJsonString(e)); response.setCode(ResponseCode.ERROR.getCode()); - response.setMessage("处理回库请求异常。"); + response.setMessage("处理回库请求异常:" + e.getMessage()); return convertJsonString(response); } } @@ -2185,16 +2191,6 @@ public class TaskController { response.setMessage("请求参数缺少站台号。"); return convertJsonString(response); } - // 判断大盒子号是否正确 - List stationConfigs = workStationConfigService.list(new LambdaQueryWrapper() - .eq(WorkStationConfig::getBigBox, sortBoxRequest.getBigBoxNo()) - .eq(WorkStationConfig::getWorkStation, standId)); - if (stationConfigs == null || stationConfigs.isEmpty()) { - logger.error("请输入正确的大盒子号。"); - response.setCode(ResponseCode.ERROR.getCode()); - response.setMessage("请输入正确的大盒子号。"); - return convertJsonString(response); - } // 查找对应的标签配置 List lightingBoxList = eLocationConfigLastService.list(new LambdaQueryWrapper() .eq(ELocationConfigLast::getWorkStation, standId) @@ -2205,6 +2201,47 @@ public class TaskController { response.setMessage("请将已亮灯的盒子取走并灭灯后重试。"); return convertJsonString(response); } + // 判断大盒子号是否正确 + List stationConfigs = workStationConfigService.list(new LambdaQueryWrapper() + .eq(WorkStationConfig::getBigBox, sortBoxRequest.getBigBoxNo()) + .eq(WorkStationConfig::getWorkStation, standId)); + if (stationConfigs == null || stationConfigs.isEmpty()) { + logger.error("请输入正确的大盒子号。"); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("请输入正确的大盒子号。"); + return convertJsonString(response); + } + // 当前要亮灯的大盒子 + WorkStationConfig currentBigBoxConfig = stationConfigs.get(0); + // 当前配置的工单数/大盒子 + int orderQuantity = currentBigBoxConfig.getOrderQuantity(); + if (orderQuantity <= 0) { + logger.error("当前大盒子号不装大盒子。"); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("当前大盒子号不装大盒子。"); + return convertJsonString(response); + } + if (orderQuantity == 1) { + // 查询这个大盒子对应的小盒子 + List smallBoxListOfAll = stationConfigs.stream().map(WorkStationConfig::getSmallBox).distinct().toList(); + // 找出本次工作中的标签位 + List eConfigLastList = eLocationConfigLastService.list(new LambdaQueryWrapper() + .eq(ELocationConfigLast::getWorkStation, standId) + .in(ELocationConfigLast::getWorkCenter, smallBoxListOfAll) + .eq(ELocationConfigLast::getBoxStatus, 0) + .last("limit 1")); + // 实际本次需要亮灯的小盒子 + List smallBoxList = eConfigLastList.stream().map(ELocationConfigLast::getWorkCenter).distinct().toList(); + + } else { + // + + } + + + + + // 筛选小盒子号 List smallBoxListOfAll = stationConfigs.stream().map(WorkStationConfig::getSmallBox).distinct().toList(); // 查询该盒子下面所有的工单 @@ -2283,9 +2320,14 @@ public class TaskController { .in(ETagLocation::getELocationId, eTaskDataList.stream().map(ETaskData::getLocation).collect(Collectors.toList()))); } } + + + + sortBoxRequest.setOrderOfOrders(1); logger.info("处理整理盒子请求成功。"); response.setCode(ResponseCode.OK.getCode()); response.setMessage("请根据灯光拣选盒子。"); + response.setReturnData(sortBoxRequest); } else { logger.info("没有可亮灯的数据。"); response.setCode(ResponseCode.ERROR.getCode()); diff --git a/src/main/java/com/wms/entity/app/dto/GoodsDto.java b/src/main/java/com/wms/entity/app/dto/GoodsDto.java index e84b0cf..2f6fbdb 100644 --- a/src/main/java/com/wms/entity/app/dto/GoodsDto.java +++ b/src/main/java/com/wms/entity/app/dto/GoodsDto.java @@ -1,5 +1,6 @@ package com.wms.entity.app.dto; +import com.fasterxml.jackson.annotation.JsonProperty; import com.wms.entity.app.dto.extend.KanbanEntity; import lombok.Data; @@ -106,4 +107,14 @@ public class GoodsDto { * 最后更新用户 */ private String lastUpdateUser; + /** + * 热度 + */ + @JsonProperty("heat") + private String heat; + /** + * 卸货点 + */ + @JsonProperty("releasePoint") + private String releasePoint; } diff --git a/src/main/java/com/wms/entity/app/dto/StockOfGoodsDto.java b/src/main/java/com/wms/entity/app/dto/StockOfGoodsDto.java index bfd2ba0..6c94a77 100644 --- a/src/main/java/com/wms/entity/app/dto/StockOfGoodsDto.java +++ b/src/main/java/com/wms/entity/app/dto/StockOfGoodsDto.java @@ -1,5 +1,6 @@ package com.wms.entity.app.dto; +import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonProperty; import com.wms.entity.app.dto.extend.KanbanEntity; import lombok.Data; @@ -57,4 +58,14 @@ public class StockOfGoodsDto { */ @JsonProperty("kanbanList") private List kanbanList; + /** + * 热度 + */ + @JsonProperty("heat") + private String heat; + /** + * 卸货点 + */ + @JsonProperty("releasePoint") + private String releasePoint; } diff --git a/src/main/java/com/wms/entity/app/request/GoodsQuery.java b/src/main/java/com/wms/entity/app/request/GoodsQuery.java index 45cf7ad..444bb09 100644 --- a/src/main/java/com/wms/entity/app/request/GoodsQuery.java +++ b/src/main/java/com/wms/entity/app/request/GoodsQuery.java @@ -138,6 +138,16 @@ public class GoodsQuery extends PageQuery { */ @JsonProperty("lastUpdateUser") private String lastUpdateUser; + /** + * 热度 + */ + @JsonProperty("heat") + private String heat; + /** + * 卸货点 + */ + @JsonProperty("releasePoint") + private String releasePoint; /** diff --git a/src/main/java/com/wms/entity/app/vo/GoodsVo.java b/src/main/java/com/wms/entity/app/vo/GoodsVo.java index ecf3baa..2716492 100644 --- a/src/main/java/com/wms/entity/app/vo/GoodsVo.java +++ b/src/main/java/com/wms/entity/app/vo/GoodsVo.java @@ -131,4 +131,14 @@ public class GoodsVo { */ @JsonProperty("lastUpdateUser") private String lastUpdateUser; + /** + * 热度 + */ + @JsonProperty("heat") + private String heat; + /** + * 卸货点 + */ + @JsonProperty("releasePoint") + private String releasePoint; } diff --git a/src/main/java/com/wms/entity/table/Goods.java b/src/main/java/com/wms/entity/table/Goods.java index a473792..0ebf45b 100644 --- a/src/main/java/com/wms/entity/table/Goods.java +++ b/src/main/java/com/wms/entity/table/Goods.java @@ -135,4 +135,14 @@ public class Goods { */ @TableField("last_update_user") private String lastUpdateUser; + /** + * 热度 + */ + @TableField("heat") + private String heat; + /** + * 卸货点 + */ + @TableField("release_point") + private String releasePoint; } diff --git a/src/main/java/com/wms/service/business/serviceImplements/WmsJobServiceImplements.java b/src/main/java/com/wms/service/business/serviceImplements/WmsJobServiceImplements.java index 8c01615..1cde000 100644 --- a/src/main/java/com/wms/service/business/serviceImplements/WmsJobServiceImplements.java +++ b/src/main/java/com/wms/service/business/serviceImplements/WmsJobServiceImplements.java @@ -66,7 +66,7 @@ public class WmsJobServiceImplements implements IWmsJobService { List taskGroupIds = new ArrayList<>(); // 这里单独处理站台拣选出库以外的任务 for (Task task : allTasks) { - if (taskGroupIds.size() >= maxWcsAcceptNums) { + if (request.size() >= maxWcsAcceptNums) { // 每次给wcs下发数量 break; } @@ -160,6 +160,23 @@ public class WmsJobServiceImplements implements IWmsJobService { .eq(Task::getTaskType, TaskType.OUT.getCode()); List allTasks = taskService.list(waitForDistributeTaskQuery); if (!allTasks.isEmpty()) { + String max_vehicle_nums = configMap.get(ConfigMapKeyEnum.MAX_VEHICLE_NUMS.getConfigKey()); + String max_wcs_accept_nums = configMap.get(ConfigMapKeyEnum.MAX_WCS_ACCEPT_NUMS.getConfigKey()); + if (StringUtils.isEmpty(max_vehicle_nums) || StringUtils.isEmpty(max_wcs_accept_nums)) { + logger.error("配置未生成"); + return; + } + int maxVehicleNums = Integer.parseInt(max_vehicle_nums); + int maxWcsAcceptNums = Integer.parseInt(max_wcs_accept_nums);// wcs最大一次性可接受任务数量 + List outsideVehicles = outsideVehiclesService.selectDistinctVehicles(); + if (outsideVehicles == null || outsideVehicles.isEmpty()) { + outsideVehicles = Collections.emptyList(); + } + int remainVehicleNums = maxVehicleNums - outsideVehicles.size();// 线体剩余箱子数量 + if (remainVehicleNums <= 0) { + return; + } + // 需要发送给wcs的任务列表 List request = new ArrayList<>(); // 已经下发的任务组列表 @@ -189,17 +206,20 @@ public class WmsJobServiceImplements implements IWmsJobService { .eq(Stand::getStandType, 3)); List stackRunningTasks = taskService.list(new LambdaQueryWrapper() .eq(Task::getTaskType, TaskType.OUT.getCode()) - .eq(Task::getTaskStatus, WmsTaskStatus.RUN.getCode())); + .and(wrapper -> { + wrapper.eq(Task::getTaskStatus, WmsTaskStatus.WAIT.getCode()) + .or().eq(Task::getTaskStatus, WmsTaskStatus.RUN.getCode()); + })); Map runningTaskNumToEquipmentMap = new HashMap<>(); Map> newTaskToEquipmentMap = new HashMap<>(); for (Stand stacker : stackerList) { // 找这台堆垛机正在执行的拣选出库任务数量 runningTaskNumToEquipmentMap.put(stacker.getEquipmentId(), 0); // 查询每台堆垛机还没有下发的任务 - List stackNewTasks = allTasks.stream().filter(task -> + List stackNewTasks = new ArrayList<>(allTasks.stream().filter(task -> task.getIsPicking() == 1 && StringUtils.isNotEmpty(task.getPickStand()) && Objects.equals(stacker.getEquipmentId(), instantLocationMap.get(task.getOrigin()).getEquipmentId()) - ).toList(); + ).toList()); newTaskToEquipmentMap.put(stacker.getEquipmentId(), stackNewTasks); } stackRunningTasks.forEach(task -> { @@ -209,8 +229,16 @@ public class WmsJobServiceImplements implements IWmsJobService { } }); for (Stand stacker : stackerList) { - int availableTaskNum = 2 - runningTaskNumToEquipmentMap.get(stacker.getEquipmentId()); + if (request.size() >= maxWcsAcceptNums || remainVehicleNums <= 0) { + // 超过wcs一次可接受数量 + break; + } + int availableTaskNum = 4 - runningTaskNumToEquipmentMap.get(stacker.getEquipmentId()); while (availableTaskNum > 0) { + if (request.size() >= maxWcsAcceptNums || remainVehicleNums <= 0) { + // 超过wcs一次可接受数量 + break; + } // 可以继续发任务 List currentStackerTasks = newTaskToEquipmentMap.get(stacker.getEquipmentId()); // 从这些任务里面找到最适合的任务下发 @@ -281,6 +309,7 @@ public class WmsJobServiceImplements implements IWmsJobService { if (StringUtils.isNotEmpty(task.getPreTask())) {// 当前任务具有前置任务 // 查询一下前置的任务有没有存在,存在则不下发 if (taskService.exists(new LambdaQueryWrapper().eq(Task::getTaskId, task.getPreTask()))) { + currentStackerTasks.remove(task); continue; } } @@ -303,11 +332,13 @@ public class WmsJobServiceImplements implements IWmsJobService { // 移除已经发送过的任务 currentStackerTasks.removeIf(task -> task.getVehicleId().equals(vehicleId)); newTaskToEquipmentMap.replace(stacker.getEquipmentId(), currentStackerTasks); + // 可用数量-1 + availableTaskNum--; + // 剩余线体可继续出库料箱数量 + remainVehicleNums--; } else { break; } - // 可用数量-1 - availableTaskNum--; } } if (request.size() == 0) { diff --git a/src/main/java/com/wms/service/serviceImplements/StockServiceImplements.java b/src/main/java/com/wms/service/serviceImplements/StockServiceImplements.java index 190da3f..9f3c839 100644 --- a/src/main/java/com/wms/service/serviceImplements/StockServiceImplements.java +++ b/src/main/java/com/wms/service/serviceImplements/StockServiceImplements.java @@ -106,6 +106,8 @@ public class StockServiceImplements extends ServiceImpl impl tempResult.setNumOfKanban(currentGoodsList.get(0).getKanbanNum()); tempResult.setNumOfPerKanban(currentGoodsList.get(0).getQuantityPerKanban()); tempResult.setKanbanList(currentGoodsList.get(0).getKanbanList()); + tempResult.setHeat(currentGoodsList.get(0).getHeat());// 热度 + tempResult.setReleasePoint(currentGoodsList.get(0).getReleasePoint());// 卸货点 } resultList.add(tempResult); } diff --git a/src/main/java/com/wms/utils/excel/listener/UploadStationConfigListener.java b/src/main/java/com/wms/utils/excel/listener/UploadStationConfigListener.java index b9adb56..4fde588 100644 --- a/src/main/java/com/wms/utils/excel/listener/UploadStationConfigListener.java +++ b/src/main/java/com/wms/utils/excel/listener/UploadStationConfigListener.java @@ -100,13 +100,13 @@ public class UploadStationConfigListener implements ReadListener