소스 검색

pda优化

liuwei 2 달 전
부모
커밋
c24a9d84c5

+ 21 - 0
src/main/java/com/jeesite/modules/mes/entity/MesMaterialLl.java

@@ -81,6 +81,27 @@ public class MesMaterialLl extends DataEntity<MesMaterialLl> {
 
 	private String state;       //状态0=草稿 1=下发 2=完成
 
+	/** 已领取数量(来自备料表 nums_yl,非持久化,供 PDA 初始显示) */
+	private String numsYl;
+	/** 领取数量(来自备料表确认数量 nums_qr,非持久化,供 PDA 初始显示) */
+	private String numsQr;
+
+	public String getNumsYl() {
+		return numsYl;
+	}
+
+	public void setNumsYl(String numsYl) {
+		this.numsYl = numsYl;
+	}
+
+	public String getNumsQr() {
+		return numsQr;
+	}
+
+	public void setNumsQr(String numsQr) {
+		this.numsQr = numsQr;
+	}
+
 	public String getState() {
 		return state;
 	}

+ 46 - 7
src/main/java/com/jeesite/modules/mes/service/MesMaterialLlService.java

@@ -2,7 +2,9 @@ package com.jeesite.modules.mes.service;
 
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -97,9 +99,10 @@ public class MesMaterialLlService extends CrudService<MesMaterialLlDao, MesMater
 
 	/**
 	 * 生产领料单出库:根据生产订单号匹配备料行号
+	 * @return 备料已领取/领取数量(仅回传展示,不覆盖手填 issuedQty)
 	 */
 	@Transactional
-	public void materialLl(MesMaterialLl mesMaterialLl) {
+	public Map<String, Object> materialLl(MesMaterialLl mesMaterialLl) {
 		MesMaterialLl entity;
 		if (StringUtils.isNotBlank(mesMaterialLl.getId())) {
 			entity = get(mesMaterialLl);
@@ -112,14 +115,10 @@ public class MesMaterialLlService extends CrudService<MesMaterialLlDao, MesMater
 		if (StringUtils.isBlank(entity.getMoDocNo())) {
 			throw new ServiceException(text("生产订单号不能为空!"));
 		}
-		MesMaterialBl query = new MesMaterialBl();
-		query.setOrderId(entity.getMoDocNo());
-		query.setErpSn(entity.getItemCode());
-		List<MesMaterialBl> blList = mesMaterialBlService.findList(query);
-		if (ListUtils.isEmpty(blList)) {
+		MesMaterialBl mesMaterialBl = findBlByMoAndItem(entity.getMoDocNo(), entity.getItemCode());
+		if (mesMaterialBl == null) {
 			throw new ServiceException(text("未找到对应备料信息!"));
 		}
-		MesMaterialBl mesMaterialBl = blList.get(0);
 		if (StringUtils.isBlank(mesMaterialBl.getDocLineNo())) {
 			throw new ServiceException(text("备料行号不能为空!"));
 		}
@@ -127,6 +126,46 @@ public class MesMaterialLlService extends CrudService<MesMaterialLlDao, MesMater
 		save(entity);
 		entity.setIsNewRecord(false);
 		syncIssueDocToErp(entity);
+
+		// 按生产订单号+料号从备料表带回已领取/领取数量,仅供 PDA 展示(不覆盖手填 issuedQty)
+		Map<String, Object> data = new HashMap<>();
+		data.put("numsYl", StringUtils.defaultIfBlank(mesMaterialBl.getNumsYl(), "")); // 已领取数量
+		data.put("numsQr", StringUtils.defaultIfBlank(mesMaterialBl.getNumsQr(), "")); // 领取数量(备料确认数量)
+		return data;
+	}
+
+	/**
+	 * 按生产订单号 + 料号编码查备料(取最新一条)
+	 */
+	public MesMaterialBl findBlByMoAndItem(String moDocNo, String itemCode) {
+		if (StringUtils.isBlank(moDocNo) || StringUtils.isBlank(itemCode)) {
+			return null;
+		}
+		MesMaterialBl query = new MesMaterialBl();
+		query.setOrderId(moDocNo);
+		query.setErpSn(itemCode);
+		List<MesMaterialBl> blList = mesMaterialBlService.findList(query);
+		if (ListUtils.isEmpty(blList)) {
+			return null;
+		}
+		return blList.get(0);
+	}
+
+	/**
+	 * 给领料单填充备料已领取/领取数量(非持久化字段,供 PDA 初始显示)
+	 */
+	public void fillBlQtyForDisplay(MesMaterialLl mesMaterialLl) {
+		if (mesMaterialLl == null) {
+			return;
+		}
+		MesMaterialBl bl = findBlByMoAndItem(mesMaterialLl.getMoDocNo(), mesMaterialLl.getItemCode());
+		if (bl == null) {
+			mesMaterialLl.setNumsYl("");
+			mesMaterialLl.setNumsQr("");
+			return;
+		}
+		mesMaterialLl.setNumsYl(StringUtils.defaultIfBlank(bl.getNumsYl(), "")); // 已领取数量
+		mesMaterialLl.setNumsQr(StringUtils.defaultIfBlank(bl.getNumsQr(), "")); // 领取数量(备料确认数量)
 	}
 
 	private String buildCreateIssueDocJson(MesMaterialLl mesMaterialLl) {

+ 6 - 2
src/main/java/com/jeesite/modules/mes/web/MesMaterialLlController.java

@@ -1,6 +1,7 @@
 package com.jeesite.modules.mes.web;
 
 import java.util.List;
+import java.util.Map;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
@@ -143,8 +144,9 @@ public class MesMaterialLlController extends BaseController {
 	@ResponseBody
 	public String materialLl(MesMaterialLl mesMaterialLl) {
 		try {
-			mesMaterialLlService.materialLl(mesMaterialLl);
-			return renderResult(Global.TRUE, text("生产领料单出库成功!"));
+			// data 含备料 numsYl(已领取)、numsQr(领取数量=确认数量),仅回传展示,不覆盖手填 issuedQty
+			Map<String, Object> data = mesMaterialLlService.materialLl(mesMaterialLl);
+			return renderResult(Global.TRUE, text("生产领料单出库成功!"), data);
 		} catch (ServiceException e) {
 			return renderResult(Global.FALSE, text(e.getMessage()));
 		}
@@ -181,6 +183,8 @@ public class MesMaterialLlController extends BaseController {
 			resp.setMessage("没有该生产领料单!");
 			return resp;
 		}
+		// 按生产订单号+料号关联备料,带回已领取/领取数量,供 PDA 初始显示(不覆盖手填 issuedQty)
+		mesMaterialLlService.fillBlQtyForDisplay(mesMaterialLl1);
 		resp.setData(mesMaterialLl1);
 		resp.setResult(Global.TRUE);
 		resp.setMessage("操作成功!");

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

@@ -13,7 +13,11 @@ import com.alibaba.fastjson.JSONObject;
 import com.jeesite.common.lang.DateUtils;
 import com.jeesite.common.lang.StringUtils;
 import com.jeesite.modules.mes.entity.MesMaterial;
+import com.jeesite.modules.mes.entity.MesMaterialCheckRecord;
+import com.jeesite.modules.mes.entity.MesMaterialReport;
 import com.jeesite.modules.mes.resp.CommonResp;
+import com.jeesite.modules.mes.service.MesMaterialCheckRecordService;
+import com.jeesite.modules.mes.service.MesMaterialReportService;
 import com.jeesite.modules.mes.service.MesMaterialService;
 import com.jeesite.modules.mes.util.U9cAuthUtil;
 import com.jeesite.modules.sys.utils.EmpUtils;
@@ -30,6 +34,7 @@ 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.DataEntity;
 import com.jeesite.common.entity.Page;
 import com.jeesite.common.web.BaseController;
 import com.jeesite.modules.mes.entity.MesMaterialRk;
@@ -50,6 +55,12 @@ public class MesMaterialRkController extends BaseController {
 	@Autowired
 	private MesMaterialService mesMaterialService;
 
+	@Autowired
+	private MesMaterialCheckRecordService mesMaterialCheckRecordService;
+
+	@Autowired
+	private MesMaterialReportService mesMaterialReportService;
+
 	/**
 	 * 获取数据
 	 */
@@ -148,6 +159,8 @@ public class MesMaterialRkController extends BaseController {
 		String materialCode = req.getParameter("materialCode");
 		CommonResp<Map<String, Object>> resp = new CommonResp<>();
 
+
+
 		if (StringUtils.isBlank(materialCode)) {
 			resp.setResult(Global.FALSE);
 			resp.setMessage("来料码不能为空!");
@@ -214,6 +227,27 @@ public class MesMaterialRkController extends BaseController {
 			return resp;
 		}
 		String unit=list.get(0).getUnit();
+
+		// 入库前校验:必须已报检且已来料检查,否则不允许入库
+		MesMaterialReport reportQuery = new MesMaterialReport();
+		reportQuery.setSn(materialCode.trim());
+		reportQuery.setStatus(DataEntity.STATUS_NORMAL);
+		MesMaterialReport report = mesMaterialReportService.findInfo(reportQuery);
+		if (report == null) {
+			resp.setResult(Global.FALSE);
+			resp.setMessage("该来料码未报检,无法入库!");
+			return resp;
+		}
+		MesMaterialCheckRecord checkQuery = new MesMaterialCheckRecord();
+		checkQuery.setSn(materialCode.trim());
+		checkQuery.setStatus(DataEntity.STATUS_NORMAL);
+		MesMaterialCheckRecord checkRecord = mesMaterialCheckRecordService.findInfo(checkQuery);
+		if (checkRecord == null) {
+			resp.setResult(Global.FALSE);
+			resp.setMessage("该来料码未检查,无法入库!");
+			return resp;
+		}
+
 		HashMap<String, Object> data = new HashMap<>();
 //		data.put("materialCode", materialCode);       // 来料码
 		data.put("docTypeCode", docTypeCode);         // ERP代码/单据类型编码
@@ -226,6 +260,12 @@ public class MesMaterialRkController extends BaseController {
 		data.put("pcQty", pcQty);                         // 批次数量
 		data.put("unit", unit);                         // 单位
 
+		// 按来料码关联来料检查记录,带回合格/不合格数量,仅供 PDA 入库页初始显示(不覆盖手填,不参与 mesToErp)
+		String hgQty = StringUtils.defaultIfBlank(checkRecord.getHgQty(), "");
+		String bhgQty = StringUtils.defaultIfBlank(checkRecord.getBhgQty(), "");
+		data.put("hgQty", hgQty);   // 合格数量(来自检查记录)
+		data.put("bhgQty", bhgQty); // 不合格数量(来自检查记录)
+
 		resp.setData(data);
 		resp.setResult(Global.TRUE);
 		resp.setMessage("解析成功");