Przeglądaj źródła

模具维修记录和ERP完工报告

sunxianglong 4 miesięcy temu
rodzic
commit
9a746d9f00

+ 5 - 5
src/main/java/com/jeesite/modules/mes/dao/MesMoldMaintenanceDao.java

@@ -5,11 +5,11 @@ import com.jeesite.common.mybatis.annotation.MyBatisDao;
 import com.jeesite.modules.mes.entity.MesMoldMaintenance;
 
 /**
- * 模具保养DAO接口
- * @author mes
- * @version 2026-06-26
+ * 模具维保DAO接口
+ * @author sxl
+ * @version 2026-06-28
  */
 @MyBatisDao
 public interface MesMoldMaintenanceDao extends CrudDao<MesMoldMaintenance> {
-
-}
+	
+}

+ 15 - 0
src/main/java/com/jeesite/modules/mes/dao/MesProductReportDao.java

@@ -0,0 +1,15 @@
+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.MesProductReport;
+
+/**
+ * 完工报告DAO接口
+ * @author sxl
+ * @version 2026-06-28
+ */
+@MyBatisDao
+public interface MesProductReportDao extends CrudDao<MesProductReport> {
+	
+}

+ 90 - 40
src/main/java/com/jeesite/modules/mes/entity/MesMoldMaintenance.java

@@ -1,63 +1,74 @@
 package com.jeesite.modules.mes.entity;
 
-import java.util.Date;
 import javax.validation.constraints.Size;
-
+import java.util.Date;
+import com.jeesite.common.mybatis.annotation.JoinTable;
+import com.jeesite.common.mybatis.annotation.JoinTable.Type;
 import com.fasterxml.jackson.annotation.JsonFormat;
+
 import com.jeesite.common.entity.DataEntity;
 import com.jeesite.common.mybatis.annotation.Column;
-import com.jeesite.common.mybatis.annotation.JoinTable;
 import com.jeesite.common.mybatis.annotation.Table;
+import com.jeesite.common.mybatis.mapper.query.QueryType;
 
 /**
  * 模具维保Entity
- * @author mes
- * @version 2026-06-27
+ * @author sxl
+ * @version 2026-06-28
  */
 @Table(name="mes_mold_maintenance", alias="a", label="模具维保信息", columns={
 		@Column(name="id", attrName="id", label="id", isPK=true),
-		@Column(name="mold_resume_id", attrName="moldResumeId", label="模具履历"),
-		@Column(name="maintenance_date", attrName="maintenanceDate", label="维保日期", isQuery=true),
+		@Column(name="mold_resume_id", attrName="moldResumeId", label="模具履历ID", comment="模具履历ID(关联mes_mold_resume.id)"),
+		@Column(name="mold_code", attrName="moldCode", label="模具编号"),
+		@Column(name="maintenance_date", attrName="maintenanceDate", label="维保日期", isUpdateForce=true),
 		@Column(name="content", attrName="content", label="维保内容及过程"),
-		@Column(name="repair_type", attrName="repairType", label="修模类型", isQuery=true),
+		@Column(name="repair_type", attrName="repairType", label="修模类型"),
 		@Column(name="initiate_dept", attrName="initiateDept", label="发起部门"),
-		@Column(name="initiate_user", attrName="initiateUser", label="发起人", isQuery=true),
+		@Column(name="initiate_user", attrName="initiateUser", label="发起人"),
 		@Column(name="reason", attrName="reason", label="原因"),
 		@Column(name="accept_result", attrName="acceptResult", label="验收结果"),
-		@Column(name="remarks", attrName="remarks", label="备注"),
-		@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),
-}, joinTable={
-		@JoinTable(type= JoinTable.Type.LEFT_JOIN, entity=MesMoldResume.class, attrName="this", alias="b",
-				on="a.mold_resume_id = b.id",
-				columns={
-						@Column(name="mold_name", attrName="moldName", label="模具名称", isQuery=true),
-				}),
-}, orderBy="a.update_date DESC"
+		@Column(name="remarks", attrName="remarks", label="备注", queryType=QueryType.LIKE),
+		@Column(name="muns_ms", attrName="munsMs", label="模数"),
+		@Column(name="nums_ms_sum", attrName="numsMsSum", label="累计模数"),
+		@Column(name="pc_code", attrName="pcCode", label="批次号"),
+		@Column(name="create_by", attrName="createBy", label="创建者", isUpdate=false, isQuery=false),
+		@Column(name="create_date", attrName="createDate", label="创建时间", isUpdate=false, isQuery=false),
+		@Column(name="update_by", attrName="updateBy", label="更新者", isQuery=false),
+		@Column(name="update_date", attrName="updateDate", label="更新时间", isQuery=false),
+	}, joinTable={
+		@JoinTable(type=Type.LEFT_JOIN, entity=MesMoldResume.class, attrName="this", alias="b",
+			on="b.mold_code = a.mold_code",
+			columns={
+				@Column(name="mold_name", attrName="moldName", label="模具名称", isQuery=true, queryType=QueryType.LIKE),
+			}),
+	}, orderBy="a.update_date DESC"
 )
 public class MesMoldMaintenance extends DataEntity<MesMoldMaintenance> {
-
+	
 	private static final long serialVersionUID = 1L;
-	private String moldResumeId;		// 模具履历ID
-	private String moldName;			// 模具名称(关联模具履历表)
+	private String moldResumeId;		// 模具履历ID(关联mes_mold_resume.id)
+	private String moldCode;		// 模具编号
+	private String moldName;		// 模具名称(关联mes_mold_resume)
 	private Date maintenanceDate;		// 维保日期
-	private String content;				// 维保内容及过程
-	private String repairType;			// 修模类型
+	private String content;		// 维保内容及过程
+	private String repairType;		// 修模类型
 	private String initiateDept;		// 发起部门
 	private String initiateUser;		// 发起人
-	private String reason;				// 原因
+	private String reason;		// 原因
 	private String acceptResult;		// 验收结果
+	private String munsMs;		// 模数
+	private String numsMsSum;		// 累计模数
+	private String pcCode;		// 批次号
 
 	public MesMoldMaintenance() {
 		this(null);
 	}
-
+	
 	public MesMoldMaintenance(String id){
 		super(id);
 	}
-
+	
+	@Size(min=0, max=64, message="模具履历ID长度不能超过 64 个字符")
 	public String getMoldResumeId() {
 		return moldResumeId;
 	}
@@ -65,6 +76,15 @@ public class MesMoldMaintenance extends DataEntity<MesMoldMaintenance> {
 	public void setMoldResumeId(String moldResumeId) {
 		this.moldResumeId = moldResumeId;
 	}
+	
+	@Size(min=0, max=64, message="模具编号长度不能超过 64 个字符")
+	public String getMoldCode() {
+		return moldCode;
+	}
+
+	public void setMoldCode(String moldCode) {
+		this.moldCode = moldCode;
+	}
 
 	@Size(min=0, max=255, message="模具名称长度不能超过 255 个字符")
 	public String getMoldName() {
@@ -74,7 +94,7 @@ public class MesMoldMaintenance extends DataEntity<MesMoldMaintenance> {
 	public void setMoldName(String moldName) {
 		this.moldName = moldName;
 	}
-
+	
 	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 	public Date getMaintenanceDate() {
 		return maintenanceDate;
@@ -83,7 +103,8 @@ public class MesMoldMaintenance extends DataEntity<MesMoldMaintenance> {
 	public void setMaintenanceDate(Date maintenanceDate) {
 		this.maintenanceDate = maintenanceDate;
 	}
-
+	
+	@Size(min=0, max=100, message="维保内容及过程长度不能超过 100 个字符")
 	public String getContent() {
 		return content;
 	}
@@ -91,8 +112,8 @@ public class MesMoldMaintenance extends DataEntity<MesMoldMaintenance> {
 	public void setContent(String content) {
 		this.content = content;
 	}
-
-	@Size(min=0, max=100, message="修模类型长度不能超过 100 个字符")
+	
+	@Size(min=0, max=64, message="修模类型长度不能超过 64 个字符")
 	public String getRepairType() {
 		return repairType;
 	}
@@ -100,8 +121,8 @@ public class MesMoldMaintenance extends DataEntity<MesMoldMaintenance> {
 	public void setRepairType(String repairType) {
 		this.repairType = repairType;
 	}
-
-	@Size(min=0, max=100, message="发起部门长度不能超过 100 个字符")
+	
+	@Size(min=0, max=64, message="发起部门长度不能超过 64 个字符")
 	public String getInitiateDept() {
 		return initiateDept;
 	}
@@ -109,8 +130,8 @@ public class MesMoldMaintenance extends DataEntity<MesMoldMaintenance> {
 	public void setInitiateDept(String initiateDept) {
 		this.initiateDept = initiateDept;
 	}
-
-	@Size(min=0, max=100, message="发起人长度不能超过 100 个字符")
+	
+	@Size(min=0, max=64, message="发起人长度不能超过 64 个字符")
 	public String getInitiateUser() {
 		return initiateUser;
 	}
@@ -118,7 +139,8 @@ public class MesMoldMaintenance extends DataEntity<MesMoldMaintenance> {
 	public void setInitiateUser(String initiateUser) {
 		this.initiateUser = initiateUser;
 	}
-
+	
+	@Size(min=0, max=64, message="原因长度不能超过 64 个字符")
 	public String getReason() {
 		return reason;
 	}
@@ -126,7 +148,7 @@ public class MesMoldMaintenance extends DataEntity<MesMoldMaintenance> {
 	public void setReason(String reason) {
 		this.reason = reason;
 	}
-
+	
 	@Size(min=0, max=100, message="验收结果长度不能超过 100 个字符")
 	public String getAcceptResult() {
 		return acceptResult;
@@ -135,4 +157,32 @@ public class MesMoldMaintenance extends DataEntity<MesMoldMaintenance> {
 	public void setAcceptResult(String acceptResult) {
 		this.acceptResult = acceptResult;
 	}
-}
+	
+	@Size(min=0, max=64, message="模数长度不能超过 64 个字符")
+	public String getMunsMs() {
+		return munsMs;
+	}
+
+	public void setMunsMs(String munsMs) {
+		this.munsMs = munsMs;
+	}
+	
+	@Size(min=0, max=64, message="累计模数长度不能超过 64 个字符")
+	public String getNumsMsSum() {
+		return numsMsSum;
+	}
+
+	public void setNumsMsSum(String numsMsSum) {
+		this.numsMsSum = numsMsSum;
+	}
+	
+	@Size(min=0, max=64, message="批次号长度不能超过 64 个字符")
+	public String getPcCode() {
+		return pcCode;
+	}
+
+	public void setPcCode(String pcCode) {
+		this.pcCode = pcCode;
+	}
+	
+}

+ 160 - 0
src/main/java/com/jeesite/modules/mes/entity/MesProductReport.java

@@ -0,0 +1,160 @@
+package com.jeesite.modules.mes.entity;
+
+import javax.validation.constraints.Size;
+import java.util.Date;
+import com.jeesite.common.mybatis.annotation.JoinTable;
+import com.jeesite.common.mybatis.annotation.JoinTable.Type;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+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;
+
+/**
+ * 完工报告Entity
+ * @author sxl
+ * @version 2026-06-28
+ */
+@Table(name="mes_product_report", alias="a", label="完工报告信息", columns={
+		@Column(name="id", attrName="id", label="id", isPK=true),
+		@Column(name="other_id", attrName="otherId", label="第三方数据标识"),
+		@Column(name="doc_type_code", attrName="docTypeCode", label="单据类型编码"),
+		@Column(name="business_date", attrName="businessDate", label="单据日期", isUpdateForce=true),
+		@Column(name="doc_no", attrName="docNo", label="单号"),
+		@Column(name="mo_doc_no", attrName="moDocNo", label="生产订单单号"),
+		@Column(name="complete_date", attrName="completeDate", label="完工时间", isUpdateForce=true),
+		@Column(name="actual_rcv_time", attrName="actualRcvTime", label="入库确认时间", isUpdateForce=true),
+		@Column(name="complete_qty", attrName="completeQty", label="入库数量"),
+		@Column(name="eligible_qty", attrName="eligibleQty", label="合格数量"),
+		@Column(name="scrap_qty", attrName="scrapQty", label="报废数量"),
+		@Column(name="remark", attrName="remark", label="备注"),
+		@Column(name="create_date", attrName="createDate", label="创建时间", isUpdate=false, isQuery=false),
+		@Column(name="create_by", attrName="createBy", label="创建人", isUpdate=false, isQuery=false),
+		@Column(name="update_date", attrName="updateDate", label="更新时间", isQuery=false),
+		@Column(name="update_by", attrName="updateBy", label="更新人", isQuery=false),
+	}, orderBy="a.update_date DESC"
+)
+public class MesProductReport extends DataEntity<MesProductReport> {
+	
+	private static final long serialVersionUID = 1L;
+	private String otherId;		// 第三方数据标识
+	private String docTypeCode;		// 单据类型编码
+	private Date businessDate;		// 单据日期
+	private String docNo;		// 单号
+	private String moDocNo;		// 生产订单单号
+	private Date completeDate;		// 完工时间
+	private Date actualRcvTime;		// 入库确认时间
+	private String completeQty;		// 入库数量
+	private String eligibleQty;		// 合格数量
+	private String scrapQty;		// 报废数量
+	private String remark;		// 备注
+
+	public MesProductReport() {
+		this(null);
+	}
+	
+	public MesProductReport(String id){
+		super(id);
+	}
+	
+	@Size(min=0, max=64, message="第三方数据标识长度不能超过 64 个字符")
+	public String getOtherId() {
+		return otherId;
+	}
+
+	public void setOtherId(String otherId) {
+		this.otherId = otherId;
+	}
+	
+	@Size(min=0, max=64, message="单据类型编码长度不能超过 64 个字符")
+	public String getDocTypeCode() {
+		return docTypeCode;
+	}
+
+	public void setDocTypeCode(String docTypeCode) {
+		this.docTypeCode = docTypeCode;
+	}
+	
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	public Date getBusinessDate() {
+		return businessDate;
+	}
+
+	public void setBusinessDate(Date businessDate) {
+		this.businessDate = businessDate;
+	}
+	
+	@Size(min=0, max=64, message="单号长度不能超过 64 个字符")
+	public String getDocNo() {
+		return docNo;
+	}
+
+	public void setDocNo(String docNo) {
+		this.docNo = docNo;
+	}
+	
+	@Size(min=0, max=64, message="生产订单单号长度不能超过 64 个字符")
+	public String getMoDocNo() {
+		return moDocNo;
+	}
+
+	public void setMoDocNo(String moDocNo) {
+		this.moDocNo = moDocNo;
+	}
+	
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	public Date getCompleteDate() {
+		return completeDate;
+	}
+
+	public void setCompleteDate(Date completeDate) {
+		this.completeDate = completeDate;
+	}
+	
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	public Date getActualRcvTime() {
+		return actualRcvTime;
+	}
+
+	public void setActualRcvTime(Date actualRcvTime) {
+		this.actualRcvTime = actualRcvTime;
+	}
+	
+	@Size(min=0, max=64, message="入库数量长度不能超过 64 个字符")
+	public String getCompleteQty() {
+		return completeQty;
+	}
+
+	public void setCompleteQty(String completeQty) {
+		this.completeQty = completeQty;
+	}
+	
+	@Size(min=0, max=64, message="合格数量长度不能超过 64 个字符")
+	public String getEligibleQty() {
+		return eligibleQty;
+	}
+
+	public void setEligibleQty(String eligibleQty) {
+		this.eligibleQty = eligibleQty;
+	}
+	
+	@Size(min=0, max=64, message="报废数量长度不能超过 64 个字符")
+	public String getScrapQty() {
+		return scrapQty;
+	}
+
+	public void setScrapQty(String scrapQty) {
+		this.scrapQty = scrapQty;
+	}
+	
+	@Size(min=0, max=64, message="备注长度不能超过 64 个字符")
+	public String getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+	
+}

+ 32 - 21
src/main/java/com/jeesite/modules/mes/service/MesMoldMaintenanceService.java

@@ -1,26 +1,30 @@
 package com.jeesite.modules.mes.service;
 
-import java.util.Date;
 import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import com.jeesite.common.entity.Page;
+import com.jeesite.common.lang.StringUtils;
 import com.jeesite.common.service.CrudService;
+import com.jeesite.common.service.ServiceException;
 import com.jeesite.modules.mes.entity.MesMoldMaintenance;
+import com.jeesite.modules.mes.entity.MesMoldResume;
 import com.jeesite.modules.mes.dao.MesMoldMaintenanceDao;
-import com.jeesite.modules.sys.entity.Office;
-import com.jeesite.modules.sys.utils.EmpUtils;
-import com.jeesite.modules.sys.utils.UserUtils;
+import com.jeesite.modules.file.utils.FileUploadUtils;
 
 /**
  * 模具维保Service
- * @author mes
- * @version 2026-06-27
+ * @author sxl
+ * @version 2026-06-28
  */
 @Service
 public class MesMoldMaintenanceService extends CrudService<MesMoldMaintenanceDao, MesMoldMaintenance> {
 
+	@Autowired
+	private MesMoldResumeService mesMoldResumeService;
+	
 	/**
 	 * 获取单条数据
 	 * @param mesMoldMaintenance
@@ -30,7 +34,7 @@ public class MesMoldMaintenanceService extends CrudService<MesMoldMaintenanceDao
 	public MesMoldMaintenance get(MesMoldMaintenance mesMoldMaintenance) {
 		return super.get(mesMoldMaintenance);
 	}
-
+	
 	/**
 	 * 查询分页数据
 	 * @param mesMoldMaintenance 查询条件
@@ -41,7 +45,7 @@ public class MesMoldMaintenanceService extends CrudService<MesMoldMaintenanceDao
 	public Page<MesMoldMaintenance> findPage(MesMoldMaintenance mesMoldMaintenance) {
 		return super.findPage(mesMoldMaintenance);
 	}
-
+	
 	/**
 	 * 查询列表数据
 	 * @param mesMoldMaintenance
@@ -51,28 +55,35 @@ public class MesMoldMaintenanceService extends CrudService<MesMoldMaintenanceDao
 	public List<MesMoldMaintenance> findList(MesMoldMaintenance mesMoldMaintenance) {
 		return super.findList(mesMoldMaintenance);
 	}
-
+	
 	/**
 	 * 保存数据(插入或更新)
-	 * 发起部门和发起人从后端当前登录用户获取
 	 * @param mesMoldMaintenance
 	 */
 	@Override
 	@Transactional
 	public void save(MesMoldMaintenance mesMoldMaintenance) {
 		if (mesMoldMaintenance.getIsNewRecord()) {
-			mesMoldMaintenance.setMaintenanceDate(new Date());
-			// 发起人取当前登录用户
-			mesMoldMaintenance.setInitiateUser(UserUtils.getUser().getUserName());
-			// 发起部门取当前登录用户所属机构
-			Office office = EmpUtils.getOffice();
-			if (office != null) {
-				mesMoldMaintenance.setInitiateDept(office.getOfficeName());
+			String moldCode = StringUtils.trim(mesMoldMaintenance.getMoldCode());
+			if (StringUtils.isBlank(moldCode)) {
+				throw new ServiceException(text("模具编号不能为空!"));
+			}
+			mesMoldMaintenance.setMoldCode(moldCode);
+			MesMoldResume query = new MesMoldResume();
+			query.setMoldCode(moldCode);
+			List<MesMoldResume> resumeList = mesMoldResumeService.findList(query);
+			if (resumeList == null || resumeList.isEmpty()) {
+				throw new ServiceException(text("模具编号不存在,请先在模具履历中维护!"));
 			}
+			MesMoldResume resume = resumeList.get(0);
+			mesMoldMaintenance.setMoldResumeId(resume.getId());
+			mesMoldMaintenance.setMoldName(resume.getMoldName());
 		}
 		super.save(mesMoldMaintenance);
+		// 保存上传图片
+		FileUploadUtils.saveFileUpload(mesMoldMaintenance, mesMoldMaintenance.getId(), "mesMoldMaintenance_image");
 	}
-
+	
 	/**
 	 * 更新状态
 	 * @param mesMoldMaintenance
@@ -82,7 +93,7 @@ public class MesMoldMaintenanceService extends CrudService<MesMoldMaintenanceDao
 	public void updateStatus(MesMoldMaintenance mesMoldMaintenance) {
 		super.updateStatus(mesMoldMaintenance);
 	}
-
+	
 	/**
 	 * 删除数据
 	 * @param mesMoldMaintenance
@@ -92,5 +103,5 @@ public class MesMoldMaintenanceService extends CrudService<MesMoldMaintenanceDao
 	public void delete(MesMoldMaintenance mesMoldMaintenance) {
 		super.delete(mesMoldMaintenance);
 	}
-
-}
+	
+}

+ 84 - 0
src/main/java/com/jeesite/modules/mes/service/MesProductReportService.java

@@ -0,0 +1,84 @@
+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.service.CrudService;
+import com.jeesite.modules.mes.entity.MesProductReport;
+import com.jeesite.modules.mes.dao.MesProductReportDao;
+import com.jeesite.modules.file.utils.FileUploadUtils;
+
+/**
+ * 完工报告Service
+ * @author sxl
+ * @version 2026-06-28
+ */
+@Service
+public class MesProductReportService extends CrudService<MesProductReportDao, MesProductReport> {
+	
+	/**
+	 * 获取单条数据
+	 * @param mesProductReport
+	 * @return
+	 */
+	@Override
+	public MesProductReport get(MesProductReport mesProductReport) {
+		return super.get(mesProductReport);
+	}
+	
+	/**
+	 * 查询分页数据
+	 * @param mesProductReport 查询条件
+	 * @param mesProductReport.page 分页对象
+	 * @return
+	 */
+	@Override
+	public Page<MesProductReport> findPage(MesProductReport mesProductReport) {
+		return super.findPage(mesProductReport);
+	}
+	
+	/**
+	 * 查询列表数据
+	 * @param mesProductReport
+	 * @return
+	 */
+	@Override
+	public List<MesProductReport> findList(MesProductReport mesProductReport) {
+		return super.findList(mesProductReport);
+	}
+	
+	/**
+	 * 保存数据(插入或更新)
+	 * @param mesProductReport
+	 */
+	@Override
+	@Transactional
+	public void save(MesProductReport mesProductReport) {
+		super.save(mesProductReport);
+		// 保存上传图片
+		FileUploadUtils.saveFileUpload(mesProductReport, mesProductReport.getId(), "mesProductReport_image");
+	}
+	
+	/**
+	 * 更新状态
+	 * @param mesProductReport
+	 */
+	@Override
+	@Transactional
+	public void updateStatus(MesProductReport mesProductReport) {
+		super.updateStatus(mesProductReport);
+	}
+	
+	/**
+	 * 删除数据
+	 * @param mesProductReport
+	 */
+	@Override
+	@Transactional
+	public void delete(MesProductReport mesProductReport) {
+		super.delete(mesProductReport);
+	}
+	
+}

+ 30 - 3
src/main/java/com/jeesite/modules/mes/util/U9cAuthUtil.java

@@ -29,6 +29,8 @@ public class U9cAuthUtil {
 
 	private static final String CREATE_RCV_URL = "http://10.0.10.11/u9c/webapi/CustLJRMESOpenAPI/CreateRCV";
 
+	private static final String CREATE_COMPLETE_DOC_URL = "http://10.0.10.11/u9c/webapi/CustLJRMESOpenAP/CreateCompleteDoc";
+
 	private U9cAuthUtil() {
 	}
 
@@ -76,6 +78,31 @@ public class U9cAuthUtil {
 	}
 
 	/**
+	 * 调用 CreateCompleteDoc 接口,自动获取 token 并写入请求头
+	 *
+	 * @param requestBody JSON 请求体
+	 * @return 接口响应,失败返回 null
+	 */
+	public static JSONObject createCompleteDoc(String requestBody) {
+		String token = getToken();
+		if (StringUtils.isEmpty(token)) {
+			log.warn("CreateCompleteDoc 请求失败: 无法获取 token");
+			return null;
+		}
+		return postWithToken(CREATE_COMPLETE_DOC_URL, requestBody, token);
+	}
+
+	/**
+	 * 调用 CreateCompleteDoc 接口,自动获取 token 并写入请求头
+	 *
+	 * @param requestBody JSON 请求体
+	 * @return 接口响应,失败返回 null
+	 */
+	public static JSONObject createCompleteDoc(JSONObject requestBody) {
+		return createCompleteDoc(requestBody == null ? "[]" : requestBody.toJSONString());
+	}
+
+	/**
 	 * 调用 U9C OAuth2 登录接口,返回完整响应
 	 */
 	public static JSONObject authLogin() {
@@ -131,18 +158,18 @@ public class U9cAuthUtil {
 					? connection.getInputStream()
 					: connection.getErrorStream();
 			if (inputStream == null) {
-				log.warn("CreateRCV 请求失败, HTTP状态码: {}", responseCode);
+				log.warn("U9C 接口请求失败, HTTP状态码: {}", responseCode);
 				return null;
 			}
 
 			String body = readResponse(inputStream);
 			if (responseCode != HttpURLConnection.HTTP_OK) {
-				log.warn("CreateRCV 请求失败, HTTP状态码: {}, 响应: {}", responseCode, body);
+				log.warn("U9C 接口请求失败, HTTP状态码: {}, 响应: {}", responseCode, body);
 				return null;
 			}
 			return JSONObject.parseObject(body);
 		} catch (Exception e) {
-			log.error("CreateRCV 请求异常", e);
+			log.error("U9C 接口请求异常", e);
 			return null;
 		} finally {
 			if (connection != null) {

+ 44 - 18
src/main/java/com/jeesite/modules/mes/web/MesMoldMaintenanceController.java

@@ -18,14 +18,12 @@ import com.jeesite.common.config.Global;
 import com.jeesite.common.entity.Page;
 import com.jeesite.common.web.BaseController;
 import com.jeesite.modules.mes.entity.MesMoldMaintenance;
-import com.jeesite.modules.mes.entity.MesMoldResume;
 import com.jeesite.modules.mes.service.MesMoldMaintenanceService;
-import com.jeesite.modules.mes.service.MesMoldResumeService;
 
 /**
  * 模具维保Controller
- * @author mes
- * @version 2026-06-27
+ * @author sxl
+ * @version 2026-06-28
  */
 @Controller
 @RequestMapping(value = "${adminPath}/mes/mesMoldMaintenance")
@@ -33,10 +31,7 @@ public class MesMoldMaintenanceController extends BaseController {
 
 	@Autowired
 	private MesMoldMaintenanceService mesMoldMaintenanceService;
-
-	@Autowired
-	private MesMoldResumeService mesMoldResumeService;
-
+	
 	/**
 	 * 获取数据
 	 */
@@ -44,7 +39,7 @@ public class MesMoldMaintenanceController extends BaseController {
 	public MesMoldMaintenance get(String id, boolean isNewRecord) {
 		return mesMoldMaintenanceService.get(id, isNewRecord);
 	}
-
+	
 	/**
 	 * 查询列表
 	 */
@@ -54,7 +49,7 @@ public class MesMoldMaintenanceController extends BaseController {
 		model.addAttribute("mesMoldMaintenance", mesMoldMaintenance);
 		return "modules/mes/mesMoldMaintenanceList";
 	}
-
+	
 	/**
 	 * 查询列表数据
 	 */
@@ -74,13 +69,20 @@ public class MesMoldMaintenanceController extends BaseController {
 	@RequestMapping(value = "form")
 	public String form(MesMoldMaintenance mesMoldMaintenance, Model model) {
 		model.addAttribute("mesMoldMaintenance", mesMoldMaintenance);
-		// 查询模具履历列表,用于表单下拉选择模具
-		List<MesMoldResume> moldResumeList = mesMoldResumeService.findList(new MesMoldResume());
-		model.addAttribute("moldResumeList", moldResumeList);
 		return "modules/mes/mesMoldMaintenanceForm";
 	}
 
 	/**
+	 * 查看详情
+	 */
+	@RequiresPermissions("mes:mesMoldMaintenance:view")
+	@RequestMapping(value = "info")
+	public String info(MesMoldMaintenance mesMoldMaintenance, Model model) {
+		model.addAttribute("mesMoldMaintenance", mesMoldMaintenance);
+		return "modules/mes/mesMoldMaintenanceInfo";
+	}
+
+	/**
 	 * 保存数据
 	 */
 	@RequiresPermissions("mes:mesMoldMaintenance:edit")
@@ -88,9 +90,33 @@ public class MesMoldMaintenanceController extends BaseController {
 	@ResponseBody
 	public String save(@Validated MesMoldMaintenance mesMoldMaintenance) {
 		mesMoldMaintenanceService.save(mesMoldMaintenance);
-		return renderResult(Global.TRUE, text("保存模具维保记录成功!"));
+		return renderResult(Global.TRUE, text("保存模具维保成功!"));
 	}
-
+	
+	/**
+	 * 停用数据
+	 */
+	@RequiresPermissions("mes:mesMoldMaintenance:edit")
+	@RequestMapping(value = "disable")
+	@ResponseBody
+	public String disable(MesMoldMaintenance mesMoldMaintenance) {
+		mesMoldMaintenance.setStatus(MesMoldMaintenance.STATUS_DISABLE);
+		mesMoldMaintenanceService.updateStatus(mesMoldMaintenance);
+		return renderResult(Global.TRUE, text("停用模具维保成功"));
+	}
+	
+	/**
+	 * 启用数据
+	 */
+	@RequiresPermissions("mes:mesMoldMaintenance:edit")
+	@RequestMapping(value = "enable")
+	@ResponseBody
+	public String enable(MesMoldMaintenance mesMoldMaintenance) {
+		mesMoldMaintenance.setStatus(MesMoldMaintenance.STATUS_NORMAL);
+		mesMoldMaintenanceService.updateStatus(mesMoldMaintenance);
+		return renderResult(Global.TRUE, text("启用模具维保成功"));
+	}
+	
 	/**
 	 * 删除数据
 	 */
@@ -99,7 +125,7 @@ public class MesMoldMaintenanceController extends BaseController {
 	@ResponseBody
 	public String delete(MesMoldMaintenance mesMoldMaintenance) {
 		mesMoldMaintenanceService.delete(mesMoldMaintenance);
-		return renderResult(Global.TRUE, text("删除模具维保记录成功!"));
+		return renderResult(Global.TRUE, text("删除模具维保成功!"));
 	}
-
-}
+	
+}

+ 180 - 0
src/main/java/com/jeesite/modules/mes/web/MesProductReportController.java

@@ -0,0 +1,180 @@
+package com.jeesite.modules.mes.web;
+
+import java.util.Date;
+import java.util.List;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.jeesite.common.lang.DateUtils;
+import com.jeesite.common.lang.StringUtils;
+import com.jeesite.modules.mes.util.U9cAuthUtil;
+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.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import com.jeesite.common.config.Global;
+import com.jeesite.common.entity.Page;
+import com.jeesite.common.web.BaseController;
+import com.jeesite.modules.mes.entity.MesProductReport;
+import com.jeesite.modules.mes.service.MesProductReportService;
+
+/**
+ * 完工报告Controller
+ * @author sxl
+ * @version 2026-06-28
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/mes/mesProductReport")
+public class MesProductReportController extends BaseController {
+
+	@Autowired
+	private MesProductReportService mesProductReportService;
+	
+	/**
+	 * 获取数据
+	 */
+	@ModelAttribute
+	public MesProductReport get(String id, boolean isNewRecord) {
+		return mesProductReportService.get(id, isNewRecord);
+	}
+	
+	/**
+	 * 查询列表
+	 */
+	@RequiresPermissions("mes:mesProductReport:view")
+	@RequestMapping(value = {"list", ""})
+	public String list(MesProductReport mesProductReport, Model model) {
+		model.addAttribute("mesProductReport", mesProductReport);
+		return "modules/mes/mesProductReportList";
+	}
+	
+	/**
+	 * 查询列表数据
+	 */
+	@RequiresPermissions("mes:mesProductReport:view")
+	@RequestMapping(value = "listData")
+	@ResponseBody
+	public Page<MesProductReport> listData(MesProductReport mesProductReport, HttpServletRequest request, HttpServletResponse response) {
+		mesProductReport.setPage(new Page<>(request, response));
+		Page<MesProductReport> page = mesProductReportService.findPage(mesProductReport);
+		return page;
+	}
+
+	/**
+	 * 查看编辑表单
+	 */
+	@RequiresPermissions("mes:mesProductReport:view")
+	@RequestMapping(value = "form")
+	public String form(MesProductReport mesProductReport, Model model) {
+		model.addAttribute("mesProductReport", mesProductReport);
+		return "modules/mes/mesProductReportForm";
+	}
+
+	/**
+	 * 保存数据
+	 */
+	@RequiresPermissions("mes:mesProductReport:edit")
+	@PostMapping(value = "save")
+	@ResponseBody
+	public String save(@Validated MesProductReport mesProductReport) {
+		mesProductReportService.save(mesProductReport);
+		return renderResult(Global.TRUE, text("保存完工报告成功!"));
+	}
+	
+	/**
+	 * 删除数据
+	 */
+	@RequiresPermissions("mes:mesProductReport:edit")
+	@RequestMapping(value = "delete")
+	@ResponseBody
+	public String delete(MesProductReport mesProductReport) {
+		mesProductReportService.delete(mesProductReport);
+		return renderResult(Global.TRUE, text("删除完工报告成功!"));
+	}
+
+	/**
+	 * 同步数据到 ERP
+	 */
+	@RequiresPermissions("mes:mesProductReport:edit")
+	@RequestMapping(value = "mesToErp")
+	@ResponseBody
+	public String mesToErp(MesProductReport mesProductReport) {
+		if (StringUtils.isNotBlank(mesProductReport.getId())) {
+			MesProductReport exist = mesProductReportService.get(mesProductReport);
+			if (exist != null && !exist.getIsNewRecord()) {
+				mesProductReport = exist;
+			}
+		}
+		if (mesProductReport == null || mesProductReport.getIsNewRecord()) {
+			return renderResult(Global.FALSE, text("完工报告不存在!"));
+		}
+
+		String requestJson = buildCreateCompleteDocJson(mesProductReport);
+		JSONObject response = U9cAuthUtil.createCompleteDoc(requestJson);
+		if (response == null) {
+			return renderResult(Global.FALSE, text("同步ERP失败!"));
+		}
+		if (!Boolean.TRUE.equals(response.getBoolean("Success"))) {
+			String msg = response.getString("ResMsg");
+			return renderResult(Global.FALSE, text(StringUtils.isNotBlank(msg) ? msg : "同步ERP失败!"));
+		}
+
+		JSONArray dataList = response.getJSONArray("Data");
+		if (dataList == null || dataList.isEmpty()) {
+			return renderResult(Global.FALSE, text("同步ERP失败:返回数据为空!"));
+		}
+		JSONObject data = dataList.getJSONObject(0);
+		if (data == null || !Boolean.TRUE.equals(data.getBoolean("IsSucceed"))) {
+			String errorMsg = data != null ? data.getString("ErrorMsg") : null;
+			return renderResult(Global.FALSE, text(StringUtils.isNotBlank(errorMsg) ? errorMsg : "同步ERP失败!"));
+		}
+
+		String code = data.getString("Code");
+		String docId = data.getString("ID");
+		StringBuilder successMsg = new StringBuilder(text("同步ERP成功!"));
+		if (StringUtils.isNotBlank(code)) {
+			successMsg.append(" ").append(code);
+		}
+		if (StringUtils.isNotBlank(docId)) {
+			successMsg.append(" (").append(docId).append(")");
+		}
+		return renderResult(Global.TRUE, successMsg.toString());
+	}
+
+	/**
+	 * 构造 CreateCompleteDoc 接口请求 JSON
+	 */
+	private String buildCreateCompleteDocJson(MesProductReport mesProductReport) {
+		JSONObject item = new JSONObject(true);
+		item.put("OtherID", StringUtils.defaultIfBlank(mesProductReport.getOtherId(), ""));
+		item.put("DocTypeCode", StringUtils.defaultIfBlank(mesProductReport.getDocTypeCode(), ""));
+		item.put("BusinessDate", formatReportDate(mesProductReport.getBusinessDate()));
+		item.put("DocNo", StringUtils.defaultIfBlank(mesProductReport.getDocNo(), ""));
+		item.put("MODocNo", StringUtils.defaultIfBlank(mesProductReport.getMoDocNo(), ""));
+		item.put("CompleteDate", formatReportDate(mesProductReport.getCompleteDate()));
+		item.put("ActualRcvTime", formatReportDate(mesProductReport.getActualRcvTime()));
+		item.put("CompleteQty", StringUtils.defaultIfBlank(mesProductReport.getCompleteQty(), ""));
+		item.put("EligibleQty", StringUtils.defaultIfBlank(mesProductReport.getEligibleQty(), ""));
+		item.put("ScrapQty", StringUtils.defaultIfBlank(mesProductReport.getScrapQty(), ""));
+
+		JSONArray requestArray = new JSONArray();
+		requestArray.add(item);
+		return requestArray.toJSONString();
+	}
+
+	private String formatReportDate(Date date) {
+		if (date == null) {
+			return "";
+		}
+		return DateUtils.formatDate(date, "yyyy-MM-dd HH:mm:ss");
+	}
+	
+}

+ 3 - 3
src/main/resources/mappings/modules/mes/MesMoldMaintenanceDao.xml

@@ -1,7 +1,7 @@
 <?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.MesMoldMaintenanceDao">
-
+	
 	<!-- 查询数据
 	<select id="findList" resultType="MesMoldMaintenance">
 		SELECT ${sqlMap.column.toSql()}
@@ -11,5 +11,5 @@
 		</where>
 		ORDER BY ${sqlMap.order.toSql()}
 	</select> -->
-
-</mapper>
+	
+</mapper>

+ 15 - 0
src/main/resources/mappings/modules/mes/MesProductReportDao.xml

@@ -0,0 +1,15 @@
+<?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.MesProductReportDao">
+	
+	<!-- 查询数据
+	<select id="findList" resultType="MesProductReport">
+		SELECT ${sqlMap.column.toSql()}
+		FROM ${sqlMap.table.toSql()}
+		<where>
+			${sqlMap.where.toSql()}
+		</where>
+		ORDER BY ${sqlMap.order.toSql()}
+	</select> -->
+	
+</mapper>

+ 86 - 19
src/main/resources/views/modules/mes/mesMoldMaintenanceForm.html

@@ -1,9 +1,9 @@
-<% layout('/layouts/default.html', {title: '模具维保管理', libs: ['validate','dataGrid']}){ %>
+<% layout('/layouts/default.html', {title: '模具维保管理', libs: ['validate','fileupload']}){ %>
 <div class="main-content">
 	<div class="box box-main">
 		<div class="box-header with-border">
 			<div class="box-title">
-				<i class="fa icon-note"></i> ${text(mesMoldMaintenance.isNewRecord ? '新增模具维保记录' : '编辑模具维保记录')}
+				<i class="fa icon-note"></i> ${text(mesMoldMaintenance.isNewRecord ? '新增模具维保' : '编辑模具维保')}
 			</div>
 			<div class="box-tools pull-right">
 				<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
@@ -13,27 +13,26 @@
 			<div class="box-body">
 				<div class="form-unit">${text('基本信息')}</div>
 				<#form:hidden path="id"/>
+				<#form:hidden path="moldResumeId"/>
 				<div class="row">
 					<div class="col-xs-6">
 						<div class="form-group">
 							<label class="control-label col-sm-4" title="">
-								<span class="required">*</span> ${text('模具名称')}:<i class="fa icon-question hide"></i></label>
+								<span class="required hide">*</span> ${text('模具编号')}:<i class="fa icon-question hide"></i></label>
 							<div class="col-sm-8">
-								<#form:select path="moldResumeId" items="${moldResumeList}" itemLabel="moldName" itemValue="id" blankOption="true" class="form-control required"/>
+								<#form:input path="moldCode" maxlength="64" class="form-control"/>
 							</div>
 						</div>
 					</div>
 					<div class="col-xs-6">
 						<div class="form-group">
 							<label class="control-label col-sm-4" title="">
-								<span class="required hide">*</span> ${text('修模类型')}:<i class="fa icon-question hide"></i></label>
+								<span class="required hide">*</span> ${text('模具名称')}:<i class="fa icon-question hide"></i></label>
 							<div class="col-sm-8">
-								<#form:input path="repairType" maxlength="100" class="form-control"/>
+								<#form:input path="moldName" maxlength="255" class="form-control" readonly="true"/>
 							</div>
 						</div>
 					</div>
-				</div>
-				<div class="row">
 					<div class="col-xs-6">
 						<div class="form-group">
 							<label class="control-label col-sm-4" title="">
@@ -44,6 +43,55 @@
 							</div>
 						</div>
 					</div>
+				</div>
+				<div class="row">
+					<div class="col-xs-12">
+						<div class="form-group">
+							<label class="control-label col-sm-2" title="">
+								<span class="required hide">*</span> ${text('维保内容及过程')}:<i class="fa icon-question hide"></i></label>
+							<div class="col-sm-10">
+								<#form:textarea path="content" rows="4" maxlength="100" class="form-control"/>
+							</div>
+						</div>
+					</div>
+				</div>
+				<div class="row">
+					<div class="col-xs-6">
+						<div class="form-group">
+							<label class="control-label col-sm-4" title="">
+								<span class="required hide">*</span> ${text('修模类型')}:<i class="fa icon-question hide"></i></label>
+							<div class="col-sm-8">
+								<#form:input path="repairType" maxlength="64" class="form-control"/>
+							</div>
+						</div>
+					</div>
+					<div class="col-xs-6">
+						<div class="form-group">
+							<label class="control-label col-sm-4" title="">
+								<span class="required hide">*</span> ${text('发起部门')}:<i class="fa icon-question hide"></i></label>
+							<div class="col-sm-8">
+								<#form:input path="initiateDept" maxlength="64" class="form-control"/>
+							</div>
+						</div>
+					</div>
+					<div class="col-xs-6">
+						<div class="form-group">
+							<label class="control-label col-sm-4" title="">
+								<span class="required hide">*</span> ${text('发起人')}:<i class="fa icon-question hide"></i></label>
+							<div class="col-sm-8">
+								<#form:input path="initiateUser" maxlength="64" class="form-control"/>
+							</div>
+						</div>
+					</div>
+					<div class="col-xs-6">
+						<div class="form-group">
+							<label class="control-label col-sm-4" title="">
+								<span class="required hide">*</span> ${text('原因')}:<i class="fa icon-question hide"></i></label>
+							<div class="col-sm-8">
+								<#form:input path="reason" maxlength="64" class="form-control"/>
+							</div>
+						</div>
+					</div>
 					<div class="col-xs-6">
 						<div class="form-group">
 							<label class="control-label col-sm-4" title="">
@@ -58,20 +106,38 @@
 					<div class="col-xs-12">
 						<div class="form-group">
 							<label class="control-label col-sm-2" title="">
-								<span class="required hide">*</span> ${text('原因')}:<i class="fa icon-question hide"></i></label>
+								<span class="required hide">*</span> ${text('备注')}:<i class="fa icon-question hide"></i></label>
 							<div class="col-sm-10">
-								<#form:textarea path="reason" rows="3" class="form-control"/>
+								<#form:textarea path="remarks" rows="4" maxlength="200" class="form-control"/>
 							</div>
 						</div>
 					</div>
 				</div>
 				<div class="row">
-					<div class="col-xs-12">
+					<div class="col-xs-6">
 						<div class="form-group">
-							<label class="control-label col-sm-2" title="">
-								<span class="required hide">*</span> ${text('维保内容及过程')}:<i class="fa icon-question hide"></i></label>
-							<div class="col-sm-10">
-								<#form:textarea path="content" rows="4" class="form-control"/>
+							<label class="control-label col-sm-4" title="">
+								<span class="required hide">*</span> ${text('模数')}:<i class="fa icon-question hide"></i></label>
+							<div class="col-sm-8">
+								<#form:input path="munsMs" maxlength="64" class="form-control"/>
+							</div>
+						</div>
+					</div>
+					<div class="col-xs-6">
+						<div class="form-group">
+							<label class="control-label col-sm-4" title="">
+								<span class="required hide">*</span> ${text('累计模数')}:<i class="fa icon-question hide"></i></label>
+							<div class="col-sm-8">
+								<#form:input path="numsMsSum" maxlength="64" class="form-control"/>
+							</div>
+						</div>
+					</div>
+					<div class="col-xs-6">
+						<div class="form-group">
+							<label class="control-label col-sm-4" title="">
+								<span class="required hide">*</span> ${text('批次号')}:<i class="fa icon-question hide"></i></label>
+							<div class="col-sm-8">
+								<#form:input path="pcCode" maxlength="64" class="form-control"/>
 							</div>
 						</div>
 					</div>
@@ -79,10 +145,11 @@
 				<div class="row">
 					<div class="col-xs-12">
 						<div class="form-group">
-							<label class="control-label col-sm-2" title="">
-								<span class="required hide">*</span> ${text('备注')}:<i class="fa icon-question hide"></i></label>
+							<label class="control-label col-sm-2">
+								<span class="required hide">*</span> ${text('图片上传')}:</label>
 							<div class="col-sm-10">
-								<#form:textarea path="remarks" rows="3" class="form-control"/>
+								<#form:fileupload id="uploadImage" bizKey="${mesMoldMaintenance.id}" bizType="mesMoldMaintenance_image"
+									uploadType="image" class="" readonly="false" preview="true"/>
 							</div>
 						</div>
 					</div>
@@ -115,4 +182,4 @@ $("#inputForm").validate({
 		}, "json");
     }
 });
-</script>
+</script>

+ 93 - 0
src/main/resources/views/modules/mes/mesMoldMaintenanceInfo.html

@@ -0,0 +1,93 @@
+<% layout('/layouts/default.html', {title: '模具维保详情', libs: ['fileupload']}){ %>
+<div class="main-content">
+	<div class="box box-main">
+		<div class="box-header with-border">
+			<div class="box-title">
+				<i class="fa icon-note"></i> ${text('模具维保详情')}
+			</div>
+			<div class="box-tools pull-right">
+				<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
+			</div>
+		</div>
+		<div class="box-body">
+			<div class="form-unit">${text('基本信息')}</div>
+			<table class="table table-bordered">
+				<tr>
+					<th class="mpc-header">${text('模具编号')}</th>
+					<td>${mesMoldMaintenance.moldCode}</td>
+				</tr>
+				<tr>
+					<th class="mpc-header">${text('模具名称')}</th>
+					<td>${mesMoldMaintenance.moldName}</td>
+				</tr>
+				<tr>
+					<th class="mpc-header">${text('维保日期')}</th>
+					<td>${@DateUtils.formatDate(mesMoldMaintenance.maintenanceDate, 'yyyy-MM-dd HH:mm')}</td>
+				</tr>
+				<tr>
+					<th class="mpc-header">${text('维保内容及过程')}</th>
+					<td>${mesMoldMaintenance.content}</td>
+				</tr>
+				<tr>
+					<th class="mpc-header">${text('修模类型')}</th>
+					<td>${mesMoldMaintenance.repairType}</td>
+				</tr>
+				<tr>
+					<th class="mpc-header">${text('发起部门')}</th>
+					<td>${mesMoldMaintenance.initiateDept}</td>
+				</tr>
+				<tr>
+					<th class="mpc-header">${text('发起人')}</th>
+					<td>${mesMoldMaintenance.initiateUser}</td>
+				</tr>
+				<tr>
+					<th class="mpc-header">${text('原因')}</th>
+					<td>${mesMoldMaintenance.reason}</td>
+				</tr>
+				<tr>
+					<th class="mpc-header">${text('验收结果')}</th>
+					<td>${mesMoldMaintenance.acceptResult}</td>
+				</tr>
+				<tr>
+					<th class="mpc-header">${text('备注')}</th>
+					<td>${mesMoldMaintenance.remarks}</td>
+				</tr>
+				<tr>
+					<th class="mpc-header">${text('模数')}</th>
+					<td>${mesMoldMaintenance.munsMs}</td>
+				</tr>
+				<tr>
+					<th class="mpc-header">${text('累计模数')}</th>
+					<td>${mesMoldMaintenance.numsMsSum}</td>
+				</tr>
+				<tr>
+					<th class="mpc-header">${text('批次号')}</th>
+					<td>${mesMoldMaintenance.pcCode}</td>
+				</tr>
+				<tr>
+					<th class="mpc-header">${text('创建时间')}</th>
+					<td>${@DateUtils.formatDateTime(mesMoldMaintenance.createDate)}</td>
+				</tr>
+				<tr>
+					<th class="mpc-header">${text('更新时间')}</th>
+					<td>${@DateUtils.formatDateTime(mesMoldMaintenance.updateDate)}</td>
+				</tr>
+				<tr>
+					<th class="mpc-header">${text('图片')}</th>
+					<td>
+						<#form:fileupload id="uploadImage" bizKey="${mesMoldMaintenance.id}" bizType="mesMoldMaintenance_image"
+							uploadType="image" class="" readonly="true" preview="true"/>
+					</td>
+				</tr>
+			</table>
+		</div>
+		<div class="box-footer">
+			<div class="row">
+				<div class="col-sm-offset-2 col-sm-10">
+					<button type="button" class="btn btn-sm btn-default" id="btnCancel" onclick="js.closeCurrentTabPage()"><i class="fa fa-reply-all"></i> ${text('关 闭')}</button>
+				</div>
+			</div>
+		</div>
+	</div>
+</div>
+<% } %>

+ 89 - 16
src/main/resources/views/modules/mes/mesMoldMaintenanceList.html

@@ -3,12 +3,12 @@
 	<div class="box box-main">
 		<div class="box-header">
 			<div class="box-title">
-				<i class="fa icon-notebook"></i> ${text('模具维保管理')}
+				<i class="fa icon-notebook"></i> ${text('模具维保管理')}${isNotBlank(mesMoldMaintenance.moldCode) ? ' | ' + mesMoldMaintenance.moldCode : ''}
 			</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>
 				<% if(hasPermi('mes:mesMoldMaintenance:edit')){ %>
-					<a href="${ctx}/mes/mesMoldMaintenance/form" class="btn btn-default btnTool" title="${text('新增模具维保记录')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
+					<a href="${ctx}/mes/mesMoldMaintenance/form" class="btn btn-default btnTool" title="${text('新增模具维保')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
 				<% } %>
 				<a href="#" class="btn btn-default" id="btnSetting" title="${text('设置')}"><i class="fa fa-navicon"></i></a>
 			</div>
@@ -17,21 +17,82 @@
 			<#form:form id="searchForm" model="${mesMoldMaintenance}" action="${ctx}/mes/mesMoldMaintenance/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="moldCode" maxlength="64" class="form-control width-120"/>
+					</div>
+				</div>
+				<div class="form-group">
 					<label class="control-label">${text('模具名称')}:</label>
 					<div class="control-inline">
 						<#form:input path="moldName" maxlength="255" class="form-control width-120"/>
 					</div>
 				</div>
 				<div class="form-group">
+					<label class="control-label">${text('维保日期')}:</label>
+					<div class="control-inline">
+						<#form:input path="maintenanceDate" 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">
+					<label class="control-label">${text('维保内容及过程')}:</label>
+					<div class="control-inline">
+						<#form:input path="content" 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="repairType" maxlength="100" class="form-control width-120"/>
+						<#form:input path="repairType" maxlength="64" class="form-control width-120"/>
+					</div>
+				</div>
+				<div class="form-group">
+					<label class="control-label">${text('发起部门')}:</label>
+					<div class="control-inline">
+						<#form:input path="initiateDept" maxlength="64" class="form-control width-120"/>
 					</div>
 				</div>
 				<div class="form-group">
 					<label class="control-label">${text('发起人')}:</label>
 					<div class="control-inline">
-						<#form:input path="initiateUser" maxlength="100" class="form-control width-120"/>
+						<#form:input path="initiateUser" maxlength="64" class="form-control width-120"/>
+					</div>
+				</div>
+				<div class="form-group">
+					<label class="control-label">${text('原因')}:</label>
+					<div class="control-inline">
+						<#form:input path="reason" maxlength="64" class="form-control width-120"/>
+					</div>
+				</div>
+				<div class="form-group">
+					<label class="control-label">${text('验收结果')}:</label>
+					<div class="control-inline">
+						<#form:input path="acceptResult" 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="remarks" maxlength="200" class="form-control width-120"/>
+					</div>
+				</div>
+				<div class="form-group">
+					<label class="control-label">${text('模数')}:</label>
+					<div class="control-inline">
+						<#form:input path="munsMs" maxlength="64" class="form-control width-120"/>
+					</div>
+				</div>
+				<div class="form-group">
+					<label class="control-label">${text('累计模数')}:</label>
+					<div class="control-inline">
+						<#form:input path="numsMsSum" maxlength="64" class="form-control width-120"/>
+					</div>
+				</div>
+				<div class="form-group">
+					<label class="control-label">${text('批次号')}:</label>
+					<div class="control-inline">
+						<#form:input path="pcCode" maxlength="64" class="form-control width-120"/>
 					</div>
 				</div>
 				<div class="form-group">
@@ -50,27 +111,39 @@
 $('#dataGrid').dataGrid({
 	searchForm: $("#searchForm"),
 	columnModel: [
-		{header:'${text("模具名称")}', name:'moldName', index:'b.mold_name', width:150, align:"center"},
+		{header:'${text("模具编号")}', name:'moldCode', index:'a.mold_code', width:120, align:"left", frozen:true, formatter: function(val, obj, row, act){
+			return '<a href="${ctx}/mes/mesMoldMaintenance/info?id='+row.id+'" class="btnList" data-title="${text("模具维保详情")}">'+(val||row.id)+'</a>';
+		}},
+		{header:'${text("模具名称")}', name:'moldName', index:'b.mold_name', width:150, align:"left"},
 		{header:'${text("维保日期")}', name:'maintenanceDate', index:'a.maintenance_date', width:150, align:"center"},
-		{header:'${text("维保内容及过程")}', name:'content', index:'a.content', width:200, align:"center"},
-		{header:'${text("修模类型")}', name:'repairType', index:'a.repair_type', width:120, align:"center"},
-		{header:'${text("发起部门")}', name:'initiateDept', index:'a.initiate_dept', width:120, align:"center"},
-		{header:'${text("发起人")}', name:'initiateUser', index:'a.initiate_user', width:120, align:"center"},
-		{header:'${text("原因")}', name:'reason', index:'a.reason', width:150, align:"center"},
-		{header:'${text("验收结果")}', name:'acceptResult', index:'a.accept_result', width:120, align:"center"},
-		{header:'${text("备注")}', name:'remarks', index:'a.remarks', width:150, align:"center"},
+		{header:'${text("维保内容及过程")}', name:'content', index:'a.content', width:150, align:"left"},
+		{header:'${text("修模类型")}', name:'repairType', index:'a.repair_type', width:150, align:"left"},
+		{header:'${text("发起部门")}', name:'initiateDept', index:'a.initiate_dept', width:150, align:"left"},
+		{header:'${text("发起人")}', name:'initiateUser', index:'a.initiate_user', width:150, align:"left"},
+		{header:'${text("原因")}', name:'reason', index:'a.reason', width:150, align:"left"},
+		{header:'${text("验收结果")}', name:'acceptResult', index:'a.accept_result', width:150, align:"left"},
+		{header:'${text("备注")}', name:'remarks', index:'a.remarks', width:150, align:"left"},
+		{header:'${text("模数")}', name:'munsMs', index:'a.muns_ms', width:150, align:"left"},
+		{header:'${text("累计模数")}', name:'numsMsSum', index:'a.nums_ms_sum', width:150, align:"left"},
+		{header:'${text("批次号")}', name:'pcCode', index:'a.pc_code', width:150, align:"left"},
+		{header:'${text("更新时间")}', name:'updateDate', index:'a.update_date', width:150, align:"center"},
 		{header:'${text("操作")}', name:'actions', width:120, formatter: function(val, obj, row, act){
 			var actions = [];
 			//<% if(hasPermi('mes:mesMoldMaintenance:edit')){ %>
-				actions.push('<a href="${ctx}/mes/mesMoldMaintenance/form?id='+row.id+'" class="btnList" title="${text("编辑模具维保记录")}"><i class="fa fa-pencil"></i></a>&nbsp;');
-				actions.push('<a href="${ctx}/mes/mesMoldMaintenance/delete?id='+row.id+'" class="btnList" title="${text("删除模具维保记录")}" data-confirm="${text("确认要删除该模具维保记录吗?")}"><i class="fa fa-trash-o"></i></a>&nbsp;');
+				actions.push('<a href="${ctx}/mes/mesMoldMaintenance/form?id='+row.id+'" class="btnList" title="${text("编辑模具维保")}"><i class="fa fa-pencil"></i></a>&nbsp;');
+				if (row.status == Global.STATUS_NORMAL){
+					actions.push('<a href="${ctx}/mes/mesMoldMaintenance/disable?id='+row.id+'" class="btnList" title="${text("停用模具维保")}" data-confirm="${text("确认要停用该模具维保吗?")}"><i class="glyphicon glyphicon-ban-circle"></i></a>&nbsp;');
+				} else if (row.status == Global.STATUS_DISABLE){
+					actions.push('<a href="${ctx}/mes/mesMoldMaintenance/enable?id='+row.id+'" class="btnList" title="${text("启用模具维保")}" data-confirm="${text("确认要启用该模具维保吗?")}"><i class="glyphicon glyphicon-ok-circle"></i></a>&nbsp;');
+				}
+				actions.push('<a href="${ctx}/mes/mesMoldMaintenance/delete?id='+row.id+'" class="btnList" title="${text("删除模具维保")}" data-confirm="${text("确认要删除该模具维保吗?")}"><i class="fa fa-trash-o"></i></a>&nbsp;');
 			//<% } %>
 			return actions.join('');
 		}}
 	],
 	// 加载成功后执行事件
 	ajaxSuccess: function(data){
-
+		
 	}
 });
-</script>
+</script>

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

@@ -57,7 +57,12 @@ $('#dataGrid').dataGrid({
 	searchForm: $("#searchForm"),
 	columnModel: [
 		{header:'${text("模具名称")}', name:'moldName', index:'a.mold_name', width:150, align:"center"},
-		{header:'${text("模具编号")}', name:'moldCode', index:'a.mold_code', width:120, align:"center"},
+		{header:'${text("模具编号")}', name:'moldCode', index:'a.mold_code', width:120, align:"center", formatter: function(val, obj, row, act){
+			if (!val) {
+				return '';
+			}
+			return '<a href="${ctx}/mes/mesMoldMaintenance/list?moldCode='+val+'" class="btnList" title="${text("模具维保管理")}">'+val+'</a>';
+		}},
 		{header:'${text("模具穴数")}', name:'cavityNumber', index:'a.cavity_number', width:100, align:"center"},
 		{header:'${text("进厂日期")}', name:'entryDate', index:'a.entry_date', width:120, align:"center"},
 		{header:'${text("制造厂家")}', name:'manufacturer', index:'a.manufacturer', width:150, align:"center"},

+ 160 - 0
src/main/resources/views/modules/mes/mesProductReportForm.html

@@ -0,0 +1,160 @@
+<% layout('/layouts/default.html', {title: '完工报告管理', libs: ['validate','fileupload']}){ %>
+<div class="main-content">
+	<div class="box box-main">
+		<div class="box-header with-border">
+			<div class="box-title">
+				<i class="fa icon-note"></i> ${text(mesProductReport.isNewRecord ? '新增完工报告' : '编辑完工报告')}
+			</div>
+			<div class="box-tools pull-right">
+				<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
+			</div>
+		</div>
+		<#form:form id="inputForm" model="${mesProductReport}" action="${ctx}/mes/mesProductReport/save" method="post" class="form-horizontal">
+			<div class="box-body">
+				<div class="form-unit">${text('基本信息')}</div>
+				<#form:hidden path="id"/>
+				<div class="row">
+					<div class="col-xs-6">
+						<div class="form-group">
+							<label class="control-label col-sm-4" title="">
+								<span class="required hide">*</span> ${text('第三方数据标识')}:<i class="fa icon-question hide"></i></label>
+							<div class="col-sm-8">
+								<#form:input path="otherId" maxlength="64" class="form-control"/>
+							</div>
+						</div>
+					</div>
+					<div class="col-xs-6">
+						<div class="form-group">
+							<label class="control-label col-sm-4" title="">
+								<span class="required hide">*</span> ${text('单据类型编码')}:<i class="fa icon-question hide"></i></label>
+							<div class="col-sm-8">
+								<#form:input path="docTypeCode" maxlength="64" class="form-control"/>
+							</div>
+						</div>
+					</div>
+					<div class="col-xs-6">
+						<div class="form-group">
+							<label class="control-label col-sm-4" title="">
+								<span class="required hide">*</span> ${text('单据日期')}:<i class="fa icon-question hide"></i></label>
+							<div class="col-sm-8">
+								<#form:input path="businessDate" readonly="true" maxlength="20" class="form-control laydate"
+									dataFormat="datetime" data-type="datetime" data-format="yyyy-MM-dd HH:mm"/>
+							</div>
+						</div>
+					</div>
+					<div class="col-xs-6">
+						<div class="form-group">
+							<label class="control-label col-sm-4" title="">
+								<span class="required hide">*</span> ${text('单号')}:<i class="fa icon-question hide"></i></label>
+							<div class="col-sm-8">
+								<#form:input path="docNo" maxlength="64" class="form-control"/>
+							</div>
+						</div>
+					</div>
+					<div class="col-xs-6">
+						<div class="form-group">
+							<label class="control-label col-sm-4" title="">
+								<span class="required hide">*</span> ${text('生产订单单号')}:<i class="fa icon-question hide"></i></label>
+							<div class="col-sm-8">
+								<#form:input path="moDocNo" maxlength="64" class="form-control"/>
+							</div>
+						</div>
+					</div>
+					<div class="col-xs-6">
+						<div class="form-group">
+							<label class="control-label col-sm-4" title="">
+								<span class="required hide">*</span> ${text('完工时间')}:<i class="fa icon-question hide"></i></label>
+							<div class="col-sm-8">
+								<#form:input path="completeDate" readonly="true" maxlength="20" class="form-control laydate"
+									dataFormat="datetime" data-type="datetime" data-format="yyyy-MM-dd HH:mm"/>
+							</div>
+						</div>
+					</div>
+					<div class="col-xs-6">
+						<div class="form-group">
+							<label class="control-label col-sm-4" title="">
+								<span class="required hide">*</span> ${text('入库确认时间')}:<i class="fa icon-question hide"></i></label>
+							<div class="col-sm-8">
+								<#form:input path="actualRcvTime" readonly="true" maxlength="20" class="form-control laydate"
+									dataFormat="datetime" data-type="datetime" data-format="yyyy-MM-dd HH:mm"/>
+							</div>
+						</div>
+					</div>
+					<div class="col-xs-6">
+						<div class="form-group">
+							<label class="control-label col-sm-4" title="">
+								<span class="required hide">*</span> ${text('入库数量')}:<i class="fa icon-question hide"></i></label>
+							<div class="col-sm-8">
+								<#form:input path="completeQty" maxlength="64" class="form-control"/>
+							</div>
+						</div>
+					</div>
+					<div class="col-xs-6">
+						<div class="form-group">
+							<label class="control-label col-sm-4" title="">
+								<span class="required hide">*</span> ${text('合格数量')}:<i class="fa icon-question hide"></i></label>
+							<div class="col-sm-8">
+								<#form:input path="eligibleQty" maxlength="64" class="form-control"/>
+							</div>
+						</div>
+					</div>
+					<div class="col-xs-6">
+						<div class="form-group">
+							<label class="control-label col-sm-4" title="">
+								<span class="required hide">*</span> ${text('报废数量')}:<i class="fa icon-question hide"></i></label>
+							<div class="col-sm-8">
+								<#form:input path="scrapQty" maxlength="64" class="form-control"/>
+							</div>
+						</div>
+					</div>
+					<div class="col-xs-6">
+						<div class="form-group">
+							<label class="control-label col-sm-4" title="">
+								<span class="required hide">*</span> ${text('备注')}:<i class="fa icon-question hide"></i></label>
+							<div class="col-sm-8">
+								<#form:input path="remark" maxlength="64" class="form-control"/>
+							</div>
+						</div>
+					</div>
+				</div>
+				<div class="row">
+					<div class="col-xs-12">
+						<div class="form-group">
+							<label class="control-label col-sm-2">
+								<span class="required hide">*</span> ${text('图片上传')}:</label>
+							<div class="col-sm-10">
+								<#form:fileupload id="uploadImage" bizKey="${mesProductReport.id}" bizType="mesProductReport_image"
+									uploadType="image" class="" readonly="false" preview="true"/>
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="box-footer">
+				<div class="row">
+					<div class="col-sm-offset-2 col-sm-10">
+						<% if (hasPermi('mes:mesProductReport:edit')){ %>
+							<button type="submit" class="btn btn-sm btn-primary" id="btnSubmit"><i class="fa fa-check"></i> ${text('保 存')}</button>&nbsp;
+						<% } %>
+						<button type="button" class="btn btn-sm btn-default" id="btnCancel" onclick="js.closeCurrentTabPage()"><i class="fa fa-reply-all"></i> ${text('关 闭')}</button>
+					</div>
+				</div>
+			</div>
+		</#form:form>
+	</div>
+</div>
+<% } %>
+<script>
+$("#inputForm").validate({
+	submitHandler: function(form){
+		js.ajaxSubmitForm($(form), function(data){
+			js.showMessage(data.message);
+			if(data.result == Global.TRUE){
+				js.closeCurrentTabPage(function(contentWindow){
+					contentWindow.page();
+				});
+			}
+		}, "json");
+    }
+});
+</script>

+ 133 - 0
src/main/resources/views/modules/mes/mesProductReportList.html

@@ -0,0 +1,133 @@
+<% layout('/layouts/default.html', {title: '完工报告管理', 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>
+				<% if(hasPermi('mes:mesProductReport:edit')){ %>
+					<a href="${ctx}/mes/mesProductReport/form" class="btn btn-default btnTool" title="${text('新增完工报告')}"><i class="fa fa-plus"></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="${mesProductReport}" action="${ctx}/mes/mesProductReport/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="otherId" maxlength="64" class="form-control width-120"/>
+					</div>
+				</div>
+				<div class="form-group">
+					<label class="control-label">${text('单据类型编码')}:</label>
+					<div class="control-inline">
+						<#form:input path="docTypeCode" maxlength="64" class="form-control width-120"/>
+					</div>
+				</div>
+				<div class="form-group">
+					<label class="control-label">${text('单据日期')}:</label>
+					<div class="control-inline">
+						<#form:input path="businessDate" 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">
+					<label class="control-label">${text('单号')}:</label>
+					<div class="control-inline">
+						<#form:input path="docNo" maxlength="64" class="form-control width-120"/>
+					</div>
+				</div>
+				<div class="form-group">
+					<label class="control-label">${text('生产订单单号')}:</label>
+					<div class="control-inline">
+						<#form:input path="moDocNo" maxlength="64" class="form-control width-120"/>
+					</div>
+				</div>
+				<div class="form-group">
+					<label class="control-label">${text('完工时间')}:</label>
+					<div class="control-inline">
+						<#form:input path="completeDate" 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">
+					<label class="control-label">${text('入库确认时间')}:</label>
+					<div class="control-inline">
+						<#form:input path="actualRcvTime" 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">
+					<label class="control-label">${text('入库数量')}:</label>
+					<div class="control-inline">
+						<#form:input path="completeQty" maxlength="64" class="form-control width-120"/>
+					</div>
+				</div>
+				<div class="form-group">
+					<label class="control-label">${text('合格数量')}:</label>
+					<div class="control-inline">
+						<#form:input path="eligibleQty" maxlength="64" class="form-control width-120"/>
+					</div>
+				</div>
+				<div class="form-group">
+					<label class="control-label">${text('报废数量')}:</label>
+					<div class="control-inline">
+						<#form:input path="scrapQty" maxlength="64" class="form-control width-120"/>
+					</div>
+				</div>
+				<div class="form-group">
+					<label class="control-label">${text('备注')}:</label>
+					<div class="control-inline">
+						<#form:input path="remark" maxlength="64" class="form-control width-120"/>
+					</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').dataGrid({
+	searchForm: $("#searchForm"),
+	columnModel: [
+		{header:'${text("第三方数据标识")}', name:'otherId', index:'a.other_id', width:150, align:"left", frozen:true, formatter: function(val, obj, row, act){
+			return '<a href="${ctx}/mes/mesProductReport/form?id='+row.id+'" class="btnList" data-title="${text("编辑完工报告")}">'+(val||row.id)+'</a>';
+		}},
+		{header:'${text("单据类型编码")}', name:'docTypeCode', index:'a.doc_type_code', width:150, align:"left"},
+		{header:'${text("单据日期")}', name:'businessDate', index:'a.business_date', width:150, align:"center"},
+		{header:'${text("单号")}', name:'docNo', index:'a.doc_no', width:150, align:"left"},
+		{header:'${text("生产订单单号")}', name:'moDocNo', index:'a.mo_doc_no', width:150, align:"left"},
+		{header:'${text("完工时间")}', name:'completeDate', index:'a.complete_date', width:150, align:"center"},
+		{header:'${text("入库确认时间")}', name:'actualRcvTime', index:'a.actual_rcv_time', width:150, align:"center"},
+		{header:'${text("入库数量")}', name:'completeQty', index:'a.complete_qty', width:150, align:"left"},
+		{header:'${text("合格数量")}', name:'eligibleQty', index:'a.eligible_qty', width:150, align:"left"},
+		{header:'${text("报废数量")}', name:'scrapQty', index:'a.scrap_qty', width:150, align:"left"},
+		{header:'${text("备注")}', name:'remark', index:'a.remark', width:150, align:"left"},
+		{header:'${text("更新时间")}', name:'updateDate', index:'a.update_date', width:150, align:"center"},
+		{header:'${text("操作")}', name:'actions', width:150, formatter: function(val, obj, row, act){
+			var actions = [];
+			//<% if(hasPermi('mes:mesProductReport:edit')){ %>
+				actions.push('<a href="${ctx}/mes/mesProductReport/form?id='+row.id+'" class="btnList" title="${text("编辑完工报告")}"><i class="fa fa-pencil"></i></a>&nbsp;');
+				actions.push('<a href="${ctx}/mes/mesProductReport/mesToErp?id='+row.id+'" class="btnList" title="${text("同步ERP")}" data-confirm="${text("确认要同步该完工报告到ERP吗?")}"><i class="fa fa-cloud-upload"></i></a>&nbsp;');
+				actions.push('<a href="${ctx}/mes/mesProductReport/delete?id='+row.id+'" class="btnList" title="${text("删除完工报告")}" data-confirm="${text("确认要删除该完工报告吗?")}"><i class="fa fa-trash-o"></i></a>&nbsp;');
+			//<% } %>
+			return actions.join('');
+		}}
+	],
+	// 加载成功后执行事件
+	ajaxSuccess: function(data){
+		
+	}
+});
+</script>