ソースを参照

添加AOI校验字段

callm 1 週間 前
親
コミット
3e0e1f7d9b

+ 7 - 0
src/main/java/com/uas/eis/dao/BaseDao.java

@@ -115,6 +115,13 @@ public class BaseDao{
 		jdbcTemplate.execute(sql);
 	}
 
+	/**
+	 * 执行更新语句并返回受影响的行数,用于通过行数判断更新是否真正生效
+	 */
+	public int executeUpdate(String sql) {
+		return jdbcTemplate.update(sql);
+	}
+
 	public synchronized boolean execute(String sql, Object... objs) {
 		try {
 			jdbcTemplate.update(sql, objs);

+ 2 - 1
src/main/java/com/uas/eis/entity/HelperType.java

@@ -59,7 +59,8 @@ public enum HelperType {
     ReSetSN("ReSetSN","重置SN到第一个工站"),
     GetMakeMaterial("GetMakeMaterial","获取用料表"),
     CancelCollection("CancelCollection","取消采集") ,//取消采集
-    KeyFreeze("KeyFreeze","重置站点并冻结Key"); //重置站点并冻结Key(解冻该SN占用的Key)
+    KeyFreeze("KeyFreeze","重置站点并冻结Key"), //重置站点并冻结Key(解冻该SN占用的Key)
+    SetAOIResult("SetAOIResult","写入SN的AOI测试结果"); //写入SN的AOI测试结果
 
     private String code;
     private String name;

+ 44 - 5
src/main/java/com/uas/eis/serviceImpl/MESHelperServiceImpl.java

@@ -226,6 +226,9 @@ public class MESHelperServiceImpl implements MESHelperService {
 			case KeyFreeze:
 				remap = KeyFreeze(json,AE_MASTER);
 				break;
+			case SetAOIResult:
+				remap = SetAOIResult(json,AE_MASTER);
+				break;
 			default:
 				err = -1;
 				break;
@@ -1071,16 +1074,15 @@ public class MESHelperServiceImpl implements MESHelperService {
 		sql.setLength(0);
 		sql.append("update "+Master+".MACRELEASE set MR_STATUS=-1 where mr_sncode='"+iSN+"'");
 		sqls.add(sql.toString());
-		//拆解用料表,回流工序及之后已上料的明细置为拆解状态
+		//拆解用料表,已上料的明细置为拆解状态(工艺路线校验已注释,不再按cd_stepno截取,拆解该SN全部已上料明细)
 		sql.setLength(0);
 		sql.append("update "+Master+".craftmaterial set cm_status=-1,cm_lastdeco=-1,cm_dropman='"+iUserCode+"',");
 		sql.append("cm_dropdate=sysdate,CM_REMARK='重置站点拆解',cm_dropstep='"+iStepCode+"',");
-		sql.append("cm_dropsccode='"+iSourceCode+"' where cm_sncode='"+iSN+"' and cm_makecode='"+ms_makecode+"' ");
-		sql.append("and cm_stepcode in (select cd_stepcode from "+Master+".craftdetail left join "+Master+".step on st_code=cd_stepcode " +
+		sql.append("cm_dropsccode='"+iSourceCode+"' where cm_sncode='"+iSN+"' and cm_makecode='"+ms_makecode+"' " +
+				"and cm_stepcode in (select cd_stepcode from "+Master+".craftdetail left join "+Master+".step on st_code=cd_stepcode " +
 				"left join "+Master+".craft on cd_crid=cr_id where ST_STATUSCODE='AUDITED' " +
 				"and cr_code=(select ms_craftcode from "+Master+".makeserial where ms_id='"+ms_id+"') " +
-				"and cr_prodcode=(select ms_prodcode from "+Master+".makeserial where ms_id='"+ms_id+"') " +
-				"and cd_stepno>="+cd_stepno+")");
+				"and cr_prodcode=(select ms_prodcode from "+Master+".makeserial where ms_id='"+ms_id+"'))");
 		sqls.add(sql.toString());
 		//同一次提交内完成Key解冻与站点重置,避免中途失败导致数据不一致
 		baseDao.execute(sqls);
@@ -1094,6 +1096,43 @@ public class MESHelperServiceImpl implements MESHelperService {
 		return rmap;
 	}
 
+	/**
+	 * 写入AOI测试结果:根据SN把makeserial.ms_isaoi置为-1
+	 * 该SN最新一条记录的ms_isaoi已经是-1时视为已更新过,报错返回,不允许重复更新
+	 */
+	private Map<Object,Object> SetAOIResult(JSONObject map,String Master){
+		Map<Object, Object> rmap = new HashMap<Object, Object>();
+		String oErrMessage=null;
+
+		if(map.get("iSN")==null){
+			rmap.put("oErrMessage","SN不能为空");
+			return rmap;
+		}
+		String iSN=map.get("iSN").toString();
+
+		//取该SN最新一条记录,校验SN是否存在以及是否已更新过AOI结果
+		SqlRowList rs=baseDao.queryForRowSet("select ms_id,nvl(ms_isaoi,0)ms_isaoi from "+Master+".makeserial " +
+				"where ms_id=(select max(ms_id) from "+Master+".makeserial where ms_sncode=?)",iSN);
+		if(!rs.next()){
+			rmap.put("oErrMessage","SN:"+iSN+"不存在");
+			return rmap;
+		}
+		String ms_id=rs.getString("ms_id");
+		if("-1".equals(rs.getString("ms_isaoi"))){
+			rmap.put("oErrMessage","SN:"+iSN+"的AOI测试结果已更新,不允许重复更新");
+			return rmap;
+		}
+		//原子更新:更新条件里带上未更新标记,即使并发调用也只有一次会生效
+		int updated=baseDao.executeUpdate("update "+Master+".makeserial set ms_isaoi=-1 " +
+				"where ms_id='"+ms_id+"' and nvl(ms_isaoi,0)<>-1");
+		if(updated==0){
+			rmap.put("oErrMessage","SN:"+iSN+"的AOI测试结果已更新,不允许重复更新");
+			return rmap;
+		}
+		rmap.put("oErrMessage",null);
+		return rmap;
+	}
+
 	/**
 	 * 取消采集:解除SN与当前工单的绑定,回退过站数量、上料、号段及各种绑定记录
 	 * 对应客户端 Special_CancelCollection.Confirm_Click