Browse Source

添加取消采集接口

callm 17 hours ago
parent
commit
c0e78794f7

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

@@ -57,7 +57,8 @@ public enum HelperType {
     SetMedionValue("SetMedionValue","写入SN对应的HashValue"),
     GetMakeInfo("GetMakeInfo","获取工单相关参数"),
     ReSetSN("ReSetSN","重置SN到第一个工站"),
-    GetMakeMaterial("GetMakeMaterial","获取用料表");
+    GetMakeMaterial("GetMakeMaterial","获取用料表"),
+    CancelCollection("CancelCollection","取消采集"); //取消采集
 
     private String code;
     private String name;

+ 148 - 0
src/main/java/com/uas/eis/serviceImpl/MESHelperServiceImpl.java

@@ -220,6 +220,9 @@ public class MESHelperServiceImpl implements MESHelperService {
 			case WeighCarton:
 				remap = WeighCarton(json,AE_MASTER);
 				break;
+			case CancelCollection:
+				remap = CancelCollection(json,AE_MASTER);
+				break;
 			default:
 				err = -1;
 				break;
@@ -897,6 +900,151 @@ public class MESHelperServiceImpl implements MESHelperService {
 		return rmap;
 	}
 
+	/**
+	 * 取消采集:解除SN与当前工单的绑定,回退过站数量、上料、号段及各种绑定记录
+	 * 对应客户端 Special_CancelCollection.Confirm_Click
+	 */
+	private Map<Object,Object> CancelCollection(JSONObject map,String Master){
+		Map<Object, Object> rmap = new HashMap<Object, Object>();
+		String oErrMessage=null;
+
+		if(map.get("iSN")==null){
+			oErrMessage = "SN不能为空";
+			rmap.put("oErrMessage",oErrMessage);
+			return rmap;
+		}
+		String iSN=map.get("iSN").toString();
+
+		//工单号,替代客户端ms_makecode.Text
+		if(map.get("iMakeCode")==null){
+			oErrMessage = "工单号不能为空";
+			rmap.put("oErrMessage",oErrMessage);
+			return rmap;
+		}
+		String iMakeCode=map.get("iMakeCode").toString();
+
+		//取该SN在当前工单下的最新一条记录
+		SqlRowList rs=baseDao.queryForRowSet("select ms_id,ms_firstsn,ms_status,ms_checkno,ms_outboxcode " +
+				"from "+Master+".makeserial where (ms_sncode='"+iSN+"' or ms_imei1='"+iSN+"' or ms_imei2='"+iSN+"') " +
+				"and ms_makecode='"+iMakeCode+"' order by ms_id desc");
+		if(!rs.next()){
+			oErrMessage = "序列号" + iSN + "不存在于工单" + iMakeCode;
+			rmap.put("oErrMessage",oErrMessage);
+			return rmap;
+		}
+		String ms_id=rs.getString("ms_id");
+		String ms_firstsn=rs.getString("ms_firstsn")==null?"":rs.getString("ms_firstsn");
+		String ms_checkno=rs.getString("ms_checkno")==null?"":rs.getString("ms_checkno");
+		String ms_status=rs.getString("ms_status")==null?"":rs.getString("ms_status");
+		String ms_outboxcode=rs.getString("ms_outboxcode")==null?"":rs.getString("ms_outboxcode");
+
+		//该SN全部工单范围内的最新记录不属于当前工单,说明存在前置工单,不允许取消
+		Object maxid=baseDao.getFieldDataByCondition(Master+".makeserial","max(ms_id)",
+				"(ms_sncode='"+iSN+"' or ms_imei1='"+iSN+"' or ms_imei2='"+iSN+"')");
+		if(maxid!=null && !maxid.toString().equals(ms_id)){
+			oErrMessage = "序列号" + iSN + "存在前置工单,当前工单不允许取消";
+			rmap.put("oErrMessage",oErrMessage);
+			return rmap;
+		}
+		//已装箱不允许取消采集
+		if(!"".equals(ms_outboxcode)){
+			oErrMessage = "序列号" + iSN + "已经装箱" + ms_outboxcode;
+			rmap.put("oErrMessage",oErrMessage);
+			return rmap;
+		}
+
+		StringBuffer sql=new StringBuffer();
+		List<String> sqls=new ArrayList<String>();
+
+		//回退工单工艺路线的过站数量
+		if("3".equals(ms_status)){
+			//不良品:删除该SN未处理的不良记录
+			sql.setLength(0);
+			sql.append("delete "+Master+".makebad where mb_sncode='"+iSN+"' and mb_makecode='"+iMakeCode+"'");
+			sqls.add(sql.toString());
+			//不良品只回退投入数
+			sql.setLength(0);
+			sql.append("update "+Master+".makecraftdetail set mcd_inqty=mcd_inqty-1 where mcd_macode='"+iMakeCode+"' ");
+			sql.append("and instr((select ms_paststep from "+Master+".makeserial where ms_id='"+ms_id+"'),mcd_stepcode)>0");
+			sqls.add(sql.toString());
+		}else{
+			sql.setLength(0);
+			sql.append("update "+Master+".makecraftdetail set mcd_inqty=mcd_inqty-1,mcd_outqty=mcd_outqty-1,mcd_okqty=mcd_okqty-1 ");
+			sql.append("where mcd_macode='"+iMakeCode+"' ");
+			sql.append("and instr((select ms_paststep from "+Master+".makeserial where ms_id='"+ms_id+"'),mcd_stepcode)>0");
+			sqls.add(sql.toString());
+		}
+
+		//送检中:删除送检明细并回退送检数量
+		if(!"".equals(ms_checkno)){
+			sql.setLength(0);
+			sql.append("delete "+Master+".oqcbatchdetail where obd_sncode='"+iSN+"' and obd_makecode='"+iMakeCode+"'");
+			sqls.add(sql.toString());
+			sql.setLength(0);
+			sql.append("update "+Master+".oqcbatch set ob_nowcheckqty=ob_nowcheckqty-1 where ob_checkno='"+ms_checkno+"'");
+			sqls.add(sql.toString());
+		}
+
+		//清除该SN在当前工单的上料数据
+		SqlRowList rsCm=baseDao.queryForRowSet("select cm_barcode,cm_materialtype,cm_stepcode " +
+				"from "+Master+".craftmaterial where cm_sncode='"+iSN+"' and cm_makecode='"+iMakeCode+"'");
+		List<String> barcodes=new ArrayList<String>();
+		while(rsCm.next()){
+			String cm_barcode=rsCm.getString("cm_barcode")==null?"":rsCm.getString("cm_barcode");
+			String cm_stepcode=rsCm.getString("cm_stepcode")==null?"":rsCm.getString("cm_stepcode");
+			barcodes.add(cm_barcode);
+			//批管控物料(materialtype=2)回退批次库存
+			if("2".equals(rsCm.getString("cm_materialtype"))){
+				Object mss_id=baseDao.getFieldDataByCondition(Master+".makesourcestock","mss_id",
+						"mss_makecode='"+iMakeCode+"' and mss_barcode='"+cm_barcode+"' and mss_stepcode='"+cm_stepcode+"' " +
+						"and mss_validtime is not null and mss_invalidtime is null");
+				if(mss_id!=null){
+					sqls.add("update "+Master+".makesourcestock set mss_remain=mss_remain+mss_baseqty," +
+							"mss_useqty=mss_useqty-mss_baseqty where mss_id='"+mss_id+"'");
+				}
+			}
+		}
+		if(!barcodes.isEmpty()){
+			//上料条码原先指向当前工单的下工单标记一并解除
+			for(String barcode:barcodes){
+				sqls.add("update "+Master+".makeserial set ms_nextmacode='' where ms_sncode='"+barcode+"' and ms_nextmacode='"+iMakeCode+"'");
+			}
+			sql.setLength(0);
+			sql.append("delete "+Master+".craftmaterial where cm_sncode='"+iSN+"' and cm_makecode='"+iMakeCode+"'");
+			sqls.add(sql.toString());
+		}
+
+		//回退MAC/BT及IMEI的绑定
+		sqls.add("update "+Master+".makeaddresslist set mal_sncode='',mal_status=0 where (mal_sncode='"+iSN+"' or mal_sncode='"+ms_firstsn+"') and mal_makecode='"+iMakeCode+"'");
+		sqls.add("update "+Master+".makeimeilist set mil_sncode='',mil_status=0 where (mil_sncode='"+iSN+"' or mil_sncode='"+ms_firstsn+"') and mil_makecode='"+iMakeCode+"'");
+		sqls.add("delete "+Master+".sninfo where si_sn='"+iSN+"' or si_sn='"+ms_firstsn+"'");
+		//删除标签打印记录
+		sqls.add("delete "+Master+".labelprintlog where lpl_value='"+iSN+"' and lpl_makecode='"+iMakeCode+"'");
+		//删除老化记录
+		sqls.add("delete "+Master+".AGINGRECORD where ar_sncode='"+iSN+"' and ar_macode='"+iMakeCode+"'");
+		//解除该SN占用的下工单标记
+		sqls.add("update "+Master+".makeserial set ms_nextmacode='' where ms_firstsn='"+ms_firstsn+"' and ms_nextmacode='"+iMakeCode+"'");
+		//初始化导入数据状态
+		sqls.add("update "+Master+".makesnlist set msl_status=0 where msl_sncode='"+iSN+"' and msl_makecode='"+iMakeCode+"' and msl_type='before'");
+		//初始化号段状态
+		sqls.add("update "+Master+".MAKESNRULEDETAIL set msd_status=0 where msd_sncode='"+iSN+"' and msd_makecode='"+iMakeCode+"' and msd_type='before'");
+		sqls.add("delete "+Master+".makesnrelation where SN='"+iSN+"' and makecode='"+iMakeCode+"'");
+		//删除过站记录
+		sqls.add("delete "+Master+".steppassed where sp_sncode='"+ms_firstsn+"' and sp_makecode='"+iMakeCode+"'");
+		sqls.add("delete "+Master+".steppassed where sp_sncode='"+iSN+"' and sp_makecode='"+iMakeCode+"'");
+		//删除SN在makeserial的记录
+		sqls.add("delete "+Master+".makeserial where ms_id='"+ms_id+"'");
+		//同一次提交内完成取消采集,避免中途失败导致数据不一致
+		baseDao.execute(sqls);
+
+		//回写工单投入数
+		baseDao.execute("update "+Master+".make set ma_inqty=(select count(1) from "+Master+".makeserial where ms_makecode='"+iMakeCode+"') where ma_code='"+iMakeCode+"'");
+
+		rmap.put("oErrMessage",null);
+		rmap.put("oMakeCode",iMakeCode);
+		return rmap;
+	}
+
 	private Map<Object,Object> GetMakeInfo(JSONObject map,String Master){
 		Map<Object, Object> rmap = new HashMap<Object, Object>();
 		String iSN=null;