callm 3 дней назад
Родитель
Сommit
c9a63062dd
1 измененных файлов с 101 добавлено и 12 удалено
  1. 101 12
      src/main/java/com/uas/eis/serviceImpl/MESHelperServiceImpl.java

+ 101 - 12
src/main/java/com/uas/eis/serviceImpl/MESHelperServiceImpl.java

@@ -728,28 +728,117 @@ public class MESHelperServiceImpl implements MESHelperService {
 		}
 		iSN=map.get("iSN").toString();
 
-		SqlRowList rs = baseDao.queryForRowSet("select ms_id,ms_craftcode,ms_prodcode,ms_status,ms_stepcode,ms_nextstepcode from "+Master+".makeserial where ms_id=(  select max(ms_id) from "+Master+".makeserial where ms_sncode  in ( select '" + iSN + "' from dual union select sn from "+Master+".makesnrelation where beforesn='" + iSN + "' and sn<>' '  union select beforesn from "+Master+".makesnrelation where sn='" + iSN + "' and beforesn<>' '))");
-		String ms_status = "";
-		String ms_craftcode = "";
-		String ms_prodcode = "";
-		String ms_id = "";
+		//回流工序,替代客户端cd_stepcode.Text
+		if(map.get("iStepCode")==null){
+			oErrMessage = "回流工序不能为空";
+			rmap.put("oErrMessage",oErrMessage);
+			return rmap;
+		}
+		String iStepCode=map.get("iStepCode").toString();
 
+		//操作人,对应客户端User.UserCode
+		String iUserCode="";
+		if(map.get("iUserCode")!=null){
+			iUserCode=map.get("iUserCode").toString();
+		}
+		//岗位资源,对应客户端User.UserSourceCode
+		String iSourceCode="";
+		if(map.get("iSourceCode")!=null){
+			iSourceCode=map.get("iSourceCode").toString();
+		}
 
+		//取该SN最新一条记录,校验是否允许回流
+		SqlRowList rs=baseDao.queryForRowSet("select ms_id,ms_makecode,ms_craftcode,ms_prodcode,ms_status,ms_paststep," +
+				"nvl(ms_isactive,0)ms_isactive,nvl(ms_qccheck,0)ms_qccheck,nvl(ms_ifqccheck,0)ms_ifqccheck," +
+				"nvl(ms_outstatus,0)ms_outstatus,nvl(pr_ifrepaircheck,0)pr_ifrepaircheck " +
+				"from "+Master+".makeserial left join "+Master+".product on pr_code=ms_prodcode " +
+				"where ms_sncode='"+iSN+"' order by ms_id desc");
+		String ms_id="";
+		String ms_makecode="";
+		String ms_paststep="";
 		if(rs.next()){
-			ms_id= rs.getString("ms_id");
-			ms_craftcode=rs.getString("ms_craftcode");
-			ms_prodcode=rs.getString("ms_prodcode");
+			ms_id=rs.getString("ms_id");
+			ms_makecode=rs.getString("ms_makecode");
+			ms_paststep=rs.getString("ms_paststep")==null?"":rs.getString("ms_paststep");
+			//已执行的工序才允许回流
+			if(!ms_paststep.contains(iStepCode)){
+				oErrMessage = "序列号" + iSN + "不允许回流到未执行工序";
+				rmap.put("oErrMessage",oErrMessage);
+				return rmap;
+			}
+			//已出货不允许回流
+			if("-1".equals(rs.getString("ms_outstatus"))){
+				oErrMessage = "序列号" + iSN + "已出货不允许回流";
+				rmap.put("oErrMessage",oErrMessage);
+				return rmap;
+			}
+			//Key已激活不允许回流
+			if("-1".equals(rs.getString("ms_isactive"))){
+				oErrMessage = "序列号" + iSN + "Key已激活不允许回流";
+				rmap.put("oErrMessage",oErrMessage);
+				return rmap;
+			}
+			//抽检状态不允许重置站点
+			if(("-1".equals(rs.getString("ms_qccheck")) && "-1".equals(rs.getString("pr_ifrepaircheck")))
+					|| "-1".equals(rs.getString("ms_ifqccheck"))){
+				oErrMessage = "序列号" + iSN + "处于抽检状态,不允许重置站点";
+				rmap.put("oErrMessage",oErrMessage);
+				return rmap;
+			}
 		}else {
-			oErrMessage = "SN不存在";
+			oErrMessage = "序列号" + iSN + "不存在";
 			rmap.put("oErrMessage",oErrMessage);
 			return rmap;
 		}
 
-		Object firststep=baseDao.getFieldDataByCondition("craft left join craftdetail on cr_id=cd_crid","cd_stepcode","cr_code='"+ms_craftcode+"' and cr_prodcode='"+ms_prodcode+"' and cd_firststep=-1");
-		if(firststep!=null){
-			baseDao.execute("update makeserial set ms_nextstepcode=? where ms_id=?",firststep,ms_id);
+		//取回流工序在工艺路线中的执行顺序,用于判断用料表需要拆解的项次
+		Object stepno=baseDao.getFieldDataByCondition(Master+".craft left join "+Master+".craftdetail on cr_id=cd_crid",
+				"cd_stepno","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_stepcode='"+iStepCode+"'");
+		String cd_stepno=stepno==null?"":stepno.toString();
+		if("".equals(cd_stepno)){
+			oErrMessage = "工序" + iStepCode + "不在该SN的工艺路线中";
+			rmap.put("oErrMessage",oErrMessage);
+			return rmap;
 		}
+
+		//工序名称,用于记录操作日志
+		Object stname=baseDao.getFieldDataByCondition(Master+".step","st_name","st_code='"+iStepCode+"'");
+		String st_name=stname==null?"":stname.toString();
+
+		StringBuffer sql=new StringBuffer();
+		List<String> sqls=new ArrayList<String>();
+		//重置makeserial,ms_paststep截断到回流工序之前
+		sql.append("update "+Master+".makeserial set ms_status=1,ms_outboxcode='',ms_printcount=0,ms_stepcode='',ms_nextstepcode='"+iStepCode+"',");
+		sql.append("ms_paststep=case when instr(ms_paststep,'"+iStepCode+"')>0 then substr(ms_paststep,0,instr(ms_paststep,'"+iStepCode+"')-2) else ms_paststep end ");
+		sql.append("where ms_sncode='"+iSN+"' and ms_makecode='"+ms_makecode+"'");
+		sqls.add(sql.toString());
+		//删除未处理的不良记录
+		sql.setLength(0);
+		sql.append("delete "+Master+".makebad where mb_sncode='"+iSN+"' and mb_makecode='"+ms_makecode+"' and mb_status=0");
+		sqls.add(sql.toString());
+		//删除标签打印记录
+		sql.setLength(0);
+		sql.append("delete "+Master+".labelprintlog where lpl_value='"+iSN+"'");
+		sqls.add(sql.toString());
+		//拆解用料表,回流工序及之后已上料的明细置为拆解状态
+		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 " +
+				"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_detno>="+cd_stepno+")");
+		sqls.add(sql.toString());
+		//同一次提交内完成重置,避免中途失败导致数据不一致
+		baseDao.execute(sqls);
+
 		rmap.put("oErrMessage",null);
+		rmap.put("oStepName",st_name);
+		rmap.put("oMakeCode",ms_makecode);
 		return rmap;
 	}