浏览代码

打印记录

hfy 2 月之前
父节点
当前提交
2ac5e71d4b

+ 19 - 0
db/mysql/add_mes_op050_record.sql

@@ -0,0 +1,19 @@
+CREATE TABLE IF NOT EXISTS `mes_op050_record` (
+  `id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'id',
+  `sn` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'sn',
+  `oprno` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'oprno',
+  `line_sn` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'lineSn',
+  `ucode` varchar(100) 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_op050_record_sn` (`sn`) USING BTREE,
+  KEY `idx_mes_op050_record_oprno` (`oprno`) USING BTREE,
+  KEY `idx_mes_op050_record_line_sn` (`line_sn`) USING BTREE,
+  KEY `idx_mes_op050_record_ucode` (`ucode`) USING BTREE,
+  KEY `idx_mes_op050_record_create_date` (`create_date`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='OP050 record';

+ 14 - 0
src/main/java/com/jeesite/modules/mes/dao/MesOp050RecordDao.java

@@ -0,0 +1,14 @@
+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.MesOp050Record;
+
+/**
+ * OP050 record DAO.
+ * @author mes
+ * @version 2026-07-30
+ */
+@MyBatisDao
+public interface MesOp050RecordDao extends CrudDao<MesOp050Record> {
+}

+ 81 - 0
src/main/java/com/jeesite/modules/mes/entity/MesOp050Record.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;
+
+/**
+ * OP050 record Entity.
+ * @author mes
+ * @version 2026-07-30
+ */
+@Table(name="mes_op050_record", alias="a", label="OP050 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 MesOp050Record extends DataEntity<MesOp050Record> {
+
+	private static final long serialVersionUID = 1L;
+
+	private String sn;
+	private String oprno;
+	private String lineSn;
+	private String ucode;
+
+	public MesOp050Record() {
+		this(null);
+	}
+
+	public MesOp050Record(String id) {
+		super(id);
+	}
+
+	@Size(min=0, max=100, message="sn length must be less than 100")
+	public String getSn() {
+		return sn;
+	}
+
+	public void setSn(String sn) {
+		this.sn = sn;
+	}
+
+	@Size(min=0, max=50, message="oprno length must be less than 50")
+	public String getOprno() {
+		return oprno;
+	}
+
+	public void setOprno(String oprno) {
+		this.oprno = oprno;
+	}
+
+	@Size(min=0, max=100, message="lineSn length must be less than 100")
+	public String getLineSn() {
+		return lineSn;
+	}
+
+	public void setLineSn(String lineSn) {
+		this.lineSn = lineSn;
+	}
+
+	@Size(min=0, max=100, message="ucode length must be less than 100")
+	public String getUcode() {
+		return ucode;
+	}
+
+	public void setUcode(String ucode) {
+		this.ucode = ucode;
+	}
+}

+ 70 - 0
src/main/java/com/jeesite/modules/mes/service/MesOp050RecordService.java

@@ -0,0 +1,70 @@
+package com.jeesite.modules.mes.service;
+
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.jeesite.common.entity.Page;
+import com.jeesite.common.lang.StringUtils;
+import com.jeesite.common.service.CrudService;
+import com.jeesite.modules.mes.dao.MesOp050RecordDao;
+import com.jeesite.modules.mes.entity.MesOp050Record;
+
+/**
+ * OP050 record Service.
+ * @author mes
+ * @version 2026-07-30
+ */
+@Service
+public class MesOp050RecordService extends CrudService<MesOp050RecordDao, MesOp050Record> {
+
+	@Override
+	public MesOp050Record get(MesOp050Record mesOp050Record) {
+		return super.get(mesOp050Record);
+	}
+
+	@Override
+	public Page<MesOp050Record> findPage(MesOp050Record mesOp050Record) {
+		return super.findPage(mesOp050Record);
+	}
+
+	@Override
+	public List<MesOp050Record> findList(MesOp050Record mesOp050Record) {
+		return super.findList(mesOp050Record);
+	}
+
+	@Transactional
+	public void saveIfAbsent(String sn, String oprno, String lineSn, String ucode) {
+		if (StringUtils.isBlank(sn) || StringUtils.isBlank(oprno) || StringUtils.isBlank(lineSn)) {
+			return;
+		}
+		MesOp050Record record = new MesOp050Record();
+		record.setSn(sn.trim());
+		record.setOprno(oprno.trim());
+		record.setLineSn(lineSn.trim());
+		record.setUcode(StringUtils.trimToEmpty(ucode));
+		if (findCount(record) == 0) {
+			record.setStatus(MesOp050Record.STATUS_NORMAL);
+			save(record);
+		}
+	}
+
+	@Override
+	@Transactional
+	public void save(MesOp050Record mesOp050Record) {
+		super.save(mesOp050Record);
+	}
+
+	@Override
+	@Transactional
+	public void updateStatus(MesOp050Record mesOp050Record) {
+		super.updateStatus(mesOp050Record);
+	}
+
+	@Override
+	@Transactional
+	public void delete(MesOp050Record mesOp050Record) {
+		super.delete(mesOp050Record);
+	}
+}

+ 60 - 0
src/main/java/com/jeesite/modules/mes/web/MesOp050RecordController.java

@@ -0,0 +1,60 @@
+package com.jeesite.modules.mes.web;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import com.jeesite.common.entity.Page;
+import com.jeesite.common.web.BaseController;
+import com.jeesite.modules.mes.entity.MesOp050Record;
+import com.jeesite.modules.mes.req.MesSearchDateReq;
+import com.jeesite.modules.mes.service.MesOp050RecordService;
+import com.jeesite.modules.mes.util.CommonUitl;
+
+/**
+ * OP050 record Controller.
+ * @author mes
+ * @version 2026-07-30
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/mes/mesOp050Record")
+public class MesOp050RecordController extends BaseController {
+
+	@Autowired
+	private MesOp050RecordService mesOp050RecordService;
+
+	@ModelAttribute
+	public MesOp050Record get(String id, boolean isNewRecord) {
+		return mesOp050RecordService.get(id, isNewRecord);
+	}
+
+	@RequiresPermissions("mes:mesOp050Record:view")
+	@RequestMapping(value = {"list", ""})
+	public String list(MesOp050Record mesOp050Record, Model model) {
+		MesSearchDateReq dateMap = CommonUitl.getSearchDate();
+		if (mesOp050Record.getCreateDate_gte() == null) {
+			mesOp050Record.setCreateDate_gte(dateMap.getStartDate());
+		}
+		if (mesOp050Record.getCreateDate_lte() == null) {
+			mesOp050Record.setCreateDate_lte(dateMap.getEndtDate());
+		}
+		model.addAttribute("mesOp050Record", mesOp050Record);
+		return "modules/mes/mesOp050RecordList";
+	}
+
+	@RequiresPermissions("mes:mesOp050Record:view")
+	@RequestMapping(value = "listData")
+	@ResponseBody
+	public Page<MesOp050Record> listData(MesOp050Record mesOp050Record,
+			HttpServletRequest request, HttpServletResponse response) {
+		mesOp050Record.setPage(new Page<>(request, response));
+		return mesOp050RecordService.findPage(mesOp050Record);
+	}
+}

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

@@ -186,6 +186,9 @@ public class MesProductRecordController extends BaseController {
 	@Autowired
 	private MesPdaScanRecordService mesPdaScanRecordService;
 
+	@Autowired
+	private MesOp050RecordService mesOp050RecordService;
+
 
 	/**
 	 * 获取数据
@@ -4342,14 +4345,13 @@ public class MesProductRecordController extends BaseController {
 
 		// 当为OP050时直接放行
 		if("OP050A".equals(oldOprno)){
+			mesOp050RecordService.saveIfAbsent(sn, oldOprno, lineSn, userCode);
 			resp.setMessage("工件可以加工");
 			resp.setResult(Global.TRUE);
 			return resp;
 		}
 
-
-
-			// 1.检查是否存在工件码  2.检查是否存在工位  3.判断是否为万能码 4.检查是否开启防呆和重复检测
+		// 1.检查是否存在工件码  2.检查是否存在工位  3.判断是否为万能码 4.检查是否开启防呆和重复检测
 		// 5.开启防呆后判断状态(开班点检、判断物料批次是否符合绑定、检查配件寿命是否到期、当前工位结果、上面工位结果)
 		String ret = checkQualityCommon(oldOprno,sn,lineSn,userCode);
 		String checkret = ret.substring(3,5);
@@ -4916,14 +4918,13 @@ public class MesProductRecordController extends BaseController {
 				mesPdaScanRecord.setOprno(oprno);
 				mesPdaScanRecord.setLineSn(lineSn);
 				mesPdaScanRecord.setUcode(ucode);
-				mesPdaScanRecord.setStatus("0");
 				long count = mesPdaScanRecordService.findCount(mesPdaScanRecord);
 				//防止点完OK再次扫码
 				if (count==0){
 					mesPdaScanRecord.setStatus("1");
 					mesPdaScanRecordService.save(mesPdaScanRecord);
 				}
-				//查询oprno的上一个工位
+				//查询oprno的上一个工位,防止上个工位没扫码,使用mes辅助过站
 				MesLineProcess previousProcess = mesLineProcessService.findPreviousByOprnoLineSn(oprno, lineSn);
 				//根据上个个工位oprno,sn,lineSn查询时间最近的一条记录,如何不为空且状态等于1修改状态
 				if (!ObjectUtils.isEmpty(previousProcess)) {

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

@@ -163,13 +163,13 @@ jdbc:
   # Mysql 数据库配置
   type: mysql
   driver: com.mysql.cj.jdbc.Driver
-  #url: jdbc:mysql://127.0.0.1:3306/ce_liu?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
+  url: jdbc:mysql://127.0.0.1:3306/ce_liu?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
- # username: root
- # password: 123456
+#  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
 
   #  # Oracle 数据库配置(若使用 12c,请修改 /modules/core/pom.xml 文件,打开 12c 依赖,去掉 11g 依赖)

+ 5 - 0
src/main/resources/mappings/modules/mes/MesOp050RecordDao.xml

@@ -0,0 +1,5 @@
+<?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.MesOp050RecordDao">
+
+</mapper>

+ 74 - 0
src/main/resources/views/modules/mes/mesOp050RecordList.html

@@ -0,0 +1,74 @@
+<% layout('/layouts/default.html', {title: 'OP050数据管理', libs: ['dataGrid']}){ %>
+<div class="main-content">
+	<div class="box box-main">
+		<div class="box-header">
+			<div class="box-title">
+				<i class="fa icon-notebook"></i> ${text('打印记录')}
+			</div>
+			<div class="box-tools pull-right">
+				<a href="#" class="btn btn-default" id="btnSearch" title="${text('查询')}"><i class="fa fa-filter"></i> ${text('查询')}</a>
+				<a href="#" class="btn btn-default" id="btnSetting" title="${text('设置')}"><i class="fa fa-navicon"></i></a>
+			</div>
+		</div>
+		<div class="box-body">
+			<#form:form id="searchForm" model="${mesOp050Record}" action="${ctx}/mes/mesOp050Record/listData" method="post" class="form-inline hide"
+					data-page-no="${parameter.pageNo}" data-page-size="${parameter.pageSize}" data-order-by="${parameter.orderBy}">
+				<div class="form-group">
+					<label class="control-label">${text('工件码')}:</label>
+					<div class="control-inline">
+						<#form:input path="sn" maxlength="100" class="form-control width-160"/>
+					</div>
+				</div>
+				<div class="form-group">
+					<label class="control-label">${text('工位号')}:</label>
+					<div class="control-inline">
+						<#form:input path="oprno" maxlength="50" class="form-control width-120"/>
+					</div>
+				</div>
+				<div class="form-group">
+					<label class="control-label">${text('产线编号')}:</label>
+					<div class="control-inline">
+						<#form:input path="lineSn" maxlength="100" class="form-control width-120"/>
+					</div>
+				</div>
+				<div class="form-group">
+					<label class="control-label">${text('操作员')}:</label>
+					<div class="control-inline">
+						<#form:input path="ucode" maxlength="100" class="form-control width-120"/>
+					</div>
+				</div>
+				<div class="form-group">
+					<label class="control-label">${text('打印时间')}:</label>
+					<div class="control-inline">
+						<#form:input path="createDate_gte" readonly="true" maxlength="20" class="form-control laydate width-datetime"
+							dataFormat="datetime" data-type="datetime" data-format="yyyy-MM-dd HH:mm" data-done="createDate_lte.click()"/>
+						&nbsp;-&nbsp;
+						<#form:input path="createDate_lte" readonly="true" maxlength="20" class="form-control laydate width-datetime"
+							dataFormat="datetime" data-type="datetime" data-format="yyyy-MM-dd HH:mm"/>
+					</div>
+				</div>
+				<div class="form-group">
+					<button type="submit" class="btn btn-primary btn-sm">${text('查询')}</button>
+					<button type="reset" class="btn btn-default btn-sm">${text('重置')}</button>
+				</div>
+			</#form:form>
+			<table id="dataGrid"></table>
+			<div id="dataGridPage"></div>
+		</div>
+	</div>
+</div>
+<% } %>
+<script>
+$('#dataGrid').dataGrid({
+	searchForm: $("#searchForm"),
+	columnModel: [
+		{header:'${text("工件码")}', name:'sn', index:'a.sn', width:200, align:"center"},
+		{header:'${text("工位号")}', name:'oprno', index:'a.oprno', width:100, align:"center"},
+		{header:'${text("产线编号")}', name:'lineSn', index:'a.line_sn', width:120, align:"center"},
+		{header:'${text("操作员")}', name:'ucode', index:'a.ucode', width:120, align:"center"},
+		{header:'${text("打印时间")}', name:'createDate', index:'a.create_date', width:160, align:"center"}
+	],
+	ajaxSuccess: function(data){
+	}
+});
+</script>