ソースを参照

记录扫码工位人员

hfy 3 ヶ月 前
親
コミット
65943d88c2

+ 18 - 0
db/mysql/add_mes_pda_scan_record.sql

@@ -0,0 +1,18 @@
+CREATE TABLE IF NOT EXISTS `mes_pda_scan_record` (
+  `id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'id',
+  `sn` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'sn',
+  `oprno` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'oprno',
+  `line_sn` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'lineSn',
+  `ucode` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'ucode',
+  `remarks` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'remarks',
+  `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT 'status',
+  `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'create_by',
+  `create_date` datetime NOT NULL COMMENT 'create_date',
+  `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'update_by',
+  `update_date` datetime NOT NULL COMMENT 'update_date',
+  PRIMARY KEY (`id`) USING BTREE,
+  KEY `idx_mes_pda_scan_record_sn` (`sn`) USING BTREE,
+  KEY `idx_mes_pda_scan_record_oprno` (`oprno`) USING BTREE,
+  KEY `idx_mes_pda_scan_record_line_sn` (`line_sn`) USING BTREE,
+  KEY `idx_mes_pda_scan_record_create_date` (`create_date`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PDA scan record';

+ 3 - 1
src/main/java/com/jeesite/modules/mes/dao/MesLineProcessDao.java

@@ -23,6 +23,8 @@ public interface MesLineProcessDao extends CrudDao<MesLineProcess> {
 
     MesLineProcess findInfo(MesLineProcess mesLineProcess);
 
+    MesLineProcess findPreviousByOprnoLineSn(@Param("oprno") String oprno, @Param("lineSn") String lineSn);
+
     int updateStopByOprno(MesLineProcess mesLineProcess);
 
     List<MesLineProcess> getAllSonOpron();
@@ -49,4 +51,4 @@ public interface MesLineProcessDao extends CrudDao<MesLineProcess> {
      * 按产线查询主工位(与工位管理列表一致:pid 为空)
      */
     List<MesLineProcess> findParentListByLine(@Param("lineId") String lineId, @Param("lineSn") String lineSn);
-}
+}

+ 20 - 0
src/main/java/com/jeesite/modules/mes/dao/MesPdaScanRecordDao.java

@@ -0,0 +1,20 @@
+package com.jeesite.modules.mes.dao;
+
+import com.jeesite.common.dao.CrudDao;
+import com.jeesite.common.mybatis.annotation.MyBatisDao;
+import com.jeesite.modules.mes.entity.MesPdaScanRecord;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * PDA scan record DAO.
+ * @author mes
+ * @version 2026-07-25
+ */
+@MyBatisDao
+public interface MesPdaScanRecordDao extends CrudDao<MesPdaScanRecord> {
+
+	MesPdaScanRecord findLatestBySnLineOprno(@Param("sn") String sn, @Param("lineSn") String lineSn,
+			@Param("oprno") String oprno);
+
+	int updateRecordStatus(@Param("id") String id, @Param("status") String status);
+}

+ 81 - 0
src/main/java/com/jeesite/modules/mes/entity/MesPdaScanRecord.java

@@ -0,0 +1,81 @@
+package com.jeesite.modules.mes.entity;
+
+import javax.validation.constraints.Size;
+
+import com.jeesite.common.entity.DataEntity;
+import com.jeesite.common.mybatis.annotation.Column;
+import com.jeesite.common.mybatis.annotation.Table;
+import com.jeesite.common.mybatis.mapper.query.QueryType;
+
+/**
+ * PDA scan record Entity.
+ * @author mes
+ * @version 2026-07-25
+ */
+@Table(name="mes_pda_scan_record", alias="a", label="PDA scan record", columns={
+		@Column(name="id", attrName="id", label="id", isPK=true),
+		@Column(name="sn", attrName="sn", label="sn", queryType=QueryType.EQ),
+		@Column(name="oprno", attrName="oprno", label="oprno", queryType=QueryType.EQ),
+		@Column(name="line_sn", attrName="lineSn", label="lineSn", queryType=QueryType.EQ),
+		@Column(name="ucode", attrName="ucode", label="ucode", queryType=QueryType.EQ),
+		@Column(name="remarks", attrName="remarks", label="remarks", queryType=QueryType.LIKE),
+		@Column(name="status", attrName="status", label="status", isUpdate=false),
+		@Column(name="create_by", attrName="createBy", label="create_by", isUpdate=false, isQuery=false),
+		@Column(name="create_date", attrName="createDate", label="create_date", isUpdate=false, isQuery=false, isUpdateForce=true),
+		@Column(name="update_by", attrName="updateBy", label="update_by", isQuery=false),
+		@Column(name="update_date", attrName="updateDate", label="update_date", isQuery=false, isUpdateForce=true),
+	}, orderBy="a.create_date DESC, a.id DESC"
+)
+public class MesPdaScanRecord extends DataEntity<MesPdaScanRecord> {
+
+	private static final long serialVersionUID = 1L;
+
+	private String sn;
+	private String oprno;
+	private String lineSn;
+	private String ucode;
+
+	public MesPdaScanRecord() {
+		this(null);
+	}
+
+	public MesPdaScanRecord(String id) {
+		super(id);
+	}
+
+	@Size(min=0, max=64, message="sn length must be less than 64")
+	public String getSn() {
+		return sn;
+	}
+
+	public void setSn(String sn) {
+		this.sn = sn;
+	}
+
+	@Size(min=0, max=32, message="oprno length must be less than 32")
+	public String getOprno() {
+		return oprno;
+	}
+
+	public void setOprno(String oprno) {
+		this.oprno = oprno;
+	}
+
+	@Size(min=0, max=64, message="lineSn length must be less than 64")
+	public String getLineSn() {
+		return lineSn;
+	}
+
+	public void setLineSn(String lineSn) {
+		this.lineSn = lineSn;
+	}
+
+	@Size(min=0, max=64, message="ucode length must be less than 64")
+	public String getUcode() {
+		return ucode;
+	}
+
+	public void setUcode(String ucode) {
+		this.ucode = ucode;
+	}
+}

+ 8 - 1
src/main/java/com/jeesite/modules/mes/service/MesLineProcessService.java

@@ -56,6 +56,13 @@ public class MesLineProcessService extends CrudService<MesLineProcessDao, MesLin
 		return mesLineProcessDao.findInfo(mesLineProcess);
 	}
 
+	public MesLineProcess findPreviousByOprnoLineSn(String oprno, String lineSn){
+		if (StringUtils.isBlank(oprno) || StringUtils.isBlank(lineSn)) {
+			return null;
+		}
+		return mesLineProcessDao.findPreviousByOprnoLineSn(oprno.trim(), lineSn.trim());
+	}
+
 	// 根据产线编号与工位号获取工位信息,二级
 	public MesLineProcess findInfoByOprnoLineSn(String oprno,String lineSn){
 		MesLineProcess mesLineProcess = new MesLineProcess();
@@ -233,4 +240,4 @@ public class MesLineProcessService extends CrudService<MesLineProcessDao, MesLin
 		MesLineProcess mesLineProcess1 = mesLineProcessDao.findInfo(mesLineProcess);
 		return mesLineProcess1;
 	}
-}
+}

+ 68 - 0
src/main/java/com/jeesite/modules/mes/service/MesPdaScanRecordService.java

@@ -0,0 +1,68 @@
+package com.jeesite.modules.mes.service;
+
+import com.jeesite.common.entity.Page;
+import com.jeesite.common.lang.StringUtils;
+import com.jeesite.common.service.CrudService;
+import com.jeesite.modules.mes.dao.MesPdaScanRecordDao;
+import com.jeesite.modules.mes.entity.MesPdaScanRecord;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * PDA scan record Service.
+ * @author mes
+ * @version 2026-07-25
+ */
+@Service
+public class MesPdaScanRecordService extends CrudService<MesPdaScanRecordDao, MesPdaScanRecord> {
+
+	@Override
+	public MesPdaScanRecord get(MesPdaScanRecord mesPdaScanRecord) {
+		return super.get(mesPdaScanRecord);
+	}
+
+	@Override
+	public Page<MesPdaScanRecord> findPage(MesPdaScanRecord mesPdaScanRecord) {
+		return super.findPage(mesPdaScanRecord);
+	}
+
+	@Override
+	public List<MesPdaScanRecord> findList(MesPdaScanRecord mesPdaScanRecord) {
+		return super.findList(mesPdaScanRecord);
+	}
+
+	public MesPdaScanRecord findLatestBySnLineOprno(String sn, String lineSn, String oprno) {
+		if (StringUtils.isBlank(sn) || StringUtils.isBlank(lineSn) || StringUtils.isBlank(oprno)) {
+			return null;
+		}
+		return dao.findLatestBySnLineOprno(sn.trim(), lineSn.trim(), oprno.trim());
+	}
+
+	@Transactional
+	public void finishPreviousScanRecord(String sn, String lineSn, String oprno) {
+		MesPdaScanRecord record = findLatestBySnLineOprno(sn, lineSn, oprno);
+		if (record != null && "1".equals(record.getStatus())) {
+			dao.updateRecordStatus(record.getId(), MesPdaScanRecord.STATUS_NORMAL);
+		}
+	}
+
+	@Override
+	@Transactional
+	public void save(MesPdaScanRecord mesPdaScanRecord) {
+		super.save(mesPdaScanRecord);
+	}
+
+	@Override
+	@Transactional
+	public void updateStatus(MesPdaScanRecord mesPdaScanRecord) {
+		super.updateStatus(mesPdaScanRecord);
+	}
+
+	@Override
+	@Transactional
+	public void delete(MesPdaScanRecord mesPdaScanRecord) {
+		super.delete(mesPdaScanRecord);
+	}
+}

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

@@ -183,6 +183,9 @@ public class MesProductRecordController extends BaseController {
 	@Autowired
 	private MesProcessConsumeStockService mesProcessConsumeStockService;
 
+	@Autowired
+	private MesPdaScanRecordService mesPdaScanRecordService;
+
 
 	/**
 	 * 获取数据
@@ -4396,6 +4399,12 @@ public class MesProductRecordController extends BaseController {
 		try {
 			if (!craft.equals("100000")){
 				mesProductRecordService.updateRecord(sn,oprno, craft,"",result,userCode,lineSn);
+				//查询oprno的上一个工位
+				MesLineProcess previousProcess = mesLineProcessService.findPreviousByOprnoLineSn(oprno, lineSn);
+				//根据上个个工位oprno,sn,lineSn查询时间最近的一条记录,如何不为空且状态等于1修改状态
+				if (!ObjectUtils.isEmpty(previousProcess)) {
+					mesPdaScanRecordService.finishPreviousScanRecord(sn, lineSn, previousProcess.getOprno());
+				}
 				return renderResult(Global.TRUE, text("操作成功!"));
 			}else {
 
@@ -4699,6 +4708,7 @@ public class MesProductRecordController extends BaseController {
 		String sn = request.getParameter("sn");
 		String oprno = request.getParameter("oprno");
 		String lineSn = request.getParameter("lineSn");
+		String ucode = request.getParameter("ucode");
 
 		// 根据lineSn获取产品信息(mesProductCate表)
 		MesProductCate mesProductCate = mesProductCateService.findBySn(lineSn);
@@ -4723,6 +4733,20 @@ public class MesProductRecordController extends BaseController {
 				MesProcessProduct mesProcessProduct = mesProcessProductService.findByCateAndOprno(lineSn, oprno);
 				mesProcessProduct.setSn(sn);
 				mesProcessProductService.update(mesProcessProduct);
+				//记录扫码信息
+				MesPdaScanRecord mesPdaScanRecord = new MesPdaScanRecord();
+				mesPdaScanRecord.setSn(sn);
+				mesPdaScanRecord.setOprno(oprno);
+				mesPdaScanRecord.setLineSn(lineSn);
+				mesPdaScanRecord.setUcode(ucode);
+				mesPdaScanRecord.setStatus("1");
+				mesPdaScanRecordService.save(mesPdaScanRecord);
+				//查询oprno的上一个工位
+				MesLineProcess previousProcess = mesLineProcessService.findPreviousByOprnoLineSn(oprno, lineSn);
+				//根据上个个工位oprno,sn,lineSn查询时间最近的一条记录,如何不为空且状态等于1修改状态
+				if (!ObjectUtils.isEmpty(previousProcess)) {
+					mesPdaScanRecordService.finishPreviousScanRecord(sn, lineSn, previousProcess.getOprno());
+				}
 				// 新增表 工件码 工位号 ucode
 				resp.setResult(Global.TRUE);
 				resp.setMessage("扫码成功");

+ 4 - 4
src/main/resources/config/application.yml

@@ -165,9 +165,9 @@ jdbc:
   driver: com.mysql.cj.jdbc.Driver
   url: jdbc:mysql://127.0.0.1:3306/mes_liuan?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_cloude_npd?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
- # url: jdbc:mysql://192.168.9.181:3306/mes_cloud?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
-#  username: mes_cloud
- # password: s2ENj7KaEySTC7dW
+# url: jdbc:mysql://192.168.9.181:3306/mes_cloud?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
+# username: mes_cloud
+# password: s2ENj7KaEySTC7dW
   username: root
   password: 123456
   testSql: SELECT 1
@@ -1067,7 +1067,7 @@ file:
   enabled: true
 
   #  # 文件上传根路径,设置路径中不允许包含“userfiles”,在指定目录中系统会自动创建userfiles目录,如果不设置默认为contextPath路径
-  baseDir: D:/mescloud
+  baseDir: E:/mescloud
   #  baseDir: /www/wwwroot/mes_cloud_dy
   #
   #  # 上传文件的相对路径(支持:yyyy, MM, dd, HH, mm, ss, E)

+ 39 - 1
src/main/resources/mappings/modules/mes/MesLineProcessDao.xml

@@ -30,6 +30,44 @@
 		ORDER BY ${sqlMap.order.toSql()}
 		LIMIT 1
 	</select>
+
+	<select id="findPreviousByOprnoLineSn" resultType="com.jeesite.modules.mes.entity.MesLineProcess">
+		SELECT pre.id,
+			pre.line_id AS lineId,
+			pre.title,
+			pre.remark,
+			pre.status,
+			pre.sorts,
+			pre.oprno,
+			pre.`repeat`,
+			pre.quality,
+			pre.devices,
+			pre.gzs,
+			pre.stop,
+			pre.type,
+			pre.duration,
+			pre.is_pz AS isPz,
+			pre.is_qm AS isQm,
+			pre.qm_num AS qmNum,
+			pre.pid,
+			pre.jar AS jarPath,
+			l.title AS lineTitle,
+			l.sn AS lineSn
+		FROM mes_line_process cur
+		INNER JOIN mes_line l ON l.id = cur.line_id AND l.status = '0'
+		INNER JOIN mes_line_process pre ON pre.line_id = cur.line_id AND pre.status = '0'
+		WHERE cur.status = '0'
+		  AND l.sn = #{lineSn}
+		  AND (
+		  	cur.oprno = #{oprno}
+		  	OR (CHAR_LENGTH(#{oprno}) = 5 AND cur.oprno = CONCAT(#{oprno}, 'A'))
+		  	OR (CHAR_LENGTH(#{oprno}) &gt; 5 AND cur.oprno = SUBSTRING(#{oprno}, 1, CHAR_LENGTH(#{oprno}) - 1))
+		  )
+		  AND IFNULL(pre.sorts, 0) &lt; IFNULL(cur.sorts, 0)
+		ORDER BY pre.sorts DESC, pre.oprno DESC
+		LIMIT 1
+	</select>
+
     <select id="getAllSonOpron" resultType="com.jeesite.modules.mes.entity.MesLineProcess">
 		SELECT * FROM `mes_line_process` where pid IS NOT NULL
 	</select>
@@ -59,4 +97,4 @@
 		ORDER BY a.sorts ASC, a.oprno ASC
 	</select>
 
-</mapper>
+</mapper>

+ 35 - 0
src/main/resources/mappings/modules/mes/MesPdaScanRecordDao.xml

@@ -0,0 +1,35 @@
+<?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.MesPdaScanRecordDao">
+
+	<select id="findLatestBySnLineOprno" resultType="com.jeesite.modules.mes.entity.MesPdaScanRecord">
+		SELECT id,
+			sn,
+			oprno,
+			line_sn AS lineSn,
+			ucode,
+			remarks,
+			status,
+			create_by AS createBy,
+			create_date AS createDate,
+			update_by AS updateBy,
+			update_date AS updateDate
+		FROM mes_pda_scan_record
+		WHERE sn = #{sn}
+		  AND line_sn = #{lineSn}
+		  AND (
+		  	oprno = #{oprno}
+		  	OR (CHAR_LENGTH(#{oprno}) = 5 AND oprno = CONCAT(#{oprno}, 'A'))
+		  	OR (CHAR_LENGTH(#{oprno}) &gt; 5 AND oprno = SUBSTRING(#{oprno}, 1, CHAR_LENGTH(#{oprno}) - 1))
+		  )
+		ORDER BY create_date DESC, id DESC
+		LIMIT 1
+	</select>
+
+	<update id="updateRecordStatus">
+		UPDATE mes_pda_scan_record
+		SET status = #{status}
+		WHERE id = #{id}
+	</update>
+
+</mapper>