package xin.glue.ui.G.G04; import java.math.BigDecimal; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import com.posdata.glue.PosException; import com.posdata.glue.biz.activity.PosActivity; import com.posdata.glue.biz.constants.PosBizControlConstants; import com.posdata.glue.biz.control.PosBizControlIF; import com.posdata.glue.biz.control.PosBizProvider; import com.posdata.glue.component.PosConstants; import com.posdata.glue.context.PosContext; import com.posdata.glue.dao.vo.PosParameter; import com.posdata.glue.dao.vo.PosRow; import com.posdata.glue.dao.vo.PosRowSet; import com.posdata.glue.msg.PosMESMessageImpl; import com.posdata.glue.msg.PosMessage; public class XinInsertNewCutSlab extends PosActivity { public String runActivity(PosContext context) { String[] SLAB_NO = (String[])context.get("SLAB_NO"); String[] SIZE_DEC_FL = (String[])context.get("SIZE_DEC_FL"); String[] MODIFY_CD = (String[])context.get("MODIFY_CD"); String[] SIZE_UPDT_BEF_THK = (String[])context.get("SIZE_UPDT_BEF_THK"); String[] SIZE_UPDT_BEF_WTH = (String[])context.get("SIZE_UPDT_BEF_WTH"); String[] SIZE_UPDT_BEF_LEN = (String[])context.get("SIZE_UPDT_BEF_LEN"); String[] SIZE_UPDT_BEF_WGT = (String[])context.get("SIZE_UPDT_BEF_WGT"); String[] SLAB_THK = (String[])context.get("SLAB_THK"); String[] SLAB_WTH = (String[])context.get("SLAB_WTH"); String[] SLAB_LEN = (String[])context.get("SLAB_LEN"); String[] SLAB_WGT = (String[])context.get("SLAB_WGT"); String[] SIZE_UPDT_WKSHIFT = (String[])context.get("SIZE_UPDT_WKSHIFT"); String[] SIZE_UPDT_WKGROUP = (String[])context.get("SIZE_UPDT_WKGROUP"); String[] SIZE_UPDT_EMP_NO = (String[])context.get("SIZE_UPDT_EMP_NO"); String[] UPDT_BEF_SLABNO = (String[])context.get("UPDT_BEF_SLABNO"); String[] SLAB_YARD_ADDR = (String[])context.get("CUR_LOAD_LOC"); String[] ORL_YARD_ADDR = (String[])context.get("ORL_LOAD_LOC"); PosParameter param1 = new PosParameter(); param1.setWhereClauseParameter(0,UPDT_BEF_SLABNO[0]); PosRowSet slabComVo = getDao("mesdao").find("UIG040070_04.select", param1); String OrdNo = ""; String OrdSeq = ""; String OrdFl = ""; String CurProgCd = ""; String BefProgCd = ""; String BefOrdNo = ""; String BefOrdSeq = ""; String NonOrdResCd = ""; String NonOrdResDate = ""; String smsYardEntDtime = ""; String slabStockEntDtime = ""; String slabRt = ""; if (slabComVo.hasNext()) { PosRow slabComROW = slabComVo.next(); OrdNo = (String)slabComROW.getAttribute("ORD_NO"); OrdSeq = (String)slabComROW.getAttribute("ORD_SEQ"); CurProgCd = (String)slabComROW.getAttribute("CUR_PROG_CD"); OrdFl = (String)slabComROW.getAttribute("ORD_FL"); smsYardEntDtime = (String)slabComROW.getAttribute("SMS_YARD_ENT_DTIME"); slabStockEntDtime = (String)slabComROW.getAttribute("SLAB_STOCK_ENT_DTIME"); slabRt = (String)slabComROW.getAttribute("SLAB_RT"); BefProgCd = CurProgCd; BefOrdNo = OrdNo; BefOrdSeq = OrdSeq; }else{ context.put("MESSAGES", " 错误,缺少板坯信息! "); return PosBizControlConstants.SUCCESS; } if(!(CurProgCd.equals("RBA")||CurProgCd.equals("RRC")||CurProgCd.equals("RGB"))){ context.put("MESSAGES", " 坯料状态错误,不能操作! "); return PosBizControlConstants.SUCCESS; } //区分炼钢热轧入库 if(ORL_YARD_ADDR[0].substring(0, 1).equals("L")){ DateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss"); smsYardEntDtime = formatter.format(new Date()); }else if(ORL_YARD_ADDR[0].substring(0, 1).equals("Z")){ DateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss"); slabStockEntDtime = formatter.format(new Date()); }else{ context.put("MESSAGES", " 错误,坯料不在库! "); return PosBizControlConstants.SUCCESS; } // 未指示切割 全部降为余材 if(MODIFY_CD[0].equals("02")){ CurProgCd = slabRt.equals("H")?"RRC":"RGB"; OrdFl = "2"; OrdNo = ""; OrdSeq = ""; NonOrdResCd = "3A"; //尺寸变更 DateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss"); NonOrdResDate = formatter.format(new Date()); // 指示切割 }else if(MODIFY_CD[0].equals("03")){ CurProgCd = slabRt.equals("H")?"RRC":"RGB"; OrdFl = "2"; OrdNo = ""; OrdSeq = ""; NonOrdResCd = "3A"; //尺寸变更 DateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss"); NonOrdResDate = formatter.format(new Date()); } PosParameter param = null; if(UPDT_BEF_SLABNO.length > 0 ){ for(int i = 0 ; i < UPDT_BEF_SLABNO.length ; i++){ /* //指示切割 if(MODIFY_CD[0].equals("03")){ BigDecimal Wgt = new BigDecimal(SLAB_WGT[i]); String RtnSizeDec = SlabSizeDec(new BigDecimal(SLAB_THK[i]),new BigDecimal(SLAB_WTH[i]),new BigDecimal(SLAB_LEN[i]),SLAB_NO[i],Wgt); if(RtnSizeDec.equals("Y")){ SIZE_DEC_FL[i] = "1"; }else if(RtnSizeDec.equals("N")){ SIZE_DEC_FL[i] = "2"; }else if(RtnSizeDec.equals("F")){ context.put("MESSAGES", " 错误,不能为指示切割! "); return PosBizControlConstants.SUCCESS; } //尺寸不合格 if(SIZE_DEC_FL[i].equals("2")){ CurProgCd = slabRt.equals("H")?"RRC":"RGB"; OrdFl = "2"; OrdNo = ""; OrdSeq = ""; NonOrdResCd = "3B"; //尺寸异常 DateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss"); NonOrdResDate = formatter.format(new Date()); }else if(SIZE_DEC_FL[i].equals("1")){ if (OrdFl != null && OrdFl.equals("2")) { CurProgCd = slabRt.equals("H")?"RRC":"RGB"; } else if (OrdFl.equals("1")){ CurProgCd = "RBA"; //轧钢指示待机 } } }*/ String storelay = null; param = new PosParameter(); if(SLAB_YARD_ADDR[i]== null&& SLAB_YARD_ADDR[i].equals(""))continue; param.setWhereClauseParameter(0, SLAB_YARD_ADDR[i]); PosRowSet storelayVo = getDao("mesdao").find("UIG040060_YARD_LAY.select", param); if(storelayVo.hasNext()){ PosRow storelayRow = storelayVo.next(); storelay = (String)storelayRow.getAttribute("STORELAY"); } param = new PosParameter(); param.setWhereClauseParameter(0, SLAB_NO[i]); param.setWhereClauseParameter(1, "UIG040070"); param.setWhereClauseParameter(2,SLAB_YARD_ADDR[i]); param.setWhereClauseParameter(3, storelay); this.getDao("mesdao").update("UIG040070_SLAB_YARD.update", param); param = new PosParameter(); param.setValueParamter(0, SLAB_NO[i]); param.setValueParamter(1, CurProgCd ); param.setValueParamter(2, BefOrdNo); param.setValueParamter(3, BefOrdSeq ); param.setValueParamter(4, OrdNo ); param.setValueParamter(5, OrdSeq ); param.setValueParamter(6, OrdFl ); param.setValueParamter(7, SLAB_THK[i]); param.setValueParamter(8, SLAB_WTH[i]); param.setValueParamter(9, SLAB_LEN[i]); param.setValueParamter(10, SLAB_WGT[i]); param.setValueParamter(11, MODIFY_CD[i]); param.setValueParamter(12, SIZE_UPDT_BEF_THK[i]); param.setValueParamter(13, SIZE_UPDT_BEF_WTH[i]); param.setValueParamter(14, SIZE_UPDT_BEF_LEN[i]); param.setValueParamter(15, SIZE_UPDT_BEF_WGT[i]); param.setValueParamter(16, SLAB_THK[i]); param.setValueParamter(17, SLAB_WTH[i]); param.setValueParamter(18, SLAB_LEN[i]); param.setValueParamter(19, SLAB_WGT[i]); param.setValueParamter(20, SIZE_UPDT_WKSHIFT[i]); param.setValueParamter(21, SIZE_UPDT_WKGROUP[i]); param.setValueParamter(22, SIZE_UPDT_EMP_NO[i]); param.setValueParamter(23, SIZE_DEC_FL[i]); param.setValueParamter(24, NonOrdResCd); param.setValueParamter(25, NonOrdResDate); param.setValueParamter(26, SLAB_YARD_ADDR[i] + storelay); param.setValueParamter(27, smsYardEntDtime); param.setValueParamter(28, slabStockEntDtime); param.setValueParamter(29, SLAB_NO[i]); param.setValueParamter(30, UPDT_BEF_SLABNO[i]); this.getDao("mesdao").insert("UIG040070_SHR.insert",param); param = new PosParameter(); param.setValueParamter(0, SLAB_NO[i]); param.setValueParamter(1, UPDT_BEF_SLABNO[i]); this.getDao("mesdao").insert("UIG040070_SHR_COMMD_02.insert",param); param = new PosParameter(); param.setValueParamter(0, OrdFl); param.setValueParamter(1, SLAB_NO[i]); getDao("mesdao").update("UIG040070_SLAB_COMM_D_ORDFL.update", param); //进程整理 BigDecimal SlabWgt = new BigDecimal(SLAB_WGT[i]); SendProg_NIE012070(SLAB_NO[i],OrdNo,OrdSeq,BefOrdNo,BefOrdSeq,CurProgCd,BefProgCd,"TM",SlabWgt); SendProg_NIE012080(); } //结束母板坯 param = new PosParameter(); param.setWhereClauseParameter(0, UPDT_BEF_SLABNO[0]); this.getDao("mesdao").update("UIG040070_SLAB_END.update",param); param = new PosParameter(); param.setWhereClauseParameter(0, UPDT_BEF_SLABNO[0]); this.getDao("mesdao").update("UIG040070_SLAB_COMM.update", param); //整理垛位 SendProg_NIG040200(ORL_YARD_ADDR[0].substring(0,(ORL_YARD_ADDR[0].length()-2))); context.put("MESSAGES", " 操作成功! "); } return PosBizControlConstants.SUCCESS; } // SLAB SIZE DECISION ( RESULT SLAB WGT,ORDER WGT COMPARE) // TBG02_SLAB_COMM--> SLAB_WGT // TBG02_SLAB_COMM_D --> ORD_NO,ORD_SEQ // TBA01_ORD_LINE --> PROD_WGT_MIN,PROD_WGT_MAX public String SlabSizeDec(BigDecimal slabThk,BigDecimal slabWth,BigDecimal slabLen,String SlabNo,BigDecimal SlabWgt) { logger.logInfo("XinSaveSlabComm SlabWgt:"+SlabWgt); BigDecimal SlabThk = slabThk; BigDecimal SlabWth = slabWth; BigDecimal SlabLen = slabLen; BigDecimal ordLen = new BigDecimal(0); BigDecimal ordWgt = new BigDecimal(0); BigDecimal coilOutDia = new BigDecimal(0); BigDecimal coilInDia = new BigDecimal(0); BigDecimal ordThk = new BigDecimal(0); BigDecimal ordWth = new BigDecimal(0); BigDecimal coilThk = new BigDecimal(0); BigDecimal coilWth = new BigDecimal(0); PosParameter param1 = new PosParameter(); param1.setWhereClauseParameter(0, SlabNo); PosRowSet CommDVO = getDao("mesdao").find("NIG020610_SLAB_COMM_D.select", param1); PosRowSet CommDVO2 = getDao("mesdao").find("UIG020060_SLAB_COMMD_ORD.select",param1); if(CommDVO2.hasNext()){ PosRow row = CommDVO2.next(); ordThk = (BigDecimal)row.getAttribute("SLAB_THK"); ordWth = (BigDecimal)row.getAttribute("SLAB_WTH"); coilThk = (BigDecimal)row.getAttribute("ORD_THK"); coilWth = (BigDecimal)row.getAttribute("ORD_WTH"); coilInDia = (BigDecimal)row.getAttribute("COIL_INDIA"); }else return "F"; BigDecimal total = ordWth.add(new BigDecimal(100)); if(SlabWth.compareTo(ordWth) < 0||total.compareTo(SlabWth) < 0){ return "N"; } param1 = new PosParameter(); PosRowSet rateVo = getDao("mesdao").find("UIG020060_proc_rate.select", param1); BigDecimal procRate = new BigDecimal(1); if(rateVo.hasNext()){ PosRow posrow = rateVo.next(); procRate = (BigDecimal)posrow.getAttribute("PROC_RATE"); } if ( CommDVO.hasNext()) { PosRow CommDROW = CommDVO.next(); BigDecimal PROD_WGT_MIN = (BigDecimal)CommDROW.getAttribute("PROD_WGT_MIN"); BigDecimal PROD_WGT_MAX = (BigDecimal)CommDROW.getAttribute("PROD_WGT_MAX"); logger.logInfo("XinSaveSlabComm PROD_WGT_MIN:"+PROD_WGT_MIN); logger.logInfo(PROD_WGT_MIN); logger.logInfo(PROD_WGT_MAX); ordWgt = SlabWgt.multiply(procRate); ordWgt = ordWgt.divide(new BigDecimal(100)); logger.logInfo("XinSaveSlabComm ordWgt:"+ ordWgt); if(PROD_WGT_MIN == null)PROD_WGT_MIN = new BigDecimal(0); if(PROD_WGT_MAX == null)PROD_WGT_MAX = new BigDecimal(0); //如果板坯重量不在订单重量范围内 if (ordWgt.compareTo(PROD_WGT_MIN) < 0 || PROD_WGT_MAX.compareTo(ordWgt) < 0 ) { //取消订单 return "N"; } } logger.logInfo("ordWgt=" + ordWgt ); logger.logInfo("ordThk=" + ordThk ); logger.logInfo("SlabWth=" + SlabWth ); ordLen = ordWgt.multiply(new BigDecimal(1000000)); ordLen = ordLen.divide(coilThk,3,BigDecimal.ROUND_HALF_UP); ordLen = ordLen.divide(coilWth,3,BigDecimal.ROUND_HALF_UP); ordLen = ordLen.divide(new BigDecimal(7.8),0,BigDecimal.ROUND_HALF_UP); coilOutDia = new BigDecimal(Math.sqrt(ordWgt.multiply(new BigDecimal(1000000).multiply(new BigDecimal(4)).divide(new BigDecimal(7.8*3.14*0.98),3,BigDecimal.ROUND_HALF_UP).divide(SlabWth,0,BigDecimal.ROUND_HALF_UP)).add(coilInDia.multiply(coilInDia)).doubleValue())); logger.logInfo("-------------slabThk" + slabThk + "--slabWth" + slabWth + "--slabLen" + slabLen + "--ordLen" + ordLen + "--ordWgt" + ordWgt + "--coilOutDia" + coilOutDia + "--" ); param1 = new PosParameter(); param1.setWhereClauseParameter(0,slabThk); param1.setWhereClauseParameter(1,slabWth); param1.setWhereClauseParameter(2,slabLen); param1.setWhereClauseParameter(3,ordLen); param1.setWhereClauseParameter(4,ordWgt); param1.setWhereClauseParameter(5,coilOutDia); param1.setWhereClauseParameter(6,SlabNo); int rowset = getDao("mesdao").update("UIG020060_slab_comm_d.update",param1); return "Y"; } public PosContext SendProg_NIE012070(String MatNo,String sOrdNo,String sOrdSeq,String sBefOrdNo,String sBefOrdSeq,String sProgCd,String BefProcCd,String sKind,BigDecimal nwgt ) { PosContext context = new PosContext(); PosMessage message = new PosMESMessageImpl(); String TcId = "NIE012070"; message.setTCID(TcId); message.setObject("MSG_ID",TcId); message.setObject("BEF_ORD_NO",sBefOrdNo); message.setObject("BEF_ORD_SEQ",sBefOrdSeq); message.setObject("ORD_NO",sOrdNo); message.setObject("ORD_SEQ",sOrdSeq); message.setObject("BEF_PROG_CD",BefProcCd); message.setObject("PROG_CD",sProgCd); message.setObject("MAT_TYPE",sKind); message.setObject("MAT_NO",MatNo); message.setObject("WGT", nwgt ); message.setObject("PGMID","UIG040070"); message.setObject("REG_ID","UIG040070"); message.setTCID(TcId); context.setMessage(message); // this.processComponent(PosConstants.CREATE_MESSAGE, context); // String transactionCode = context.getMessage().getTC(); String SERVICE_POSTFIX = "-service"; context.put(PosBizControlConstants.SERVICE_NAME, TcId + SERVICE_POSTFIX); // context.setMessage(message); PosBizControlIF controller = PosBizProvider.getController(); controller.doSubController(context,false); return null; } public void SendProg_NIE012080() { PosContext context = new PosContext(); PosMessage message = new PosMESMessageImpl(); String TcId = "NIE012080"; message.setTCID(TcId); message.setObject("MSG_ID",TcId); message.setObject("AA",null); context.setMessage(message); this.processComponent(PosConstants.CREATE_MESSAGE, context); String transactionCode = context.getMessage().getTC(); message.setTCID(TcId); String serviceName = "NIE012080"; String SERVICE_POSTFIX = "-service"; context.put(PosBizControlConstants.SERVICE_NAME, serviceName + SERVICE_POSTFIX); context.setMessage(message); PosBizControlIF controller = PosBizProvider.getController(); controller.doSubController(context,false); } public String SendProg_NIG040200(String yardAddr) { logger.logInfo("PosSaveSlabCutting---> yardAddr:"+yardAddr ); PosContext context = new PosContext(); PosMessage message = new PosMESMessageImpl(); String TcId = "NIG040200"; message.setTCID(TcId); message.setObject("MSG_ID",TcId); message.setObject("YARD_ADDR",yardAddr); context.setMessage(message); message.setTCID(TcId); String SERVICE_POSTFIX = "-service"; context.put(PosBizControlConstants.SERVICE_NAME, TcId + SERVICE_POSTFIX); PosBizProvider.getController().doSubController(context, false); String SERVICE_ERR_MSG = (String) context.get("SERVICE_ERR_MSG"); logger.logInfo("PosSaveSlabCutting SendProg_NIE012070 SERVICE_ERR_MSG:"+SERVICE_ERR_MSG ); if (SERVICE_ERR_MSG != null) { throw new PosException(SERVICE_ERR_MSG); } return null; } }