Procházet zdrojové kódy

来料检显示问题优化

liuwei před 2 měsíci
rodič
revize
56fe5c7a2a

+ 1 - 6
src/main/java/com/jeesite/modules/mes/entity/MesMaterialReport.java

@@ -41,13 +41,8 @@ import java.util.Date;
 				columns={
 						@Column(name="title", attrName="title", label="名称"),
 				}),
-		@JoinTable(type= JoinTable.Type.LEFT_JOIN, entity=MesMaterialCheckRecord.class, attrName="this", alias="c",
-				on="c.sn = a.sn",
-				columns={
-						@Column(name="state", attrName="checkResult", label="检查结果"),
-				}),
 		@JoinTable(type= JoinTable.Type.LEFT_JOIN, entity=MesMaterial.class, attrName="this", alias="d",
-				on="d.erp_sn = SUBSTRING_INDEX(a.sn, '_', 1)",
+				on="d.erp_sn = SUBSTRING_INDEX(SUBSTRING_INDEX(a.sn, ',', 4), ',', -1)",
 				columns={
 						@Column(name="title", attrName="productName", label="产品名称"),
 				}),

+ 37 - 2
src/main/java/com/jeesite/modules/mes/service/MesMaterialReportService.java

@@ -1,13 +1,18 @@
 package com.jeesite.modules.mes.service;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import com.jeesite.common.entity.Page;
+import com.jeesite.common.lang.ObjectUtils;
+import com.jeesite.common.lang.StringUtils;
 import com.jeesite.common.service.CrudService;
+import com.jeesite.modules.mes.entity.MesMaterialCheckRecord;
 import com.jeesite.modules.mes.entity.MesMaterialReport;
 import com.jeesite.modules.mes.dao.MesMaterialReportDao;
 import com.jeesite.common.service.ServiceException;
@@ -28,6 +33,8 @@ public class MesMaterialReportService extends CrudService<MesMaterialReportDao,
 
 	@Autowired
 	private MesMaterialReportDao mesMaterialReportDao;
+	@Autowired
+	private MesMaterialCheckRecordService mesMaterialCheckRecordService;
 	/**
 	 * 获取单条数据
 	 * @param mesMaterialReport
@@ -50,7 +57,9 @@ public class MesMaterialReportService extends CrudService<MesMaterialReportDao,
 	 */
 	@Override
 	public Page<MesMaterialReport> findPage(MesMaterialReport mesMaterialReport) {
-		return super.findPage(mesMaterialReport);
+		Page<MesMaterialReport> page = super.findPage(mesMaterialReport);
+		fillCheckResult(page.getList());
+		return page;
 	}
 	
 	/**
@@ -60,7 +69,33 @@ public class MesMaterialReportService extends CrudService<MesMaterialReportDao,
 	 */
 	@Override
 	public List<MesMaterialReport> findList(MesMaterialReport mesMaterialReport) {
-		return super.findList(mesMaterialReport);
+		List<MesMaterialReport> list = super.findList(mesMaterialReport);
+		fillCheckResult(list);
+		return list;
+	}
+
+	/**
+	 * 按报检状态补全检查结果,避免 JOIN 检查表导致 N×M 行数放大。
+	 */
+	private void fillCheckResult(List<MesMaterialReport> list) {
+		if (list == null || list.isEmpty()) {
+			return;
+		}
+		Map<String, String> latestCheckStateBySn = new HashMap<>();
+		for (MesMaterialReport report : list) {
+			if (!"1".equals(report.getState()) || StringUtils.isBlank(report.getSn())) {
+				report.setCheckResult(null);
+				continue;
+			}
+			String sn = report.getSn().trim();
+			if (!latestCheckStateBySn.containsKey(sn)) {
+				MesMaterialCheckRecord query = new MesMaterialCheckRecord();
+				query.setSn(sn);
+				MesMaterialCheckRecord latest = mesMaterialCheckRecordService.findInfo(query);
+				latestCheckStateBySn.put(sn, ObjectUtils.isEmpty(latest) ? null : latest.getState());
+			}
+			report.setCheckResult(latestCheckStateBySn.get(sn));
+		}
 	}
 	
 	/**

+ 21 - 15
src/main/java/com/jeesite/modules/mes/web/MesMaterialCheckRecordController.java

@@ -106,8 +106,9 @@ public class MesMaterialCheckRecordController extends BaseController {
 	 */
 	@RequiresPermissions("mes:mesMaterialCheckRecord:view")
 	@RequestMapping(value = "form")
-	public String form(MesMaterialCheckRecord mesMaterialCheckRecord, Model model) {
+	public String form(MesMaterialCheckRecord mesMaterialCheckRecord, Model model, HttpServletRequest req) {
 		model.addAttribute("mesMaterialCheckRecord", mesMaterialCheckRecord);
+		model.addAttribute("reportId", StringUtils.defaultString(req.getParameter("reportId")));
 		return "modules/mes/mesMaterialCheckRecordForm";
 	}
 
@@ -149,22 +150,27 @@ public class MesMaterialCheckRecordController extends BaseController {
 		if (StringUtils.isBlank(mesMaterialCheckRecord.getNums()) && StringUtils.isNotBlank(mesMaterialCheckRecord.getFaNums())) {
 			mesMaterialCheckRecord.setNums(mesMaterialCheckRecord.getFaNums());
 		}
-		mesMaterialCheckRecordService.save(mesMaterialCheckRecord);
 
-		// 更新报检编号相同的都更新
-		MesMaterialReport mesMaterialReport = new MesMaterialReport();
-		mesMaterialReport.setSn(mesMaterialCheckRecord.getSn().trim());
-		List<MesMaterialReport> reports = mesMaterialReportService.findList(mesMaterialReport);
-		logger.info("reports:"+JSON.toJSONString(reports));
-		if(!ListUtils.isEmpty(reports)){
-			for(MesMaterialReport mesMaterialReport1:reports){
-				mesMaterialReport1.setHgQty(mesMaterialCheckRecord.getHgQty());
-				mesMaterialReport1.setBhgQty(mesMaterialCheckRecord.getBhgQty());
-				if("0".equals(mesMaterialReport1.getState())){
-					mesMaterialReport1.setState("1");
-				}
-				mesMaterialReportService.update(mesMaterialReport1);
+		// 按报检唯一 id 防重,并只回写该条报检
+		String reportId = req.getParameter("reportId");
+		MesMaterialReport targetReport = null;
+		if (StringUtils.isNotBlank(reportId)) {
+			targetReport = mesMaterialReportService.get(new MesMaterialReport(reportId));
+			if (ObjectUtils.isEmpty(targetReport)) {
+				return renderResult(Global.FALSE, text("报检记录不存在!"));
 			}
+			if ("1".equals(targetReport.getState())) {
+				return renderResult(Global.FALSE, text("该报检记录已检查,请勿重复保存!"));
+			}
+		}
+
+		mesMaterialCheckRecordService.save(mesMaterialCheckRecord);
+
+		if (!ObjectUtils.isEmpty(targetReport)) {
+			targetReport.setHgQty(mesMaterialCheckRecord.getHgQty());
+			targetReport.setBhgQty(mesMaterialCheckRecord.getBhgQty());
+			targetReport.setState("1");
+			mesMaterialReportService.update(targetReport);
 		}
 
 		for (int i=0;i<mecheck.size();i=i+1){

+ 1 - 0
src/main/resources/views/modules/mes/mesMaterialCheckRecordForm.html

@@ -12,6 +12,7 @@
 		<#form:form id="inputForm" model="${mesMaterialCheckRecord}" action="${ctx}/mes/mesMaterialCheckRecord/save" method="post" class="form-horizontal">
 			<div class="box-body" id="app">
 				<#form:hidden path="id"/>
+				<input type="hidden" name="reportId" value="${reportId!}">
 				<div class="row">
 						<div class="col-xs-12">
 							<div class="form-group">

+ 3 - 3
src/main/resources/views/modules/mes/mesMaterialReportList.html

@@ -84,8 +84,8 @@ $('#dataGrid').dataGrid({
 		{header:'${text("状态")}', name:'state', index:'a.state', width:100, align:"center", formatter: function(val, obj, row, act){
 			return js.getDictLabel(${@DictUtils.getDictListJson('material_report_state')}, val, '${text("未知")}', true);
 		}},
-		{header:'${text("检查结果")}', name:'checkResult', index:'c.state', width:100, align:"center", formatter: function(val, obj, row, act){
-			if(val == null || val == ''){
+		{header:'${text("检查结果")}', name:'checkResult', width:100, align:"center", formatter: function(val, obj, row, act){
+			if(row.state != '1' || val == null || val == ''){
 				return '';
 			}
 			return js.getDictLabel(${@DictUtils.getDictListJson('mes_material_check_record_state')}, val, '', true);
@@ -101,7 +101,7 @@ $('#dataGrid').dataGrid({
 				actions.push('<a href="${ctx}/mes/mesMaterialReport/delete?id='+row.id+'" class="btnList" title="${text("删除来料报检")}" data-confirm="${text("确认要删除该来料报检吗?")}"><i class="fa fa-trash-o"></i></a>&nbsp;');
 			//<% } %>
 			//<% if(hasPermi('mes:mesMaterialCheckRecord:view')){ %>
-				actions.push('<a href="${ctx}/mes/mesMaterialCheckRecord/form?sn='+encodeURIComponent(row.sn||'')+'" class="btnList" title="${text("来料检查")}"><i class="fa fa-check-square-o"></i></a>&nbsp;');
+				actions.push('<a href="${ctx}/mes/mesMaterialCheckRecord/form?sn='+encodeURIComponent(row.sn||'')+'&reportId='+encodeURIComponent(row.id||'')+'" class="btnList" title="${text("来料检查")}"><i class="fa fa-check-square-o"></i></a>&nbsp;');
 			//<% } %>
 			return actions.join('');
 		}}