package xin.glue.ui.H.H02; import java.math.BigDecimal; import java.sql.CallableStatement; import java.sql.SQLException; import xin.glue.ui.common.ProduceFactory; 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; /* * author:王小炎 * date:2008-10-7 * desc:加热炉出炉操作,修改,插入 */ public class PosSaveOutHeatFurnace extends PosActivity { public String runActivity(PosContext context) { //从页面获取参数数据,供更新页面使用 String[] slabNo = (String[])context.get("SLAB_NO"); String[] devNo = (String[])context.get("DEVNO"); String[] coilNo = (String[])context.get("COIL_NO"); //出炉时刻 String[] extractDtime = (String[])context.get("EXTRACT_DTIME"); //在炉时间 String[] infurHour = (String[])context.get("INFUR_HOUR"); //出炉平均温度 String[] extractAvgTemp = (String[])context.get("EXTRACT_AVG_TEMP"); //均热台在炉时间 String[] eqHtInfurHour = (String[])context.get("EQ_HT_INFUR_HOUR"); //均热台温度 String[] eqHtTemp = (String[])context.get("EQ_HT_TEMP"); String[] WkShift = (String[])context.get("WK_SHIFT2"); String[] WkGroup = (String[])context.get("WK_GROUP2"); String[] RegId = (String[])context.get("WK_EMP_NO2"); //从TBF02_SPEC_MILL_D中获取的将要插入到TBH02_COIL_COMM_D中的字段 String coilCutSeq = ""; BigDecimal ordThk = null; BigDecimal ordWth = null; BigDecimal ordLen = null; BigDecimal ordWgt = null; BigDecimal ordWgtMin = null; BigDecimal ordWgtMax = null; BigDecimal ordIndia = null; BigDecimal ordOutdia = null; String ordNo = ""; String ordSeq = ""; String ordFl = ""; /* * COIL_NO为条件对COIL公用TANBLE 进行SELECT之后是 KEY NOT FOUND时 * 1. 轧制SPEC TABLE(TBF02_SPEC_MILL) DATA录入到钢卷公共表(TBH02_COIL_COMM)中 * 录入DATA: 钢号, 规格略号, 交货期, 订单用途代码, 订单去向 * 2. 板坯公共表(tbg02_slab_comm) data 录入到钢卷公共表(TBH02_COIL_COMM)中 * 录入data: 产品代码 * 3. 轧制SPEC详细TABLE(TBF02_SPEC_MILL_D) DATA录入处理到COIL公用详细TABLE * (TBH02_COIL_COMM_D)中 * */ //1. 轧制SPEC TABLE(TBF02_SPEC_MILL) DATA录入到钢卷公共表(TBH02_COIL_COMM)中 //录入DATA: 钢号, 规格略号, 交货期, 订单用途代码, 订单去向 String SPEC_STL_GRD = null; String SPEC_SPEC_ABBSYM = null; String SPEC_ORD_NO = null; String SPEC_ORD_SEQ = null; String SPEC_ORD_USE_CD = null; String SPEC_PRODNM_CD = null; String SPEC_ORD_FL = null; String SPM_PROC_YN = null; String SPEC_ORD_CUST_CD = null; String SPEC_DEVLMT_DTIME = null; String SPEC_PATH_MILL_CD = null; String SPEC_PACK_METHOD = null; Number SPEC_ORD_INDIA = null; Number SPEC_ORD_OUTDIA = null; Number SPEC_ORD_THK = null; Number SPEC_ORD_WTH = null; Number SPEC_ORD_WGT = null; String SPEC_DEST_CD = null; String route = ""; //订单去向 String STATUS_CD = null; String MsgChk = null; String CUST_CD = ""; PosParameter param3 = new PosParameter(); param3.setWhereClauseParameter(0,slabNo[0] ); param3.setWhereClauseParameter(1,coilNo[0] ); PosRowSet SpecMillVo = getDao("mesdao").find("NIH020020_SPEC_MILL.select", param3); //这里钢卷号不存在轧制信息表的话,不允许把空值放入钢卷信息表中 //这里把存在于轧制计划作为先决条件,不存在话下面的操作就都不能进行 if(SpecMillVo.hasNext()) { //从TBF02_SPEC_MILL中获取的将要插入到TBH02_COIL_COMM中的字段赋值 PosRow SpecMillROW = SpecMillVo.next(); STATUS_CD = (String)SpecMillROW.getAttribute("STATUS_CD"); //这里判断一次钢卷号与板坯号是否配对,如果输入的板坯号与钢卷号不是在轧制计划中配对的。给出错误提示 String Coil_No_Spec = (String)SpecMillROW.getAttribute("COIL_NO"); if(Coil_No_Spec.equals(coilNo[0]) && Coil_No_Spec != null){ if (STATUS_CD.equals("B")) { //钢号 SPEC_STL_GRD = (String)SpecMillROW.getAttribute("STL_GRD"); //标准号 SPEC_SPEC_ABBSYM = (String)SpecMillROW.getAttribute("SPEC_ABBSYM"); //合同号 SPEC_ORD_NO = (String)SpecMillROW.getAttribute("ORD_NO"); //订单号 SPEC_ORD_SEQ = (String)SpecMillROW.getAttribute("ORD_SEQ"); //订单用途代码 SPEC_ORD_USE_CD = (String)SpecMillROW.getAttribute("ORD_USEAGE_CD"); //产品代码 SPEC_PRODNM_CD = (String)SpecMillROW.getAttribute("PRODNM_CD"); //产品余材区分 这里黄次长写明为1,在管制表中具体代表的东西不确定 SPEC_ORD_FL = "1"; //平整分卷判定 SPM_PROC_YN = (String)SpecMillROW.getAttribute("SPM_PROC_YN"); //需要进行平整分卷标志的转换 String SpmYn = null; if (SPM_PROC_YN != null && SPM_PROC_YN.equals("Y")) { SpmYn = "1"; } else { SpmYn = ""; } //客户代码 SPEC_ORD_CUST_CD = (String)SpecMillROW.getAttribute("ORD_CUST_CD"); //交货期 SPEC_DEVLMT_DTIME = (String)SpecMillROW.getAttribute("DELV_REQ_DATE"); //轧制工艺流程 SPEC_PATH_MILL_CD = (String)SpecMillROW.getAttribute("PATH_MILL_CD"); //包装方法 SPEC_PACK_METHOD = (String)SpecMillROW.getAttribute("PACK_METHOD"); //订单内径 SPEC_ORD_INDIA = (Number)SpecMillROW.getAttribute("ORD_INDIA"); //订单外径 SPEC_ORD_OUTDIA = (Number)SpecMillROW.getAttribute("ORD_OUTDIA"); //订单厚度 SPEC_ORD_THK = (Number)SpecMillROW.getAttribute("ORD_THK"); //订单宽度 SPEC_ORD_WTH = (Number)SpecMillROW.getAttribute("ORD_WTH"); //订单重量 SPEC_ORD_WGT = (Number)SpecMillROW.getAttribute("ORD_WGT"); //目的地代码 SPEC_DEST_CD = (String)SpecMillROW.getAttribute("DEST_CD"); //去向信息没有处理 在自动接收中存在,所以添加进来 route = (String)SpecMillROW.getAttribute("ROUTE"); CUST_CD = (String)SpecMillROW.getAttribute("CUST_CD"); //轧制计划没有取SQL中的而是在下面再取了一次 slabEditSeq //2. 板坯公共表(tbg02_slab_comm) data 录入到钢卷公共表(TBH02_COIL_COMM)中 //录入data: 产品代码 Number SlabWgt = null; String BefProgCd = null; PosParameter param6 = new PosParameter(); param6.setWhereClauseParameter(0,slabNo[0] ); PosRowSet rowset5 = getDao("mesdao").find("UIH020020_05.select", param6); if (rowset5.hasNext()) { //用于发送进程的信息SendProg_NIE012070 PosRow row1 = rowset5.next(); SlabWgt = (Number)row1.getAttribute("SLAB_WGT"); BefProgCd = (String)row1.getAttribute("CUR_PROG_CD"); //3. 轧制SPEC详细TABLE(TBF02_SPEC_MILL_D) DATA录入处理到COIL公用详细TABLE(TBH02_COIL_COMM_D)中 String sql5 = "select SLAB_EDT_SEQ from TBF02_SPEC_MILL where COIL_NO = ? and SLAB_no = ? "; PosParameter param7 = new PosParameter(); BigDecimal slabEditSeq = null; param7.setWhereClauseParameter(0,coilNo[0] ); param7.setWhereClauseParameter(1,slabNo[0] ); PosRowSet rowset6 = getDao("mesdao").findByQueryStatement(sql5, param7); while(rowset6.hasNext()) { PosRow row2 = rowset6.next(); slabEditSeq = (BigDecimal)row2.getAttribute("SLAB_EDT_SEQ"); } //查询 TBH02_COIL_COMM 如果已经有值,则进行修改操作,否则插入 String sql3 = "select * from TBH02_COIL_COMM where COIL_NO = ?"; PosParameter param4 = new PosParameter(); param4.setWhereClauseParameter(0,coilNo[0] ); PosRowSet rowset4 = getDao("mesdao").findByQueryStatement(sql3, param4); PosParameter param5 = new PosParameter(); PosParameter param9 = new PosParameter(); //从TBF02_SPEC_MILL 到 TBH02_COIL_COMM if(!rowset4.hasNext()) { //不存在的情况下新增记录 param5.setValueParamter(0,coilNo[0] ); param5.setValueParamter(1,slabNo[0] ); param5.setValueParamter(2,SPEC_STL_GRD ); param5.setValueParamter(3,SPEC_SPEC_ABBSYM ); param5.setValueParamter(4,SPEC_ORD_NO ); param5.setValueParamter(5,SPEC_ORD_SEQ ); param5.setValueParamter(6,SPEC_ORD_USE_CD ); param5.setValueParamter(7,SPEC_PRODNM_CD ); param5.setValueParamter(8,SPEC_ORD_FL ); //这里使用转换后的平整分卷标志 param5.setValueParamter(9,SpmYn ); param5.setValueParamter(10,SPEC_ORD_CUST_CD ); param5.setValueParamter(11,SPEC_DEVLMT_DTIME ); param5.setValueParamter(12,SPEC_PATH_MILL_CD ); param5.setValueParamter(13,SPEC_PACK_METHOD ); param5.setValueParamter(14,SPEC_ORD_INDIA ); param5.setValueParamter(15,SPEC_ORD_OUTDIA ); param5.setValueParamter(16,SPEC_ORD_THK ); param5.setValueParamter(17,SPEC_ORD_WTH ); param5.setValueParamter(18,SPEC_ORD_WGT ); param5.setValueParamter(19,SPEC_DEST_CD ); param5.setValueParamter(20,route ); param5.setValueParamter(21,CUST_CD ); param5.setValueParamter(22,SPEC_ORD_NO ); param5.setValueParamter(23,SPEC_ORD_SEQ ); getDao("mesdao").insert("UIH020020_03.insert", param5); PosParameter param8 = new PosParameter(); param8.setWhereClauseParameter(0, slabEditSeq); PosRowSet rowset7 = getDao("mesdao").find("UIH020020_04.select", param8); //从TBF02_SPEC_MILL_D表插到TBH02_COIL_COMM_D while(rowset7.hasNext()) { PosRow row3 = rowset7.next(); coilCutSeq = (String)row3.getAttribute("COIL_CUT_SEQ"); ordThk = (BigDecimal)row3.getAttribute("ORD_THK"); ordWth = (BigDecimal)row3.getAttribute("ORD_WTH"); ordLen = (BigDecimal)row3.getAttribute("ORD_LEN"); ordWgt = (BigDecimal)row3.getAttribute("ORD_WGT"); ordWgtMin = (BigDecimal)row3.getAttribute("ORD_WGT_MIN"); ordWgtMax = (BigDecimal)row3.getAttribute("ORD_WGT_MAX"); ordIndia = (BigDecimal)row3.getAttribute("ORD_INDIA"); ordOutdia = (BigDecimal)row3.getAttribute("ORD_OUTDIA"); ordNo = (String)row3.getAttribute("ORD_NO"); ordSeq = (String)row3.getAttribute("ORD_SEQ"); ordFl = (String)row3.getAttribute("ORD_FL"); param9.setValueParamter(0, coilNo[0]); param9.setValueParamter(1, coilCutSeq); param9.setValueParamter(2, ordThk); param9.setValueParamter(3, ordWth); param9.setValueParamter(4, ordLen); param9.setValueParamter(5, ordWgt); param9.setValueParamter(6, ordWgtMin); param9.setValueParamter(7, ordWgtMax); param9.setValueParamter(8, ordIndia); param9.setValueParamter(9, ordOutdia); param9.setValueParamter(10, ordNo); param9.setValueParamter(11, ordSeq); param9.setValueParamter(12, ordFl); getDao("mesdao").insert("UIH020020_04.insert", param9); } } else { PosParameter param10 = new PosParameter(); param10.setWhereClauseParameter(0, "1"); param10.setWhereClauseParameter(1, coilNo[0]); getDao("mesdao").update("UIH020020_COIL_COMM.update", param10); } /* * SLAB_NO和钢卷号为条件对加热炉TABLE(TBH02_REHEATFUR) 进行select * 之后是 NOT FOUND的话INSERT不是的话进行UPDATE处理 */ //这里需要获取加热炉状态,在为入炉1的情况下调用品质。在为出炉2的情况下不能调用品质,只更新页面数据 String sql = "select RHF_STAT from TBH02_REHEATFUR where slab_no = ? and coil_no = ? "; //这里做为是否调用品质的标志 String RHF_STAT = null; PosParameter param0 = new PosParameter(); param0.setWhereClauseParameter(0,slabNo[0] ); param0.setWhereClauseParameter(1,coilNo[0] ); PosRowSet rowset0 = getDao("mesdao").findByQueryStatement(sql, param0); PosParameter param1 = new PosParameter(); PosParameter param2 = new PosParameter(); //判断板坯信息是否存在于TBH02_REHEATFUR if(rowset0.hasNext()){ PosRow row0 = rowset0.next(); RHF_STAT = (String) row0.getAttribute("RHF_STAT"); logger.logInfo("PosSAveOutHeatFurnace---> TBH02_REHEATFUR更新的炉内状态:"+ RHF_STAT); param1.setWhereClauseParameter(0,extractDtime[0]); param1.setWhereClauseParameter(1,infurHour[0]); param1.setWhereClauseParameter(2,extractAvgTemp[0]); param1.setWhereClauseParameter(3,eqHtInfurHour[0]); param1.setWhereClauseParameter(4,eqHtTemp[0]); param1.setWhereClauseParameter(5,WkShift[0]); param1.setWhereClauseParameter(6,WkGroup[0]); param1.setWhereClauseParameter(7,RegId[0]); param1.setWhereClauseParameter(8,"2"); param1.setWhereClauseParameter(9,slabNo[0]); param1.setWhereClauseParameter(10,coilNo[0]); getDao("mesdao").update("UIH020020_05.update", param1); } else{ PosRow row0 = rowset0.next(); RHF_STAT = (String) row0.getAttribute("RHF_STAT"); logger.logInfo("PosSAveOutHeatFurnace---> TBH02_REHEATFUR插入的炉内状态:"+ RHF_STAT); param1.setValueParamter(0,slabNo[0]); param1.setValueParamter(1,devNo[0]); param1.setValueParamter(2,coilNo[0]); param1.setValueParamter(3,extractDtime[0]); param1.setValueParamter(4,infurHour[0]); param1.setValueParamter(5,extractAvgTemp[0]); param1.setValueParamter(6,eqHtInfurHour[0]); param1.setValueParamter(7,eqHtTemp[0]); param1.setValueParamter(8,WkShift[0]); param1.setValueParamter(9,WkGroup[0]); param1.setValueParamter(10,RegId[0]); //这里没用 //param1.setValueParamter(11,"2"); getDao("mesdao").insert("UIH020020_02.insert",param1); } //修改板坯公共表中的状态 param2.setWhereClauseParameter(0, "UIH020020"); param2.setWhereClauseParameter(1, slabNo[0]); getDao("mesdao").update("UIH020020_03.update", param2); //通过加热炉状态判断是否调用品质存储过程和进程 if(RHF_STAT.equals("1")){ //此方法用来传送异动点数据 ProduceFactory PD= new ProduceFactory(); PD.ErpDataCover("HSLAB",slabNo[0],"41A","0","O","加热炉二级丢料","热轧轧制"); SendProg_NIE012070( slabNo[0] ,BefProgCd,SPEC_ORD_NO,SPEC_ORD_SEQ,SlabWgt,RegId[0] ); SendProg_NIE012080(); /* CallableStatement PlRtn = getDao("mesdao").getCallableStatement("NIH020020_NIB027010"); try { if(PlRtn != null) { PlRtn.setString(1,coilNo[0]); //新增加一个字段,为了废弃的时候使用 PlRtn.setString(2,""); PlRtn.registerOutParameter(3, java.sql.Types.VARCHAR); PlRtn.registerOutParameter(4, java.sql.Types.VARCHAR); PlRtn.execute(); String sRetCode = PlRtn.getString(3); String sRetMsg = PlRtn.getString(4); logger.logInfo("PosSAveOutHeatFurnace---> NIB027010 TC PlRtn1:["+sRetCode+"]:"+ sRetMsg); } } catch (SQLException e) { throw new PosException(e.getMessage()); }finally { if (PlRtn != null) { try { PlRtn.close(); } catch (SQLException e) { logger.logWarn(e.getMessage(), e); } } } */ }else{ //多次出炉的情况不做处理 logger.logInfo("PosSAveOutHeatFurnace---> 多次出炉的情况,只改变TBH02_REHEATFUR里的数据:"+ RHF_STAT); } } else { logger.logDebug("PosSaveOutHeatFurnace 输入的钢卷号在轧制计划表 TBG02_SLAB_COMM 中不存在! "); String vtemp="PosSaveOutHeatFurnace"; context.put("rs", vtemp); } } else { logger.logInfo("PosSaveOutHeatFurnace Failed TBF02_SPEC_MILL STATUS_CD:("+STATUS_CD+")"); MsgChk = "N"; } }else{ logger.logInfo("PosSaveOutHeatFurnace Coil_No_Spec 1:("+Coil_No_Spec+")::::"+coilNo[0]); //这里出现的异常情况是板坯号与钢卷号不匹配 String vtemp="OutHeatFurnacePart"; context.put("rs", vtemp); } }else{ //这里返回前台,给出钢卷号不在轧制计划中的提示 logger.logDebug("PosSaveOutHeatFurnace 输入的钢卷号在轧制计划表 TBF02_SPEC_MILL 中不存在! "); String vtemp="PosSaveOutHeatFurnace"; context.put("rs", vtemp); } context.put("MsgChk",MsgChk); return PosBizControlConstants.SUCCESS; } public void SendProg_NIE012070(String SlabNo,String BefProg,String OrdNo,String OrdSeq,Number wgt,String RegId ) { logger.logInfo("PosSAveOutHeatFurnace---> wgt:"+wgt ); // BigDecimal wgt = new BigDecimal(); PosContext context = new PosContext(); PosMessage message = new PosMESMessageImpl(); String TcId = "NIE012070"; message.setTCID(TcId); message.setObject("MSG_ID",TcId); message.setObject("BEF_ORD_NO",null); message.setObject("BEF_ORD_SEQ",null); message.setObject("ORD_NO",OrdNo); message.setObject("ORD_SEQ",OrdSeq); message.setObject("BEF_PROG_CD",BefProg); message.setObject("PROG_CD","RCB"); message.setObject("MAT_TYPE","TM"); message.setObject("MAT_NO",SlabNo); message.setObject("WGT", wgt ); message.setObject("PGMID","PosSaveOutHeatFur"); message.setObject("REG_ID",RegId); context.setMessage(message); this.processComponent(PosConstants.CREATE_MESSAGE, context); String transactionCode = context.getMessage().getTC(); logger.logInfo("PosSAveOutHeatFurnace---> transactionCode:("+transactionCode+")" ); message.setTCID(TcId); String serviceName = "NIE012070"; String SERVICE_POSTFIX = "-service"; context.put(PosBizControlConstants.SERVICE_NAME, serviceName + SERVICE_POSTFIX); context.setMessage(message); PosBizControlIF controller = PosBizProvider.getController(); controller.doSubController(context,false); logger.logInfo("PosSAveOutHeatFurnace---> NIE012070 TC SendProgress end" ); } 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); } }