Ver código fonte

x13-修复OP230绑定液冷板校验规则

张田野 2 semanas atrás
pai
commit
9118724b82

+ 85 - 0
src/main/java/com/jeesite/modules/mes/util/CommonUitl.java

@@ -262,6 +262,91 @@ public class CommonUitl {
         return false;
     }
 
+    /** 冷板校验失败码:国内工件绑了非国内冷板 */
+    public static final String COLD_PLATE_CODE_LN = "LN";
+    /** 冷板校验失败码:国外工件绑了非国外冷板 */
+    public static final String COLD_PLATE_CODE_LW = "LW";
+    /** 冷板校验失败码:冷板码不在配置前缀范围 */
+    public static final String COLD_PLATE_CODE_LP = "LP";
+
+    /**
+     * 液冷板国内/国外绑定校验。
+     * 后台参数 mes.bind.coldplate.check=1 时生效(系统管理-参数设置)。
+     * 仅当工件码命中国内/国外前缀时才校验,避免影响其他物料绑定。
+     * @return null 表示通过(或未开启/不在校验范围);非空为失败码 LN/LW/LP
+     */
+    public static String checkColdPlateBind(String sn, String wsn) {
+        String check = Global.getConfig("mes.bind.coldplate.check", "0");
+        if (!"1".equals(check)) {
+            return null;
+        }
+        if (StringUtils.isEmpty(sn) || StringUtils.isEmpty(wsn)) {
+            return null;
+        }
+
+        String snDomestic = Global.getConfig("mes.bind.coldplate.sn.domestic.prefix", "");
+        String snForeign = Global.getConfig("mes.bind.coldplate.sn.foreign.prefix", "");
+        String wsnDomestic = Global.getConfig("mes.bind.coldplate.wsn.domestic.prefix", "");
+        String wsnForeign = Global.getConfig("mes.bind.coldplate.wsn.foreign.prefix", "");
+
+        int snRegion = matchRegion(sn, snDomestic, snForeign);
+        // 工件码未命中配置前缀:不拦截(非本次冷板校验范围)
+        if (snRegion == 0) {
+            return null;
+        }
+        int wsnRegion = matchRegion(wsn, wsnDomestic, wsnForeign);
+        if (wsnRegion == 0) {
+            return COLD_PLATE_CODE_LP;
+        }
+        if (snRegion != wsnRegion) {
+            if (snRegion == 1) {
+                return COLD_PLATE_CODE_LN;
+            }
+            return COLD_PLATE_CODE_LW;
+        }
+        return null;
+    }
+
+    /** 冷板校验失败码转提示文案(HTTP 接口 / 日志用) */
+    public static String getColdPlateBindMsg(String code) {
+        if (COLD_PLATE_CODE_LN.equals(code)) {
+            return "国内工件只能绑定国内冷板!";
+        }
+        if (COLD_PLATE_CODE_LW.equals(code)) {
+            return "国外工件只能绑定国外冷板!";
+        }
+        if (COLD_PLATE_CODE_LP.equals(code)) {
+            return "冷板码不在配置的国内/国外前缀范围内!";
+        }
+        return "工件与冷板国内/国外版本不匹配!";
+    }
+
+    /** 1=国内 2=国外 0=未匹配 */
+    private static int matchRegion(String code, String domesticPrefix, String foreignPrefix) {
+        boolean domestic = matchAnyPrefix(code, domesticPrefix);
+        boolean foreign = matchAnyPrefix(code, foreignPrefix);
+        if (domestic && !foreign) {
+            return 1;
+        }
+        if (foreign && !domestic) {
+            return 2;
+        }
+        return 0;
+    }
+
+    private static boolean matchAnyPrefix(String code, String prefixes) {
+        if (StringUtils.isEmpty(code) || StringUtils.isEmpty(prefixes)) {
+            return false;
+        }
+        String[] arr = prefixes.split(",");
+        for (String p : arr) {
+            if (StringUtils.isNotEmpty(p) && code.startsWith(p.trim())) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     // 检查底护板批次码是否正确
     public static boolean checkBatchSn(String batchSn,String sn) {
         if(batchSn.length() < 20 || sn.length() < 20){

+ 22 - 0
src/main/java/com/jeesite/modules/mes/web/MesProductRecordController.java

@@ -917,6 +917,11 @@ public class MesProductRecordController extends BaseController {
 			return renderResult(Global.FALSE, text("参数错误!"));
 		}
 
+		String coldPlateCheckCode = CommonUitl.checkColdPlateBind(sn, wsn);
+		if(StringUtils.isNotEmpty(coldPlateCheckCode)){
+			return renderResult(Global.FALSE, text(CommonUitl.getColdPlateBindMsg(coldPlateCheckCode)));
+		}
+
 		try{
 			mesProductRecordService.updateRecord(sn,oprno,craft,wsn,"OK",user,lineSn);
 		}catch (Exception e){
@@ -1896,6 +1901,15 @@ public class MesProductRecordController extends BaseController {
 			return "RSNS";
 		}
 
+		// 液冷板国内/国外匹配校验(受配置开关控制,接口/报文共用)
+		// 失败码:RSLN/RSLW/RSLP,客户端据此提示
+		String coldPlateCheckCode = CommonUitl.checkColdPlateBind(sn, materielSn);
+		if(StringUtils.isNotEmpty(coldPlateCheckCode)){
+			logger.warn("液冷板绑定校验失败 sn={}, wsn={}, code={}, msg={}",
+					sn, materielSn, coldPlateCheckCode, CommonUitl.getColdPlateBindMsg(coldPlateCheckCode));
+			return "RS" + coldPlateCheckCode;
+		}
+
 //		if(lineSn.equals("LB")){
 //			MesProductRecord mpr = mesProductRecordService.findSnByMsn(sn);
 //			if(!ObjectUtils.isEmpty(mpr)){
@@ -4426,6 +4440,14 @@ public class MesProductRecordController extends BaseController {
 		if(!result.equals("OK") && !result.equals("NG")){
 			return renderResult(Global.FALSE, text("参数错误!"));
 		}
+
+		if(StringUtils.isNotEmpty(materielSn)){
+			String coldPlateCheckCode = CommonUitl.checkColdPlateBind(sn, materielSn);
+			if(StringUtils.isNotEmpty(coldPlateCheckCode)){
+				return renderResult(Global.FALSE, text(CommonUitl.getColdPlateBindMsg(coldPlateCheckCode)));
+			}
+		}
+
 		try {
 			mesProductRecordService.updateRecord(sn,oprno,craft,materielSn,"OK",userCode,lineSn);
 		}catch (Exception e){

+ 6 - 0
src/main/java/com/jeesite/modules/utils/ErrorMsg.java

@@ -64,6 +64,12 @@ public class ErrorMsg {
                 lmsg = "OKNG样件未进行开班点检";
             } else if (processMsgRet.equalsIgnoreCase("YH")) {
                 lmsg = "易耗品超时未更换";
+            } else if (processMsgRet.equalsIgnoreCase("LN")) {
+                lmsg = "国内工件只能绑定国内冷板";
+            } else if (processMsgRet.equalsIgnoreCase("LW")) {
+                lmsg = "国外工件只能绑定国外冷板";
+            } else if (processMsgRet.equalsIgnoreCase("LP")) {
+                lmsg = "冷板码不在国内/国外前缀配置范围内";
             }
         }catch (Exception e){ }
         return lmsg;