Explorar o código

优化产品生产记录页面等

jingbo hai 3 meses
pai
achega
4732145c7a

+ 8 - 0
src/main/java/com/jeesite/modules/mes/dao/MesProductDao.java

@@ -3,6 +3,8 @@ 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.MesProduct;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Update;
 
 import java.util.List;
 
@@ -15,4 +17,10 @@ import java.util.List;
 public interface MesProductDao extends CrudDao<MesProduct> {
     MesProduct findInfo(MesProduct mesProduct);
     List<MesProduct> findByCount(MesProduct mesProduct);
+
+	/**
+	 * 按工件码回写更新人(避免框架 preInsert 将 update_by 覆盖为 system)
+	 */
+	@Update("UPDATE mes_product SET update_by = #{updateBy} WHERE sn = #{sn}")
+	int updateUpdateByBySn(@Param("sn") String sn, @Param("updateBy") String updateBy);
 }

+ 6 - 0
src/main/java/com/jeesite/modules/mes/dao/MesProductRecordDao.java

@@ -31,6 +31,12 @@ public interface MesProductRecordDao extends CrudDao<MesProductRecord> {
     Boolean updateResultByCraftAndSnAndLineSnAndOprno(MesProductRecord mesProductRecord);
 
 	/**
+	 * 按工件码回写更新人(避免框架 preInsert 将 update_by 覆盖为 system)
+	 */
+	@Update("UPDATE mes_product_record SET update_by = #{updateBy} WHERE sn = #{sn}")
+	int updateUpdateByBySn(@Param("sn") String sn, @Param("updateBy") String updateBy);
+
+	/**
 	 * 按工件码分组列表(分页)
 	 */
 	List<MesProductRecord> findSnGroupList(MesProductRecord mesProductRecord);

+ 10 - 0
src/main/java/com/jeesite/modules/mes/entity/MesProductCheckFirst.java

@@ -45,12 +45,14 @@ public class MesProductCheckFirst extends DataEntity<MesProductCheckFirst> {
 	private String result;        // 检查结果
 	private String remark;        // 备注
 
+	private String oprnoTitle;    // 工位名称
 	private String urlString;
 	private List img = ListUtils.newArrayList();
 
 	@ExcelFields({
 			@ExcelField(title = "工件码", attrName = "sn", align = Align.CENTER, sort = 20),
 			@ExcelField(title = "工位号", attrName = "oprno", align = Align.CENTER, sort = 30),
+			@ExcelField(title = "工位名称", attrName = "oprnoTitle", align = Align.CENTER, sort = 35),
 			@ExcelField(title = "产线编号", attrName = "lineSn", align = Align.CENTER, sort = 40),
 			@ExcelField(title = "类型", attrName = "type", align = Align.CENTER, sort = 50),
 			@ExcelField(title = "状态", attrName = "state", dictType = "mes_product_check_first_status", align = Align.CENTER, sort = 60),
@@ -85,6 +87,14 @@ public class MesProductCheckFirst extends DataEntity<MesProductCheckFirst> {
 		this.oprno = oprno;
 	}
 
+	public String getOprnoTitle() {
+		return oprnoTitle;
+	}
+
+	public void setOprnoTitle(String oprnoTitle) {
+		this.oprnoTitle = oprnoTitle;
+	}
+
 	@Size(min = 0, max = 2, message = "产线编号长度不能超过 2 个字符")
 	public String getLineSn() {
 		return lineSn;

+ 10 - 0
src/main/java/com/jeesite/modules/mes/entity/MesQuality.java

@@ -43,6 +43,7 @@ public class MesQuality extends DataEntity<MesQuality> {
 	private String items;		// 问题清单
 	private String remark;		// 备注
 	private String lineSn;
+	private String oprnoTitle;	// 工位名称
 	private List<MesRepairItems> mesRepairItemsList;
 
 	private List<FileUpload> imgs;
@@ -51,6 +52,7 @@ public class MesQuality extends DataEntity<MesQuality> {
 	@ExcelFields({
 			@ExcelField(title="工件码", attrName="sn", align= ExcelField.Align.CENTER, sort=10),
 			@ExcelField(title="工位号", attrName="oprno", align= ExcelField.Align.CENTER, sort=20),
+			@ExcelField(title="工位名称", attrName="oprnoTitle", align= ExcelField.Align.CENTER, sort=25),
 			@ExcelField(title="产线编号", attrName="lineSn", align= ExcelField.Align.CENTER, sort=30),
 			@ExcelField(title="类型", attrName="type",dictType="mes_quality_type", align= ExcelField.Align.CENTER, sort=40),
 			@ExcelField(title="检查结果", attrName="result", align= ExcelField.Align.CENTER, sort=50),
@@ -156,6 +158,14 @@ public class MesQuality extends DataEntity<MesQuality> {
 		this.lineSn = lineSn;
 	}
 
+	public String getOprnoTitle() {
+		return oprnoTitle;
+	}
+
+	public void setOprnoTitle(String oprnoTitle) {
+		this.oprnoTitle = oprnoTitle;
+	}
+
 	public List<FileUpload> getImgs() {
 		return imgs;
 	}

+ 10 - 0
src/main/java/com/jeesite/modules/mes/entity/MesRepair.java

@@ -59,6 +59,7 @@ public class MesRepair extends DataEntity<MesRepair> {
 	private String fxOprno;		// 返修工位
 	private String title;
 	private String oprno;		// 责任工位
+	private String oprnoTitle;	// 责任工位名称
 	private String sops;		// 选择的修复方案
 	private String state;		// 状态
 	private String lineSn;
@@ -82,6 +83,7 @@ public class MesRepair extends DataEntity<MesRepair> {
 			@ExcelField(title="工件码", attrName="sn", align= ExcelField.Align.CENTER, sort=10),
 //			@ExcelField(title="返修工位", attrName="fxOprno", align= ExcelField.Align.CENTER, sort=15),
 			@ExcelField(title="责任工位", attrName="oprno", align= ExcelField.Align.CENTER, sort=20),
+			@ExcelField(title="责任工位名称", attrName="oprnoTitle", align= ExcelField.Align.CENTER, sort=25),
 			@ExcelField(title="状态", attrName="state",dictType="mes_repair_state", align= ExcelField.Align.CENTER, sort=40),
 			@ExcelField(title="备注", attrName="remark", align= ExcelField.Align.CENTER, sort=50),
 			@ExcelField(title="结果", attrName="result",dictType="mes_repair_result", align= ExcelField.Align.CENTER, sort=55),
@@ -140,6 +142,14 @@ public class MesRepair extends DataEntity<MesRepair> {
 	public void setOprno(String oprno) {
 		this.oprno = oprno;
 	}
+
+	public String getOprnoTitle() {
+		return oprnoTitle;
+	}
+
+	public void setOprnoTitle(String oprnoTitle) {
+		this.oprnoTitle = oprnoTitle;
+	}
 	
 	@Size(min=0, max=3000, message="选择的修复方案长度不能超过 3000 个字符")
 	public String getSops() {

+ 17 - 0
src/main/java/com/jeesite/modules/mes/service/MesProductRecordService.java

@@ -102,6 +102,9 @@ public class MesProductRecordService extends CrudService<MesProductRecordDao, Me
 	private MesProductService mesProductService;
 
 	@Autowired
+	private MesProductDao mesProductDao;
+
+	@Autowired
 	private MesProductQualityService mesProductQualityService;
 
 	@Autowired
@@ -464,12 +467,26 @@ public class MesProductRecordService extends CrudService<MesProductRecordDao, Me
 			}
 			mesProductService.save(mesProduct);
 
+			// 框架 preInsert 会把 update_by 覆盖为当前会话用户(接口场景多为 system),按实际操作人回写
+			rewriteUpdateByAfterCreate(mesProductRecord.getSn(), mesProductRecord.getCreateBy());
+
 			return "RSOK";
 		}
 		return "RSNS";
 	}
 
 	/**
+	 * 创建订单后回写 update_by 为实际操作人
+	 */
+	private void rewriteUpdateByAfterCreate(String sn, String operator) {
+		if (StringUtils.isBlank(sn) || StringUtils.isBlank(operator)) {
+			return;
+		}
+		mesProductRecordDao.updateUpdateByBySn(sn, operator);
+		mesProductDao.updateUpdateByBySn(sn, operator);
+	}
+
+	/**
 	 * 手动保存数据(插入或更新)
 	 * @param mesProductRecord
 	 */

+ 26 - 0
src/main/java/com/jeesite/modules/mes/web/MesProductCheckFirstController.java

@@ -1,5 +1,6 @@
 package com.jeesite.modules.mes.web;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import javax.annotation.Resource;
@@ -16,6 +17,7 @@ import com.jeesite.modules.mes.entity.MesProductRecord;
 import com.jeesite.modules.mes.resp.CommonResp;
 import com.jeesite.modules.mes.service.MesLineProcessService;
 import com.jeesite.modules.mes.service.MesProductRecordService;
+import com.jeesite.modules.mes.util.CommonUitl;
 import com.jeesite.modules.utils.DateLocalUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -236,6 +238,7 @@ public class MesProductCheckFirstController extends BaseController {
 		Page<MesProductCheckFirst> page = mesProductCheckFirstService.findPage(mesProductCheckFirst);
 		CommonResp<List<MesProductCheckFirst>> resp = new CommonResp<>();
 		List<MesProductCheckFirst> list = page.getList();
+		fillOprnoTitle(list);
 		if (list!= null && list.size() > 0){
 			for (MesProductCheckFirst productCheckFirst : list) {
 				FileUpload fu = new FileUpload();
@@ -263,6 +266,29 @@ public class MesProductCheckFirstController extends BaseController {
 		return resp;
 	}
 
+	private void fillOprnoTitle(List<MesProductCheckFirst> list) {
+		if (ListUtils.isEmpty(list)) {
+			return;
+		}
+		Map<String, String> oprnoTitleMap = new HashMap<>();
+		for (MesProductCheckFirst record : list) {
+			if (StringUtils.isBlank(record.getLineSn()) || StringUtils.isBlank(record.getOprno())) {
+				record.setOprnoTitle("");
+				continue;
+			}
+			String oprno = CommonUitl.formatOprno(record.getOprno());
+			String key = record.getLineSn() + "|" + oprno;
+			if (!oprnoTitleMap.containsKey(key)) {
+				MesLineProcess mesLineProcess = new MesLineProcess();
+				mesLineProcess.setLineSn(record.getLineSn());
+				mesLineProcess.setOprno(oprno);
+				MesLineProcess mesLineProcess1 = mesLineProcessService.findInfo(mesLineProcess);
+				oprnoTitleMap.put(key, ObjectUtils.isEmpty(mesLineProcess1) ? "" : mesLineProcess1.getTitle());
+			}
+			record.setOprnoTitle(oprnoTitleMap.get(key));
+		}
+	}
+
 
 	/**
 	 * 查询列表数据

+ 26 - 2
src/main/java/com/jeesite/modules/mes/web/MesProductRecordController.java

@@ -348,6 +348,8 @@ public class MesProductRecordController extends BaseController {
 		Page<MesProductRecord> page = new Page<>(request, response);
 		List<MesProductRecord> list = mesProductRecordService.findOprnoGroupList(sn);
 		if (!ListUtils.isEmpty(list)) {
+			// 生产明细不展示 OP050 工位
+			list.removeIf(row -> "OP050".equals(CommonUitl.formatOprno(row.getOprno())));
 			Map<String, String> oprnoTitleMap = new HashMap<>();
 			for (MesProductRecord row : list) {
 				if (StringUtils.isBlank(row.getLineSn()) || StringUtils.isBlank(row.getOprno())) {
@@ -1493,6 +1495,7 @@ public class MesProductRecordController extends BaseController {
 		mesProductRecord.setContent(retokng);
 		mesProductRecord.setCreateBy(user);
 		mesProductRecord.setCateSn(cateSn);
+		mesProductRecord.setUpdateBy(user);
 
 		// 质量上传,解析参数
 		List<ParamsResp> params = new ArrayList<ParamsResp>();
@@ -1502,9 +1505,11 @@ public class MesProductRecordController extends BaseController {
 		paramsResp2.setResult("OK");
 		params.add(paramsResp2);
 
+		// 400001 绑定人员:结果为 OK,人员信息写入绑定内容(materiel_sn)
 		ParamsResp paramsResp3 = new ParamsResp();
 		paramsResp3.setCraft("400001");
-		paramsResp3.setResult(user);
+		paramsResp3.setResult("OK");
+		paramsResp3.setVal(user);
 		params.add(paramsResp3);
 
 		try{
@@ -3823,6 +3828,8 @@ public class MesProductRecordController extends BaseController {
 				.and("craft", QueryType.EQ,"100000")
 				.and("sn", QueryType.EQ,sn);
 		List<MesProductRecord> lists = mesProductRecordService.findList(mesProductRecord);
+		// 填充工位名称(oprnoTitle)
+		fillProductRecordListFields(lists);
 		map.put("lists", lists);
 		resp.setData(map);
 		resp.setResult(Global.TRUE);
@@ -4414,8 +4421,13 @@ public class MesProductRecordController extends BaseController {
 		String sn = request.getParameter("sn");
 		String oprno = request.getParameter("oprno");
 		String lineSn = request.getParameter("lineSn");
-		String userCode = request.getParameter("ucode");
+		// 兼容 ucode / userCode / user,避免客户端参数名不一致导致写成 system
+		String userCode = firstNotBlank(
+				request.getParameter("ucode"),
+				request.getParameter("userCode"),
+				request.getParameter("user"));
 		String result = request.getParameter("result");
+		logger.info("pccreate sn={}, oprno={}, lineSn={}, ucode={}, result={}", sn, oprno, lineSn, userCode, result);
 		String oldOprno = oprno;
 		if(oldOprno.length()==5){
 			oldOprno += "A";
@@ -4718,5 +4730,17 @@ public class MesProductRecordController extends BaseController {
 		return resp;
 	}
 
+	/** 取第一个非空字符串(去首尾空格) */
+	private String firstNotBlank(String... values) {
+		if (values == null) {
+			return null;
+		}
+		for (String value : values) {
+			if (StringUtils.isNotBlank(value)) {
+				return value.trim();
+			}
+		}
+		return null;
+	}
 
 }

+ 28 - 0
src/main/java/com/jeesite/modules/mes/web/MesQualityController.java

@@ -16,6 +16,7 @@ import com.jeesite.modules.mes.dingtalk.MesDingTalkAlertService;
 import com.jeesite.modules.mes.entity.*;
 import com.jeesite.modules.mes.resp.CommonResp;
 import com.jeesite.modules.mes.service.*;
+import com.jeesite.modules.mes.util.CommonUitl;
 import com.jeesite.modules.sys.entity.DictData;
 import com.jeesite.modules.sys.entity.User;
 import com.jeesite.modules.sys.utils.DictUtils;
@@ -35,6 +36,7 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -224,6 +226,8 @@ public class MesQualityController extends BaseController {
 			}
 		}
 		info.setImgs(imgList);
+		// 填充工位名称
+		fillOprnoTitle(ListUtils.newArrayList(info));
 
 //		String[] itemId = info.getItems().split(",");
 //
@@ -249,11 +253,35 @@ public class MesQualityController extends BaseController {
 		mesQuality.setCreateBy(user.getUserCode());
 		mesQuality.setPage(new Page<>(request, response));
 		Page<MesQuality> list = mesQualityService.findPage(mesQuality);
+		fillOprnoTitle(list.getList());
 		map.put("lists", list);
 		resp.setData(map);
 		resp.setResult(Global.TRUE);
 		return resp;
 	}
+
+	private void fillOprnoTitle(List<MesQuality> list) {
+		if (ListUtils.isEmpty(list)) {
+			return;
+		}
+		Map<String, String> oprnoTitleMap = new HashMap<>();
+		for (MesQuality record : list) {
+			if (StringUtils.isBlank(record.getLineSn()) || StringUtils.isBlank(record.getOprno())) {
+				record.setOprnoTitle("");
+				continue;
+			}
+			String oprno = CommonUitl.formatOprno(record.getOprno());
+			String key = record.getLineSn() + "|" + oprno;
+			if (!oprnoTitleMap.containsKey(key)) {
+				MesLineProcess mesLineProcess = new MesLineProcess();
+				mesLineProcess.setLineSn(record.getLineSn());
+				mesLineProcess.setOprno(oprno);
+				MesLineProcess mesLineProcess1 = mesLineProcessService.findInfo(mesLineProcess);
+				oprnoTitleMap.put(key, ObjectUtils.isEmpty(mesLineProcess1) ? "" : mesLineProcess1.getTitle());
+			}
+			record.setOprnoTitle(oprnoTitleMap.get(key));
+		}
+	}
 	@RequestMapping(value = "oprnoList")
 	@ResponseBody
 	public CommonResp oprnoList(HttpServletRequest req) {

+ 28 - 0
src/main/java/com/jeesite/modules/mes/web/MesRepairController.java

@@ -32,6 +32,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -541,12 +542,37 @@ public class MesRepairController extends BaseController {
 		mesRepair.setCreateBy(user.getUserCode());
 		mesRepair.setPage(new Page<>(request, response));
 		Page<MesRepair> list = mesRepairService.findPage(mesRepair);
+		// 填充责任工位名称
+		fillOprnoTitle(list.getList());
 		map.put("lists", list);
 		resp.setData(map);
 		resp.setResult(Global.TRUE);
 		return resp;
 	}
 
+	private void fillOprnoTitle(List<MesRepair> list) {
+		if (ListUtils.isEmpty(list)) {
+			return;
+		}
+		Map<String, String> oprnoTitleMap = new HashMap<>();
+		for (MesRepair record : list) {
+			if (StringUtils.isBlank(record.getLineSn()) || StringUtils.isBlank(record.getOprno())) {
+				record.setOprnoTitle("");
+				continue;
+			}
+			String oprno = CommonUitl.formatOprno(record.getOprno());
+			String key = record.getLineSn() + "|" + oprno;
+			if (!oprnoTitleMap.containsKey(key)) {
+				MesLineProcess mesLineProcess = new MesLineProcess();
+				mesLineProcess.setLineSn(record.getLineSn());
+				mesLineProcess.setOprno(oprno);
+				MesLineProcess mesLineProcess1 = mesLineProcessService.findInfo(mesLineProcess);
+				oprnoTitleMap.put(key, ObjectUtils.isEmpty(mesLineProcess1) ? "" : mesLineProcess1.getTitle());
+			}
+			record.setOprnoTitle(oprnoTitleMap.get(key));
+		}
+	}
+
 	@RequestMapping(value = "info")
 	@ResponseBody
 	public CommonResp info(HttpServletRequest request, HttpServletResponse response) {
@@ -576,6 +602,8 @@ public class MesRepairController extends BaseController {
 			imgList.add(map1);
 		}
 		info.setImgList(imgList);
+		// 填充责任工位名称
+		fillOprnoTitle(ListUtils.newArrayList(info));
 
 		resp.setData(info);
 		resp.setResult(Global.TRUE);