| | |
| | | List<String> serialNumberList = workOrderList.stream().map(WorkOrder::getSerialNumber).collect(Collectors.toList()); |
| | | // 查出数据库中国标码对应的未完成的工单 |
| | | List<WorkOrder> inDatabaseWorkOrderList = baseMapper.getNotFinishedWorkOrders(serialNumberList); |
| | | inDatabaseWorkOrderList.stream().forEach(item -> { |
| | | if (StringUtils.hasText(item.getErrorType())) { |
| | | item.setErrorTypeList(List.of(item.getErrorType().split(","))); |
| | | log.info("打印出inDatabaseWorkOrderList:{}",inDatabaseWorkOrderList); |
| | | |
| | | // 2. 按 serialNumber 分组,合并错误类型 |
| | | Map<String, WorkOrder> mergedWorkOrders = new LinkedHashMap<>(); |
| | | |
| | | for (WorkOrder order : inDatabaseWorkOrderList) { |
| | | String serialNumber = order.getSerialNumber(); |
| | | |
| | | if (mergedWorkOrders.containsKey(serialNumber)) { |
| | | // 如果序列号已存在,合并错误类型 |
| | | WorkOrder existingOrder = mergedWorkOrders.get(serialNumber); |
| | | //判断时间先后 |
| | | boolean isExistingNewer = existingOrder.getCreateTime() != null && |
| | | order.getCreateTime() != null && |
| | | existingOrder.getCreateTime().after(order.getCreateTime()); |
| | | |
| | | WorkOrder latestOrder = isExistingNewer ? existingOrder : order; |
| | | WorkOrder olderOrder = isExistingNewer ? order : existingOrder; |
| | | |
| | | List<String> latestErrorTypes = latestOrder.getErrorTypeList() != null |
| | | ? new ArrayList<>(latestOrder.getErrorTypeList()) |
| | | : new ArrayList<>(); |
| | | |
| | | if (StringUtils.hasText(olderOrder.getErrorType())) { |
| | | List<String> olderErrorTypes = Arrays.asList(olderOrder.getErrorType().split(",")); |
| | | latestErrorTypes.addAll(olderErrorTypes); |
| | | } |
| | | |
| | | // 去重并更新错误类型 |
| | | List<String> uniqueErrorTypes = latestErrorTypes.stream() |
| | | .distinct() |
| | | .collect(Collectors.toList()); |
| | | |
| | | latestOrder.setErrorTypeList(uniqueErrorTypes); |
| | | latestOrder.setErrorType(String.join(",", uniqueErrorTypes)); |
| | | |
| | | // 更新Map中的工单为最新的工单 |
| | | mergedWorkOrders.put(serialNumber, latestOrder); |
| | | |
| | | |
| | | |
| | | } else { |
| | | item.setErrorTypeList(new ArrayList<>(1)); |
| | | // 如果序列号不存在,初始化错误类型列表并添加到Map |
| | | if (StringUtils.hasText(order.getErrorType())) { |
| | | order.setErrorTypeList(Arrays.asList(order.getErrorType().split(","))); |
| | | } else { |
| | | order.setErrorTypeList(new ArrayList<>(1)); |
| | | } |
| | | mergedWorkOrders.put(serialNumber, order); |
| | | } |
| | | }); |
| | | Map<String, WorkOrder> mapping = inDatabaseWorkOrderList.stream().collect((Collectors.toMap(WorkOrder::getSerialNumber, workOrder -> workOrder))); |
| | | } |
| | | log.info("打印出mergedWorkOrders合并后:{}",inDatabaseWorkOrderList); |
| | | // 3. 获取合并后的工单列表(保持顺序) |
| | | // List<WorkOrder> finalWorkOrderList = new ArrayList<>(mergedWorkOrders.values()); |
| | | |
| | | |
| | | // Map<String, WorkOrder> mapping = null; |
| | | // try { |
| | | // mapping = finalWorkOrderList.stream() |
| | | // .collect(Collectors.toMap(WorkOrder::getSerialNumber, workOrder -> workOrder)); |
| | | // } catch (IllegalStateException e) { |
| | | // // 捕获键重复异常 |
| | | // System.err.println("错误:发现重复的序列号,无法创建映射"); |
| | | // System.err.println("异常详情:" + e.getMessage()); |
| | | // |
| | | // // 可选:你可以在这里处理异常,比如返回一个空Map或者使用备用策略 |
| | | // // 方案1:返回空Map |
| | | // mapping = new HashMap<>(); // Java 9+ |
| | | // |
| | | // } |
| | | List<WorkOrder> waitAddList = new ArrayList<>(48); |
| | | List<WorkOrderErrorType> waitAddErrorTypeList = new ArrayList<>(48); |
| | | Integer updateNum = 0; |
| | |
| | | // 即将要添加的错误类型 |
| | | List<WorkOrderErrorType> willAddErrorType = new ArrayList<>(96); |
| | | for (WorkOrder workOrder : workOrderList) { |
| | | WorkOrder databaseWorkOrder = mapping.get(workOrder.getSerialNumber()); |
| | | WorkOrder databaseWorkOrder = mergedWorkOrders.get(workOrder.getSerialNumber()); |
| | | if (Objects.nonNull(databaseWorkOrder)) { |
| | | //判断是否是今天的工单 |
| | | if (!isSameDay(databaseWorkOrder.getCreateTime(), now)) { |