소스 검색

去除重复数据

17491 1 주 전
부모
커밋
c429635154

+ 10 - 1
src/main/java/com/jeesite/modules/mes/web/MesProductLeakagePointStatController.java

@@ -177,8 +177,17 @@ public class MesProductLeakagePointStatController extends BaseController {
         List<Map<String, Object>> occurrences = new ArrayList<>();
         Set<String> countedDefectOccurrences = new LinkedHashSet<>();
         Map<String, Set<String>> leakagePointsByProduct = buildLeakagePointsByProduct(hfRecords);
+        // INSP030A/B 的生产记录是总结果的权威来源,优先于气密仪记录,避免重复计数。
+        List<MesProductRecord> productRecords = findProductRecords(startDate, endDate);
+        Set<String> productionRecordKeys = new LinkedHashSet<>();
+        for (MesProductRecord record : productRecords) {
+            if (matchesDataType(record.getOprno(), dataType)) {
+                productionRecordKeys.add(leakagePointKey(record.getSn(), record.getOprno()));
+            }
+        }
         for (MesProductQm record : mesProductQmService.findList(query)) {
             if (!matchesDataType(record.getOprno(), dataType)) continue;
+            if (productionRecordKeys.contains(leakagePointKey(record.getComponentNum(), record.getOprno()))) continue;
             if ("OK".equalsIgnoreCase(record.getTestResult())) qualified++;
             else {
                 Set<String> points = leakagePointsByProduct.get(leakagePointKey(record.getComponentNum(), record.getOprno()));
@@ -192,7 +201,7 @@ public class MesProductLeakagePointStatController extends BaseController {
                 }
             }
         }
-        for (MesProductRecord record : findProductRecords(startDate, endDate)) {
+        for (MesProductRecord record : productRecords) {
             if (!matchesDataType(record.getOprno(), dataType)) continue;
             if ("OK".equalsIgnoreCase(record.getContent())) qualified++;
             else {

+ 13 - 0
src/main/java/com/jeesite/modules/mes/web/MesProductQmController.java

@@ -165,6 +165,10 @@ public class MesProductQmController extends BaseController {
 						&& !containsLeakPoint(leakagePoint, mesProductQm.getLeakagePoint())) {
 					continue;
 				}
+				// 生产记录是总结果的权威来源;同一工件/工位若已由气密仪或漏点表
+				// 返回,先移除旧来源,避免页面显示两条相同记录。
+				records.removeIf(existing -> sameQmRecord(existing,
+						productRecord.getSn(), productRecord.getOprno()));
 				MesProductQm record = new MesProductQm();
 				record.setId(productRecord.getId());
 				record.setComponentNum(productRecord.getSn());
@@ -190,6 +194,15 @@ public class MesProductQmController extends BaseController {
 		return page;
 	}
 
+	private boolean sameQmRecord(MesProductQm record, String componentNum, String oprno) {
+		String existingComponentNum = record.getComponentNum() == null ? "" : record.getComponentNum().trim();
+		String existingOprno = record.getOprno() == null ? "" : record.getOprno().trim();
+		String productionComponentNum = componentNum == null ? "" : componentNum.trim();
+		String productionOprno = oprno == null ? "" : oprno.trim();
+		return existingComponentNum.equals(productionComponentNum)
+				&& existingOprno.equalsIgnoreCase(productionOprno);
+	}
+
 	/** Keeps historical numeric leak-point records readable with the current labels. */
 	private String normalizeLeakPointLabels(String value) {
 		if (value == null || value.trim().isEmpty()) return value;