Explorar o código

成品,半成品气密统计优化升级

17491 hai 2 semanas
pai
achega
ca4a754b56

+ 9 - 0
src/main/java/com/jeesite/modules/mes/util/CommonUitl.java

@@ -68,6 +68,15 @@ public class CommonUitl {
         return oprno.substring(0, len);
     }
 
+    /** Returns the fixed gas-tightness record title for the designated inspection stations. */
+    public static String resolveQmTitle(String oprno, String defaultTitle) {
+        String station = formatOprno(oprno);
+        if ("INSP030".equals(station)) return "框架气密";
+        if ("INSP080".equals(station)) return "半成品气密";
+        if ("INSP090".equals(station)) return "整包气密";
+        return defaultTitle;
+    }
+
     /**
      * 获取几天前的时间
      * @param days

+ 2 - 1
src/main/java/com/jeesite/modules/mes/web/MesProductCheckTestController.java

@@ -206,6 +206,7 @@ public class MesProductCheckTestController extends BaseController {
 		mesProductQm.setByDuration(by);
 		mesProductQm.setCsDuration(cs);
 		mesProductQm.setProgramNo(cxm);
+		mesProductQm.setTitle(CommonUitl.resolveQmTitle(oprno, mesProductQm.getTitle()));
 		mesProductQmService.save(mesProductQm);
 
 		MesProductCheckTest mesProductCheckTest = new MesProductCheckTest();
@@ -265,4 +266,4 @@ public class MesProductCheckTestController extends BaseController {
 		mesProductCheckTestService.save(mesProductCheckTest);
 		return renderResult(Global.TRUE, text("添加成功!"));
 	}
-}
+}

+ 34 - 7
src/main/java/com/jeesite/modules/mes/web/MesProductLeakagePointStatController.java

@@ -2,13 +2,16 @@ package com.jeesite.modules.mes.web;
 
 import com.jeesite.common.entity.Page;
 import com.jeesite.common.lang.StringUtils;
+import com.jeesite.common.mybatis.mapper.query.QueryType;
 import com.jeesite.common.web.BaseController;
 import com.jeesite.modules.mes.entity.MesProductHf;
 import com.jeesite.modules.mes.entity.MesProductQm;
+import com.jeesite.modules.mes.entity.MesProductRecord;
 import com.jeesite.modules.mes.entity.MesProductLeakagePointStat;
 import com.jeesite.modules.mes.req.MesSearchDateReq;
 import com.jeesite.modules.mes.service.MesProductHfService;
 import com.jeesite.modules.mes.service.MesProductQmService;
+import com.jeesite.modules.mes.service.MesProductRecordService;
 import com.jeesite.modules.mes.util.CommonUitl;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -52,6 +55,9 @@ public class MesProductLeakagePointStatController extends BaseController {
     @Autowired
     private MesProductQmService mesProductQmService;
 
+    @Autowired
+    private MesProductRecordService mesProductRecordService;
+
     @RequiresPermissions("mes:mesProductQm:view")
     @RequestMapping(value = {"list", ""})
     public String list(Model model) {
@@ -173,11 +179,15 @@ public class MesProductLeakagePointStatController extends BaseController {
         int noPoint = 0;
         Map<String, Integer> pointCounts = new LinkedHashMap<>();
         for (MesProductQm record : mesProductQmService.findList(query)) {
-            if ("leakagePoint".equals(dataType)) continue;
             if (!matchesDataType(record.getOprno(), dataType)) continue;
             if ("OK".equalsIgnoreCase(record.getTestResult())) qualified++;
             else { defective++; noPoint++; }
         }
+        for (MesProductRecord record : findProductRecords(startDate, endDate)) {
+            if (!matchesDataType(record.getOprno(), dataType)) continue;
+            if ("OK".equalsIgnoreCase(record.getContent())) qualified++;
+            else { defective++; noPoint++; }
+        }
         for (MesProductHf record : hfRecords) {
             if ("OK".equalsIgnoreCase(record.getResult())) { qualified++; continue; }
             defective++;
@@ -209,6 +219,17 @@ public class MesProductLeakagePointStatController extends BaseController {
         return result;
     }
 
+    /** Overall air-tightness results from INSP030A/B are stored in the production-record table. */
+    private List<MesProductRecord> findProductRecords(Date startDate, Date endDate) {
+        MesProductRecord query = new MesProductRecord();
+        if (startDate != null) query.setUpdateDate_gte(startDate);
+        if (endDate != null) query.setUpdateDate_lte(endOfDay(endDate));
+        query.getSqlMap().getWhere()
+                .and("a.oprno", QueryType.IN, new String[] {"INSP030A", "INSP030B"})
+                .and("a.craft", QueryType.EQ, "100000");
+        return mesProductRecordService.findList(query);
+    }
+
     @RequiresPermissions("mes:mesProductQm:view")
     @RequestMapping(value = "chartExport")
     public void chartExport(String sn, Date startDate, Date endDate, HttpServletResponse response) throws Exception {
@@ -321,16 +342,22 @@ public class MesProductLeakagePointStatController extends BaseController {
         if (startDate != null) query.setCreateDate_gte(startDate);
         if (endDate != null) query.setCreateDate_lte(endOfDay(endDate));
         List<MesProductHf> records = mesProductHfService.findList(query);
-        if (StringUtils.isBlank(dataType) || "all".equals(dataType) || "leakagePoint".equals(dataType)) return records;
-        return new ArrayList<>();
+        if (StringUtils.isBlank(dataType) || "all".equals(dataType)) return records;
+        List<MesProductHf> filteredRecords = new ArrayList<>();
+        for (MesProductHf record : records) {
+            if (matchesDataType(record.getOprno(), dataType)) filteredRecords.add(record);
+        }
+        return filteredRecords;
     }
 
-    /** Keeps leak-point records separate while grouping gas-tightness records by their inspection station. */
+    /** Uses the same station groups as the title displayed on the gas-tightness record page. */
     private boolean matchesDataType(String oprno, String dataType) {
-        if (StringUtils.isBlank(dataType) || "all".equals(dataType) || "leakagePoint".equals(dataType)) return true;
+        if (StringUtils.isBlank(dataType) || "all".equals(dataType)) return true;
         String station = CommonUitl.formatOprno(oprno);
-        if ("semiFinished".equals(dataType)) return "INSP030".equals(station) || "INSP080".equals(station);
-        return "finishedPackage".equals(dataType) && "INSP090".equals(station);
+        if ("framework".equals(dataType)) return "INSP030".equals(station);
+        if ("semiFinished".equals(dataType)) return "INSP080".equals(station);
+        if ("finishedPackage".equals(dataType)) return "INSP090".equals(station);
+        return false;
     }
 
     /** Date-only filters are inclusive of the selected end date, matching the detection-record page. */

+ 70 - 1
src/main/java/com/jeesite/modules/mes/web/MesProductQmController.java

@@ -5,13 +5,18 @@ import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.ArrayList;
 import java.util.Comparator;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import com.alibaba.fastjson.JSON;
 import com.jeesite.common.lang.ObjectUtils;
 import com.jeesite.common.lang.StringUtils;
+import com.jeesite.common.mybatis.mapper.query.QueryType;
 import com.jeesite.modules.mes.entity.MesProductQmwy;
 import com.jeesite.modules.mes.req.MesSearchDateReq;
 import com.jeesite.modules.mes.resp.CommonResp;
@@ -39,7 +44,9 @@ import org.springframework.web.multipart.MultipartFile;
 import com.jeesite.common.web.BaseController;
 import com.jeesite.modules.mes.entity.MesProductQm;
 import com.jeesite.modules.mes.entity.MesProductHf;
+import com.jeesite.modules.mes.entity.MesProductRecord;
 import com.jeesite.modules.mes.service.MesProductHfService;
+import com.jeesite.modules.mes.service.MesProductRecordService;
 import com.jeesite.modules.mes.service.MesProductQmService;
 
 /**
@@ -56,6 +63,9 @@ public class MesProductQmController extends BaseController {
 
 	@Autowired
 	private MesProductHfService mesProductHfService;
+
+	@Autowired
+	private MesProductRecordService mesProductRecordService;
 	
 	/**
 	 * 获取数据
@@ -87,6 +97,9 @@ public class MesProductQmController extends BaseController {
 	public Page<MesProductQm> listData(MesProductQm mesProductQm, HttpServletRequest request, HttpServletResponse response) {
 		// 气密仪记录和客户端漏点记录分别存储,列表统一展示为同一数据结构。
 		List<MesProductQm> records = new ArrayList<>(mesProductQmService.findList(mesProductQm));
+		for (MesProductQm record : records) {
+			record.setTitle(CommonUitl.resolveQmTitle(record.getOprno(), record.getTitle()));
+		}
 
 		MesProductHf hfQuery = new MesProductHf();
 		hfQuery.setSn(mesProductQm.getComponentNum());
@@ -98,7 +111,16 @@ public class MesProductQmController extends BaseController {
 		if (testTimeGte != null) hfQuery.setCreateDate_gte(testTimeGte);
 		if (testTimeLte != null) hfQuery.setCreateDate_lte(testTimeLte);
 
+		Map<String, Set<String>> leakagePointsByProduct = new HashMap<>();
 		for (MesProductHf hf : mesProductHfService.findList(hfQuery)) {
+			Set<String> leakagePoints = leakagePointsByProduct.computeIfAbsent(
+					leakagePointKey(hf.getSn(), hf.getOprno()), key -> new LinkedHashSet<>());
+			for (String leakagePoint : normalizeLeakPointLabels(hf.getHfFlag()).split(",")) {
+				if (StringUtils.isNotBlank(leakagePoint)) {
+					leakagePoints.add(leakagePoint.trim());
+				}
+			}
+
 			if (StringUtils.isNotBlank(mesProductQm.getLeakagePoint())
 					&& !containsLeakPoint(hf.getHfFlag(), mesProductQm.getLeakagePoint())) {
 				continue;
@@ -112,10 +134,51 @@ public class MesProductQmController extends BaseController {
 			record.setTestTime(hf.getCreateDate());
 			record.setLeakagePoint(normalizeLeakPointLabels(hf.getHfFlag()));
 			record.setTestResult(hf.getResult());
-			record.setTitle("漏点标记");
+			record.setTitle(CommonUitl.resolveQmTitle(hf.getOprno(), "漏点标记"));
 			records.add(record);
 		}
 
+		// INSP030A/B writes the overall air-tightness result to the production record.
+		String[] targetOprnos = {"INSP030A", "INSP030B"};
+		List<String> selectedOprnos = new ArrayList<>();
+		String oprnoFilter = mesProductQm.getOprno();
+		for (String targetOprno : targetOprnos) {
+			if (StringUtils.isBlank(oprnoFilter) || targetOprno.contains(oprnoFilter.trim())) {
+				selectedOprnos.add(targetOprno);
+			}
+		}
+		if (!selectedOprnos.isEmpty()) {
+			MesProductRecord productRecordQuery = new MesProductRecord();
+			productRecordQuery.setSn(mesProductQm.getComponentNum());
+			productRecordQuery.setLineSn(mesProductQm.getProductCate());
+			productRecordQuery.setContent(mesProductQm.getTestResult());
+			productRecordQuery.setUpdateDate_gte(testTimeGte);
+			productRecordQuery.setUpdateDate_lte(testTimeLte);
+			productRecordQuery.getSqlMap().getWhere()
+					.and("a.oprno", QueryType.IN, selectedOprnos)
+					.and("a.craft", QueryType.EQ, "100000");
+
+			for (MesProductRecord productRecord : mesProductRecordService.findList(productRecordQuery)) {
+				String leakagePoint = String.join(",", leakagePointsByProduct.getOrDefault(
+						leakagePointKey(productRecord.getSn(), productRecord.getOprno()), new LinkedHashSet<>()));
+				if (StringUtils.isNotBlank(mesProductQm.getLeakagePoint())
+						&& !containsLeakPoint(leakagePoint, mesProductQm.getLeakagePoint())) {
+					continue;
+				}
+				MesProductQm record = new MesProductQm();
+				record.setId(productRecord.getId());
+				record.setComponentNum(productRecord.getSn());
+				record.setProductCate(productRecord.getLineSn());
+				record.setOprno(productRecord.getOprno());
+				record.setWorkNum(productRecord.getCreateBy());
+				record.setTestTime(productRecord.getUpdateDate());
+				record.setLeakagePoint(leakagePoint);
+				record.setTestResult(productRecord.getContent());
+				record.setTitle(CommonUitl.resolveQmTitle(productRecord.getOprno(), "气密检测"));
+				records.add(record);
+			}
+		}
+
 		records.sort(Comparator.comparing(MesProductQm::getTestTime,
 				Comparator.nullsLast(Comparator.reverseOrder())));
 
@@ -163,6 +226,10 @@ public class MesProductQmController extends BaseController {
 		return false;
 	}
 
+	private String leakagePointKey(String sn, String oprno) {
+		return StringUtils.defaultString(sn) + "|" + StringUtils.defaultString(oprno);
+	}
+
 	/**
 	 * 查看编辑表单
 	 */
@@ -180,6 +247,7 @@ public class MesProductQmController extends BaseController {
 	@PostMapping(value = "save")
 	@ResponseBody
 	public String save(@Validated MesProductQm mesProductQm) {
+		mesProductQm.setTitle(CommonUitl.resolveQmTitle(mesProductQm.getOprno(), mesProductQm.getTitle()));
 		mesProductQmService.save(mesProductQm);
 		return renderResult(Global.TRUE, text("保存气密检测记录成功!"));
 	}
@@ -257,6 +325,7 @@ public class MesProductQmController extends BaseController {
 //		mesProductQm.setTestPressureUnit("Pa");
 //		mesProductQm.setTestResult("OK");
 //		mesProductQm.setTestTime(new Date());
+		mesProductQm.setTitle(CommonUitl.resolveQmTitle(mesProductQm.getOprno(), mesProductQm.getTitle()));
 		mesProductQmService.add(mesProductQm);
 		return renderResult(Global.TRUE, text("操作成功!"));
 	}

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

@@ -3860,7 +3860,7 @@ public class MesProductRecordController extends BaseController {
 			mesProductQm.setTestResult(result);
 			mesProductQm.setTestTime(CommonUitl.String2DateTime(testTime));
 			mesProductQm.setProgramNo(cxm);
-			mesProductQm.setTitle(title);
+			mesProductQm.setTitle(CommonUitl.resolveQmTitle(oprno, title));
 			mesProductQm.setRemark(remark);
 			mesProductQmService.add(mesProductQm);
 

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 1
src/main/resources/views/modules/mes/mesProductLeakagePointStatChart.html