From 048654698b7ab1283b61685c7f2647973caf3c80 Mon Sep 17 00:00:00 2001 From: liangzhou <594755172@qq.com> Date: Fri, 16 Jan 2026 15:07:32 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E5=A2=9E=E5=8A=A0=E5=8F=AF=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E5=B7=A5=E7=AB=99=E9=85=8D=E7=BD=AE=E4=B8=AD=E5=BC=80?= =?UTF-8?q?=E5=B7=A5=E6=97=A5=E6=9C=9F=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/wms/config/InitLocalConfig.java | 11 ++ .../wms/constants/enums/ConfigMapKeyEnum.java | 1 + .../WorkServiceImplements.java | 135 +++++++++++++++++- .../listener/UploadStationConfigListener.java | 5 + 4 files changed, 148 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/wms/config/InitLocalConfig.java b/src/main/java/com/wms/config/InitLocalConfig.java index 249e786..1e404e6 100644 --- a/src/main/java/com/wms/config/InitLocalConfig.java +++ b/src/main/java/com/wms/config/InitLocalConfig.java @@ -5,9 +5,11 @@ import com.wms.constants.enums.ConfigMapKeyEnum; import com.wms.entity.table.Config; import com.wms.entity.table.Location; import com.wms.entity.table.WorkDate; +import com.wms.entity.table.WorkStationConfig; import com.wms.service.ConfigService; import com.wms.service.LocationService; import com.wms.service.WorkDateService; +import com.wms.service.WorkStationConfigService; import lombok.RequiredArgsConstructor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -40,11 +42,17 @@ public class InitLocalConfig implements ApplicationRunner { * 工作日历服务 */ private final WorkDateService workDateService; + /** + * 工站配置服务 + */ + private final WorkStationConfigService workStationConfigService; protected final Logger logger = LoggerFactory.getLogger(this.getClass()); public static Map configMap = new HashMap<>(); public static Map instantLocationMap = new HashMap<>(); public static List localWorkDateList = new ArrayList<>(); + public static Map smallBoxDateAdjustMap = new HashMap<>();// 小盒子号对应开工日期调整map + @Override public void run(ApplicationArguments args) { List configs = configService.selectConfigs(""); @@ -74,5 +82,8 @@ public class InitLocalConfig implements ApplicationRunner { // 生成工作日历 localWorkDateList = workDateService.list(new LambdaQueryWrapper().orderByAsc(WorkDate::getWorkDate)).stream().map(WorkDate::getWorkDate).distinct().toList(); logger.info("生成工作日历Map成功。"); + // 生成小盒子号对应开工日期调整Map + smallBoxDateAdjustMap = workStationConfigService.list().stream().collect(Collectors.toMap(WorkStationConfig::getSmallBox, WorkStationConfig::getStartDateAdjust)); + logger.info("生成小盒子号对应开工日期调整Map成功。"); } } diff --git a/src/main/java/com/wms/constants/enums/ConfigMapKeyEnum.java b/src/main/java/com/wms/constants/enums/ConfigMapKeyEnum.java index fd143da..6c45532 100644 --- a/src/main/java/com/wms/constants/enums/ConfigMapKeyEnum.java +++ b/src/main/java/com/wms/constants/enums/ConfigMapKeyEnum.java @@ -38,6 +38,7 @@ public enum ConfigMapKeyEnum { SAME_AREA("SAME_AREA"), RATE_TYPE("RATE_TYPE"), USE_REQUIRE_DATE("USE_REQUIRE_DATE"),// 是否使用需求时间 + USE_DEFAULT_ADJUST("USE_DEFAULT_ADJUST"),// 使用默认调整天数 START_DATE_ADJUST("START_DATE_ADJUST");// 开工日期调整天数 private final String configKey; ConfigMapKeyEnum(String configKey) { 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 6cbf8b0..4dd9ad8 100644 --- a/src/main/java/com/wms/service/business/serviceImplements/WorkServiceImplements.java +++ b/src/main/java/com/wms/service/business/serviceImplements/WorkServiceImplements.java @@ -1025,7 +1025,7 @@ public class WorkServiceImplements implements IWorkService { } /** - * 获取当日工作流 + * 获取当日工作流---使用需求日期,使用默认开工日期调整 * @param workFlows 工作流 * @param currentWorkDate 日期 */ @@ -1083,13 +1083,12 @@ public class WorkServiceImplements implements IWorkService { // 获得所有的小盒子号 List smallBoxList = workFlows.stream().map(WorkFlow::getWorkCenter).distinct().toList(); // 查询工站配置 - // 查到当前站台所有的小工位 List currentStationConfigsOfNwl = workStationConfigService.list(new LambdaQueryWrapper() .in(WorkStationConfig::getSmallBox, smallBoxList) .orderByAsc(WorkStationConfig::getSmallBox)); // 没有工站配置 if (currentStationConfigsOfNwl == null || currentStationConfigsOfNwl.isEmpty()) { - logger.info("缺少工站配置,未生成工作流。"); + logger.error("缺少工站配置,未生成工作流。"); return; } // 生成小盒子对应大盒子map @@ -1120,6 +1119,128 @@ public class WorkServiceImplements implements IWorkService { logger.info("获取当日工作流耗时:{}ms", duration); } + /** + * 获取当日工作流---使用需求日期,使用工站配置日期调整 + * @param workFlows 工作流 + * @param currentWorkDate 日期 + */ + private void findCurrentDateWorksUseConfig(List workFlows, LocalDate currentWorkDate) { + //开始时间: + LocalDateTime startTime = LocalDateTime.now(); + System.out.println("分析当日工作流,开始时间:" + startTime); + // 获取开工日期调整配置 + int defaultDateAdjust = 0; + try { + String dateAdjustStr = configMap.get(ConfigMapKeyEnum.START_DATE_ADJUST.getConfigKey()); + if (StringUtils.isNotEmpty(dateAdjustStr)) { + defaultDateAdjust = Integer.parseInt(dateAdjustStr); + } + } catch (Exception e) { + logger.error("获取默认开工日期调整配置失败:{},使用默认值0。", e.getMessage()); + } + // 获取到需要查询的开工日期 + int currentDateIndex = localWorkDateList.indexOf(currentWorkDate); + if (currentDateIndex == -1) { + logger.error("当前开工日期不在配置的工作日历中。"); + return; + } + // 查询所有未开工的工单 + List allBeforeWorkingKateWorkOrders = kateOrdersService.list(new LambdaQueryWrapper() + .eq(KateOrders::getOrderStatus, 0) + .eq(KateOrders::getSortString, configMap.get(ConfigMapKeyEnum.SLOC_FILTER_STRING.getConfigKey()))); + if (allBeforeWorkingKateWorkOrders.isEmpty()) { + logger.info("没有未开工的工单。"); + return; + } + List currentDateKateWorkOrders = new ArrayList<>(); + for (KateOrders tempOrder : allBeforeWorkingKateWorkOrders) { + // 开工日期调整 + Integer dateAdjust = smallBoxDateAdjustMap.get(tempOrder.getSupplyArea()); + if (dateAdjust == null) { + dateAdjust = defaultDateAdjust; + } + // 获取到需求日期 + LocalDate requireDate = tempOrder.getPlanStartDate(); + if (requireDate == null) { +// logger.error("工单号:{},小盒子号:{},零件号:{},工单数据缺少需求日期。", tempOrder.getWorkOrder(), tempOrder.getSupplyArea(), tempOrder.getGoodsId()); + continue; + } + int requireDateIndex = localWorkDateList.indexOf(requireDate); + if (requireDateIndex == -1) { + logger.error("工单号:{},小盒子号:{},零件号:{},需求日期:{}不在配置的工作日历中。", tempOrder.getWorkOrder(), tempOrder.getSupplyArea(), tempOrder.getGoodsId(), requireDate); + continue; + } + // 获取到需要查询的工单 + int workDateIndex = requireDateIndex + dateAdjust; + if (workDateIndex < 0 || workDateIndex >= localWorkDateList.size()) { + logger.error("需求日期计算出的开工日期不在配置的工作日历中。"); + continue; + } + if (workDateIndex != currentDateIndex) { + // 开工日期不是当前日期 + continue; + } + currentDateKateWorkOrders.add(tempOrder); + } + if (currentDateKateWorkOrders.isEmpty()) { + logger.info("当前工作日没有待生成的工作流。"); + } + for (KateOrders tempOrder : currentDateKateWorkOrders) { + // 生成workFlow + WorkFlow tempWorkFlow = new WorkFlow(); + tempWorkFlow.setWorkFlowId(generateId("WORKFLOW_")); + tempWorkFlow.setOrderId(tempOrder.getOrderId()); + tempWorkFlow.setWorkStation(""); + 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); + tempWorkFlow.setPlanDate(currentWorkDate); + workFlows.add(tempWorkFlow); + } + // 获得所有的小盒子号 + List smallBoxList = workFlows.stream().map(WorkFlow::getWorkCenter).distinct().toList(); + // 查询工站配置 + List currentStationConfigsOfNwl = workStationConfigService.list(new LambdaQueryWrapper() + .in(WorkStationConfig::getSmallBox, smallBoxList) + .orderByAsc(WorkStationConfig::getSmallBox)); + // 没有工站配置 + if (currentStationConfigsOfNwl == null || currentStationConfigsOfNwl.isEmpty()) { + logger.error("缺少必须的工站配置,未生成工作流。"); + return; + } + // 生成小盒子对应大盒子map + Map smallBoxToBigBoxMap = currentStationConfigsOfNwl.stream().collect(Collectors.toMap(WorkStationConfig::getSmallBox, WorkStationConfig::getBigBox)); + // 生成小盒子对应机型Map + Map smallBoxToMachineTypeMap = currentStationConfigsOfNwl.stream().collect(Collectors.toMap(WorkStationConfig::getSmallBox, WorkStationConfig::getModel)); + // 更新机型和大盒子号 + for (WorkFlow tempWorkFlow : workFlows) { + // 机型 + String model = smallBoxToMachineTypeMap.get(tempWorkFlow.getWorkCenter()); + // 大盒子号 + String bigBox = smallBoxToBigBoxMap.get(tempWorkFlow.getWorkCenter()); + // 改动 + if (StringUtils.isEmpty(model)) { + // 未知机型 + tempWorkFlow.setMachineType(0); + } else { + tempWorkFlow.setMachineType(Objects.equals(model, "MWL") ? 1 : 2); + } + tempWorkFlow.setBigBox(bigBox); + } + + //结束时间 + LocalDateTime endTime = LocalDateTime.now(); + System.out.println("分析当日工作流,结束时间:" + endTime); + // 用时 + long duration = Duration.between(startTime, endTime).toMillis(); + logger.info("生成当日工作流耗时:{}ms", duration); + } + /** * 获取当前的工作日期 * @@ -1175,7 +1296,13 @@ public class WorkServiceImplements implements IWorkService { // 查询配置是否使用默认开工日期 String useReqmtDate = configMap.get(ConfigMapKeyEnum.USE_REQUIRE_DATE.getConfigKey()); if (!StringUtils.isEmpty(useReqmtDate) && useReqmtDate.equals("1")) {// 使用工单的开工日期 - findCurrentDateWorks(allFlows, currentWorkDate); + // 查询配置是否使用默认开工日期调整 + String useDefaultAdjust = configMap.get(ConfigMapKeyEnum.USE_DEFAULT_ADJUST.getConfigKey()); + if (!StringUtils.isEmpty(useDefaultAdjust) && useDefaultAdjust.equals("1")) { + findCurrentDateWorks(allFlows, currentWorkDate); + } else { + findCurrentDateWorksUseConfig(allFlows, currentWorkDate); + } } else { // 获取当天所有的装载机工作 List thisDayMWLWorks = new ArrayList<>(); 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 4fde588..45aee8b 100644 --- a/src/main/java/com/wms/utils/excel/listener/UploadStationConfigListener.java +++ b/src/main/java/com/wms/utils/excel/listener/UploadStationConfigListener.java @@ -5,6 +5,7 @@ import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.read.listener.ReadListener; import com.alibaba.excel.util.ListUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.wms.config.InitLocalConfig; import com.wms.entity.table.WorkStationConfig; import com.wms.service.WorkStationConfigService; import com.wms.utils.StringUtils; @@ -17,6 +18,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import static com.wms.utils.WmsUtils.generateId; @@ -119,5 +121,8 @@ public class UploadStationConfigListener implements ReadListener