|
|
@@ -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
|