| | |
| | | // 使用组合key来实现多维度分组(动态rowGroupBy字段 + 可选的工厂/专业/车间) |
| | | Map<String, Map<String, Object>> groupInfoMap = new HashMap<>(); |
| | | Map<String, Map<String, BigDecimal>> groupTimeDataMap = new HashMap<>(); |
| | | // 存储每个groupKey对应的processName集合 |
| | | Map<String, Set<String>> groupProcessNamesMap = new HashMap<>(); |
| | | |
| | | // 遍历原始数据,按多维度分组进行聚合 |
| | | for (Map<String, Object> data : rawData) { |
| | |
| | | groupInfoMap.put(groupKey, groupInfo); |
| | | } |
| | | |
| | | // 收集processName |
| | | if (processName != null && !processName.trim().isEmpty()) { |
| | | if (!groupProcessNamesMap.containsKey(groupKey)) { |
| | | groupProcessNamesMap.put(groupKey, new HashSet<>()); |
| | | } |
| | | groupProcessNamesMap.get(groupKey).add(processName); |
| | | } |
| | | |
| | | // 计算时间点Key |
| | | String timeKey; |
| | | LocalDate planStartLocalDate = processPlanStartDay.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); |
| | |
| | | rowDetail.put("workshop", groupInfo.get("workshop")); |
| | | } |
| | | |
| | | // 保留工序名称信息,以便前端展示 |
| | | if (!"processName".equals(rowGroupBy)) { |
| | | // 处理processName - 如果rowGroupBy为workshop,则将所有processName用分号连接 |
| | | if ("workshop".equals(rowGroupBy)) { |
| | | Set<String> processNames = groupProcessNamesMap.getOrDefault(groupKey, new HashSet<>()); |
| | | if (!processNames.isEmpty()) { |
| | | String joinedProcessNames = String.join(";", processNames); |
| | | rowDetail.put("processName", joinedProcessNames); |
| | | } else { |
| | | rowDetail.put("processName", groupInfo.get("processName")); |
| | | } |
| | | } else if (!"processName".equals(rowGroupBy)) { |
| | | // 保留工序名称信息,以便前端展示 |
| | | rowDetail.put("processName", groupInfo.get("processName")); |
| | | } |
| | | |