Pārlūkot izejas kodu

erp销售出货单,优化探伤记录

sunxianglong 3 mēneši atpakaļ
vecāks
revīzija
b61e7b0f0a

+ 15 - 0
src/main/java/com/jeesite/modules/mes/dao/MesMdclDao.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.MesMdcl;
+
+/**
+ * 密度测量表DAO接口
+ * @author sxl
+ * @version 2026-07-27
+ */
+@MyBatisDao
+public interface MesMdclDao extends CrudDao<MesMdcl> {
+	
+}

+ 15 - 0
src/main/java/com/jeesite/modules/mes/dao/MesProductSaleDao.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.MesProductSale;
+
+/**
+ * 销售出货单表DAO接口
+ * @author sxl
+ * @version 2026-07-28
+ */
+@MyBatisDao
+public interface MesProductSaleDao extends CrudDao<MesProductSale> {
+	
+}

+ 101 - 0
src/main/java/com/jeesite/modules/mes/entity/MesMdcl.java

@@ -0,0 +1,101 @@
+package com.jeesite.modules.mes.entity;
+
+import java.util.List;
+
+import javax.validation.constraints.Size;
+
+import com.jeesite.common.collect.ListUtils;
+import com.jeesite.common.entity.DataEntity;
+import com.jeesite.common.mybatis.annotation.Column;
+import com.jeesite.common.mybatis.annotation.Table;
+
+/**
+ * 密度测量表Entity
+ * @author sxl
+ * @version 2026-07-27
+ */
+@Table(name="mes_mdcl", alias="a", label="密度测量表信息", columns={
+		@Column(name="id", attrName="id", label="id", isPK=true),
+		@Column(name="lu_code", attrName="luCode", label="炉号"),
+		@Column(name="bao_code", attrName="baoCode", label="包号"),
+		@Column(name="md_value", attrName="mdValue", label="密度值"),
+		@Column(name="di_value", attrName="diValue", label="DI值"),
+		@Column(name="result", attrName="result", label="判定结果"),
+		@Column(name="create_by", attrName="createBy", label="创建人", isUpdate=false, isQuery=false),
+		@Column(name="create_date", attrName="createDate", label="创建时间", isUpdate=false, isQuery=false, isUpdateForce=true),
+		@Column(name="update_by", attrName="updateBy", label="更新人", isQuery=false),
+		@Column(name="update_date", attrName="updateDate", label="更新时间", isQuery=false, isUpdateForce=true),
+	}, orderBy="a.update_date DESC"
+)
+public class MesMdcl extends DataEntity<MesMdcl> {
+	
+	private static final long serialVersionUID = 1L;
+	private String luCode;		// 炉号
+	private String baoCode;		// 包号
+	private String mdValue;		// 密度值
+	private String diValue;		// DI值
+	private String result;		// 判定结果
+	private List imgList = ListUtils.newArrayList(); // 图片
+
+	public MesMdcl() {
+		this(null);
+	}
+	
+	public MesMdcl(String id){
+		super(id);
+	}
+	
+	@Size(min=0, max=64, message="炉号长度不能超过 64 个字符")
+	public String getLuCode() {
+		return luCode;
+	}
+
+	public void setLuCode(String luCode) {
+		this.luCode = luCode;
+	}
+	
+	@Size(min=0, max=64, message="包号长度不能超过 64 个字符")
+	public String getBaoCode() {
+		return baoCode;
+	}
+
+	public void setBaoCode(String baoCode) {
+		this.baoCode = baoCode;
+	}
+	
+	@Size(min=0, max=64, message="密度值长度不能超过 64 个字符")
+	public String getMdValue() {
+		return mdValue;
+	}
+
+	public void setMdValue(String mdValue) {
+		this.mdValue = mdValue;
+	}
+	
+	@Size(min=0, max=64, message="DI值长度不能超过 64 个字符")
+	public String getDiValue() {
+		return diValue;
+	}
+
+	public void setDiValue(String diValue) {
+		this.diValue = diValue;
+	}
+
+	@Size(min=0, max=64, message="判定结果长度不能超过 64 个字符")
+	public String getResult() {
+		return result;
+	}
+
+	public void setResult(String result) {
+		this.result = result;
+	}
+
+	public List getImgList() {
+		return imgList;
+	}
+
+	public void setImgList(List imgList) {
+		this.imgList = imgList;
+	}
+	
+}

+ 101 - 0
src/main/java/com/jeesite/modules/mes/entity/MesProductSale.java

@@ -0,0 +1,101 @@
+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;
+
+/**
+ * 销售出货单表Entity
+ * @author sxl
+ * @version 2026-07-28
+ */
+@Table(name="mes_product_sale", alias="a", label="销售出货单表信息", columns={
+		@Column(name="id", attrName="id", label="id", isPK=true),
+		@Column(name="sale_order", attrName="saleOrder", label="销售订单号"),
+		@Column(name="doc_line_no", attrName="docLineNo", label="行号"),
+		@Column(name="lot_code", attrName="lotCode", label="批号"),
+		@Column(name="cp_code", attrName="cpCode", label="成品号"),
+		@Column(name="sh_state", attrName="shState", label="审核状态", comment="审核状态(1=审核后,2=弃审,3=删除)"),
+		@Column(name="mes_state", attrName="mesState", label="mes完成情况", comment="mes完成情况(1=未扫码,2=已扫码)"),
+		@Column(name="create_by", attrName="createBy", label="创建人", isUpdate=false, isQuery=false),
+		@Column(name="create_date", attrName="createDate", label="创建时间", isUpdate=false, isQuery=false, isUpdateForce=true),
+		@Column(name="update_by", attrName="updateBy", label="更新人", isQuery=false),
+		@Column(name="update_date", attrName="updateDate", label="更新时间", isQuery=false, isUpdateForce=true),
+	}, orderBy="a.update_date DESC"
+)
+public class MesProductSale extends DataEntity<MesProductSale> {
+	
+	private static final long serialVersionUID = 1L;
+	private String saleOrder;		// 销售订单号
+	private String docLineNo;		// 行号
+	private String lotCode;		// 批号
+	private String cpCode;		// 成品号
+	private String shState;		// 审核状态(1=审核后,2=弃审,3=删除)
+	private String mesState;		// mes完成情况(1=未扫码,2=已扫码)
+
+	public MesProductSale() {
+		this(null);
+	}
+	
+	public MesProductSale(String id){
+		super(id);
+	}
+	
+	@Size(min=0, max=64, message="销售订单号长度不能超过 64 个字符")
+	public String getSaleOrder() {
+		return saleOrder;
+	}
+
+	public void setSaleOrder(String saleOrder) {
+		this.saleOrder = saleOrder;
+	}
+	
+	@Size(min=0, max=64, message="行号长度不能超过 64 个字符")
+	public String getDocLineNo() {
+		return docLineNo;
+	}
+
+	public void setDocLineNo(String docLineNo) {
+		this.docLineNo = docLineNo;
+	}
+	
+	@Size(min=0, max=64, message="批号长度不能超过 64 个字符")
+	public String getLotCode() {
+		return lotCode;
+	}
+
+	public void setLotCode(String lotCode) {
+		this.lotCode = lotCode;
+	}
+	
+	@Size(min=0, max=64, message="成品号长度不能超过 64 个字符")
+	public String getCpCode() {
+		return cpCode;
+	}
+
+	public void setCpCode(String cpCode) {
+		this.cpCode = cpCode;
+	}
+	
+	@Size(min=0, max=1, message="审核状态长度不能超过 1 个字符")
+	public String getShState() {
+		return shState;
+	}
+
+	public void setShState(String shState) {
+		this.shState = shState;
+	}
+	
+	@Size(min=0, max=1, message="mes完成情况长度不能超过 1 个字符")
+	public String getMesState() {
+		return mesState;
+	}
+
+	public void setMesState(String mesState) {
+		this.mesState = mesState;
+	}
+	
+}

+ 116 - 0
src/main/java/com/jeesite/modules/mes/service/MesMdclService.java

@@ -0,0 +1,116 @@
+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.MesMdcl;
+import com.jeesite.modules.mes.dao.MesMdclDao;
+import com.jeesite.modules.file.utils.FileUploadUtils;
+
+/**
+ * 密度测量表Service
+ * @author sxl
+ * @version 2026-07-27
+ */
+@Service
+public class MesMdclService extends CrudService<MesMdclDao, MesMdcl> {
+
+	/** 密度值合格标准:mdValue >= 2.6 */
+	private static final double MD_STANDARD = 2.6;
+	/** DI值合格标准:diValue <= 0.8 */
+	private static final double DI_STANDARD = 0.8;
+	
+	/**
+	 * 获取单条数据
+	 * @param mesMdcl
+	 * @return
+	 */
+	@Override
+	public MesMdcl get(MesMdcl mesMdcl) {
+		return super.get(mesMdcl);
+	}
+	
+	/**
+	 * 查询分页数据
+	 * @param mesMdcl 查询条件
+	 * @param mesMdcl.page 分页对象
+	 * @return
+	 */
+	@Override
+	public Page<MesMdcl> findPage(MesMdcl mesMdcl) {
+		return super.findPage(mesMdcl);
+	}
+	
+	/**
+	 * 查询列表数据
+	 * @param mesMdcl
+	 * @return
+	 */
+	@Override
+	public List<MesMdcl> findList(MesMdcl mesMdcl) {
+		return super.findList(mesMdcl);
+	}
+	
+	/**
+	 * 保存数据(插入或更新)
+	 * @param mesMdcl
+	 */
+	@Override
+	@Transactional
+	public void save(MesMdcl mesMdcl) {
+		super.save(mesMdcl);
+		// 保存上传图片
+		FileUploadUtils.saveFileUpload(mesMdcl, mesMdcl.getId(), "mesMdcl_image");
+	}
+
+	/**
+	 * PDA端新增密度测量记录
+	 * 判定标准:mdValue >= 2.6 且 diValue <= 0.8 为合格
+	 */
+	@Transactional
+	public MesMdcl saveFromPda(MesMdcl mesMdcl) {
+		String luCode = mesMdcl.getLuCode().trim();
+		String baoCode = mesMdcl.getBaoCode().trim();
+		String mdValue = mesMdcl.getMdValue().trim();
+		String diValue = mesMdcl.getDiValue().trim();
+
+		double md = Double.parseDouble(mdValue);
+		double di = Double.parseDouble(diValue);
+		boolean pass = md >= MD_STANDARD && di <= DI_STANDARD;
+		String result = pass ? "合格" : "不合格";
+
+		mesMdcl.setIsNewRecord(true);
+		mesMdcl.setLuCode(luCode);
+		mesMdcl.setBaoCode(baoCode);
+		mesMdcl.setMdValue(mdValue);
+		mesMdcl.setDiValue(diValue);
+		mesMdcl.setResult(result);
+
+		super.save(mesMdcl);
+		return mesMdcl;
+	}
+	
+	/**
+	 * 更新状态
+	 * @param mesMdcl
+	 */
+	@Override
+	@Transactional
+	public void updateStatus(MesMdcl mesMdcl) {
+		super.updateStatus(mesMdcl);
+	}
+	
+	/**
+	 * 删除数据
+	 * @param mesMdcl
+	 */
+	@Override
+	@Transactional
+	public void delete(MesMdcl mesMdcl) {
+		super.delete(mesMdcl);
+	}
+	
+}

+ 81 - 0
src/main/java/com/jeesite/modules/mes/service/MesProductSaleService.java

@@ -0,0 +1,81 @@
+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.MesProductSale;
+import com.jeesite.modules.mes.dao.MesProductSaleDao;
+
+/**
+ * 销售出货单表Service
+ * @author sxl
+ * @version 2026-07-28
+ */
+@Service
+public class MesProductSaleService extends CrudService<MesProductSaleDao, MesProductSale> {
+	
+	/**
+	 * 获取单条数据
+	 * @param mesProductSale
+	 * @return
+	 */
+	@Override
+	public MesProductSale get(MesProductSale mesProductSale) {
+		return super.get(mesProductSale);
+	}
+	
+	/**
+	 * 查询分页数据
+	 * @param mesProductSale 查询条件
+	 * @param mesProductSale.page 分页对象
+	 * @return
+	 */
+	@Override
+	public Page<MesProductSale> findPage(MesProductSale mesProductSale) {
+		return super.findPage(mesProductSale);
+	}
+	
+	/**
+	 * 查询列表数据
+	 * @param mesProductSale
+	 * @return
+	 */
+	@Override
+	public List<MesProductSale> findList(MesProductSale mesProductSale) {
+		return super.findList(mesProductSale);
+	}
+	
+	/**
+	 * 保存数据(插入或更新)
+	 * @param mesProductSale
+	 */
+	@Override
+	@Transactional
+	public void save(MesProductSale mesProductSale) {
+		super.save(mesProductSale);
+	}
+	
+	/**
+	 * 更新状态
+	 * @param mesProductSale
+	 */
+	@Override
+	@Transactional
+	public void updateStatus(MesProductSale mesProductSale) {
+		super.updateStatus(mesProductSale);
+	}
+	
+	/**
+	 * 删除数据
+	 * @param mesProductSale
+	 */
+	@Override
+	@Transactional
+	public void delete(MesProductSale mesProductSale) {
+		super.delete(mesProductSale);
+	}
+	
+}

+ 4 - 4
src/main/java/com/jeesite/modules/mes/web/MesFlawRecordController.java

@@ -35,7 +35,7 @@ import com.jeesite.modules.mes.service.MesTemplateItemsService;
 import com.jeesite.modules.mes.util.CommonUitl;
 
 /**
- * 探伤记录Controller(仅展示OP070工位的生产记录)
+ * 探伤记录Controller(仅展示OP070A工位的生产记录)
  * @author system
  * @version 2025-06-25
  */
@@ -78,8 +78,8 @@ public class MesFlawRecordController extends BaseController {
 		if(mesProductRecord.getUpdateDate_lte() == null){
 			mesProductRecord.setUpdateDate_lte(dateMap.getEndtDate());
 		}
-		// 固定过滤OP070工位
-		mesProductRecord.setOprno("OP070");
+		// 固定过滤OP070A工位
+		mesProductRecord.setOprno("OP070A");
 		model.addAttribute("mesProductRecord", mesProductRecord);
 		return "modules/mes/mesFlawRecordList";
 	}
@@ -130,7 +130,7 @@ public class MesFlawRecordController extends BaseController {
 	 */
 	private void applyListQuery(MesProductRecord mesProductRecord) {
 		mesProductRecord.getSqlMap().getOrder().setOrderBy("a.id DESC");
-		mesProductRecord.getSqlMap().getWhere().and("oprno", QueryType.EQ, "OP070");
+		mesProductRecord.getSqlMap().getWhere().and("oprno", QueryType.EQ, "OP070A");
 		if ("1".equals(mesProductRecord.getProcessState()) && "".equals(mesProductRecord.getContent())) {
 			mesProductRecord.getSqlMap().getWhere().and("content", QueryType.NE, "UDF");
 		} else if ("0".equals(mesProductRecord.getProcessState()) && "".equals(mesProductRecord.getContent())) {

+ 4 - 4
src/main/java/com/jeesite/modules/mes/web/MesMaterialRkController.java

@@ -177,11 +177,11 @@ public class MesMaterialRkController extends BaseController {
 			return resp;
 		}
 
-		Long srcDocLineNo;
-		Long pcQty;
+		Double srcDocLineNo;
+		Double pcQty;
 		try {
-			srcDocLineNo = Long.valueOf(srcDocLineNoStr);
-			pcQty = Long.valueOf(qtyStr);
+			srcDocLineNo = Double.valueOf(srcDocLineNoStr);
+			pcQty = Double.valueOf(qtyStr);
 		} catch (NumberFormatException e) {
 			resp.setResult(Global.FALSE);
 			resp.setMessage("二维码规则不正确!");

+ 202 - 0
src/main/java/com/jeesite/modules/mes/web/MesMdclController.java

@@ -0,0 +1,202 @@
+package com.jeesite.modules.mes.web;
+
+import java.util.List;
+import java.util.Map;
+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.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.collect.ListUtils;
+import com.jeesite.common.collect.MapUtils;
+import com.jeesite.common.config.Global;
+import com.jeesite.common.entity.Page;
+import com.jeesite.common.lang.StringUtils;
+import com.jeesite.common.web.BaseController;
+import com.jeesite.modules.file.entity.FileUpload;
+import com.jeesite.modules.file.service.FileUploadService;
+import com.jeesite.modules.file.utils.FileUploadUtils;
+import com.jeesite.modules.mes.entity.MesMdcl;
+import com.jeesite.modules.mes.resp.CommonResp;
+import com.jeesite.modules.mes.service.MesMdclService;
+
+/**
+ * 密度测量表Controller
+ * @author sxl
+ * @version 2026-07-27
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/mes/mesMdcl")
+public class MesMdclController extends BaseController {
+
+	@Autowired
+	private MesMdclService mesMdclService;
+
+	@Autowired
+	private FileUploadService fileUploadService;
+
+	/**
+	 * 获取数据
+	 */
+	@ModelAttribute
+	public MesMdcl get(String id, boolean isNewRecord) {
+		return mesMdclService.get(id, isNewRecord);
+	}
+
+	/**
+	 * 查询列表
+	 */
+	@RequiresPermissions("mes:mesMdcl:view")
+	@RequestMapping(value = {"list", ""})
+	public String list(MesMdcl mesMdcl, Model model) {
+		model.addAttribute("mesMdcl", mesMdcl);
+		return "modules/mes/mesMdclList";
+	}
+
+	/**
+	 * 查询列表数据
+	 */
+	@RequiresPermissions("mes:mesMdcl:view")
+	@RequestMapping(value = "listData")
+	@ResponseBody
+	public Page<MesMdcl> listData(MesMdcl mesMdcl, HttpServletRequest request, HttpServletResponse response) {
+		mesMdcl.setPage(new Page<>(request, response));
+		Page<MesMdcl> page = mesMdclService.findPage(mesMdcl);
+		return page;
+	}
+
+	/**
+	 * 查看编辑表单
+	 */
+	@RequiresPermissions("mes:mesMdcl:view")
+	@RequestMapping(value = "form")
+	public String form(MesMdcl mesMdcl, Model model) {
+		model.addAttribute("mesMdcl", mesMdcl);
+		return "modules/mes/mesMdclForm";
+	}
+
+	/**
+	 * 保存数据
+	 */
+	@RequiresPermissions("mes:mesMdcl:edit")
+	@PostMapping(value = "save")
+	@ResponseBody
+	public String save(@Validated MesMdcl mesMdcl) {
+		mesMdclService.save(mesMdcl);
+		return renderResult(Global.TRUE, text("保存密度测量表成功!"));
+	}
+
+	/**
+	 * 删除数据
+	 */
+	@RequiresPermissions("mes:mesMdcl:edit")
+	@RequestMapping(value = "delete")
+	@ResponseBody
+	public String delete(MesMdcl mesMdcl) {
+		mesMdclService.delete(mesMdcl);
+		return renderResult(Global.TRUE, text("删除密度测量表成功!"));
+	}
+
+	// ==================== PDA 接口 ====================
+
+	/**
+	 * PDA端新增密度测量记录
+	 * 判定标准:mdValue >= 2.6 且 diValue <= 0.8 为合格
+	 */
+	@PostMapping(value = "pdaSave")
+	@ResponseBody
+	public String pdaSave(MesMdcl mesMdcl, HttpServletRequest request) {
+		if (mesMdcl == null || StringUtils.isBlank(mesMdcl.getLuCode())) {
+			return renderResult(Global.FALSE, "炉号不能为空");
+		}
+		if (StringUtils.isBlank(mesMdcl.getBaoCode())) {
+			return renderResult(Global.FALSE, "包号不能为空");
+		}
+		if (StringUtils.isBlank(mesMdcl.getMdValue()) || StringUtils.isBlank(mesMdcl.getDiValue())) {
+			return renderResult(Global.FALSE, "密度值和DI值均不能为空");
+		}
+
+		MesMdcl query = new MesMdcl();
+		query.setLuCode(mesMdcl.getLuCode().trim());
+		query.setBaoCode(mesMdcl.getBaoCode().trim());
+		List<MesMdcl> list = mesMdclService.findList(query);
+		if (!list.isEmpty()) {
+			return renderResult(Global.FALSE, "该炉号包号已进行密度测量");
+		}
+
+		try {
+			Double.parseDouble(mesMdcl.getMdValue().trim());
+			Double.parseDouble(mesMdcl.getDiValue().trim());
+		} catch (NumberFormatException e) {
+			return renderResult(Global.FALSE, "密度值或DI值格式不正确");
+		}
+
+		try {
+			MesMdcl saved = mesMdclService.saveFromPda(mesMdcl);
+			FileUploadUtils.saveFileUpload(saved, saved.getId(), "mesMdcl_image");
+			return renderResult(Global.TRUE, "保存成功", saved);
+		} catch (Exception e) {
+			logger.error("PDA密度测量保存失败", e);
+			return renderResult(Global.FALSE, text("操作失败!"));
+		}
+	}
+
+	/**
+	 * PDA密度测量列表
+	 */
+	@RequestMapping(value = "mdclList")
+	@ResponseBody
+	public CommonResp mdclList(MesMdcl mesMdcl) {
+		CommonResp<List<MesMdcl>> resp = new CommonResp<>();
+		List<MesMdcl> list = mesMdclService.findList(mesMdcl);
+		resp.setData(list);
+		resp.setResult(Global.TRUE);
+		resp.setMessage("操作成功!");
+		return resp;
+	}
+
+	/**
+	 * PDA密度测量详情
+	 */
+	@RequestMapping(value = "mdclInfo")
+	@ResponseBody
+	public CommonResp mdclInfo(MesMdcl mesMdcl, HttpServletRequest request) {
+		CommonResp<MesMdcl> resp = new CommonResp<>();
+		List<MesMdcl> list = mesMdclService.findList(mesMdcl);
+		if (ListUtils.isEmpty(list)) {
+			resp.setResult(Global.FALSE);
+			resp.setMessage("没有该密度测量记录!");
+			return resp;
+		}
+
+		MesMdcl info = list.get(0);
+		String host = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + "/js";
+		FileUpload fu = new FileUpload();
+		fu.setBizKey(info.getId());
+		fu.setBizType("mesMdcl_image");
+		List<FileUpload> finfo = fileUploadService.findList(fu);
+		List imgList = ListUtils.newArrayList();
+		for (FileUpload fi : finfo) {
+			Map<String, Object> map = MapUtils.newHashMap();
+			map.put("id", fi.getFileEntity().getFileId());
+			map.put("url", host + fi.getFileUrl());
+			map.put("name", fi.getFileName());
+			map.put("size", fi.getFileEntity().getFileSize());
+			imgList.add(map);
+		}
+		info.setImgList(imgList);
+		resp.setData(info);
+		resp.setResult(Global.TRUE);
+		resp.setMessage("操作成功!");
+		return resp;
+	}
+
+}

+ 155 - 0
src/main/java/com/jeesite/modules/mes/web/MesProductSaleController.java

@@ -0,0 +1,155 @@
+package com.jeesite.modules.mes.web;
+
+import java.util.List;
+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.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.lang.StringUtils;
+import com.jeesite.common.web.BaseController;
+import com.jeesite.modules.mes.entity.MesProductSale;
+import com.jeesite.modules.mes.service.MesProductSaleService;
+
+/**
+ * 销售出货单表Controller
+ * @author sxl
+ * @version 2026-07-28
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/mes/mesProductSale")
+public class MesProductSaleController extends BaseController {
+
+	@Autowired
+	private MesProductSaleService mesProductSaleService;
+
+	/**
+	 * 获取数据
+	 */
+	@ModelAttribute
+	public MesProductSale get(String id, boolean isNewRecord) {
+		return mesProductSaleService.get(id, isNewRecord);
+	}
+
+	/**
+	 * 查询列表
+	 */
+	@RequiresPermissions("mes:mesProductSale:view")
+	@RequestMapping(value = {"list", ""})
+	public String list(MesProductSale mesProductSale, Model model) {
+		model.addAttribute("mesProductSale", mesProductSale);
+		return "modules/mes/mesProductSaleList";
+	}
+
+	/**
+	 * 查询列表数据
+	 */
+	@RequiresPermissions("mes:mesProductSale:view")
+	@RequestMapping(value = "listData")
+	@ResponseBody
+	public Page<MesProductSale> listData(MesProductSale mesProductSale, HttpServletRequest request, HttpServletResponse response) {
+		mesProductSale.setPage(new Page<>(request, response));
+		Page<MesProductSale> page = mesProductSaleService.findPage(mesProductSale);
+		return page;
+	}
+
+	/**
+	 * 查看编辑表单
+	 */
+	@RequiresPermissions("mes:mesProductSale:view")
+	@RequestMapping(value = "form")
+	public String form(MesProductSale mesProductSale, Model model) {
+		model.addAttribute("mesProductSale", mesProductSale);
+		return "modules/mes/mesProductSaleForm";
+	}
+
+	/**
+	 * 保存数据
+	 */
+	@RequiresPermissions("mes:mesProductSale:edit")
+	@PostMapping(value = "save")
+	@ResponseBody
+	public String save(@Validated MesProductSale mesProductSale) {
+		mesProductSaleService.save(mesProductSale);
+		return renderResult(Global.TRUE, text("保存销售出货单表成功!"));
+	}
+
+	/**
+	 * 删除数据
+	 */
+	@RequiresPermissions("mes:mesProductSale:edit")
+	@RequestMapping(value = "delete")
+	@ResponseBody
+	public String delete(MesProductSale mesProductSale) {
+		mesProductSaleService.delete(mesProductSale);
+		return renderResult(Global.TRUE, text("删除销售出货单表成功!"));
+	}
+
+	/**
+	 * 接收erp销售订单数据
+	 * @param mesProductSale
+	 * @return
+	 */
+	@RequestMapping(value = "getSaleOrder")
+	@ResponseBody
+	public String getSaleOrder(MesProductSale mesProductSale) {
+		if (mesProductSale == null || StringUtils.isBlank(mesProductSale.getSaleOrder())) {
+			return renderResult(Global.FALSE, text("销售订单号不能为空!"));
+		}
+		if (StringUtils.isBlank(mesProductSale.getDocLineNo())) {
+			return renderResult(Global.FALSE, text("行号不能为空!"));
+		}
+		if (StringUtils.isBlank(mesProductSale.getLotCode())) {
+			return renderResult(Global.FALSE, text("批号不能为空!"));
+		}
+		if (StringUtils.isBlank(mesProductSale.getCpCode())) {
+			return renderResult(Global.FALSE, text("成品号不能为空!"));
+		}
+		if (StringUtils.isBlank(mesProductSale.getShState())) {
+			return renderResult(Global.FALSE, text("审核状态不能为空!"));
+		}
+		// 弃审(2)、删除(3):按销售订单号+行号+批号+成品号同步更新审核状态
+		if ("2".equals(mesProductSale.getShState()) || "3".equals(mesProductSale.getShState())) {
+			MesProductSale query = new MesProductSale();
+			query.setSaleOrder(mesProductSale.getSaleOrder());
+			query.setDocLineNo(mesProductSale.getDocLineNo());
+			query.setLotCode(mesProductSale.getLotCode());
+			query.setCpCode(mesProductSale.getCpCode());
+			List<MesProductSale> list = mesProductSaleService.findList(query);
+			if (list == null || list.isEmpty()) {
+				return renderResult(Global.FALSE, text("未找到对应销售出货单!"));
+			}
+			for (MesProductSale exist : list) {
+				exist.setShState(mesProductSale.getShState());
+				mesProductSaleService.save(exist);
+			}
+			return renderResult(Global.TRUE, text("更新成功!"));
+		}
+		// 审核后(1):新增保存前先校验是否已存在
+		MesProductSale query = new MesProductSale();
+		query.setSaleOrder(mesProductSale.getSaleOrder());
+		query.setDocLineNo(mesProductSale.getDocLineNo());
+		query.setLotCode(mesProductSale.getLotCode());
+		query.setCpCode(mesProductSale.getCpCode());
+		List<MesProductSale> existList = mesProductSaleService.findList(query);
+		if (existList != null && !existList.isEmpty()) {
+			return renderResult(Global.FALSE, text("该订单已存在!"));
+		}
+		if (StringUtils.isBlank(mesProductSale.getMesState())) {
+			mesProductSale.setMesState("1"); // 1=未扫码
+		}
+		mesProductSaleService.save(mesProductSale);
+		return renderResult(Global.TRUE, text("保存成功!"));
+	}
+
+}

+ 18 - 2
src/main/java/com/jeesite/modules/mes/web/MesSnColdController.java

@@ -165,9 +165,26 @@ public class MesSnColdController extends BaseController {
 			resp.setMessage("参数错误");
 			return resp;
 		}
+		//判断水冷板码是否已经绑定
+		MesSnCold mesSnCold1 = new MesSnCold();
+		mesSnCold1.setColdSn(mesSnCold.getColdSn());
+		List<MesSnCold> list1 = mesSnColdService.findList(mesSnCold1);
+		if (!list1.isEmpty()){
+			resp.setResult(Global.FALSE);
+			resp.setMessage("该水冷板已经绑定!");
+			return resp;
+		}
 
 		// 1. 判定工件码是否在数据库中
-		MesProduct mesProduct = mesProductService.findBySn(sn);
+		MesProduct mesProduct1 = new MesProduct();
+		mesProduct1.setSn(mesSnCold.getSn());
+		List<MesProduct> list = mesProductService.findList(mesProduct1);
+		if (list.isEmpty()){
+			resp.setResult(Global.FALSE);
+			resp.setMessage("工件不存在");
+			return resp;
+		}
+		MesProduct mesProduct =list.get(0);
 		if (ObjectUtils.isEmpty(mesProduct)) {
 			resp.setResult(Global.FALSE);
 			resp.setMessage("工件不存在");
@@ -225,7 +242,6 @@ public class MesSnColdController extends BaseController {
 
 		resp.setResult(Global.TRUE);
 		resp.setMessage("操作成功!");
-		resp.setData(checkret);
 		return resp;
 	}
 

+ 15 - 0
src/main/resources/mappings/modules/mes/MesMdclDao.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.MesMdclDao">
+	
+	<!-- 查询数据
+	<select id="findList" resultType="MesMdcl">
+		SELECT ${sqlMap.column.toSql()}
+		FROM ${sqlMap.table.toSql()}
+		<where>
+			${sqlMap.where.toSql()}
+		</where>
+		ORDER BY ${sqlMap.order.toSql()}
+	</select> -->
+	
+</mapper>

+ 15 - 0
src/main/resources/mappings/modules/mes/MesProductSaleDao.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.MesProductSaleDao">
+	
+	<!-- 查询数据
+	<select id="findList" resultType="MesProductSale">
+		SELECT ${sqlMap.column.toSql()}
+		FROM ${sqlMap.table.toSql()}
+		<where>
+			${sqlMap.where.toSql()}
+		</where>
+		ORDER BY ${sqlMap.order.toSql()}
+	</select> -->
+	
+</mapper>

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

@@ -15,7 +15,7 @@
 			<#form:form id="searchForm" model="${mesProductRecord}" action="${ctx}/mes/mesFlawRecord/listData" method="post" class="form-inline hide"
 					data-page-no="${parameter.pageNo}" data-page-size="${parameter.pageSize}" data-order-by="${parameter.orderBy}">
 				<#form:hidden path="pid"/>
-				<#form:hidden path="oprno" value="OP070"/>
+				<#form:hidden path="oprno" value="OP070A"/>
 				<div class="form-group">
 					<label class="control-label">${text('工件码')}:</label>
 					<div class="control-inline">

+ 94 - 0
src/main/resources/views/modules/mes/mesMdclForm.html

@@ -0,0 +1,94 @@
+<% 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(mesMdcl.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="${mesMdcl}" action="${ctx}/mes/mesMdcl/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="luCode" 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="baoCode" 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="mdValue" 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('DI值')}:<i class="fa icon-question hide"></i></label>
+							<div class="col-sm-8">
+								<#form:input path="diValue" 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="${mesMdcl.id}" bizType="mesMdcl_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:mesMdcl: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>

+ 81 - 0
src/main/resources/views/modules/mes/mesMdclList.html

@@ -0,0 +1,81 @@
+<% 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:mesMdcl:edit')){ %>
+					<a href="${ctx}/mes/mesMdcl/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="${mesMdcl}" action="${ctx}/mes/mesMdcl/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="luCode" 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="baoCode" 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="mdValue" maxlength="64" class="form-control width-120"/>
+					</div>
+				</div>
+				<div class="form-group">
+					<label class="control-label">${text('DI值')}:</label>
+					<div class="control-inline">
+						<#form:input path="diValue" 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:'luCode', index:'a.lu_code', width:150, align:"left", frozen:true, formatter: function(val, obj, row, act){
+			return '<a href="${ctx}/mes/mesMdcl/form?id='+row.id+'" class="btnList" data-title="${text("编辑密度测量表")}">'+(val||row.id)+'</a>';
+		}},
+		{header:'${text("包号")}', name:'baoCode', index:'a.bao_code', width:150, align:"left"},
+		{header:'${text("密度值")}', name:'mdValue', index:'a.md_value', width:150, align:"left"},
+		{header:'${text("DI值")}', name:'diValue', index:'a.di_value', width:150, align:"left"},
+		{header:'${text("判定结果")}', name:'result', index:'a.result', width:100, align:"center"},
+		{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:mesMdcl:edit')){ %>
+				actions.push('<a href="${ctx}/mes/mesMdcl/form?id='+row.id+'" class="btnList" title="${text("编辑密度测量表")}"><i class="fa fa-pencil"></i></a>&nbsp;');
+				actions.push('<a href="${ctx}/mes/mesMdcl/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>

+ 100 - 0
src/main/resources/views/modules/mes/mesProductSaleForm.html

@@ -0,0 +1,100 @@
+<% layout('/layouts/default.html', {title: '销售出货单表管理', libs: ['validate']}){ %>
+<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(mesProductSale.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="${mesProductSale}" action="${ctx}/mes/mesProductSale/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="saleOrder" 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="docLineNo" 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="lotCode" 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="cpCode" 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="shState" maxlength="1" 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('mes完成情况')}:<i class="fa icon-question hide"></i></label>
+							<div class="col-sm-8">
+								<#form:input path="mesState" maxlength="1" class="form-control"/>
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="box-footer">
+				<div class="row">
+					<div class="col-sm-offset-2 col-sm-10">
+						<% if (hasPermi('mes:mesProductSale: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>

+ 94 - 0
src/main/resources/views/modules/mes/mesProductSaleList.html

@@ -0,0 +1,94 @@
+<% 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:mesProductSale:edit')){ %>
+					<a href="${ctx}/mes/mesProductSale/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="${mesProductSale}" action="${ctx}/mes/mesProductSale/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="saleOrder" 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="docLineNo" 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="lotCode" 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="cpCode" 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="shState" maxlength="1" class="form-control width-120"/>
+					</div>
+				</div>
+				<div class="form-group">
+					<label class="control-label">${text('mes完成情况')}:</label>
+					<div class="control-inline">
+						<#form:input path="mesState" maxlength="1" 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:'saleOrder', index:'a.sale_order', width:150, align:"left", frozen:true, formatter: function(val, obj, row, act){
+			return '<a href="${ctx}/mes/mesProductSale/form?id='+row.id+'" class="btnList" data-title="${text("编辑销售出货单表")}">'+(val||row.id)+'</a>';
+		}},
+		{header:'${text("行号")}', name:'docLineNo', index:'a.doc_line_no', width:150, align:"left"},
+		{header:'${text("批号")}', name:'lotCode', index:'a.lot_code', width:150, align:"left"},
+		{header:'${text("成品号")}', name:'cpCode', index:'a.cp_code', width:150, align:"left"},
+		{header:'${text("审核状态")}', name:'shState', index:'a.sh_state', width:150, align:"left"},
+		{header:'${text("mes完成情况")}', name:'mesState', index:'a.mes_state', 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:mesProductSale:edit')){ %>
+				actions.push('<a href="${ctx}/mes/mesProductSale/form?id='+row.id+'" class="btnList" title="${text("编辑销售出货单表")}"><i class="fa fa-pencil"></i></a>&nbsp;');
+				actions.push('<a href="${ctx}/mes/mesProductSale/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>