diff --git a/src/main/java/com/wms/constants/enums/ConfigMapKeyEnum.java b/src/main/java/com/wms/constants/enums/ConfigMapKeyEnum.java index 7c741a4..d812090 100644 --- a/src/main/java/com/wms/constants/enums/ConfigMapKeyEnum.java +++ b/src/main/java/com/wms/constants/enums/ConfigMapKeyEnum.java @@ -1,5 +1,11 @@ package com.wms.constants.enums; +import lombok.Getter; + +/** + * 配置项枚举 + */ +@Getter public enum ConfigMapKeyEnum { MAX_WEIGHT("MAX_WEIGHT"), URL_WCS_TASK("URL_WCS_TASK"), @@ -30,12 +36,10 @@ public enum ConfigMapKeyEnum { IF_MERGE_TOMORROW("IF_MERGE_TOMORROW"), SAME_MACHINE("SAME_MACHINE"), SAME_AREA("SAME_AREA"), - RATE_TYPE("RATE_TYPE"); + RATE_TYPE("RATE_TYPE"), + USE_REQUIRE_DATE("USE_REQUIRE_DATE");// 是否使用需求时间 private final String configKey; ConfigMapKeyEnum(String configKey) { this.configKey = configKey; } - public String getConfigKey() { - return configKey; - } } diff --git a/src/main/java/com/wms/controller/ExcelController.java b/src/main/java/com/wms/controller/ExcelController.java index fdd254f..9c6ee31 100644 --- a/src/main/java/com/wms/controller/ExcelController.java +++ b/src/main/java/com/wms/controller/ExcelController.java @@ -26,7 +26,6 @@ import lombok.RequiredArgsConstructor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Propagation; @@ -72,9 +71,6 @@ public class ExcelController { private final List uploadFileHashStringList = new ArrayList<>(); - @Value("${reqmtsDate}") - private boolean reqmtsDate; - /** * 查询上传记录 * @@ -103,8 +99,7 @@ public class ExcelController { } catch (Exception e) { // 回滚事务 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); - e.printStackTrace(); - logger.error("查询上传记录发生异常:{}", e.getMessage()); + logger.error("查询上传记录发生异常:{}", convertJsonString(e)); response.setCode(ResponseCode.ERROR.getCode()); response.setMessage("查询上传记录发生异常"); return convertJsonString(response); @@ -214,7 +209,7 @@ public class ExcelController { // 获取之前DBS表的内容 Map kateDbsMap = kateDbsService.list().stream().collect(Collectors.toMap(KateDBS::getWorkOrder, kateDBS -> kateDBS)); // 导入excel - EasyExcel.read(file.getInputStream(), KateDbsExcelVo.class, new UploadDbsListener(kateDbsService, kateDbsMap, fileVo.getUserName(),reqmtsDate)).sheet().headRowNumber(8).doRead(); + EasyExcel.read(file.getInputStream(), KateDbsExcelVo.class, new UploadDbsListener(kateDbsService, kateDbsMap, fileVo.getUserName())).sheet().headRowNumber(8).doRead(); // 添加导入记录 uploadRecordService.save(UploadRecord.ofFileVo(fileVo, "DBS")); uploadFileHashStringList.remove(fileVo.getHash()); @@ -255,7 +250,7 @@ public class ExcelController { // 获取之前工单表的内容 Map kateOrdersMap = kateOrdersService.list().stream().collect(Collectors.toMap(kateOrders -> kateOrders.getWorkOrder() + "_" + kateOrders.getGoodsId() + "_" + kateOrders.getSupplyArea(), kateOrders -> kateOrders)); // 导入excel - EasyExcel.read(file.getInputStream(), KateOrdersExcelVo.class, new UploadKateOrdersListener(kateOrdersService, kateOrdersMap, fileVo.getUserName(),reqmtsDate)).sheet().doRead(); + EasyExcel.read(file.getInputStream(), KateOrdersExcelVo.class, new UploadKateOrdersListener(kateOrdersService, kateOrdersMap, fileVo.getUserName())).sheet().doRead(); // 添加导入记录 uploadRecordService.save(UploadRecord.ofFileVo(fileVo, "ORDERS")); uploadFileHashStringList.remove(fileVo.getHash()); 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 f5576d6..fdf2b58 100644 --- a/src/main/java/com/wms/service/business/serviceImplements/WorkServiceImplements.java +++ b/src/main/java/com/wms/service/business/serviceImplements/WorkServiceImplements.java @@ -908,6 +908,7 @@ public class WorkServiceImplements implements IWorkService { //开始时间: LocalDateTime startTime = LocalDateTime.now(); System.out.println("分析当日" + modelStr + "工作流,开始时间:" + startTime); + // 查到当前站台所有的小工位 LambdaQueryWrapper stationConfigQueryWrapper = new LambdaQueryWrapper() .eq(StringUtils.isNotEmpty(workStation), WorkStationConfig::getWorkStation, workStation); @@ -920,6 +921,7 @@ public class WorkServiceImplements implements IWorkService { List currentStationConfigsOfNwl = workStationConfigService.list(stationConfigQueryWrapper); // 没有工站配置 if (currentStationConfigsOfNwl == null || currentStationConfigsOfNwl.isEmpty()) { + logger.info("缺少{}工站配置,未生成工作流。", model); return; } // 今日开工的工单和小工位 @@ -1018,13 +1020,87 @@ public class WorkServiceImplements implements IWorkService { } } } + //结束时间 LocalDateTime endTime = LocalDateTime.now(); System.out.println("分析当日" + modelStr + "工作流,结束时间:" + endTime); // 用时 long duration = Duration.between(startTime, endTime).toMillis(); logger.info("分析当日{}工作流耗时:{}ms", modelStr, duration); + } + /** + * 获取当日工作流 + * @param workFlows 工作流 + * @param currentWorkDate 日期 + */ + private void findCurrentDateWorks(List workFlows, LocalDate currentWorkDate) { + //开始时间: + LocalDateTime startTime = LocalDateTime.now(); + System.out.println("分析当日工作流,开始时间:" + startTime); + List currentDateKateWorkOrders = kateOrdersService.list(new LambdaQueryWrapper() + .eq(KateOrders::getOrderStatus, 0) + .eq(KateOrders::getSortString, configMap.get(ConfigMapKeyEnum.SLOC_FILTER_STRING.getConfigKey())) + .eq(KateOrders::getPlanStartDate, currentWorkDate)); + if (currentDateKateWorkOrders.isEmpty()) { + logger.info("没有当日工单。"); + return; + } + 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.info("缺少工站配置,未生成工作流。"); + 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); } /** @@ -1079,35 +1155,42 @@ public class WorkServiceImplements implements IWorkService { } // 添加进总汇总数据 List allFlows = new ArrayList<>(); - // 获取当天所有的装载机工作 - List thisDayMWLWorks = new ArrayList<>(); - // 获取到当天所有的平地机工作 - List thisDayMGWorks = new ArrayList<>(); - // 需要合并第二天的平地机工作 - List nextDayMGWorks = new ArrayList<>(); - // 生成装载机工作流 - findWorks("", thisDayMWLWorks, "MWL", currentWorkDate); - if (!thisDayMWLWorks.isEmpty()) { - allFlows.addAll(thisDayMWLWorks); - } - // 生成当天平地机工作流 - findWorks("", thisDayMGWorks, "NOT_MWL", currentWorkDate); - if (!thisDayMGWorks.isEmpty()) { - allFlows.addAll(thisDayMGWorks); - // 查询配置是否需要合并第二天的配置 - String ifMergeTomorrow = configMap.get(ConfigMapKeyEnum.IF_MERGE_TOMORROW.getConfigKey()); - if (!StringUtils.isEmpty(ifMergeTomorrow) && ifMergeTomorrow.equals("1")) { - // 获取下一个工作日 - LocalDate nextWorkDate = nextWorkDate(currentWorkDate); - if (nextWorkDate != null && nextWorkDate.isAfter(currentWorkDate)) { - findWorks("", nextDayMGWorks, "NOT_MWL", nextWorkDate); - } - if (!nextDayMGWorks.isEmpty()) { - // 添加第二天的平地机工作进汇总 - allFlows.addAll(nextDayMGWorks); + // 查询配置是否使用默认开工日期 + String useReqmtDate = configMap.get(ConfigMapKeyEnum.USE_REQUIRE_DATE.getConfigKey()); + if (!StringUtils.isEmpty(useReqmtDate) && useReqmtDate.equals("1")) {// 使用工单的开工日期 + findCurrentDateWorks(allFlows, currentWorkDate); + } else { + // 获取当天所有的装载机工作 + List thisDayMWLWorks = new ArrayList<>(); + // 获取到当天所有的平地机工作 + List thisDayMGWorks = new ArrayList<>(); + // 需要合并第二天的平地机工作 + List nextDayMGWorks = new ArrayList<>(); + // 生成装载机工作流 + findWorks("", thisDayMWLWorks, "MWL", currentWorkDate); + if (!thisDayMWLWorks.isEmpty()) { + allFlows.addAll(thisDayMWLWorks); + } + // 生成当天平地机工作流 + findWorks("", thisDayMGWorks, "NOT_MWL", currentWorkDate); + if (!thisDayMGWorks.isEmpty()) { + allFlows.addAll(thisDayMGWorks); + // 查询配置是否需要合并第二天的配置 + String ifMergeTomorrow = configMap.get(ConfigMapKeyEnum.IF_MERGE_TOMORROW.getConfigKey()); + if (!StringUtils.isEmpty(ifMergeTomorrow) && ifMergeTomorrow.equals("1")) { + // 获取下一个工作日 + LocalDate nextWorkDate = nextWorkDate(currentWorkDate); + if (nextWorkDate != null && nextWorkDate.isAfter(currentWorkDate)) { + findWorks("", nextDayMGWorks, "NOT_MWL", nextWorkDate); + } + if (!nextDayMGWorks.isEmpty()) { + // 添加第二天的平地机工作进汇总 + allFlows.addAll(nextDayMGWorks); + } } } } + if (!allFlows.isEmpty()) { // 处理这些工作流 List oldWorkFlows = workFlowService.list(); diff --git a/src/main/java/com/wms/utils/excel/listener/UploadDbsListener.java b/src/main/java/com/wms/utils/excel/listener/UploadDbsListener.java index 6c7eab4..6e8b2fe 100644 --- a/src/main/java/com/wms/utils/excel/listener/UploadDbsListener.java +++ b/src/main/java/com/wms/utils/excel/listener/UploadDbsListener.java @@ -3,6 +3,7 @@ package com.wms.utils.excel.listener; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.read.listener.ReadListener; import com.alibaba.excel.util.ListUtils; +import com.wms.constants.enums.ConfigMapKeyEnum; import com.wms.entity.table.KateDBS; import com.wms.service.KateDBSService; import com.wms.utils.StringUtils; @@ -15,6 +16,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import static com.wms.config.InitLocalConfig.configMap; import static com.wms.utils.WmsUtils.generateId; /** @@ -32,14 +34,18 @@ public class UploadDbsListener implements ReadListener { private final Map oldKateDBSMap;// 旧的DBS数据 private final Map newKateDBSMap = new HashMap<>();// 新的DBS数据 private final int maxSequence; - private final boolean isAddReqmtDate; - public UploadDbsListener(KateDBSService kateDBSService, Map oldKateDBSMap, String uploadUser, boolean isAddReqmtDate) { + private boolean isAddReqmtDate = false; + public UploadDbsListener(KateDBSService kateDBSService, Map oldKateDBSMap, String uploadUser) { this.kateDBSService = kateDBSService; this.oldKateDBSMap = oldKateDBSMap; this.uploadUser = uploadUser; - this.isAddReqmtDate = isAddReqmtDate; // 获取最大序列号 maxSequence = oldKateDBSMap.values().stream().mapToInt(KateDBS::getWorkSequence).max().orElse(0); + // 查询配置是否使用默认开工日期 + String useReqmtDate = configMap.get(ConfigMapKeyEnum.USE_REQUIRE_DATE.getConfigKey()); + if (!StringUtils.isEmpty(useReqmtDate) && useReqmtDate.equals("1")) { + isAddReqmtDate = true; + } } @Override @@ -60,11 +66,15 @@ public class UploadDbsListener implements ReadListener { if (kateDbsExcelVo.getWorkSequence() != null && StringUtils.isNotEmpty(kateDbsExcelVo.getWorkOrder()) && StringUtils.isNotEmpty(kateDbsExcelVo.getMachineNo())) { - if(!isAddReqmtDate){ + if (!isAddReqmtDate) { if(kateDbsExcelVo.getPlanStartDate() != null){ cachedDataList.add(kateDbsExcelVo); + } else { + int rowCount = analysisContext.readRowHolder().getRowIndex() + 1; + logger.error("第{}行DBS缺少开工日期。", rowCount); + throw new RuntimeException("第" + rowCount + "行DBS缺少开工日期。"); } - }else{ + } else { cachedDataList.add(kateDbsExcelVo); } diff --git a/src/main/java/com/wms/utils/excel/listener/UploadKateOrdersListener.java b/src/main/java/com/wms/utils/excel/listener/UploadKateOrdersListener.java index 4010085..f2a9653 100644 --- a/src/main/java/com/wms/utils/excel/listener/UploadKateOrdersListener.java +++ b/src/main/java/com/wms/utils/excel/listener/UploadKateOrdersListener.java @@ -36,20 +36,23 @@ public class UploadKateOrdersListener implements ReadListener private final String uploadUser;// 用户 private final Map oldKateOrdersMap;// 旧的工单数据 private final Map newKateOrdersMap = new HashMap<>();// 新的工单数据 - private final boolean isAddReqmtDate; - - public UploadKateOrdersListener(KateOrdersService kateOrdersService, Map oldKateOrdersMap, String uploadUser, boolean isAddReqmtDate) { + private boolean isAddReqmtDate = false; + public UploadKateOrdersListener(KateOrdersService kateOrdersService, Map oldKateOrdersMap, String uploadUser) { this.kateOrdersService = kateOrdersService; this.oldKateOrdersMap = oldKateOrdersMap; this.uploadUser = uploadUser; - this.isAddReqmtDate = isAddReqmtDate; + // 查询配置是否使用默认开工日期 + String useReqmtDate = configMap.get(ConfigMapKeyEnum.USE_REQUIRE_DATE.getConfigKey()); + if (!StringUtils.isEmpty(useReqmtDate) && useReqmtDate.equals("1")) { + isAddReqmtDate = true; + } } @Override public void onException(Exception exception, AnalysisContext context) throws Exception { int rowCount = context.readRowHolder().getRowIndex() + 1; logger.error("处理工单数据发生异常,第{}行发生异常。", rowCount); - throw new Exception("第" + rowCount + "行数据异常。"); + throw new Exception("第" + rowCount + "行数据异常。" + exception.getMessage()); } /** @@ -68,9 +71,13 @@ public class UploadKateOrdersListener implements ReadListener && StringUtils.isNotEmpty(kateOrdersExcelVo.getSupplyArea()) && kateOrdersExcelVo.getRequirementQuantity() != null && kateOrdersExcelVo.getRequirementQuantity().compareTo(BigDecimal.ZERO) > 0) { - if(isAddReqmtDate){ + if (isAddReqmtDate) { if(kateOrdersExcelVo.getPlanStartDate() != null){ cachedDataList.add(kateOrdersExcelVo); + } else { + int rowCount = analysisContext.readRowHolder().getRowIndex() + 1; + logger.error("第{}行工单缺少开工日期。", rowCount); + throw new RuntimeException("第" + rowCount + "行工单缺少开工日期。"); } } else { // 符合条件 diff --git a/src/main/java/com/wms/utils/excel/vo/KateOrdersExcelVo.java b/src/main/java/com/wms/utils/excel/vo/KateOrdersExcelVo.java index f645a81..ed96570 100644 --- a/src/main/java/com/wms/utils/excel/vo/KateOrdersExcelVo.java +++ b/src/main/java/com/wms/utils/excel/vo/KateOrdersExcelVo.java @@ -3,10 +3,7 @@ package com.wms.utils.excel.vo; import cn.hutool.core.bean.BeanUtil; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.format.DateTimeFormat; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; import com.wms.entity.table.KateOrders; -import com.wms.entity.table.Location; import lombok.Data; import java.math.BigDecimal;