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