From 965cd9cc87ee705eb8d6ce259ee33d26291fe0d3 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期三, 11 三月 2026 10:53:29 +0800
Subject: [PATCH] feat: 产品类别汇总统计
---
src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java | 61 ++++++++++++++++++++++++------
1 files changed, 48 insertions(+), 13 deletions(-)
diff --git a/src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java b/src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java
index 9cdd367..f6d2414 100644
--- a/src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java
+++ b/src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java
@@ -11,6 +11,7 @@
import com.ruoyi.common.utils.http.HttpUtils;
import com.ruoyi.framework.config.AliDingConfig;
import com.ruoyi.productionPlan.dto.ProductionPlanDto;
+import com.ruoyi.productionPlan.dto.ProductionPlanSummaryDto;
import com.ruoyi.productionPlan.mapper.ProductionPlanMapper;
import com.ruoyi.productionPlan.pojo.ProductionPlan;
import com.ruoyi.productionPlan.service.ProductionPlanService;
@@ -26,9 +27,9 @@
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
import java.util.concurrent.locks.ReentrantLock;
+import java.util.stream.Collectors;
/**
* <br>
@@ -133,8 +134,8 @@
List<ProductionPlan> list = parseProductionPlans(dataArr, dataSyncType, totalCount);
if (!list.isEmpty()) {
// 澶勭悊鏇存柊鎴栨柊澧�
- processSaveOrUpdate(list);
- totalSynced += list.size();
+ int affected = processSaveOrUpdate(list);
+ totalSynced += affected;
}
// 鍒ゆ柇鏄惁杩樻湁涓嬩竴椤�
@@ -277,19 +278,48 @@
return list;
}
- private void processSaveOrUpdate(List<ProductionPlan> list) {
+ private int processSaveOrUpdate(List<ProductionPlan> list) {
+ if (list == null || list.isEmpty()) {
+ return 0;
+ }
+ int affected = 0;
+
+ // 鍘婚噸 formInstanceId
+ Set<String> formIds = list.stream()
+ .map(ProductionPlan::getFormInstanceId)
+ .collect(Collectors.toSet());
+
+ // 鏌ヨ鏁版嵁搴撳凡鏈夋暟鎹�
+ List<ProductionPlan> existList = this.list(new LambdaQueryWrapper<ProductionPlan>().in(ProductionPlan::getFormInstanceId, formIds));
+
+ // Map (formInstanceId + materialCode)
+ Map<String, ProductionPlan> existMap = new HashMap<>();
+ for (ProductionPlan p : existList) {
+ String key = p.getFormInstanceId() + "_" + p.getMaterialCode();
+ existMap.put(key, p);
+ }
+
+ // 閬嶅巻鍚屾鏁版嵁
for (ProductionPlan plan : list) {
- LambdaQueryWrapper<ProductionPlan> queryWrapper = new LambdaQueryWrapper<>();
- queryWrapper.eq(ProductionPlan::getFormInstanceId, plan.getFormInstanceId())
- .eq(ProductionPlan::getMaterialCode, plan.getMaterialCode());
- ProductionPlan existing = this.getOne(queryWrapper);
- if (existing != null) {
- plan.setId(existing.getId());
- this.updateById(plan);
- } else {
+ String key = plan.getFormInstanceId() + "_" + plan.getMaterialCode();
+ ProductionPlan exist = existMap.get(key);
+ if (exist == null) {
+ // 鏂板
this.save(plan);
+ affected++;
+ log.info("鏂板鏁版嵁 formInstanceId={}, materialCode={}", plan.getFormInstanceId(), plan.getMaterialCode());
+ } else {
+ // 鍒ゆ柇鏄惁闇�瑕佹洿鏂�
+ if (exist.getFormModifiedTime() == null || !exist.getFormModifiedTime().equals(plan.getFormModifiedTime())) {
+ plan.setId(exist.getId());
+ plan.setCreateTime(exist.getCreateTime());
+ this.updateById(plan);
+ affected++;
+ log.info("鏇存柊鏁版嵁 formInstanceId={}, materialCode={}", plan.getFormInstanceId(), plan.getMaterialCode());
+ }
}
}
+ return affected;
}
private LocalDateTime parseUtcTime(String utcString) {
@@ -304,4 +334,9 @@
return null;
}
}
+
+ @Override
+ public List<ProductionPlanSummaryDto> summaryByProductType(ProductionPlanSummaryDto query) {
+ return baseMapper.selectSummaryByProductType(query);
+ }
}
--
Gitblit v1.9.3