From 635e75fa0e7e30df880d78df98c0460481db4fac Mon Sep 17 00:00:00 2001 From: liangzhou <594755172@qq.com> Date: Mon, 16 Dec 2024 12:41:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=9B=B4=E6=96=B0=EF=BC=9A?= =?UTF-8?q?=201.=20=E5=A2=9E=E5=8A=A0=E7=AB=99=E5=8F=B0=E9=9D=9E=E8=AE=A1?= =?UTF-8?q?=E5=88=92=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/wms/controller/TaskController.java | 113 ++++++++++++++---- .../java/com/wms/entity/table/PickTask.java | 5 + .../com/wms/entity/table/PickTaskRecord.java | 5 + src/main/java/com/wms/entity/table/Stand.java | 5 + 4 files changed, 105 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/wms/controller/TaskController.java b/src/main/java/com/wms/controller/TaskController.java index a8d4775..055187e 100644 --- a/src/main/java/com/wms/controller/TaskController.java +++ b/src/main/java/com/wms/controller/TaskController.java @@ -477,18 +477,16 @@ public class TaskController { .set(Vehicle::getVehicleStatus, VehicleStatus.OUT.getCode()) .eq(Vehicle::getVehicleId, outTask.getVehicleId()) .ne(Vehicle::getVehicleStatus, VehicleStatus.OUT.getCode())); - if (StringUtils.isNotEmpty(outTask.getPickStand())) { - // 当前载具上所有库存状态设置为拣选 - stockService.update(new LambdaUpdateWrapper() - .set(Stock::getStockStatus, StockStatus.PICKING.getCode()) - .eq(Stock::getVehicleId, outTask.getVehicleId()) - .ne(Stock::getStockStatus, StockStatus.PICKING.getCode())); - // 将该载具对应的拣选任务设置为可发送状态 - pickTaskService.update(new LambdaUpdateWrapper() - .set(PickTask::getPickStatus, PickTaskStatusEnum.NEW.getCode()) - .eq(PickTask::getVehicleId, outTask.getVehicleId()) - .eq(PickTask::getPickStatus, PickTaskStatusEnum.TEMP.getCode())); - } + // 当前载具上所有库存状态设置为拣选 + stockService.update(new LambdaUpdateWrapper() + .set(Stock::getStockStatus, StockStatus.PICKING.getCode()) + .eq(Stock::getVehicleId, outTask.getVehicleId()) + .ne(Stock::getStockStatus, StockStatus.PICKING.getCode())); + // 将该载具对应的拣选任务设置为可发送状态 + pickTaskService.update(new LambdaUpdateWrapper() + .set(PickTask::getPickStatus, PickTaskStatusEnum.NEW.getCode()) + .eq(PickTask::getVehicleId, outTask.getVehicleId()) + .eq(PickTask::getPickStatus, PickTaskStatusEnum.TEMP.getCode())); } else {// 代表整出 // 删除当前载具上所有库存 List removeStocks = stockService.list(new LambdaQueryWrapper().eq(Stock::getVehicleId, outTask.getVehicleId())); @@ -854,6 +852,7 @@ public class TaskController { pickTaskService.update(new LambdaUpdateWrapper() .set(PickTask::getPickStatus, PickTaskStatusEnum.FINISH.getCode()) .set(PickTask::getLastUpdateTime, LocalDateTime.now()) + .set(PickTask::getArriveTime, LocalDateTime.now()) .eq(PickTask::getVehicleId, boxArriveRequest.getVehicleNo()) .eq(PickTask::getStandId, boxArriveRequest.getLocation())); // 更新这个箱子其他的暂存任务为待下发 @@ -1577,7 +1576,7 @@ public class TaskController { } } } - if (goodsIdList.size() > 0) { + if (!goodsIdList.isEmpty()) { // 判断这些物料是不是当前站台的工作流中仍然需要 if (workFlowService.exists(new LambdaQueryWrapper() .eq(WorkFlow::getWorkStation, standId) @@ -1757,7 +1756,7 @@ public class TaskController { } } } - if (goodsIdList.size() > 0) { + if (!goodsIdList.isEmpty()) { // 判断这些物料是不是当前站台的工作流中是否需要 if (workFlowService.exists(new LambdaQueryWrapper() .eq(WorkFlow::getWorkStation, targetStand.getStandId()) @@ -2820,11 +2819,31 @@ public class TaskController { response.setMessage("查询拣选站台错误。"); return convertJsonString(response); } + + // TODO 以下是非计划领料变动 + // 1. 判断当前站台是否允许非计划 + if (targetStand.getAllowNoPlan() != 1) { + logger.error("当前站台不允许非计划领料:{}。", targetStand.getStandId()); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("当前站台不允许非计划领料。"); + return convertJsonString(response); + } + // 2. 判断当前站台是否有工作流 + boolean haveWorkFlows = workFlowService.exists(new LambdaQueryWrapper() + .eq(WorkFlow::getWorkStation, targetStand.getStandId())); + if (haveWorkFlows) { + logger.error("当前站台还有工作不允许非计划领料:{}。", targetStand.getStandId()); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("当前站台还有工作不允许非计划领料。"); + return convertJsonString(response); + } + + // 查询库存 List stockList = stockService.list(new LambdaQueryWrapper() .apply("goods_related ->> '$.goodsId' = {0}" + MYSQL_JSON_CI, noPlanRequest.getGoodsId()) .apply("goods_related ->> '$.remainNum' > 0") - .orderByAsc(Stock::getCreateTime)); + .orderByAsc(Stock::getCreateTime, Stock::getStockStatus)); // 查询应该的库存总数 List stockOfGoodsList = stockService.selectSumOfGoods(noPlanRequest.getGoodsId()); // 总数量 @@ -2834,6 +2853,12 @@ public class TaskController { BigDecimal needNum = noPlanRequest.getNeedNum(); // 出库任务列表 List outTasks = new ArrayList<>(); + + // TODO 非计划变动 + // 拣选任务列表 + List pickTasks = new ArrayList<>(); + + // 尝试生成出库任务 List pickStandIds = new ArrayList<>(); for (Stock tempStock : stockList) { @@ -2870,6 +2895,21 @@ public class TaskController { tempOutTask.setCreateTime(LocalDateTime.now()); tempOutTask.setIsPicking(1); outTasks.add(tempOutTask); + + // TODO 非计划变动 + // 只有备料站台才下发拣选任务 + if (targetStand.getStandType() == 2) { + // 创建拣选任务 + PickTask tempPickTask = new PickTask(); + String key = tempStock.getVehicleId() + "_" + targetStand.getStandId(); + tempPickTask.setPickTaskId(key); + tempPickTask.setVehicleId(tempStock.getVehicleId()); + tempPickTask.setStandId(targetStand.getStandId()); + tempPickTask.setPickStatus(PickTaskStatusEnum.TEMP.getCode()); + tempPickTask.setLastUpdateTime(LocalDateTime.now()); + pickTasks.add(tempPickTask); + } + } else if (Objects.equals(tempStock.getStockStatus(), StockStatus.OUT.getCode()) || Objects.equals(tempStock.getStockStatus(), StockStatus.PICKING.getCode())) { // 查询这个箱子的拣选任务 @@ -2897,17 +2937,44 @@ public class TaskController { .set(Task::getTaskPriority, 2) .eq(Task::getVehicleId, tempStock.getVehicleId()) .eq(Task::getTaskStatus, WmsTaskStatus.NEW.getCode())); - thisVehiclePickTasks.forEach(pickTask -> { - if (!pickStandIds.contains(pickTask.getStandId())) { - pickStandIds.add(pickTask.getStandId()); + + // TODO 非计划变动 + if (targetStand.getStandType() == 1) { + // 入库站台 + thisVehiclePickTasks.forEach(pickTask -> { + if (!pickStandIds.contains(pickTask.getStandId())) { + pickStandIds.add(pickTask.getStandId()); + } + }); + } else { + // 备料站台---是否有当前站台的任务 + List thisStandPickTask = thisVehiclePickTasks.stream().filter(pickTask -> pickTask.getStandId().equals(targetStand.getStandId())).toList(); + if (thisStandPickTask.isEmpty()) { + // 创建拣选任务 + PickTask tempPickTask = new PickTask(); + String key = tempStock.getVehicleId() + "_" + targetStand.getStandId(); + tempPickTask.setPickTaskId(key); + tempPickTask.setVehicleId(tempStock.getVehicleId()); + tempPickTask.setStandId(targetStand.getStandId()); + tempPickTask.setPickStatus(PickTaskStatusEnum.NEW.getCode()); + tempPickTask.setLastUpdateTime(LocalDateTime.now()); + pickTasks.add(tempPickTask); } - }); + } } } } // 添加出库任务 if (!outTasks.isEmpty()) { + // 保存出库任务 taskService.saveBatch(outTasks); + + // TODO 非计划变动 + // 保存拣选任务 + if (!pickTasks.isEmpty()) { + pickTaskService.saveBatch(pickTasks); + } + List vehicleIds = outTasks.stream().map(Task::getVehicleId).distinct().toList(); // 更新库存状态 stockService.update(new LambdaUpdateWrapper() @@ -3065,12 +3132,12 @@ public class TaskController { boolean hasInTask = taskService.exists(new LambdaQueryWrapper() .eq(Task::getVehicleId, pickNumQuery.getVehicleId()) .eq(Task::getTaskType, TaskType.IN.getCode()) - .eq(Task::getTaskStatus, WmsTaskStatus.TEMP.getCode()) +// .eq(Task::getTaskStatus, WmsTaskStatus.TEMP.getCode()) .likeRight(Task::getTaskId, "RK_")); if (!hasInTask) { // 生成回库任务 Task backTask = new Task(); - backTask.setTaskId(generateId("HK_")); + backTask.setTaskId(generateId("HK_FJH_")); backTask.setTaskGroup(generateId("")); backTask.setTaskType(TaskType.IN.getCode()); backTask.setTaskStatus(WmsTaskStatus.TEMP.getCode()); @@ -3087,9 +3154,9 @@ public class TaskController { response.setCode(ResponseCode.OK.getCode()); response.setMessage("确认回库成功。"); } else { - logger.error("当前箱子还有拣选任务,不能回库,请将箱子置入拣货环线。"); + logger.error("当前箱子还有拣选任务,不能回库,请将箱子置入拣货环线。(如果在备料站台操作时,请确认不需要拿料时,按站台按钮放行即可。)"); response.setCode(ResponseCode.ERROR.getCode()); - response.setMessage("当前箱子还有拣选任务,不能回库,请将箱子置入拣货环线。"); + response.setMessage("当前箱子还有拣选任务,不能回库,请将箱子置入拣货环线。(如果在备料站台操作时,请确认不需要拿料时,按站台按钮放行即可。)"); } return convertJsonString(response); } catch (Exception e) { diff --git a/src/main/java/com/wms/entity/table/PickTask.java b/src/main/java/com/wms/entity/table/PickTask.java index c1502e4..71fd24f 100644 --- a/src/main/java/com/wms/entity/table/PickTask.java +++ b/src/main/java/com/wms/entity/table/PickTask.java @@ -42,4 +42,9 @@ public class PickTask { */ @TableField("last_update_time") private LocalDateTime lastUpdateTime; + /** + * 到达时间 + */ + @TableField("arrive_time") + private LocalDateTime arriveTime; } diff --git a/src/main/java/com/wms/entity/table/PickTaskRecord.java b/src/main/java/com/wms/entity/table/PickTaskRecord.java index 086d13d..5620373 100644 --- a/src/main/java/com/wms/entity/table/PickTaskRecord.java +++ b/src/main/java/com/wms/entity/table/PickTaskRecord.java @@ -42,4 +42,9 @@ public class PickTaskRecord { */ @TableField("last_update_time") private LocalDateTime lastUpdateTime; + /** + * 到达时间 + */ + @TableField("arrive_time") + private LocalDateTime arriveTime; } diff --git a/src/main/java/com/wms/entity/table/Stand.java b/src/main/java/com/wms/entity/table/Stand.java index 4b90b04..059f7a6 100644 --- a/src/main/java/com/wms/entity/table/Stand.java +++ b/src/main/java/com/wms/entity/table/Stand.java @@ -91,4 +91,9 @@ public class Stand { */ @TableField("pick_vehicle_count") private Integer pickVehicleCount; + /** + * 是否允许非计划领料 + */ + @TableField("allow_no_plan") + private Integer allowNoPlan; }