From 5175a8841f3d60e37cca901878ddd82729ad9f73 Mon Sep 17 00:00:00 2001 From: liangzhou <594755172@qq.com> Date: Tue, 19 Nov 2024 16:50:07 +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=E6=97=A5=E6=9C=9F=E7=AD=9B=E9=80=89?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=202.=20=E5=A2=9E=E5=8A=A0=E7=AB=99=E5=8F=B0?= =?UTF-8?q?=E6=8B=A3=E9=80=89=E4=BB=BB=E5=8A=A1=E9=85=8D=E7=BD=AE=EF=BC=9A?= =?UTF-8?q?=E6=AF=8F=E4=B8=AA=E7=AB=99=E5=8F=B0=E6=9C=80=E5=A4=A7=E7=AE=B1?= =?UTF-8?q?=E5=AD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wms/constants/enums/ConfigMapKeyEnum.java | 3 ++- .../com/wms/controller/ExcelController.java | 8 ++++++-- .../com/wms/controller/RecordController.java | 6 ++++++ .../com/wms/controller/StockController.java | 16 ++++++++++++---- .../app/request/StockUpdateRecordQuery.java | 4 ++++ .../entity/app/request/TaskRecordQuery.java | 18 ++++++++++++++++++ .../wms/entity/app/vo/StockUpdateRecordVo.java | 4 ++++ .../com/wms/entity/app/vo/TaskRecordVO.java | 6 ++++++ .../WmsJobServiceImplements.java | 17 +++++++++++++++-- .../TaskRecordServiceImplements.java | 7 +++++++ 10 files changed, 80 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/wms/constants/enums/ConfigMapKeyEnum.java b/src/main/java/com/wms/constants/enums/ConfigMapKeyEnum.java index 0fc5d94..7c3b852 100644 --- a/src/main/java/com/wms/constants/enums/ConfigMapKeyEnum.java +++ b/src/main/java/com/wms/constants/enums/ConfigMapKeyEnum.java @@ -13,7 +13,8 @@ public enum ConfigMapKeyEnum { SEND_TASK("SEND_TASK"), ALLOW_EMPTY_BACK("ALLOW_EMPTY_BACK"), SEND_PICK_OUT_TASK("SEND_PICK_OUT_TASK"), - MAX_VEHICLE_NUMS("MAX_VEHICLE_NUMS"), + MAX_VEHICLE_NUMS("MAX_VEHICLE_NUMS"),// 线体上最大箱子数 + MAX_STAND_VEHICLE_NUMS("MAX_STAND_VEHICLE_NUMS"),// 每个站台最大箱子数 MAX_WCS_ACCEPT_NUMS("MAX_WCS_ACCEPT_NUMS"), SLOC_FILTER_STRING("SLOC_FILTER_STRING"), URL_WCS_CHANGE_TASK("URL_WCS_CHANGE_TASK"), diff --git a/src/main/java/com/wms/controller/ExcelController.java b/src/main/java/com/wms/controller/ExcelController.java index 1e2d1d5..81f4a42 100644 --- a/src/main/java/com/wms/controller/ExcelController.java +++ b/src/main/java/com/wms/controller/ExcelController.java @@ -507,12 +507,16 @@ public class ExcelController { // 内容样式 HorizontalCellStyleStrategy horizontalCellStyleStrategy = ExcelContentStyle.getContentStyle(); // 查询参数 - List stockPoList = stockService.list(new LambdaQueryWrapper() + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() .like(StringUtils.isNotEmpty(stockQuery.getVehicleId()), Stock::getVehicleId, stockQuery.getVehicleId()) .like(StringUtils.isNotEmpty(stockQuery.getLocationId()), Stock::getLocationId, stockQuery.getLocationId()) .eq(stockQuery.getStockStatus() != null, Stock::getStockStatus, stockQuery.getStockStatus()) .apply(StringUtils.isNotEmpty(stockQuery.getGoodsId()), "goods_related ->> '$.goodsId' like concat('%', {0}, '%')" + MYSQL_JSON_CI, stockQuery.getGoodsId()) - .apply(StringUtils.isNotEmpty(stockQuery.getGoodsName()), "goods_related ->> '$.goodsName' like concat('%', {0}, '%')" + MYSQL_JSON_CI, stockQuery.getGoodsName())); + .apply(StringUtils.isNotEmpty(stockQuery.getGoodsName()), "goods_related ->> '$.goodsName' like concat('%', {0}, '%')" + MYSQL_JSON_CI, stockQuery.getGoodsName()); + if (stockQuery.getCreateTime() != null) { + queryWrapper.between(Stock::getCreateTime, stockQuery.getCreateTime().toLocalDate().atStartOfDay(), stockQuery.getCreateTime().toLocalDate().plusDays(1).atStartOfDay().minusSeconds(1)); + } + List stockPoList = stockService.list(queryWrapper); EasyExcel.write(response.getOutputStream(), StockExcelVo.class) .excelType(ExcelTypeEnum.XLSX) .registerWriteHandler(horizontalCellStyleStrategy) diff --git a/src/main/java/com/wms/controller/RecordController.java b/src/main/java/com/wms/controller/RecordController.java index 5b0b6c4..ec3127e 100644 --- a/src/main/java/com/wms/controller/RecordController.java +++ b/src/main/java/com/wms/controller/RecordController.java @@ -64,6 +64,12 @@ public class RecordController { .like(StringUtils.isNotEmpty(taskRecordQuery.getVehicleId()), TaskRecord::getVehicleId, taskRecordQuery.getVehicleId()) .apply(StringUtils.isNotEmpty(taskRecordQuery.getGoodsId()), "goods_related ->> '$.goodsId' like concat('%', {0}, '%')" + MYSQL_JSON_CI, taskRecordQuery.getGoodsId()) .apply(StringUtils.isNotEmpty(taskRecordQuery.getGoodsName()), "goods_related ->> '$.goodsName' like concat('%', {0}, '%')" + MYSQL_JSON_CI, taskRecordQuery.getGoodsName()); + if (taskRecordQuery.getCreateTime() != null) { + lambdaQueryWrapper.between(TaskRecord::getCreateTime, taskRecordQuery.getCreateTime().toLocalDate().atStartOfDay(), taskRecordQuery.getCreateTime().toLocalDate().plusDays(1).atStartOfDay().minusSeconds(1)); + } + if (taskRecordQuery.getFinishTime() != null) { + lambdaQueryWrapper.between(TaskRecord::getFinishTime, taskRecordQuery.getFinishTime().toLocalDate().atStartOfDay(), taskRecordQuery.getFinishTime().toLocalDate().plusDays(1).atStartOfDay().minusSeconds(1)); + } Page taskRecordPage = taskRecordService.page(page, lambdaQueryWrapper); // 生成数据 PageDto pageDto = PageDto.of(taskRecordPage, records -> BeanUtil.copyProperties(records, TaskRecordVO.class)); diff --git a/src/main/java/com/wms/controller/StockController.java b/src/main/java/com/wms/controller/StockController.java index c6fc9f5..8e032b1 100644 --- a/src/main/java/com/wms/controller/StockController.java +++ b/src/main/java/com/wms/controller/StockController.java @@ -107,13 +107,17 @@ public class StockController { ResponseEntity response = new ResponseEntity(); try { Page page = stockQuery.toMpPage(); - Page stockPage = stockService.page(page, new LambdaQueryWrapper() + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper() .like(StringUtils.isNotEmpty(stockQuery.getVehicleId()), Stock::getVehicleId, stockQuery.getVehicleId()) .like(StringUtils.isNotEmpty(stockQuery.getLocationId()), Stock::getLocationId, stockQuery.getLocationId()) .eq(stockQuery.getStockStatus() != null, Stock::getStockStatus, stockQuery.getStockStatus()) .apply(StringUtils.isNotEmpty(stockQuery.getGoodsId()), "goods_related ->> '$.goodsId' like concat('%', {0}, '%')" + MYSQL_JSON_CI, stockQuery.getGoodsId()) .apply(StringUtils.isNotEmpty(stockQuery.getGoodsName()), "goods_related ->> '$.goodsName' like concat('%', {0}, '%')" + MYSQL_JSON_CI, stockQuery.getGoodsName()) - .orderByDesc(Stock::getLastUpdateTime)); + .orderByDesc(Stock::getLastUpdateTime); + if (stockQuery.getCreateTime() != null) { + lambdaQueryWrapper.between(Stock::getCreateTime, stockQuery.getCreateTime().toLocalDate().atStartOfDay(), stockQuery.getCreateTime().toLocalDate().plusDays(1).atStartOfDay().minusSeconds(1)); + } + Page stockPage = stockService.page(page, lambdaQueryWrapper); PageDto pageDto = PageDto.of(stockPage, StockVo::of); response.setCode(ResponseCode.OK.getCode()); @@ -334,11 +338,15 @@ public class StockController { ResponseEntity response = new ResponseEntity(); try { Page page = stockUpdateRecordQuery.toMpPage(); - Page recordsPage = stockUpdateRecordService.page(page, new LambdaQueryWrapper() + LambdaQueryWrapper stockLambdaQueryWrapper = new LambdaQueryWrapper() .like(StringUtils.isNotEmpty(stockUpdateRecordQuery.getReason()), StockUpdateRecord::getReason, stockUpdateRecordQuery.getReason()) .like(StringUtils.isNotEmpty(stockUpdateRecordQuery.getVehicleId()), StockUpdateRecord::getVehicleId, stockUpdateRecordQuery.getVehicleId()) .like(StringUtils.isNotEmpty(stockUpdateRecordQuery.getGoodsId()), StockUpdateRecord::getGoodsId, stockUpdateRecordQuery.getGoodsId()) - .orderByDesc(StockUpdateRecord::getUpdateTime)); + .orderByDesc(StockUpdateRecord::getUpdateTime); + if (stockUpdateRecordQuery.getUpdateTime() != null) { + stockLambdaQueryWrapper.between(StockUpdateRecord::getUpdateTime, stockUpdateRecordQuery.getUpdateTime().toLocalDate().atStartOfDay(), stockUpdateRecordQuery.getUpdateTime().toLocalDate().plusDays(1).atStartOfDay().minusSeconds(1)); + } + Page recordsPage = stockUpdateRecordService.page(page, stockLambdaQueryWrapper); PageDto pageDto = PageDto.of(recordsPage, updateRecord -> BeanUtil.copyProperties(updateRecord, StockUpdateRecordVo.class)); logger.info("查询库存更新记录成功。"); response.setCode(ResponseCode.OK.getCode()); diff --git a/src/main/java/com/wms/entity/app/request/StockUpdateRecordQuery.java b/src/main/java/com/wms/entity/app/request/StockUpdateRecordQuery.java index 86b5aa1..b4c7b1f 100644 --- a/src/main/java/com/wms/entity/app/request/StockUpdateRecordQuery.java +++ b/src/main/java/com/wms/entity/app/request/StockUpdateRecordQuery.java @@ -1,8 +1,10 @@ package com.wms.entity.app.request; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; import java.time.LocalDateTime; @@ -64,6 +66,8 @@ public class StockUpdateRecordQuery extends PageQuery { * 更新时间 */ @JsonProperty("updateTime") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime; /** * 更新用户 diff --git a/src/main/java/com/wms/entity/app/request/TaskRecordQuery.java b/src/main/java/com/wms/entity/app/request/TaskRecordQuery.java index b78da76..c8a1311 100644 --- a/src/main/java/com/wms/entity/app/request/TaskRecordQuery.java +++ b/src/main/java/com/wms/entity/app/request/TaskRecordQuery.java @@ -1,11 +1,15 @@ package com.wms.entity.app.request; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; import com.wms.entity.app.dto.extend.TaskDetailInfo; import com.wms.entity.table.TaskRecord; import com.wms.utils.StringUtils; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; /** * 任务记录查询 @@ -33,6 +37,18 @@ public class TaskRecordQuery extends PageQuery { */ @JsonProperty("goodsName") private String goodsName; + /** + * 创建时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + /** + * 完成时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime finishTime; /** * 根据客户端查询生成数据库查询条件 @@ -42,6 +58,8 @@ public class TaskRecordQuery extends PageQuery { TaskRecord recordPO = new TaskRecord(); recordPO.setTaskType(taskType);// 任务类型 recordPO.setVehicleId(vehicleId);// 载具号 + recordPO.setCreateTime(createTime); + recordPO.setFinishTime(finishTime); if (StringUtils.isNotEmpty(goodsId) || StringUtils.isNotEmpty(goodsName)) {// 包含物料详细信息 TaskDetailInfo goodsRelatedPO = new TaskDetailInfo(); goodsRelatedPO.setGoodsId(goodsId); diff --git a/src/main/java/com/wms/entity/app/vo/StockUpdateRecordVo.java b/src/main/java/com/wms/entity/app/vo/StockUpdateRecordVo.java index 6287e07..e28a5e8 100644 --- a/src/main/java/com/wms/entity/app/vo/StockUpdateRecordVo.java +++ b/src/main/java/com/wms/entity/app/vo/StockUpdateRecordVo.java @@ -1,7 +1,9 @@ package com.wms.entity.app.vo; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; import java.time.LocalDateTime; @@ -65,6 +67,8 @@ public class StockUpdateRecordVo { * 更新时间 */ @JsonProperty("updateTime") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime; /** * 更新用户 diff --git a/src/main/java/com/wms/entity/app/vo/TaskRecordVO.java b/src/main/java/com/wms/entity/app/vo/TaskRecordVO.java index a7834fa..f518e5f 100644 --- a/src/main/java/com/wms/entity/app/vo/TaskRecordVO.java +++ b/src/main/java/com/wms/entity/app/vo/TaskRecordVO.java @@ -1,7 +1,9 @@ package com.wms.entity.app.vo; +import com.fasterxml.jackson.annotation.JsonFormat; import com.wms.entity.app.dto.extend.TaskDetailInfo; import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; import java.time.LocalDateTime; @@ -54,10 +56,14 @@ public class TaskRecordVO { /** * 创建时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; /** * 完成时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime finishTime; /** * 用户名 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 a29cb5f..f3ff0a4 100644 --- a/src/main/java/com/wms/service/business/serviceImplements/WmsJobServiceImplements.java +++ b/src/main/java/com/wms/service/business/serviceImplements/WmsJobServiceImplements.java @@ -169,12 +169,14 @@ public class WmsJobServiceImplements implements IWmsJobService { 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)) { + String max_stand_vehicle_nums = configMap.get(ConfigMapKeyEnum.MAX_STAND_VEHICLE_NUMS.getConfigKey()); + if (StringUtils.isEmpty(max_vehicle_nums) || StringUtils.isEmpty(max_wcs_accept_nums) || StringUtils.isEmpty(max_stand_vehicle_nums)) { logger.error("配置未生成"); return; } - int maxVehicleNums = Integer.parseInt(max_vehicle_nums); + int maxVehicleNums = Integer.parseInt(max_vehicle_nums);// 线体最大箱子数量 int maxWcsAcceptNums = Integer.parseInt(max_wcs_accept_nums);// wcs最大一次性可接受任务数量 + int maxStandVehicleNums = Integer.parseInt(max_stand_vehicle_nums);// 每个站台最大箱子数量 List outsideVehicles = outsideVehiclesService.selectDistinctVehicles(); if (outsideVehicles == null || outsideVehicles.isEmpty()) { outsideVehicles = Collections.emptyList(); @@ -245,6 +247,10 @@ public class WmsJobServiceImplements implements IWmsJobService { // 超过wcs一次可接受数量 break; } + if (outPickTaskMap.isEmpty()) { + // 没有站台可以使用 + break; + } // 先找出目前数量最少的站台 String standId = outPickTaskMap.entrySet().stream() .min(Comparator.comparingInt(Map.Entry::getValue)) @@ -252,6 +258,11 @@ public class WmsJobServiceImplements implements IWmsJobService { .orElse(""); List vehicleIds; if (StringUtils.isNotEmpty(standId)) { + // 如果这个站台箱子数量超过最大每个站台的箱子数量,则跳过 + if (outPickTaskMap.get(standId) >= maxStandVehicleNums) { + outPickTaskMap.remove(standId); + continue; + } // 查找这个站台未下发的料箱 vehicleIds = standPickTasks.stream() .filter(pickTask -> pickTask.getStandId().equals(standId) && pickTask.getPickStatus().equals(PickTaskStatusEnum.TEMP.getCode()) @@ -340,6 +351,7 @@ public class WmsJobServiceImplements implements IWmsJobService { runningTaskNumToEquipmentMap.replace(equipmentId, runningTaskNumToEquipmentMap.get(equipmentId) + 1); // 已经发送过的vehicleId pickVehicleIds.add(maxVehicleId); + vehicleStandsMap.remove(maxVehicleId); // 剩余线体可继续出库料箱数量 remainVehicleNums--; } @@ -410,6 +422,7 @@ public class WmsJobServiceImplements implements IWmsJobService { runningTaskNumToEquipmentMap.replace(equipmentId, runningTaskNumToEquipmentMap.get(equipmentId) + 1); // 已经发送过的vehicleId pickVehicleIds.add(minVehicleId); + vehicleStandsMap.remove(minVehicleId); // 剩余线体可继续出库料箱数量 remainVehicleNums--; } diff --git a/src/main/java/com/wms/service/serviceImplements/TaskRecordServiceImplements.java b/src/main/java/com/wms/service/serviceImplements/TaskRecordServiceImplements.java index abc288e..268e284 100644 --- a/src/main/java/com/wms/service/serviceImplements/TaskRecordServiceImplements.java +++ b/src/main/java/com/wms/service/serviceImplements/TaskRecordServiceImplements.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.wms.constants.enums.TaskType; import com.wms.entity.app.dto.TaskRecordDto; +import com.wms.entity.table.Stock; import com.wms.entity.table.TaskRecord; import com.wms.mapper.TaskRecordMapper; import com.wms.service.TaskRecordService; @@ -53,6 +54,12 @@ public class TaskRecordServiceImplements extends ServiceImpl> '$.goodsName' like concat('%', {0}, '%')" + MYSQL_JSON_CI, query.getGoodsRelated().getGoodsName()); } + if (query.getCreateTime() != null) { + queryWrapper.between(TaskRecord::getCreateTime, query.getCreateTime().toLocalDate().atStartOfDay(), query.getCreateTime().toLocalDate().plusDays(1).atStartOfDay().minusSeconds(1)); + } + if (query.getFinishTime() != null) { + queryWrapper.between(TaskRecord::getFinishTime, query.getFinishTime().toLocalDate().atStartOfDay(), query.getFinishTime().toLocalDate().plusDays(1).atStartOfDay().minusSeconds(1)); + } return super.list(queryWrapper); } }