From bc42c796d7015a3e03bd7679bca2be7f38f6b617 Mon Sep 17 00:00:00 2001 From: liangzhou <594755172@qq.com> Date: Mon, 9 Sep 2024 20:35:13 +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.=E4=BF=AE=E5=A4=8D=E5=88=9B=E5=BB=BA=E5=B7=A5=E4=BD=9C=202?= =?UTF-8?q?.=E5=A2=9E=E5=8A=A0=E6=8B=A3=E9=80=89=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/wms/controller/JobComponent.java | 4 +- .../com/wms/controller/TaskController.java | 6 +- .../wms/controller/TaskMonitorController.java | 88 +++++++++++++++ .../wms/entity/app/request/PickTaskQuery.java | 44 ++++++++ .../com/wms/entity/app/vo/PickTaskVo.java | 39 +++++++ .../ValidateServiceImplements.java | 2 +- .../WmsJobServiceImplements.java | 2 +- .../WmsTaskServiceImplements.java | 4 +- .../WorkServiceImplements.java | 104 +++++++++--------- 9 files changed, 233 insertions(+), 60 deletions(-) create mode 100644 src/main/java/com/wms/controller/TaskMonitorController.java create mode 100644 src/main/java/com/wms/entity/app/request/PickTaskQuery.java create mode 100644 src/main/java/com/wms/entity/app/vo/PickTaskVo.java diff --git a/src/main/java/com/wms/controller/JobComponent.java b/src/main/java/com/wms/controller/JobComponent.java index a3d56ad..72c3210 100644 --- a/src/main/java/com/wms/controller/JobComponent.java +++ b/src/main/java/com/wms/controller/JobComponent.java @@ -124,7 +124,7 @@ public class JobComponent { } catch (Exception e) { // 回滚事务 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); - logger.error("创建工作时发生错误:{}", convertJsonString(e)); + logger.error("创建工作时发生错误:{}", convertJsonString(e.getMessage())); } } } @@ -150,7 +150,7 @@ public class JobComponent { } catch (Exception e) { // 回滚事务 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); - logger.error("执行工作时发生错误:{}", convertJsonString(e)); + logger.error("执行工作时发生错误:{}", convertJsonString(e.getMessage())); } } } diff --git a/src/main/java/com/wms/controller/TaskController.java b/src/main/java/com/wms/controller/TaskController.java index 5efffbd..f38eef6 100644 --- a/src/main/java/com/wms/controller/TaskController.java +++ b/src/main/java/com/wms/controller/TaskController.java @@ -723,7 +723,7 @@ public class TaskController { } /** - * 查找所有物料 + * 查找所有任务 */ @PostMapping("/getTasksByPage") @ResponseBody @@ -1072,9 +1072,7 @@ public class TaskController { @PostMapping("/queryFinishByStandAndGoods") @ResponseBody @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) - @MyLog(logTitle = "查询当前站台的正在拣选的物料是否完成", logMethod = "queryFinishByStandAndGoods") public String queryFinishByStandAndGoods(@RequestBody WorkQuery workQuery) { - logger.info("查询当前站台的正在拣选的物料是否完成:{},ip地址:{}", convertJsonString(workQuery), HttpUtils.getIpAddr(servletRequest)); ResponseEntity response = new ResponseEntity(); try { String validateInfo = validateService.validateGetWorkVoRequest(workQuery); @@ -1206,6 +1204,7 @@ public class TaskController { workFlow.setWorkStatus(2);// 已完成 } // 更新workFlow + workFlow.setFinishTime(LocalDateTime.now()); workFlowService.updateById(workFlow); // 更新库存数量 Stock existStock = stockService.getOne(new LambdaQueryWrapper() @@ -1919,7 +1918,6 @@ public class TaskController { boolean hasInTask = taskService.exists(new LambdaQueryWrapper() .eq(Task::getVehicleId, requestBackQuery.getVehicleId()) .eq(Task::getTaskType, TaskType.IN.getCode()) - .eq(Task::getTaskStatus, WmsTaskStatus.TEMP.getCode()) .likeRight(Task::getTaskId, "RK_")); if (hasInTask) { taskService.update(new LambdaUpdateWrapper() diff --git a/src/main/java/com/wms/controller/TaskMonitorController.java b/src/main/java/com/wms/controller/TaskMonitorController.java new file mode 100644 index 0000000..172e914 --- /dev/null +++ b/src/main/java/com/wms/controller/TaskMonitorController.java @@ -0,0 +1,88 @@ +package com.wms.controller; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.wms.annotation.MyLog; +import com.wms.constants.enums.ResponseCode; +import com.wms.entity.app.ResponseEntity; +import com.wms.entity.app.dto.PageDto; +import com.wms.entity.app.request.PickTaskQuery; +import com.wms.entity.app.request.TaskQuery; +import com.wms.entity.app.vo.PickTaskVo; +import com.wms.entity.app.vo.TaskVO; +import com.wms.entity.table.PickTask; +import com.wms.entity.table.Task; +import com.wms.service.PickTaskService; +import com.wms.utils.HttpUtils; +import com.wms.utils.StringUtils; +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; +import org.springframework.web.bind.annotation.*; + +import static com.wms.utils.StringUtils.convertJsonString; + +/** + * 任务监控控制类 + */ +@Controller +@CrossOrigin +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +@RequestMapping(value = "/wms/taskMonitor") +public class TaskMonitorController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + /** + * 请求头部信息 + */ + private final HttpServletRequest servletRequest; + /** + * 拣选任务服务 + */ + private final PickTaskService pickTaskService; + + /** + * 查询拣选任务---分页 + * + * @param pickTaskQuery 查询参数 + * @return 查询结果 + */ + @PostMapping("/getPickTasksByPage") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + @MyLog(logTitle = "查询拣选任务", logMethod = "getPickTasksByPage") + public String getTasksByPage(@RequestBody PickTaskQuery pickTaskQuery) { + logger.info("接收到查询拣选任务请求:{},ip地址:{}", convertJsonString(pickTaskQuery), HttpUtils.getIpAddr(servletRequest)); + ResponseEntity response = new ResponseEntity(); + try { + Page page = pickTaskQuery.toMpPage(); + //更新条件 + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper() + .eq(pickTaskQuery.getPickStatus() != null, PickTask::getPickStatus, pickTaskQuery.getPickStatus()) + .like(StringUtils.isNotEmpty(pickTaskQuery.getPickTaskId()), PickTask::getPickTaskId, pickTaskQuery.getPickTaskId()) + .like(StringUtils.isNotEmpty(pickTaskQuery.getVehicleId()), PickTask::getVehicleId, pickTaskQuery.getVehicleId()) + .like(StringUtils.isNotEmpty(pickTaskQuery.getStandId()), PickTask::getStandId, pickTaskQuery.getStandId()); + Page pickTasksPage = pickTaskService.page(page, lambdaQueryWrapper); + // 生成数据 + PageDto pageDto = PageDto.of(pickTasksPage, pickTasks -> BeanUtil.copyProperties(pickTasks, PickTaskVo.class)); + response.setCode(ResponseCode.OK.getCode()); + response.setMessage("查询拣选任务成功"); + response.setReturnData(pageDto); + return convertJsonString(response); + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.error("查询拣选任务发生异常"); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("查询拣选任务发生异常"); + return convertJsonString(response); + } + } +} diff --git a/src/main/java/com/wms/entity/app/request/PickTaskQuery.java b/src/main/java/com/wms/entity/app/request/PickTaskQuery.java new file mode 100644 index 0000000..16f097f --- /dev/null +++ b/src/main/java/com/wms/entity/app/request/PickTaskQuery.java @@ -0,0 +1,44 @@ +package com.wms.entity.app.request; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +/** + * 拣选任务查询类 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class PickTaskQuery extends PageQuery { + /** + * 拣选任务号 + */ + @JsonProperty("pickTaskId") + private String pickTaskId; + /** + * 载具号 + */ + @JsonProperty("vehicleId") + private String vehicleId; + /** + * 站台号 + */ + @JsonProperty("standId") + private String standId; + /** + * 拣选任务状态 + * -1:暂时不可发送 + * 0:初始化 + * 1:已发送 + * 2:已完成 + */ + @JsonProperty("pickStatus") + private Integer pickStatus; + /** + * 最近更新时间 + */ + @JsonProperty("lastUpdateTime") + private LocalDateTime lastUpdateTime; +} diff --git a/src/main/java/com/wms/entity/app/vo/PickTaskVo.java b/src/main/java/com/wms/entity/app/vo/PickTaskVo.java new file mode 100644 index 0000000..bb8cdcd --- /dev/null +++ b/src/main/java/com/wms/entity/app/vo/PickTaskVo.java @@ -0,0 +1,39 @@ +package com.wms.entity.app.vo; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class PickTaskVo { + /** + * 拣选任务号 + */ + @JsonProperty("pickTaskId") + private String pickTaskId; + /** + * 载具号 + */ + @JsonProperty("vehicleId") + private String vehicleId; + /** + * 站台号 + */ + @JsonProperty("standId") + private String standId; + /** + * 拣选任务状态 + * -1:暂时不可发送 + * 0:初始化 + * 1:已发送 + * 2:已完成 + */ + @JsonProperty("pickStatus") + private Integer pickStatus; + /** + * 最近更新时间 + */ + @JsonProperty("lastUpdateTime") + private LocalDateTime lastUpdateTime; +} diff --git a/src/main/java/com/wms/service/business/serviceImplements/ValidateServiceImplements.java b/src/main/java/com/wms/service/business/serviceImplements/ValidateServiceImplements.java index 54f1b3f..c29962c 100644 --- a/src/main/java/com/wms/service/business/serviceImplements/ValidateServiceImplements.java +++ b/src/main/java/com/wms/service/business/serviceImplements/ValidateServiceImplements.java @@ -232,7 +232,7 @@ public class ValidateServiceImplements implements IValidateService { .eq(Task::getTaskType, TaskType.IN.getCode()) .eq(Task::getTaskStatus, WmsTaskStatus.TEMP.getCode()); if (!taskService.exists(queryWrapper)) { - return "当前载具没有入库或回库任务"; + return "当前载具没有待下发的入库或回库任务"; } return ""; 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 b8c146f..9477362 100644 --- a/src/main/java/com/wms/service/business/serviceImplements/WmsJobServiceImplements.java +++ b/src/main/java/com/wms/service/business/serviceImplements/WmsJobServiceImplements.java @@ -443,7 +443,7 @@ public class WmsJobServiceImplements implements IWmsJobService { } catch (Exception e) { logger.error("获取重要记录清理天数错误,使用默认值365天"); } - + // 普通记录---入出库记录、拣选任务记录 // 重要记录---盘点记录、工作总结、库存更新记录、非计划领料记录、上传文件记录 } catch (Exception exception) { // 回滚事务 diff --git a/src/main/java/com/wms/service/business/serviceImplements/WmsTaskServiceImplements.java b/src/main/java/com/wms/service/business/serviceImplements/WmsTaskServiceImplements.java index 671fcbd..6bca926 100644 --- a/src/main/java/com/wms/service/business/serviceImplements/WmsTaskServiceImplements.java +++ b/src/main/java/com/wms/service/business/serviceImplements/WmsTaskServiceImplements.java @@ -66,11 +66,11 @@ public class WmsTaskServiceImplements implements IWmsTaskService { tempInTask.setUserName(taskInRequest.getUserName()); try { if (!taskService.save(tempInTask)) { - return "添加空入库任务失败"; + result = "添加空入库任务失败"; } } catch (Exception e) { logger.error("添加空入库任务异常:{}", convertJsonString(e)); - return "添加空入库任务失败"; + result = "添加空入库任务失败"; } return result; } diff --git a/src/main/java/com/wms/service/business/serviceImplements/WorkServiceImplements.java b/src/main/java/com/wms/service/business/serviceImplements/WorkServiceImplements.java index a3da185..ab38714 100644 --- a/src/main/java/com/wms/service/business/serviceImplements/WorkServiceImplements.java +++ b/src/main/java/com/wms/service/business/serviceImplements/WorkServiceImplements.java @@ -370,18 +370,19 @@ public class WorkServiceImplements implements IWorkService { */ private void findWorks(String workStation, List workFlows, String model) { // 查到当前站台所有的小工位 - List currentStationConfigsOfNwl = workStationConfigService.list(new LambdaQueryWrapper() - .eq(WorkStationConfig::getWorkStation, workStation) - .eq(Objects.equals(model, "MWL"), WorkStationConfig::getModel, model) - .ne(!Objects.equals(model, "MWL"), WorkStationConfig::getModel, "MWL")); + LambdaQueryWrapper stationConfigQueryWrapper = new LambdaQueryWrapper().eq(WorkStationConfig::getWorkStation, workStation); + if (Objects.equals(model, "MWL")) { + stationConfigQueryWrapper.eq(WorkStationConfig::getModel, "MWL"); + } else { + stationConfigQueryWrapper.ne(WorkStationConfig::getModel, "MWL"); + } + List currentStationConfigsOfNwl = workStationConfigService.list(stationConfigQueryWrapper); // 当前站台未分配库位 if (currentStationConfigsOfNwl == null || currentStationConfigsOfNwl.isEmpty()) { return; } // 今日开工的工单和小工位 - Map tasksOfTodayMap = new HashMap<>(); - // 防止重复查询 - Map ordersAndDBSMap = new HashMap<>(); + Map> tasksOfTodayMap = new HashMap<>(); // 根据所有小工位,查到对应的任务 for (WorkStationConfig workConfig : currentStationConfigsOfNwl) { // 查询当前小工位是否已经判断过开工日期 @@ -397,59 +398,62 @@ public class WorkServiceImplements implements IWorkService { if (kateWorkOrders == null || kateWorkOrders.isEmpty()) { continue; } + List toDaysOrders = new ArrayList<>(); + // 防止重复查询 + Map ordersAndDBSMap = new HashMap<>(); for (KateOrders kateWorkOrder : kateWorkOrders) { - KateDBS kateDBS; - if (ordersAndDBSMap.containsKey(kateWorkOrder.getWorkOrder())) { - kateDBS = ordersAndDBSMap.get(kateWorkOrder.getWorkOrder()); - } else { + if (!ordersAndDBSMap.containsKey(kateWorkOrder.getWorkOrder())) { // 从DBS表查询对应的工单以及开工时间 - kateDBS = kateDBSService.getOne(new LambdaQueryWrapper() + KateDBS kateDBS = kateDBSService.getOne(new LambdaQueryWrapper() .eq(KateDBS::getWorkOrder, kateWorkOrder.getWorkOrder()) .ne(KateDBS::getDbsStatus, 2) - .orderByAsc(KateDBS::getWorkSequence)); - } - if (kateDBS == null || StringUtils.isEmpty(kateDBS.getWorkOrder())) {// 不存在对应的工单计划 - continue; - } - // 判断是否是当天开工 - if (kateDBS.getPlanStartDate().plusDays(workConfig.getStartDateAdjust()).toLocalDate().isEqual(LocalDateTime.now().toLocalDate())) { - // 已经查询过的为了不重复查询,添加map - ordersAndDBSMap.put(kateWorkOrder.getWorkOrder(), kateDBS); - // 添加工作计划 - WorkCenterAndOrderDto wcoDto = new WorkCenterAndOrderDto(); - wcoDto.setWorkCenter(workConfig.getSmallBox()); - wcoDto.setWorkOrder(kateWorkOrder.getWorkOrder()); - wcoDto.setStartDate(LocalDateTime.now().toLocalDate().atStartOfDay()); - // 减少后续重复查询数据库 - tasksOfTodayMap.put(workConfig.getSmallBox(), wcoDto); + .orderByAsc(KateDBS::getWorkSequence) + .last("limit 1")); + if (kateDBS == null || StringUtils.isEmpty(kateDBS.getWorkOrder())) {// 不存在对应的工单计划 + continue; + } + // 判断是否是当天开工 + if (kateDBS.getPlanStartDate().plusDays(workConfig.getStartDateAdjust()).toLocalDate().isEqual(LocalDateTime.now().toLocalDate())) { + // 已经查询过的为了不重复查询,添加map + ordersAndDBSMap.put(kateWorkOrder.getWorkOrder(), kateDBS); + // 添加工作计划 + WorkCenterAndOrderDto wcoDto = new WorkCenterAndOrderDto(); + wcoDto.setWorkCenter(workConfig.getSmallBox()); + wcoDto.setWorkOrder(kateWorkOrder.getWorkOrder()); + wcoDto.setStartDate(LocalDateTime.now().toLocalDate().atStartOfDay()); + toDaysOrders.add(wcoDto); + } } } + tasksOfTodayMap.put(workConfig.getSmallBox(), toDaysOrders); } // 判断是否有今天开工的工单和小工位 if (!tasksOfTodayMap.isEmpty()) { for (String smallBoxKey : tasksOfTodayMap.keySet()) { - WorkCenterAndOrderDto currentWorkCenterAndOrderDto = tasksOfTodayMap.get(smallBoxKey); - // 通过工单表查询到对应的工单 - List kateWorkOrderList = kateOrdersService.list(new LambdaQueryWrapper() - .eq(KateOrders::getWorkOrder, currentWorkCenterAndOrderDto.getWorkOrder()) - .eq(KateOrders::getSupplyArea, currentWorkCenterAndOrderDto.getWorkCenter()) - .eq(KateOrders::getOrderStatus, 0) - .eq(KateOrders::getSortString, configMap.get(ConfigMapKeyEnum.SLOC_FILTER_STRING.getConfigKey()))); - for (KateOrders tempOrder : kateWorkOrderList) { - // 生成workFlow - WorkFlow tempWorkFlow = new WorkFlow(); - tempWorkFlow.setWorkFlowId(WmsUtils.generateId("WORKFLOW_")); - tempWorkFlow.setOrderId(tempOrder.getOrderId()); - tempWorkFlow.setWorkStation(workStation); - tempWorkFlow.setWorkOrder(tempOrder.getWorkOrder()); - tempWorkFlow.setWorkCenter(tempOrder.getSupplyArea()); - tempWorkFlow.setGoodsId(tempOrder.getGoodsId()); - tempWorkFlow.setNeedNum(tempOrder.getRequirementQuantity()); - tempWorkFlow.setCreateTime(LocalDateTime.now()); - tempWorkFlow.setWorkStatus(0); - tempWorkFlow.setLightStatus(0); - tempWorkFlow.setPickedNum(BigDecimal.ZERO); - workFlows.add(tempWorkFlow); + List currentWorkCenterAndOrderDtoList = tasksOfTodayMap.get(smallBoxKey); + for (WorkCenterAndOrderDto currentWorkCenterAndOrderDto : currentWorkCenterAndOrderDtoList) { + // 通过工单表查询到对应的工单 + List kateWorkOrderList = kateOrdersService.list(new LambdaQueryWrapper() + .eq(KateOrders::getWorkOrder, currentWorkCenterAndOrderDto.getWorkOrder()) + .eq(KateOrders::getSupplyArea, currentWorkCenterAndOrderDto.getWorkCenter()) + .eq(KateOrders::getOrderStatus, 0) + .eq(KateOrders::getSortString, configMap.get(ConfigMapKeyEnum.SLOC_FILTER_STRING.getConfigKey()))); + for (KateOrders tempOrder : kateWorkOrderList) { + // 生成workFlow + WorkFlow tempWorkFlow = new WorkFlow(); + tempWorkFlow.setWorkFlowId(WmsUtils.generateId("WORKFLOW_")); + tempWorkFlow.setOrderId(tempOrder.getOrderId()); + tempWorkFlow.setWorkStation(workStation); + tempWorkFlow.setWorkOrder(tempOrder.getWorkOrder()); + tempWorkFlow.setWorkCenter(tempOrder.getSupplyArea()); + tempWorkFlow.setGoodsId(tempOrder.getGoodsId()); + tempWorkFlow.setNeedNum(tempOrder.getRequirementQuantity()); + tempWorkFlow.setCreateTime(LocalDateTime.now()); + tempWorkFlow.setWorkStatus(0); + tempWorkFlow.setLightStatus(0); + tempWorkFlow.setPickedNum(BigDecimal.ZERO); + workFlows.add(tempWorkFlow); + } } } }