Преглед изворни кода

套筒压接上传逻辑修改

hou пре 1 недеља
родитељ
комит
97049be32b
36 измењених фајлова са 20363 додато и 723 уклоњено
  1. 3 1
      db/mes_product_rivet.sql
  2. 1 2
      src/main/java/com/jeesite/modules/mes/dao/MesProductRivetDao.java
  3. 13 1
      src/main/java/com/jeesite/modules/mes/entity/MesProductRivet.java
  4. 51 0
      src/main/java/com/jeesite/modules/mes/service/MesProductCateService.java
  5. 13 18
      src/main/java/com/jeesite/modules/mes/service/MesProductRivetService.java
  6. 76 2
      src/main/java/com/jeesite/modules/mes/web/MesProductRecordController.java
  7. 6 0
      src/main/java/com/jeesite/modules/utils/ErrorMsg.java
  8. 6 5
      src/main/resources/config/application.yml
  9. 0 18
      src/main/resources/mappings/modules/mes/MesProductRivetDao.xml
  10. 6 1
      src/main/resources/views/modules/mes/mesLineList.html
  11. 7 0
      src/main/resources/views/modules/mes/mesProductRivetList.html
  12. BIN
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesProductRecordDao.class
  13. BIN
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesProductRivetDao.class
  14. BIN
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/entity/MesProductRivet.class
  15. BIN
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/service/MesLineProcessMaterialService.class
  16. BIN
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/service/MesProductCateService.class
  17. BIN
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/service/MesProductRecordService.class
  18. BIN
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/service/MesProductRivetService.class
  19. BIN
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/web/MesProductController.class
  20. BIN
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/web/MesProductRecordController.class
  21. BIN
      src/main/webapp/WEB-INF/classes/com/jeesite/modules/utils/ErrorMsg.class
  22. 6 2
      src/main/webapp/WEB-INF/classes/config/application.yml
  23. BIN
      src/main/webapp/WEB-INF/classes/logs/debug.2026-06-05.0.log.zip
  24. BIN
      src/main/webapp/WEB-INF/classes/logs/debug.2026-06-06.0.log.zip
  25. BIN
      src/main/webapp/WEB-INF/classes/logs/debug.2026-06-07.0.log.zip
  26. BIN
      src/main/webapp/WEB-INF/classes/logs/debug.2026-06-08.0.log.zip
  27. BIN
      src/main/webapp/WEB-INF/classes/logs/debug.2026-06-09.0.log.zip
  28. BIN
      src/main/webapp/WEB-INF/classes/logs/debug.2026-06-10.0.log.zip
  29. 19432 653
      src/main/webapp/WEB-INF/classes/logs/debug.log
  30. 696 0
      src/main/webapp/WEB-INF/classes/logs/error.log
  31. 10 1
      src/main/webapp/WEB-INF/classes/mappings/modules/mes/MesProductRecordDao.xml
  32. 0 18
      src/main/webapp/WEB-INF/classes/mappings/modules/mes/MesProductRivetDao.xml
  33. 6 1
      src/main/webapp/WEB-INF/classes/views/modules/mes/mesLineList.html
  34. 7 0
      src/main/webapp/WEB-INF/classes/views/modules/mes/mesProductRivetList.html
  35. 12 0
      target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
  36. 12 0
      target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst

+ 3 - 1
db/mes_product_rivet.sql

@@ -4,6 +4,7 @@ CREATE TABLE IF NOT EXISTS mes_product_rivet (
     line_sn      VARCHAR(30)   NOT NULL COMMENT '产线编号',
     line_sn      VARCHAR(30)   NOT NULL COMMENT '产线编号',
     oprno        VARCHAR(20)   NOT NULL COMMENT '工位号',
     oprno        VARCHAR(20)   NOT NULL COMMENT '工位号',
     point_no     INT           NOT NULL COMMENT '铆接点序号(1-7)',
     point_no     INT           NOT NULL COMMENT '铆接点序号(1-7)',
+    batch_id     VARCHAR(64)   NULL COMMENT '上传批次号(同一次 batchUpload 相同)',
     result       VARCHAR(4)    NOT NULL COMMENT 'OK/NG',
     result       VARCHAR(4)    NOT NULL COMMENT 'OK/NG',
     stroke       DECIMAL(10,3) NULL COMMENT '行程值',
     stroke       DECIMAL(10,3) NULL COMMENT '行程值',
     pressure     DECIMAL(10,3) NULL COMMENT '压力值',
     pressure     DECIMAL(10,3) NULL COMMENT '压力值',
@@ -13,5 +14,6 @@ CREATE TABLE IF NOT EXISTS mes_product_rivet (
     create_date  DATETIME      NULL COMMENT '上传时间',
     create_date  DATETIME      NULL COMMENT '上传时间',
     update_by    VARCHAR(64)   NULL,
     update_by    VARCHAR(64)   NULL,
     update_date  DATETIME      NULL,
     update_date  DATETIME      NULL,
-    UNIQUE KEY uk_sn_line_oprno_point (sn, line_sn, oprno, point_no)
+    KEY idx_rivet_sn_batch (sn, batch_id),
+    KEY idx_rivet_sn_line_oprno_point (sn, line_sn, oprno, point_no)
 ) COMMENT='套筒压铆过程参数';
 ) COMMENT='套筒压铆过程参数';

+ 1 - 2
src/main/java/com/jeesite/modules/mes/dao/MesProductRivetDao.java

@@ -5,10 +5,9 @@ import com.jeesite.common.mybatis.annotation.MyBatisDao;
 import com.jeesite.modules.mes.entity.MesProductRivet;
 import com.jeesite.modules.mes.entity.MesProductRivet;
 
 
 /**
 /**
- * 套筒压铆过程参数DAO
+ * 套筒压铆过程参数Dao
  */
  */
 @MyBatisDao
 @MyBatisDao
 public interface MesProductRivetDao extends CrudDao<MesProductRivet> {
 public interface MesProductRivetDao extends CrudDao<MesProductRivet> {
 
 
-	MesProductRivet findByUniqueKey(MesProductRivet query);
 }
 }

+ 13 - 1
src/main/java/com/jeesite/modules/mes/entity/MesProductRivet.java

@@ -21,6 +21,7 @@ import java.util.Date;
 		@Column(name = "line_sn", attrName = "lineSn", label = "产线编号"),
 		@Column(name = "line_sn", attrName = "lineSn", label = "产线编号"),
 		@Column(name = "oprno", attrName = "oprno", label = "工位号"),
 		@Column(name = "oprno", attrName = "oprno", label = "工位号"),
 		@Column(name = "point_no", attrName = "pointNo", label = "铆接点序号"),
 		@Column(name = "point_no", attrName = "pointNo", label = "铆接点序号"),
+		@Column(name = "batch_id", attrName = "batchId", label = "上传批次"),
 		@Column(name = "result", attrName = "result", label = "结果"),
 		@Column(name = "result", attrName = "result", label = "结果"),
 		@Column(name = "stroke", attrName = "stroke", label = "行程值"),
 		@Column(name = "stroke", attrName = "stroke", label = "行程值"),
 		@Column(name = "pressure", attrName = "pressure", label = "压力值"),
 		@Column(name = "pressure", attrName = "pressure", label = "压力值"),
@@ -30,7 +31,7 @@ import java.util.Date;
 		@Column(name = "create_date", attrName = "createDate", label = "上传时间", isUpdate = false, isUpdateForce = true),
 		@Column(name = "create_date", attrName = "createDate", label = "上传时间", isUpdate = false, isUpdateForce = true),
 		@Column(name = "update_by", attrName = "updateBy", label = "更新人"),
 		@Column(name = "update_by", attrName = "updateBy", label = "更新人"),
 		@Column(name = "update_date", attrName = "updateDate", label = "更新时间", isUpdateForce = true),
 		@Column(name = "update_date", attrName = "updateDate", label = "更新时间", isUpdateForce = true),
-}, orderBy = "a.create_date DESC")
+}, orderBy = "a.create_date DESC, a.point_no ASC")
 public class MesProductRivet extends DataEntity<MesProductRivet> {
 public class MesProductRivet extends DataEntity<MesProductRivet> {
 
 
 	private static final long serialVersionUID = 1L;
 	private static final long serialVersionUID = 1L;
@@ -38,6 +39,7 @@ public class MesProductRivet extends DataEntity<MesProductRivet> {
 	private String lineSn;
 	private String lineSn;
 	private String oprno;
 	private String oprno;
 	private Integer pointNo;
 	private Integer pointNo;
+	private String batchId;
 	private String result;
 	private String result;
 	private Double stroke;
 	private Double stroke;
 	private Double pressure;
 	private Double pressure;
@@ -49,6 +51,7 @@ public class MesProductRivet extends DataEntity<MesProductRivet> {
 			@ExcelField(title = "产线编号", attrName = "lineSn", align = Align.CENTER, sort = 30),
 			@ExcelField(title = "产线编号", attrName = "lineSn", align = Align.CENTER, sort = 30),
 			@ExcelField(title = "工位号", attrName = "oprno", align = Align.CENTER, sort = 40),
 			@ExcelField(title = "工位号", attrName = "oprno", align = Align.CENTER, sort = 40),
 			@ExcelField(title = "铆接点", attrName = "pointNo", align = Align.CENTER, sort = 50),
 			@ExcelField(title = "铆接点", attrName = "pointNo", align = Align.CENTER, sort = 50),
+			@ExcelField(title = "上传批次", attrName = "batchId", align = Align.CENTER, sort = 55),
 			@ExcelField(title = "结果", attrName = "result", align = Align.CENTER, sort = 60),
 			@ExcelField(title = "结果", attrName = "result", align = Align.CENTER, sort = 60),
 			@ExcelField(title = "行程值", attrName = "stroke", align = Align.CENTER, sort = 70),
 			@ExcelField(title = "行程值", attrName = "stroke", align = Align.CENTER, sort = 70),
 			@ExcelField(title = "压力值", attrName = "pressure", align = Align.CENTER, sort = 80),
 			@ExcelField(title = "压力值", attrName = "pressure", align = Align.CENTER, sort = 80),
@@ -99,6 +102,15 @@ public class MesProductRivet extends DataEntity<MesProductRivet> {
 		this.pointNo = pointNo;
 		this.pointNo = pointNo;
 	}
 	}
 
 
+	@Size(min = 0, max = 64, message = "上传批次长度不能超过 64 个字符")
+	public String getBatchId() {
+		return batchId;
+	}
+
+	public void setBatchId(String batchId) {
+		this.batchId = batchId;
+	}
+
 	@Size(min = 0, max = 4, message = "结果长度不能超过 4 个字符")
 	@Size(min = 0, max = 4, message = "结果长度不能超过 4 个字符")
 	public String getResult() {
 	public String getResult() {
 		return result;
 		return result;

+ 51 - 0
src/main/java/com/jeesite/modules/mes/service/MesProductCateService.java

@@ -4,6 +4,7 @@ import java.util.List;
 
 
 import com.jeesite.common.collect.ListUtils;
 import com.jeesite.common.collect.ListUtils;
 import com.jeesite.common.config.Global;
 import com.jeesite.common.config.Global;
+import com.jeesite.common.lang.StringUtils;
 import com.jeesite.common.service.ServiceException;
 import com.jeesite.common.service.ServiceException;
 import com.jeesite.modules.mes.entity.MesProductModel;
 import com.jeesite.modules.mes.entity.MesProductModel;
 import com.jeesite.modules.mes.entity.MesProductStorageRecord;
 import com.jeesite.modules.mes.entity.MesProductStorageRecord;
@@ -160,4 +161,54 @@ public class MesProductCateService extends CrudService<MesProductCateDao, MesPro
 	}
 	}
 
 
 
 
+	/**
+	 * 当前产线是否允许该工件 SN 加工。
+	 * 参数为空时不限制;仅对指定产线(如 XT)生效。
+	 */
+	public boolean isCurrentProductAllowed(String lineSn, String sn) {
+		// 可按产线扩展不同 config key
+		String configKey = "mes.line." + lineSn.toLowerCase() + ".currentProduct";
+		String currentProduct = Global.getConfig(configKey);
+		if (StringUtils.isEmpty(currentProduct)) {
+			return true; // 参数为空,两种都可生产
+		}
+		currentProduct = currentProduct.trim();
+		// 扫描件实际类型
+		MesProductCate scannedCate = getCateBySn(sn);
+		if (ObjectUtils.isEmpty(scannedCate)) {
+			// 识别不了类型,交给后面 NE/GS 等原有逻辑
+			return true;
+		}
+		// 将参数解析为「允许的类型编号」
+		String allowedCateSn = resolveCateSnByConfig(currentProduct);
+		if (StringUtils.isEmpty(allowedCateSn)) {
+			// 参数配错了:建议打日志并放行,避免整线误停
+			logger.warn("currentProduct 配置无效: key={}, value={}", configKey, currentProduct);
+			return true;
+		}
+		return allowedCateSn.equals(scannedCate.getSn());
+	}
+	/**
+	 * 参数值可以是类型编号(sn) 或 规格(spec)
+	 */
+	private String resolveCateSnByConfig(String configValue) {
+		MesProductCate query = new MesProductCate();
+		query.setStatus("0");
+		// 1. 按类型编号查
+		query.setSn(configValue);
+		List<MesProductCate> list = findList(query);
+		if (!ListUtils.isEmpty(list)) {
+			return list.get(0).getSn();
+		}
+		// 2. 按规格查
+		query.setSn(null);
+		query.setSpec(configValue);
+		list = findList(query);
+		if (!ListUtils.isEmpty(list)) {
+			return list.get(0).getSn();
+		}
+		return null;
+	}
+
+
 }
 }

+ 13 - 18
src/main/java/com/jeesite/modules/mes/service/MesProductRivetService.java

@@ -3,6 +3,7 @@ package com.jeesite.modules.mes.service;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import com.jeesite.common.entity.Page;
 import com.jeesite.common.entity.Page;
+import com.jeesite.common.idgen.IdGen;
 import com.jeesite.common.lang.StringUtils;
 import com.jeesite.common.lang.StringUtils;
 import com.jeesite.common.service.CrudService;
 import com.jeesite.common.service.CrudService;
 import com.jeesite.common.service.ServiceException;
 import com.jeesite.common.service.ServiceException;
@@ -24,9 +25,6 @@ import java.util.List;
 public class MesProductRivetService extends CrudService<MesProductRivetDao, MesProductRivet> {
 public class MesProductRivetService extends CrudService<MesProductRivetDao, MesProductRivet> {
 
 
 	@Autowired
 	@Autowired
-	private MesProductRivetDao mesProductRivetDao;
-
-	@Autowired
 	private MesLineProcessService mesLineProcessService;
 	private MesLineProcessService mesLineProcessService;
 
 
 	@Override
 	@Override
@@ -64,6 +62,8 @@ public class MesProductRivetService extends CrudService<MesProductRivetDao, MesP
 			throw new ServiceException(text("子工位未配置!"));
 			throw new ServiceException(text("子工位未配置!"));
 		}
 		}
 
 
+		String batchId = IdGen.nextId();
+		Date recordTime = new Date();
 		for (int i = 0; i < paramsArr.size(); i++) {
 		for (int i = 0; i < paramsArr.size(); i++) {
 			JSONObject obj = paramsArr.getJSONObject(i);
 			JSONObject obj = paramsArr.getJSONObject(i);
 			int pointNo = obj.getIntValue("pointNo");
 			int pointNo = obj.getIntValue("pointNo");
@@ -71,34 +71,29 @@ public class MesProductRivetService extends CrudService<MesProductRivetDao, MesP
 			Double stroke = obj.containsKey("stroke") ? obj.getDouble("stroke") : null;
 			Double stroke = obj.containsKey("stroke") ? obj.getDouble("stroke") : null;
 			Double pressure = obj.containsKey("pressure") ? obj.getDouble("pressure") : null;
 			Double pressure = obj.containsKey("pressure") ? obj.getDouble("pressure") : null;
 			Integer holdTime = obj.containsKey("holdTime") ? obj.getIntValue("holdTime") : null;
 			Integer holdTime = obj.containsKey("holdTime") ? obj.getIntValue("holdTime") : null;
-			saveOrUpdatePoint(sn, lineSn, storageOprno, pointNo, result, stroke, pressure, holdTime, userCode);
+			insertPointHistory(sn, lineSn, storageOprno, batchId, pointNo, result, stroke, pressure, holdTime,
+					recordTime, userCode);
 		}
 		}
 	}
 	}
 
 
-	private void saveOrUpdatePoint(String sn, String lineSn, String oprno, int pointNo, String result,
-	                               Double stroke, Double pressure, Integer holdTime, String userCode) {
-		MesProductRivet query = new MesProductRivet();
-		query.setSn(sn);
-		query.setLineSn(lineSn);
-		query.setOprno(oprno);
-		query.setPointNo(pointNo);
-		MesProductRivet exist = mesProductRivetDao.findByUniqueKey(query);
-
-		MesProductRivet entity = exist != null ? exist : new MesProductRivet();
+	/** 每次上传新增一条历史记录,同一 batchId 归属同一次加工 */
+	private void insertPointHistory(String sn, String lineSn, String oprno, String batchId, int pointNo, String result,
+	                                Double stroke, Double pressure, Integer holdTime, Date recordTime,
+	                                String userCode) {
+		MesProductRivet entity = new MesProductRivet();
 		entity.setSn(sn);
 		entity.setSn(sn);
 		entity.setLineSn(lineSn);
 		entity.setLineSn(lineSn);
 		entity.setOprno(oprno);
 		entity.setOprno(oprno);
 		entity.setPointNo(pointNo);
 		entity.setPointNo(pointNo);
+		entity.setBatchId(batchId);
 		entity.setResult(result);
 		entity.setResult(result);
 		entity.setStroke(stroke);
 		entity.setStroke(stroke);
 		entity.setPressure(pressure);
 		entity.setPressure(pressure);
 		entity.setHoldTime(holdTime);
 		entity.setHoldTime(holdTime);
-		entity.setRecordTime(new Date());
+		entity.setRecordTime(recordTime);
 		if (StringUtils.isNotEmpty(userCode)) {
 		if (StringUtils.isNotEmpty(userCode)) {
+			entity.setCreateBy(userCode);
 			entity.setUpdateBy(userCode);
 			entity.setUpdateBy(userCode);
-			if (exist == null) {
-				entity.setCreateBy(userCode);
-			}
 		}
 		}
 		super.save(entity);
 		super.save(entity);
 	}
 	}

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

@@ -58,8 +58,10 @@ import com.jeesite.modules.mes.resp.MesShiftDataResp;
 import com.jeesite.modules.mes.resp.ParamsResp;
 import com.jeesite.modules.mes.resp.ParamsResp;
 import com.jeesite.modules.mes.service.*;
 import com.jeesite.modules.mes.service.*;
 import com.jeesite.modules.mes.util.CommonUitl;
 import com.jeesite.modules.mes.util.CommonUitl;
+import com.jeesite.modules.sys.entity.Config;
 import com.jeesite.modules.sys.entity.DictData;
 import com.jeesite.modules.sys.entity.DictData;
 import com.jeesite.modules.sys.entity.User;
 import com.jeesite.modules.sys.entity.User;
+import com.jeesite.modules.sys.service.ConfigService;
 import com.jeesite.modules.sys.utils.DictUtils;
 import com.jeesite.modules.sys.utils.DictUtils;
 import com.jeesite.modules.sys.utils.UserUtils;
 import com.jeesite.modules.sys.utils.UserUtils;
 import com.jeesite.modules.utils.*;
 import com.jeesite.modules.utils.*;
@@ -92,6 +94,7 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
 import com.jeesite.common.config.Global;
 import com.jeesite.common.config.Global;
+import com.jeesite.common.idgen.IdGen;
 import com.jeesite.common.entity.Page;
 import com.jeesite.common.entity.Page;
 import com.jeesite.common.web.BaseController;
 import com.jeesite.common.web.BaseController;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartFile;
@@ -219,6 +222,8 @@ public class MesProductRecordController extends BaseController {
     private MesProductSampleService mesProductSampleService;
     private MesProductSampleService mesProductSampleService;
 	@Autowired
 	@Autowired
 	private MesProductSampleRecordService mesProductSampleRecordService;
 	private MesProductSampleRecordService mesProductSampleRecordService;
+	@Autowired
+	private ConfigService configService;
 
 
 
 
 	/**
 	/**
@@ -460,6 +465,13 @@ public class MesProductRecordController extends BaseController {
 			return renderResult(Global.FALSE, text("工件码格式不正确!"));
 			return renderResult(Global.FALSE, text("工件码格式不正确!"));
 		}
 		}
 
 
+		// 按工件码识别类型(智界/尚界),产线编号仍为 XT
+		MesProductCate mesProductCate = mesProductCateService.getCateBySn(mesProductRecord.getSn());
+		if(ObjectUtils.isEmpty(mesProductCate)){
+			return renderResult(Global.FALSE, text("无法识别工件类型!"));
+		}
+		String cateSn = mesProductCate.getSn();
+
 		// 获取上线工位
 		// 获取上线工位
 		MesLineProcess mesLineProcess1 = mesLineProcessService.getOnLineOprno(mesLine.getSn());
 		MesLineProcess mesLineProcess1 = mesLineProcessService.getOnLineOprno(mesLine.getSn());
 		if(ObjectUtils.isEmpty(mesLineProcess1)){
 		if(ObjectUtils.isEmpty(mesLineProcess1)){
@@ -470,7 +482,7 @@ public class MesProductRecordController extends BaseController {
 
 
 			mesProductRecord.setOprno(mesLineProcess1.getOprno());
 			mesProductRecord.setOprno(mesLineProcess1.getOprno());
 			mesProductRecord.setLineSn(mesLineProcess1.getLineSn());
 			mesProductRecord.setLineSn(mesLineProcess1.getLineSn());
-			mesProductRecord.setCateSn(mesLine.getProductCate());
+			mesProductRecord.setCateSn(cateSn);
 
 
 			mesProductRecordService.add(mesProductRecord,params,null);
 			mesProductRecordService.add(mesProductRecord,params,null);
 		}catch (Exception e){
 		}catch (Exception e){
@@ -1096,6 +1108,20 @@ public class MesProductRecordController extends BaseController {
 			return ret;
 			return ret;
 		}
 		}
 
 
+		// ========== 新增:当前产线生产类型限制 ==========
+		if (!mesProductCateService.isCurrentProductAllowed(lineSn, sn)) {
+			MesProductCate scannedCate = mesProductCateService.getCateBySn(sn);
+			if (!ObjectUtils.isEmpty(scannedCate)) {
+				if ("SJXT".equalsIgnoreCase(scannedCate.getSn())) {
+					return bs + "ST";  // 当前工件:尚界
+				}
+				if ("ZJXT".equalsIgnoreCase(scannedCate.getSn())) {
+					return bs + "ZT";  // 当前工件:智界
+				}
+			}
+			return bs + "CT";  // 兜底:无法识别类型
+		}
+
 		if(mesLineProcess1.getType().equals("3")){ // 单部件
 		if(mesLineProcess1.getType().equals("3")){ // 单部件
 			// 万能码逻辑
 			// 万能码逻辑
 			String universalSn = Global.getConfig("mes.universal.sn");
 			String universalSn = Global.getConfig("mes.universal.sn");
@@ -3477,7 +3503,7 @@ private MesProductProdVisual2Service mesProductProdVisual2Service;
 		// 01;工号;序号(条码);工序名称(工位号);资源名称;设备编码;工治具编码;
 		// 01;工号;序号(条码);工序名称(工位号);资源名称;设备编码;工治具编码;
 		String commandString = req.getParameter("commandString");
 		String commandString = req.getParameter("commandString");
 		logger.info("commandString:"+commandString);
 		logger.info("commandString:"+commandString);
-		mesLogService.apisave2("OP440","XT",commandString,req);
+		mesLogService.apisave2("OP350","XT",commandString,req);
 
 
 		if (commandString == null || commandString.isEmpty()) {
 		if (commandString == null || commandString.isEmpty()) {
 			return CommonUitl.getXml("NG;参数错误;");
 			return CommonUitl.getXml("NG;参数错误;");
@@ -3820,4 +3846,52 @@ private MesProductProdVisual2Service mesProductProdVisual2Service;
 		return resp;
 		return resp;
 	}
 	}
 
 
+	@PostMapping(value = "changeLine")
+	@ResponseBody
+	public CommonResp changeLine(String lineSn, String currentProduct, HttpServletRequest request) {
+		CommonResp<String> resp = new CommonResp<>();
+		if (StringUtils.isEmpty(lineSn)) {
+			resp.setResult(Global.FALSE);
+			resp.setMessage("产线编号不能为空");
+			return resp;
+		}
+		String configKey = "mes.line." + lineSn.toLowerCase() + ".currentProduct";
+		// 可选:校验 currentProduct(空=不限制;或 ZJXT/SJXT/规格)
+		if (!StringUtils.isEmpty(currentProduct)) {
+			currentProduct = currentProduct.trim();
+			// 可按 mesProductCateService.resolveCateSnByConfig 校验是否合法
+		} else {
+			currentProduct = ""; // 明确置空 = 两种都可生产
+		}
+		try {
+			// 按 config_key 查 js_sys_config(get 只按主键 id 查,需用 findList)
+			Config query = new Config();
+			query.setConfigKey(configKey);
+			List<Config> configList = configService.findList(query);
+			Config config = ListUtils.isEmpty(configList) ? null : configList.get(0);
+			if (config == null) {
+				config = new Config();
+				config.setId(IdGen.nextId());
+				config.setIsNewRecord(true);
+				config.setConfigName(lineSn + "产线-当前生产工件类型");
+				config.setConfigKey(configKey);
+				config.setIsSys("0");
+				config.setRemarks("智界:ZJXT,尚界:SJXT,为空则两者都可生产");
+			}
+			// 更新参数值
+			config.setConfigValue(currentProduct);
+			configService.save(config);
+			// 关键:清缓存,否则 Global.getConfig 可能还是旧值
+			Global.clearCache();
+			resp.setResult(Global.TRUE);
+			resp.setMessage("切换成功");
+			resp.setData(StringUtils.isEmpty(currentProduct) ? "不限" : currentProduct);
+		} catch (Exception e) {
+			logger.error("changeLine error", e);
+			resp.setResult(Global.FALSE);
+			resp.setMessage("切换失败:" + e.getMessage());
+		}
+		return resp;
+	}
+
 }
 }

+ 6 - 0
src/main/java/com/jeesite/modules/utils/ErrorMsg.java

@@ -56,6 +56,12 @@ public class ErrorMsg {
                 lmsg = "请先上传照片";
                 lmsg = "请先上传照片";
             } else if (processMsgRet.equalsIgnoreCase("SJ")) {
             } else if (processMsgRet.equalsIgnoreCase("SJ")) {
                 lmsg = "OKNG样件未进行开班点检";
                 lmsg = "OKNG样件未进行开班点检";
+            } else if (processMsgRet.equalsIgnoreCase("ST")) {
+                lmsg = "工件类型错误,当前工件:尚界";
+            } else if (processMsgRet.equalsIgnoreCase("ZT")) {
+                lmsg = "工件类型错误,当前工件:智界";
+            } else if (processMsgRet.equalsIgnoreCase("CT")) {
+                lmsg = "工件类型错误";  // 兜底
             }
             }
         }catch (Exception e){ }
         }catch (Exception e){ }
         return lmsg;
         return lmsg;

+ 6 - 5
src/main/resources/config/application.yml

@@ -54,12 +54,12 @@ jdbc:
   # Mysql 数据库配置
   # Mysql 数据库配置
   type: mysql
   type: mysql
   driver: com.mysql.cj.jdbc.Driver
   driver: com.mysql.cj.jdbc.Driver
-  url: jdbc:mysql://192.168.16.100:3306/mes_cloud?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
 #  url: jdbc:mysql://192.168.16.100:3306/mes_cloud?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
 #  url: jdbc:mysql://192.168.16.100:3306/mes_cloud?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
-  username: mes_cloud
-  password: Aw3EYLj5GcHnrFm8
-#  username: root
-#  password: 123456
+  url: jdbc:mysql://127.0.0.1:3306/mes_cloud_199_0y7a?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
+#  username: mes_cloud
+#  password: Aw3EYLj5GcHnrFm8
+  username: root
+  password: 123456
 
 
   testSql: SELECT 1
   testSql: SELECT 1
 
 
@@ -687,6 +687,7 @@ shiro:
     ${adminPath}/mes/mesProductRecord/pcresult = anon
     ${adminPath}/mes/mesProductRecord/pcresult = anon
     ${adminPath}/mes/mesProductRecord/pccheck = anon
     ${adminPath}/mes/mesProductRecord/pccheck = anon
     ${adminPath}/mes/mesProductRecord/pccreate = anon
     ${adminPath}/mes/mesProductRecord/pccreate = anon
+    ${adminPath}/mes/mesProductRecord/changeLine = anon
     ${adminPath}/** = user
     ${adminPath}/** = user
 
 
 
 

+ 0 - 18
src/main/resources/mappings/modules/mes/MesProductRivetDao.xml

@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.jeesite.modules.mes.dao.MesProductRivetDao">
-
-	<select id="findByUniqueKey" resultType="com.jeesite.modules.mes.entity.MesProductRivet">
-		SELECT
-			id, sn, line_sn, oprno, point_no, result,
-			stroke, pressure, hold_time, record_time,
-			create_by, create_date, update_by, update_date
-		FROM mes_product_rivet
-		WHERE sn = #{sn}
-		  AND line_sn = #{lineSn}
-		  AND oprno = #{oprno}
-		  AND point_no = #{pointNo}
-		LIMIT 1
-	</select>
-
-</mapper>

+ 6 - 1
src/main/resources/views/modules/mes/mesLineList.html

@@ -57,7 +57,12 @@ $('#dataGrid').dataGrid({
 		// {header:'${text("质量检查规则")}', name:'rules', index:'a.rules', width:150, align:"center"},
 		// {header:'${text("质量检查规则")}', name:'rules', index:'a.rules', width:150, align:"center"},
 		// {header:'${text("排班班次json")}', name:'classes', index:'a.classes', width:150, align:"left"},
 		// {header:'${text("排班班次json")}', name:'classes', index:'a.classes', width:150, align:"left"},
 		{header:'${text("产线编号")}', name:'sn', index:'a.sn', width:150, align:"center"},
 		{header:'${text("产线编号")}', name:'sn', index:'a.sn', width:150, align:"center"},
-		{header:'${text("生产工件")}', name:'productTitle', index:'b.title', width:150, align:"center"},
+		{header:'${text("生产工件")}', name:'productTitle', index:'b.title', width:150, align:"center", formatter: function(val, obj, row, act){
+				if (row.sn === 'XT') {
+					return '智界81度 / 尚界81度';
+				}
+				return val || '';
+			}},
 		{header:'${text("状态")}', name:'status', index:'a.status', width:150, align:"center", formatter: function(val, obj, row, act){
 		{header:'${text("状态")}', name:'status', index:'a.status', width:150, align:"center", formatter: function(val, obj, row, act){
 			return js.getDictLabel(${@DictUtils.getDictListJson('sys_search_status')}, val, '${text("未知")}', true);
 			return js.getDictLabel(${@DictUtils.getDictListJson('sys_search_status')}, val, '${text("未知")}', true);
 		}},
 		}},

+ 7 - 0
src/main/resources/views/modules/mes/mesProductRivetList.html

@@ -33,6 +33,12 @@
 					</div>
 					</div>
 				</div>
 				</div>
 				<div class="form-group">
 				<div class="form-group">
+					<label class="control-label">${text('上传批次')}:</label>
+					<div class="control-inline">
+						<#form:input path="batchId" maxlength="64" class="form-control width-200"/>
+					</div>
+				</div>
+				<div class="form-group">
 					<label class="control-label">${text('铆接点')}:</label>
 					<label class="control-label">${text('铆接点')}:</label>
 					<div class="control-inline">
 					<div class="control-inline">
 						<#form:input path="pointNo" maxlength="2" class="form-control width-80"/>
 						<#form:input path="pointNo" maxlength="2" class="form-control width-80"/>
@@ -78,6 +84,7 @@ $('#dataGrid').dataGrid({
 		{header:'${text("工件码")}', name:'sn', index:'a.sn', width:320, align:"center", frozen:true},
 		{header:'${text("工件码")}', name:'sn', index:'a.sn', width:320, align:"center", frozen:true},
 		{header:'${text("产线编号")}', name:'lineSn', index:'a.line_sn', width:100, align:"center"},
 		{header:'${text("产线编号")}', name:'lineSn', index:'a.line_sn', width:100, align:"center"},
 		{header:'${text("工位号")}', name:'oprno', index:'a.oprno', width:100, align:"center"},
 		{header:'${text("工位号")}', name:'oprno', index:'a.oprno', width:100, align:"center"},
+		{header:'${text("上传批次")}', name:'batchId', index:'a.batch_id', width:180, align:"center"},
 		{header:'${text("铆接点")}', name:'pointNo', index:'a.point_no', width:80, align:"center"},
 		{header:'${text("铆接点")}', name:'pointNo', index:'a.point_no', width:80, align:"center"},
 		{header:'${text("结果")}', name:'result', index:'a.result', width:80, align:"center"},
 		{header:'${text("结果")}', name:'result', index:'a.result', width:80, align:"center"},
 		{header:'${text("行程值")}', name:'stroke', index:'a.stroke', width:100, align:"center"},
 		{header:'${text("行程值")}', name:'stroke', index:'a.stroke', width:100, align:"center"},

BIN
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesProductRecordDao.class


BIN
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/dao/MesProductRivetDao.class


BIN
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/entity/MesProductRivet.class


BIN
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/service/MesLineProcessMaterialService.class


BIN
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/service/MesProductCateService.class


BIN
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/service/MesProductRecordService.class


BIN
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/service/MesProductRivetService.class


BIN
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/web/MesProductController.class


BIN
src/main/webapp/WEB-INF/classes/com/jeesite/modules/mes/web/MesProductRecordController.class


BIN
src/main/webapp/WEB-INF/classes/com/jeesite/modules/utils/ErrorMsg.class


+ 6 - 2
src/main/webapp/WEB-INF/classes/config/application.yml

@@ -54,8 +54,8 @@ jdbc:
   # Mysql 数据库配置
   # Mysql 数据库配置
   type: mysql
   type: mysql
   driver: com.mysql.cj.jdbc.Driver
   driver: com.mysql.cj.jdbc.Driver
-  url: jdbc:mysql://127.0.0.1:3306/mes_cloud_199_0y7a?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
 #  url: jdbc:mysql://192.168.16.100:3306/mes_cloud?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
 #  url: jdbc:mysql://192.168.16.100:3306/mes_cloud?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
+  url: jdbc:mysql://127.0.0.1:3306/mes_cloud_199_0y7a?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
 #  username: mes_cloud
 #  username: mes_cloud
 #  password: Aw3EYLj5GcHnrFm8
 #  password: Aw3EYLj5GcHnrFm8
   username: root
   username: root
@@ -567,7 +567,7 @@ shiro:
   # 记住我密钥设置,你可以通过 com.jeesite.test.RememberMeKeyGen 类快速生成一个秘钥。
   # 记住我密钥设置,你可以通过 com.jeesite.test.RememberMeKeyGen 类快速生成一个秘钥。
   # 若不设置,则每次启动系统后自动生成一个新秘钥,这样会导致每次重启后,客户端记录的用户信息将失效。
   # 若不设置,则每次启动系统后自动生成一个新秘钥,这样会导致每次重启后,客户端记录的用户信息将失效。
   rememberMe:
   rememberMe:
-    secretKey: gIGwjNiyB+V3hS5CuhZwOw==
+    secretKey: YPYKGC6TFoTNtIzIc0DJoQ==
 
 
 #  # 指定获取客户端IP的Header名称,防止IP伪造。指定为空,则使用原生方法获取IP。
 #  # 指定获取客户端IP的Header名称,防止IP伪造。指定为空,则使用原生方法获取IP。
 #  remoteAddrHeaderName: X-Forwarded-For
 #  remoteAddrHeaderName: X-Forwarded-For
@@ -623,6 +623,9 @@ shiro:
     ${adminPath}/mes/mesProduct/screenData = anon
     ${adminPath}/mes/mesProduct/screenData = anon
     ${adminPath}/mes/mesProductCcd/testDate = anon
     ${adminPath}/mes/mesProductCcd/testDate = anon
     ${adminPath}/mes/mesProductCcd/add = anon
     ${adminPath}/mes/mesProductCcd/add = anon
+    ${adminPath}/mes/mesProductRecord/result = anon
+    ${adminPath}/mes/mesProductRecord/process  = anon
+    ${adminPath}/mes/mesProductRecord/yamao  = anon
     ${adminPath}/mes/mesProductRecord/currentProduct = anon
     ${adminPath}/mes/mesProductRecord/currentProduct = anon
     ${adminPath}/mes/mesProductFsw/add = anon
     ${adminPath}/mes/mesProductFsw/add = anon
     ${adminPath}/mes/mesProductProd/batchsave = anon
     ${adminPath}/mes/mesProductProd/batchsave = anon
@@ -684,6 +687,7 @@ shiro:
     ${adminPath}/mes/mesProductRecord/pcresult = anon
     ${adminPath}/mes/mesProductRecord/pcresult = anon
     ${adminPath}/mes/mesProductRecord/pccheck = anon
     ${adminPath}/mes/mesProductRecord/pccheck = anon
     ${adminPath}/mes/mesProductRecord/pccreate = anon
     ${adminPath}/mes/mesProductRecord/pccreate = anon
+    ${adminPath}/mes/mesProductRecord/changeLine = anon
     ${adminPath}/** = user
     ${adminPath}/** = user
 
 
 
 

BIN
src/main/webapp/WEB-INF/classes/logs/debug.2026-06-05.0.log.zip


BIN
src/main/webapp/WEB-INF/classes/logs/debug.2026-06-06.0.log.zip


BIN
src/main/webapp/WEB-INF/classes/logs/debug.2026-06-07.0.log.zip


BIN
src/main/webapp/WEB-INF/classes/logs/debug.2026-06-08.0.log.zip


BIN
src/main/webapp/WEB-INF/classes/logs/debug.2026-06-09.0.log.zip


BIN
src/main/webapp/WEB-INF/classes/logs/debug.2026-06-10.0.log.zip


Разлика између датотеке није приказан због своје велике величине
+ 19432 - 653
src/main/webapp/WEB-INF/classes/logs/debug.log


Разлика између датотеке није приказан због своје велике величине
+ 696 - 0
src/main/webapp/WEB-INF/classes/logs/error.log


+ 10 - 1
src/main/webapp/WEB-INF/classes/mappings/modules/mes/MesProductRecordDao.xml

@@ -40,6 +40,15 @@
         WHERE a.oprno != b.oprno AND (a.create_date BETWEEN "2025-03-01 00:00:00" AND "2025-04-01 00:00:00")  AND a.oprno IN("OP220","OP230","OP240","OP280","OP290","OP300")
         WHERE a.oprno != b.oprno AND (a.create_date BETWEEN "2025-03-01 00:00:00" AND "2025-04-01 00:00:00")  AND a.oprno IN("OP220","OP230","OP240","OP280","OP290","OP300")
             LIMIT 20000
             LIMIT 20000
     </select>
     </select>
+    <select id="findRecordCountByOprnos" resultType="java.util.HashMap">
+        SELECT oprno, COUNT(1) AS recordCount
+        FROM mes_product_record
+        WHERE oprno IN
+        <foreach collection="oprnos" item="oprno" open="(" separator="," close=")">
+            #{oprno}
+        </foreach>
+        GROUP BY oprno
+    </select>
     <update id="updateAll">
     <update id="updateAll">
        update mes_product_record
        update mes_product_record
        set content=#{content},materiel_sn=#{materielSn}
        set content=#{content},materiel_sn=#{materielSn}
@@ -49,4 +58,4 @@
         update mes_product_record set content =#{content}
         update mes_product_record set content =#{content}
         where sn = #{sn} and oprno = #{oprno} and line_sn = #{lineSn} and craft = #{craft}
         where sn = #{sn} and oprno = #{oprno} and line_sn = #{lineSn} and craft = #{craft}
     </update>
     </update>
-</mapper>
+</mapper>

+ 0 - 18
src/main/webapp/WEB-INF/classes/mappings/modules/mes/MesProductRivetDao.xml

@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.jeesite.modules.mes.dao.MesProductRivetDao">
-
-	<select id="findByUniqueKey" resultType="com.jeesite.modules.mes.entity.MesProductRivet">
-		SELECT
-			id, sn, line_sn, oprno, point_no, result,
-			stroke, pressure, hold_time, record_time,
-			create_by, create_date, update_by, update_date
-		FROM mes_product_rivet
-		WHERE sn = #{sn}
-		  AND line_sn = #{lineSn}
-		  AND oprno = #{oprno}
-		  AND point_no = #{pointNo}
-		LIMIT 1
-	</select>
-
-</mapper>

+ 6 - 1
src/main/webapp/WEB-INF/classes/views/modules/mes/mesLineList.html

@@ -57,7 +57,12 @@ $('#dataGrid').dataGrid({
 		// {header:'${text("质量检查规则")}', name:'rules', index:'a.rules', width:150, align:"center"},
 		// {header:'${text("质量检查规则")}', name:'rules', index:'a.rules', width:150, align:"center"},
 		// {header:'${text("排班班次json")}', name:'classes', index:'a.classes', width:150, align:"left"},
 		// {header:'${text("排班班次json")}', name:'classes', index:'a.classes', width:150, align:"left"},
 		{header:'${text("产线编号")}', name:'sn', index:'a.sn', width:150, align:"center"},
 		{header:'${text("产线编号")}', name:'sn', index:'a.sn', width:150, align:"center"},
-		{header:'${text("生产工件")}', name:'productTitle', index:'b.title', width:150, align:"center"},
+		{header:'${text("生产工件")}', name:'productTitle', index:'b.title', width:150, align:"center", formatter: function(val, obj, row, act){
+				if (row.sn === 'XT') {
+					return '智界81度 / 尚界81度';
+				}
+				return val || '';
+			}},
 		{header:'${text("状态")}', name:'status', index:'a.status', width:150, align:"center", formatter: function(val, obj, row, act){
 		{header:'${text("状态")}', name:'status', index:'a.status', width:150, align:"center", formatter: function(val, obj, row, act){
 			return js.getDictLabel(${@DictUtils.getDictListJson('sys_search_status')}, val, '${text("未知")}', true);
 			return js.getDictLabel(${@DictUtils.getDictListJson('sys_search_status')}, val, '${text("未知")}', true);
 		}},
 		}},

+ 7 - 0
src/main/webapp/WEB-INF/classes/views/modules/mes/mesProductRivetList.html

@@ -33,6 +33,12 @@
 					</div>
 					</div>
 				</div>
 				</div>
 				<div class="form-group">
 				<div class="form-group">
+					<label class="control-label">${text('上传批次')}:</label>
+					<div class="control-inline">
+						<#form:input path="batchId" maxlength="64" class="form-control width-200"/>
+					</div>
+				</div>
+				<div class="form-group">
 					<label class="control-label">${text('铆接点')}:</label>
 					<label class="control-label">${text('铆接点')}:</label>
 					<div class="control-inline">
 					<div class="control-inline">
 						<#form:input path="pointNo" maxlength="2" class="form-control width-80"/>
 						<#form:input path="pointNo" maxlength="2" class="form-control width-80"/>
@@ -78,6 +84,7 @@ $('#dataGrid').dataGrid({
 		{header:'${text("工件码")}', name:'sn', index:'a.sn', width:320, align:"center", frozen:true},
 		{header:'${text("工件码")}', name:'sn', index:'a.sn', width:320, align:"center", frozen:true},
 		{header:'${text("产线编号")}', name:'lineSn', index:'a.line_sn', width:100, align:"center"},
 		{header:'${text("产线编号")}', name:'lineSn', index:'a.line_sn', width:100, align:"center"},
 		{header:'${text("工位号")}', name:'oprno', index:'a.oprno', width:100, align:"center"},
 		{header:'${text("工位号")}', name:'oprno', index:'a.oprno', width:100, align:"center"},
+		{header:'${text("上传批次")}', name:'batchId', index:'a.batch_id', width:180, align:"center"},
 		{header:'${text("铆接点")}', name:'pointNo', index:'a.point_no', width:80, align:"center"},
 		{header:'${text("铆接点")}', name:'pointNo', index:'a.point_no', width:80, align:"center"},
 		{header:'${text("结果")}', name:'result', index:'a.result', width:80, align:"center"},
 		{header:'${text("结果")}', name:'result', index:'a.result', width:80, align:"center"},
 		{header:'${text("行程值")}', name:'stroke', index:'a.stroke', width:100, align:"center"},
 		{header:'${text("行程值")}', name:'stroke', index:'a.stroke', width:100, align:"center"},

+ 12 - 0
target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst

@@ -62,6 +62,7 @@ com\jeesite\modules\mes\dao\MesRobotDao.class
 com\jeesite\modules\mes\dao\MesProcessProductDao.class
 com\jeesite\modules\mes\dao\MesProcessProductDao.class
 com\jeesite\modules\mes\web\MesProductHeliumController.class
 com\jeesite\modules\mes\web\MesProductHeliumController.class
 com\jeesite\modules\mes\dao\MesCheckItemsDao.class
 com\jeesite\modules\mes\dao\MesCheckItemsDao.class
+com\jeesite\modules\mes\dao\MesProductProdVisualDao.class
 com\jeesite\modules\mes\web\MesElectricTorqueInfoController.class
 com\jeesite\modules\mes\web\MesElectricTorqueInfoController.class
 com\jeesite\modules\mes\dao\MesMaterialThRecordDao.class
 com\jeesite\modules\mes\dao\MesMaterialThRecordDao.class
 com\jeesite\modules\mes\entity\MesDocumentCate.class
 com\jeesite\modules\mes\entity\MesDocumentCate.class
@@ -95,6 +96,7 @@ com\jeesite\modules\mes\entity\MesProductModel.class
 com\jeesite\modules\mes\resp\MesCheckItemsFailResp.class
 com\jeesite\modules\mes\resp\MesCheckItemsFailResp.class
 com\jeesite\modules\mes\entity\MesProcessCheck.class
 com\jeesite\modules\mes\entity\MesProcessCheck.class
 com\jeesite\modules\mes\entity\MesRepairOprno.class
 com\jeesite\modules\mes\entity\MesRepairOprno.class
+com\jeesite\modules\mes\service\MesProductProdVisualService.class
 com\jeesite\modules\mes\web\MesTemplateController.class
 com\jeesite\modules\mes\web\MesTemplateController.class
 com\jeesite\modules\mes\service\MesDeviceService.class
 com\jeesite\modules\mes\service\MesDeviceService.class
 com\jeesite\modules\mes\service\MesElectricTorqueService.class
 com\jeesite\modules\mes\service\MesElectricTorqueService.class
@@ -222,6 +224,7 @@ com\jeesite\modules\mes\web\MesDeviceUrgencyController.class
 com\jeesite\modules\scheduling\Site.class
 com\jeesite\modules\scheduling\Site.class
 com\jeesite\modules\mes\entity\MesHwdgTime.class
 com\jeesite\modules\mes\entity\MesHwdgTime.class
 com\jeesite\modules\mes\service\MesProductSampleRecordService.class
 com\jeesite\modules\mes\service\MesProductSampleRecordService.class
+com\jeesite\modules\mes\web\MesProductProdVisualController.class
 com\jeesite\modules\mes\resp\XwdDuts.class
 com\jeesite\modules\mes\resp\XwdDuts.class
 com\jeesite\modules\mes\dao\MesDeviceTaskUserDao.class
 com\jeesite\modules\mes\dao\MesDeviceTaskUserDao.class
 com\jeesite\modules\mes\web\MesMaterialLlRecordController.class
 com\jeesite\modules\mes\web\MesMaterialLlRecordController.class
@@ -281,6 +284,7 @@ com\jeesite\modules\mes\dao\MesProductGummingDao.class
 com\jeesite\modules\mes\web\MesProductCcdResultController.class
 com\jeesite\modules\mes\web\MesProductCcdResultController.class
 com\jeesite\modules\mes\service\MesPeriodicMaintenanceService.class
 com\jeesite\modules\mes\service\MesPeriodicMaintenanceService.class
 com\jeesite\modules\mes\entity\MesProductParts.class
 com\jeesite\modules\mes\entity\MesProductParts.class
+com\jeesite\modules\mes\entity\MesProductRivet.class
 com\jeesite\modules\mes\service\MesApprovalNodeService.class
 com\jeesite\modules\mes\service\MesApprovalNodeService.class
 com\jeesite\modules\mes\web\MesIconsController.class
 com\jeesite\modules\mes\web\MesIconsController.class
 com\jeesite\modules\test\web\TestTreeController.class
 com\jeesite\modules\test\web\TestTreeController.class
@@ -344,6 +348,8 @@ com\jeesite\modules\mes\dao\MesProductProdDao.class
 com\jeesite\modules\mes\service\MesBatchSnService.class
 com\jeesite\modules\mes\service\MesBatchSnService.class
 com\jeesite\modules\mes\service\MesGlueRecordService.class
 com\jeesite\modules\mes\service\MesGlueRecordService.class
 com\jeesite\modules\mes\service\MesDeviceLogService.class
 com\jeesite\modules\mes\service\MesDeviceLogService.class
+com\jeesite\modules\mes\entity\MesProductProdVisual.class
+com\jeesite\modules\mes\web\MesProductRivetController.class
 com\jeesite\modules\mes\service\MesLogService.class
 com\jeesite\modules\mes\service\MesLogService.class
 com\jeesite\modules\mes\dao\MesMaterialLlRecordDao.class
 com\jeesite\modules\mes\dao\MesMaterialLlRecordDao.class
 com\jeesite\modules\mes\dao\MesProcessAlarmDao.class
 com\jeesite\modules\mes\dao\MesProcessAlarmDao.class
@@ -370,6 +376,7 @@ com\jeesite\modules\mes\web\MesMaterialRkRecordItemsController.class
 com\jeesite\modules\mes\dao\MesJbLogDao.class
 com\jeesite\modules\mes\dao\MesJbLogDao.class
 com\jeesite\modules\mes\entity\MesMaterialCheckRecord.class
 com\jeesite\modules\mes\entity\MesMaterialCheckRecord.class
 com\jeesite\modules\mes\dao\MesProductMppDao.class
 com\jeesite\modules\mes\dao\MesProductMppDao.class
+com\jeesite\modules\mes\service\MesProductRivetService.class
 com\jeesite\modules\mes\service\MesDeviceTaskUserService.class
 com\jeesite\modules\mes\service\MesDeviceTaskUserService.class
 com\jeesite\modules\mes\web\MesWarehouseRefundController.class
 com\jeesite\modules\mes\web\MesWarehouseRefundController.class
 com\jeesite\modules\mes\dao\MesDeviceLogDao.class
 com\jeesite\modules\mes\dao\MesDeviceLogDao.class
@@ -400,6 +407,7 @@ com\jeesite\modules\mes\service\MesShiftService.class
 com\jeesite\modules\mes\resp\XwdTests.class
 com\jeesite\modules\mes\resp\XwdTests.class
 com\jeesite\modules\mes\entity\MesRepairItems.class
 com\jeesite\modules\mes\entity\MesRepairItems.class
 com\jeesite\modules\mes\dao\MesMaterialBfRecordDao.class
 com\jeesite\modules\mes\dao\MesMaterialBfRecordDao.class
+com\jeesite\modules\mes\dao\MesProductRivetDao.class
 com\jeesite\modules\mes\dao\MesCustomerDao.class
 com\jeesite\modules\mes\dao\MesCustomerDao.class
 com\jeesite\modules\mes\web\MesGlueController.class
 com\jeesite\modules\mes\web\MesGlueController.class
 com\jeesite\modules\mes\service\MesProductCmtService.class
 com\jeesite\modules\mes\service\MesProductCmtService.class
@@ -467,6 +475,7 @@ com\jeesite\modules\mes\service\MesProcessRecordService.class
 com\jeesite\modules\mes\web\MesPlanController.class
 com\jeesite\modules\mes\web\MesPlanController.class
 com\jeesite\modules\mes\entity\MesProductDbjBind.class
 com\jeesite\modules\mes\entity\MesProductDbjBind.class
 com\jeesite\modules\mes\web\MesSopWayController.class
 com\jeesite\modules\mes\web\MesSopWayController.class
+com\jeesite\modules\mes\dao\MesProductProdVisual2Dao.class
 com\jeesite\modules\mes\service\MesElectricTorqueInfoService.class
 com\jeesite\modules\mes\service\MesElectricTorqueInfoService.class
 com\jeesite\modules\mes\service\MesDeviceConsumableRecordService.class
 com\jeesite\modules\mes\service\MesDeviceConsumableRecordService.class
 com\jeesite\modules\mes\entity\MesApproval.class
 com\jeesite\modules\mes\entity\MesApproval.class
@@ -562,6 +571,7 @@ com\jeesite\modules\mes\dao\MesProductRecordUserDao.class
 com\jeesite\modules\mes\entity\MesRecover.class
 com\jeesite\modules\mes\entity\MesRecover.class
 com\jeesite\modules\mes\service\MesProductHbService.class
 com\jeesite\modules\mes\service\MesProductHbService.class
 com\jeesite\modules\mes\web\MesMaterialCkLogController.class
 com\jeesite\modules\mes\web\MesMaterialCkLogController.class
+com\jeesite\modules\mes\web\MesProductProdVisual2Controller.class
 com\jeesite\modules\scheduling\ProductGh.class
 com\jeesite\modules\scheduling\ProductGh.class
 com\jeesite\modules\mes\service\MesMaterialRkRecordItemsService.class
 com\jeesite\modules\mes\service\MesMaterialRkRecordItemsService.class
 com\jeesite\modules\mes\entity\MesApp.class
 com\jeesite\modules\mes\entity\MesApp.class
@@ -569,6 +579,7 @@ com\jeesite\modules\mes\web\MesMaterialBfRecordItemsController.class
 com\jeesite\modules\mes\req\MesDeviceStateReq.class
 com\jeesite\modules\mes\req\MesDeviceStateReq.class
 com\jeesite\modules\mes\dao\MesBatchSnDao.class
 com\jeesite\modules\mes\dao\MesBatchSnDao.class
 com\jeesite\modules\mes\dao\MesLineProcessUserDao.class
 com\jeesite\modules\mes\dao\MesLineProcessUserDao.class
+com\jeesite\modules\mes\service\MesProductProdVisual2Service.class
 com\jeesite\modules\mes\entity\MesUserSkill.class
 com\jeesite\modules\mes\entity\MesUserSkill.class
 com\jeesite\modules\mes\dao\MesMaterialLlRecordItemsDao.class
 com\jeesite\modules\mes\dao\MesMaterialLlRecordItemsDao.class
 com\jeesite\modules\mes\service\MesDeviceUrgencyService.class
 com\jeesite\modules\mes\service\MesDeviceUrgencyService.class
@@ -625,6 +636,7 @@ com\jeesite\modules\mes\dao\MesProductDhbDao.class
 com\jeesite\modules\mes\dao\MesProductStorageRecordDao.class
 com\jeesite\modules\mes\dao\MesProductStorageRecordDao.class
 com\jeesite\modules\mes\resp\MesCheckFormResp.class
 com\jeesite\modules\mes\resp\MesCheckFormResp.class
 com\jeesite\modules\mes\dao\MesProductQualityDao.class
 com\jeesite\modules\mes\dao\MesProductQualityDao.class
+com\jeesite\modules\mes\entity\MesProductProdVisual2.class
 com\jeesite\modules\mes\util\CommonUitl.class
 com\jeesite\modules\mes\util\CommonUitl.class
 com\jeesite\modules\mes\dao\MesHwdgTimeDao.class
 com\jeesite\modules\mes\dao\MesHwdgTimeDao.class
 com\jeesite\modules\mes\entity\MesCheck.class
 com\jeesite\modules\mes\entity\MesCheck.class

+ 12 - 0
target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst

@@ -1,5 +1,6 @@
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesShippRecord.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesShippRecord.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesProductBsDao.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesProductBsDao.java
+D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\service\MesProductRivetService.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesLogUselessController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesLogUselessController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesApply.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesApply.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesBatchSnController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesBatchSnController.java
@@ -9,6 +10,7 @@ D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesSopWay.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesSopWay.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesRobotDao.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesRobotDao.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesProductLeakagePointController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesProductLeakagePointController.java
+D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesProductProdVisualDao.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesDevicePrevent.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesDevicePrevent.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\resp\MesWarehouseResp.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\resp\MesWarehouseResp.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\service\MesMaterialLlRecordService.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\service\MesMaterialLlRecordService.java
@@ -155,6 +157,7 @@ D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\service\MesDeviceTaskFormService.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\service\MesDeviceTaskFormService.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\service\MesDeviceLogService.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\service\MesDeviceLogService.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesMaterialLlRecordItems.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesMaterialLlRecordItems.java
+D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\service\MesProductProdVisualService.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesGlue.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesGlue.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesProductCheckTestController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesProductCheckTestController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesProductDhbDao.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesProductDhbDao.java
@@ -215,9 +218,11 @@ D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\resp
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\service\MesCheckService.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\service\MesCheckService.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesElectricTorqueDao.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesElectricTorqueDao.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesProductDingDao.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesProductDingDao.java
+D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesProductProdVisualController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\utils\ReadCsvUtils.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\utils\ReadCsvUtils.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesIpqcDao.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesIpqcDao.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesCcdInspection.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesCcdInspection.java
+D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesProductRivetController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesMaterialThRecordItemsController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesMaterialThRecordItemsController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\utils\HttpUtils.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\utils\HttpUtils.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesMaterialCheckRecord.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesMaterialCheckRecord.java
@@ -307,6 +312,7 @@ D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesProductPartsController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesProductPartsController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesDocumentCateDao.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesDocumentCateDao.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesMaterialBfRecordDao.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesMaterialBfRecordDao.java
+D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesProductRivet.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesProductCheckTestDao.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesProductCheckTestDao.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\service\MesProductGlueService.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\service\MesProductGlueService.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesProductHbController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesProductHbController.java
@@ -375,6 +381,7 @@ D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesRecoverController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesRecoverController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesDeviceStateController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesDeviceStateController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesShippOrderDao.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesShippOrderDao.java
+D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesProductProdVisual2.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesTemplateItemsController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesTemplateItemsController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\Test.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\Test.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesWarehouseOutItemsDao.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesWarehouseOutItemsDao.java
@@ -422,6 +429,7 @@ D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\serv
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesDeviceCateDao.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesDeviceCateDao.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\service\MesGp12RecordService.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\service\MesGp12RecordService.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\scheduling\DeviceCheckFirstScheduling.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\scheduling\DeviceCheckFirstScheduling.java
+D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesProductRivetDao.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesDeviceUrgencyController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesDeviceUrgencyController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\service\MesProductQualityService.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\service\MesProductQualityService.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesMaterialReport.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesMaterialReport.java
@@ -616,6 +624,7 @@ D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\enti
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesProductLeakagePoint.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesProductLeakagePoint.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesDeviceFormController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesDeviceFormController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesProcessCheck.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesProcessCheck.java
+D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesProductProdVisual2Controller.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesQualityDao.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesQualityDao.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesRepairQuality.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesRepairQuality.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesDeviceTaskController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesDeviceTaskController.java
@@ -684,6 +693,7 @@ D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\service\MesRepairQualityService.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\service\MesRepairQualityService.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesElectricTorqueInfoDao.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesElectricTorqueInfoDao.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesProcessCheckGz.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesProcessCheckGz.java
+D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesProductProdVisual.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesProductModifyRecord.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesProductModifyRecord.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesProductCateController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesProductCateController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\config\BaseConfig.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\config\BaseConfig.java
@@ -708,6 +718,8 @@ D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesGlueController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesGlueController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesMaterialPrebindController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesMaterialPrebindController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesProductCcdController.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\web\MesProductCcdController.java
+D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesProductProdVisual2Dao.java
+D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\service\MesProductProdVisual2Service.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesProductWarehouseDao.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesProductWarehouseDao.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesBatchSn.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\entity\MesBatchSn.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesProductGp12Dao.java
 D:\IdeaProjects\mes-199-0Y7A\mescloud\src\main\java\com\jeesite\modules\mes\dao\MesProductGp12Dao.java