package xin.glue.ui.H.H02; 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; /* * desc:板坯缺号,修改,插入 * author:王小炎 * date:2008-10-7 */ public class PosSaveMissionNo extends PosActivity { public String runActivity(PosContext context) { // 从页面获取参数数据,供更新页面使用 String[] slabNo = (String[])context.get("SLAB_NO"); String[] coilNo = (String[])context.get("COIL_NO"); String[] missionDtime = (String[])context.get("MISSNO_DTIME"); String[] missionClf = (String[])context.get("MISSNO_CLF"); String[] missionCauseCd = (String[])context.get("MISSNO_CAUSE_CD"); String[] WkShift = (String[])context.get("WK_SHIFT3"); String[] WkGroup = (String[])context.get("WK_GROUP3"); String[] RegId = (String[])context.get("WK_EMP_NO3"); //轧回宽度 String[] MISSNO_WTH = (String[])context.get("MISSNO_WTH"); //轧回厚度 String[] MISSNO_THK = (String[])context.get("MISSNO_THK"); //轧回板坯放入辊道位置 String[] MISSNO_YARD = (String[])context.get("MISSNO_YARD"); //炉前取消坯入库的垛位 String[] MISSNO_SLAB = (String[])context.get("MISSNO_SLAB"); //登陆用户名 String[] REG_ID = (String[])context.get("REG_ID"); //这里做为是否调用品质的标志 String RHF_STAT = null; String MsgChk = null; logger.logInfo("PosSaveMissionNo slabNo[0] 1:("+slabNo[0]+")"+coilNo[0]); //这里判断板坯号与钢卷号是否在轧制计划中匹配,不匹配的话给予相应的提示 PosParameter parama = new PosParameter(); parama.setWhereClauseParameter(0,slabNo[0]); parama.setWhereClauseParameter(1,coilNo[0]); PosRowSet SpecMillVoa = getDao("mesdao").find("NIH020020_SPEC_MILL.select", parama); if (SpecMillVoa.hasNext()) { PosRow specMillROWa = SpecMillVoa.next(); String SpecCoilNo = (String)specMillROWa.getAttribute("COIL_NO"); if(SpecCoilNo.equals(coilNo[0]) && SpecCoilNo != null){ //查询结果如果已经有值,则进行修改操作,否则插入 String sql = "select * from TBH02_RHF_MISSNO where slab_no = ? AND coil_no = ?"; PosParameter param1 = new PosParameter(); param1.setWhereClauseParameter(0,slabNo[0] ); param1.setWhereClauseParameter(1,coilNo[0] ); PosRowSet rowset0 = getDao("mesdao").findByQueryStatement(sql, param1); PosParameter param3 = new PosParameter(); PosParameter param2 = new PosParameter(); if(rowset0.hasNext()) { //如果是更新吊销实际,说明多次使用吊销 RHF_STAT = "2"; param3.setWhereClauseParameter(0,coilNo[0]); param3.setWhereClauseParameter(1,missionDtime[0]); param3.setWhereClauseParameter(2,missionClf[0]); param3.setWhereClauseParameter(3,missionCauseCd[0]); param3.setWhereClauseParameter(4,WkShift[0]); param3.setWhereClauseParameter(5,WkGroup[0]); param3.setWhereClauseParameter(6,RegId[0]); param3.setWhereClauseParameter(7,REG_ID[0]); param3.setWhereClauseParameter(8,slabNo[0]); param3.setWhereClauseParameter(9,coilNo[0]); getDao("mesdao").update("UIH020020_06.update", param3); } else { param2.setValueParamter(0,slabNo[0]); param2.setValueParamter(1,coilNo[0]); param2.setValueParamter(2,missionDtime[0]); param2.setValueParamter(3,missionClf[0]); param2.setValueParamter(4,missionCauseCd[0]); param2.setValueParamter(5,WkShift[0]); param2.setValueParamter(6,WkGroup[0]); param2.setValueParamter(7,RegId[0]); param2.setValueParamter(8,REG_ID[0]); getDao("mesdao").insert("UIH020020_05.insert",param2); } //更新tbg02_slab_comm表 PosParameter param0 = new PosParameter(); param0.setWhereClauseParameter(0, "2"); param0.setWhereClauseParameter(1, missionClf[0]); param0.setWhereClauseParameter(2, missionCauseCd[0]); param0.setWhereClauseParameter(3, missionDtime[0]); param0.setWhereClauseParameter(4, RegId[0]); param0.setWhereClauseParameter(5, slabNo[0]); getDao("mesdao").update("UIH020020_04.update", param0); //调用存货异动点存储过程 //ProduceFactory PD= new ProduceFactory(); //PD.ErpDataCover("HSLAB", slabNo[0],"11AZ","0","O",RegId[0],"加回轧回"); //如果出现多次吊销的情况,只在第一次的时候给予处理 PosParameter param9 = new PosParameter(); String sql9 = "select RHF_STAT from TBH02_REHEATFUR where slab_no = ? and coil_no = ? "; param9.setWhereClauseParameter(0, slabNo[0]); param9.setWhereClauseParameter(1, coilNo[0]); //这里做为是否调用品质的标志 String slab_stat = null; PosRowSet rowset9 = getDao("mesdao").findByQueryStatement(sql9, param9); if(rowset9.hasNext()){ PosRow row9 = rowset9.next(); slab_stat = (String) row9.getAttribute("RHF_STAT"); if(!slab_stat.equals("3")){ //调用存货异动点存储过程 ProduceFactory PD= new ProduceFactory(); PD.ErpDataCover("HSLAB", slabNo[0],"11AZ","0","O","人工吊销","加回轧回"); } } PosParameter param4 = new PosParameter(); //TL 缺号,这里用板坯号和钢卷号作为联合主键。为了处理板坯回送的情况 param4.setWhereClauseParameter(0, "3"); param4.setWhereClauseParameter(1, slabNo[0]); param4.setWhereClauseParameter(2, coilNo[0]); getDao("mesdao").update("UIH020020_07.update", param4); // TBH02_COIL_COMM UPDATE PosParameter param8 = new PosParameter(); param8.setWhereClauseParameter(0, ""); param8.setWhereClauseParameter(1,"S"); param8.setWhereClauseParameter(2,missionCauseCd[0]); param8.setWhereClauseParameter(3,missionDtime[0]); param8.setWhereClauseParameter(4, coilNo[0]); //改变板坯公共表中的板坯状态信息 getDao("mesdao").update("NIH020030_COIL.update", param8); if(!MISSNO_WTH[0].equals("") && MISSNO_WTH[0] != null && !MISSNO_THK[0].equals("") && MISSNO_THK[0] != null){ //只有轧回坯才能够改变板坯的宽度和厚度 if(missionClf[0].equals("3")){ //这里根据体积不变的原则来改变板坯长度 //这里先要取出板坯的以前宽度、厚度、长度、再通过现在的宽度、厚度来反算长度 Number slab_THK_TMP = null; Number slab_WTH_TMP = null; Number slab_LEN_TMP = null; String SlabLth = null; PosParameter paramx = new PosParameter(); String sqlCalx = "select A.SLAB_THK,A.SLAB_WTH,A.SLAB_LEN from tbg02_slab_comm A WHERE A.SLAB_NO = ?"; paramx.setWhereClauseParameter(0, slabNo[0]); PosRowSet VoX = getDao("mesdao").findByQueryStatement(sqlCalx, paramx); if(VoX.hasNext()){ PosRow RowX = VoX.next(); slab_THK_TMP = (Number) RowX.getAttribute("SLAB_THK"); slab_WTH_TMP = (Number) RowX.getAttribute("SLAB_WTH"); slab_LEN_TMP = (Number) RowX.getAttribute("SLAB_LEN"); } String sqlCal = "SELECT TO_CHAR(ROUND((?*?*?)/(?*?),1)) COIL_LTH from dual "; PosParameter paramu = new PosParameter(); paramu.setWhereClauseParameter(0,slab_THK_TMP); paramu.setWhereClauseParameter(1,slab_WTH_TMP); paramu.setWhereClauseParameter(2,slab_LEN_TMP); paramu.setWhereClauseParameter(3,MISSNO_WTH[0]); paramu.setWhereClauseParameter(4,MISSNO_THK[0]); PosRowSet calVo = getDao("mesdao").findByQueryStatement(sqlCal, paramu); if (calVo.hasNext()) { PosRow calROW = calVo.next(); SlabLth = (String)calROW.getAttribute("COIL_LTH"); logger.logInfo("PosSaveMissionNo 轧回板坯长度的计算公式:slab_thk*slab_wth*slab_len/coil_thk*coil_wth 单位为mm"); logger.logInfo("PosSaveMissionNo 轧回板坯长度为空的情况下,长度为 :"+SlabLth); } //这里用来处理轧回板坯入库的相应信息 PosParameter param88 = new PosParameter(); param88.setWhereClauseParameter(0, MISSNO_WTH[0]); param88.setWhereClauseParameter(1, MISSNO_THK[0]); param88.setWhereClauseParameter(2, SlabLth); param88.setWhereClauseParameter(3, slabNo[0]); getDao("mesdao").update("UIH020020_09.update", param88); } } if(!MISSNO_YARD[0].equals("") && MISSNO_YARD[0] != null){ //这里加回和轧回可以录入相应的滚道位置 if(missionClf[0].equals("2") || missionClf[0].equals("3")){ PosParameter param77 = new PosParameter(); param77.setWhereClauseParameter(0, slabNo[0]); param77.setWhereClauseParameter(1, RegId[0]); param77.setWhereClauseParameter(2, MISSNO_YARD[0]); getDao("mesdao").update("UIH020020_10.update", param77); } } //这里把炉前取消的坯子录入临时垛位 if(MISSNO_SLAB[0] != null && !MISSNO_SLAB[0].equals("")){ //只有炉前取消的坯子可以入临时垛位 if(missionClf[0].equals("1")){ PosParameter param99 = new PosParameter(); param99.setWhereClauseParameter(0, slabNo[0]); param99.setWhereClauseParameter(1, RegId[0]); param99.setWhereClauseParameter(2, MISSNO_SLAB[0].substring(0, 3)); param99.setWhereClauseParameter(3, MISSNO_SLAB[0].substring(3, MISSNO_SLAB[0].length())); getDao("mesdao").update("UIH020020_11.update", param99); } } //调用存货异动点存储过程 //ProduceFactory PD= new ProduceFactory(); //PD.ErpDataCover("HSLAB", slabNo[0],"11AZ","0","O",RegId[0],"加回轧回"); //与NIH同步,改变轧制计划内容 //由计划修改,SendProg_NIF024060 // PosParameter param33 = new PosParameter(); // param33.setWhereClauseParameter(0,slabNo[0]); // param33.setWhereClauseParameter(1,coilNo[0]); // PosRowSet specMillVo = getDao("mesdao").find("NIH020020_SPEC_MILL.select", param33); // if (specMillVo.hasNext()) { // PosRow specMillROW = specMillVo.next(); // Number SLAB_EDT_SEQ = (Number)specMillROW.getAttribute("SLAB_EDT_SEQ"); // // PosParameter param5 = new PosParameter(); // param5.setWhereClauseParameter(0, "C" ); // param5.setWhereClauseParameter(1, slabNo[0] ); // param5.setWhereClauseParameter(2, coilNo[0] ); // getDao("mesdao").update("NIH020020_SPEC_MILL.update", param5); // // PosParameter param6 = new PosParameter(); // param6.setWhereClauseParameter(0, "C" ); // param6.setWhereClauseParameter(1, SLAB_EDT_SEQ ); // getDao("mesdao").update("NIH020020_SPEC_MILL_D.update", param6); // // PosParameter param7 = new PosParameter(); // param7.setWhereClauseParameter(0, "C" ); // param7.setWhereClauseParameter(1, SLAB_EDT_SEQ ); // getDao("mesdao").update("NIH020020_MILL_IDX.update", param7); // } if(RHF_STAT == null){ //这里是清楚轧制计划中的相关板坯 SendProg_NIF024060( slabNo[0] ); //调用品质的存储过程 logger.logInfo("PosSaveMissionNo---> NIB027010 TC sql call" ); CallableStatement PlRtn = getDao("mesdao").getCallableStatement("NIH020020_NIB027010"); logger.logInfo("PosSaveMissionNo---> NIB027010 TC try" ); try { if(PlRtn != null) { PlRtn.setString(1,coilNo[0]); //新增加一个字段,为了废弃的时候使用 PlRtn.setString(2,"S"); 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("PosSaveMissionNo---> NIB027010 TC PlRtn1:["+sRetCode+"]:"+ sRetMsg); } else { logger.logInfo("PosSaveMissionNo---> NIB027010 PlRtn2:"+PlRtn ); } } catch (SQLException e) { throw new PosException(e.getMessage()); }finally { if (PlRtn != null) { try { PlRtn.close(); } catch (SQLException e) { logger.logWarn(e.getMessage(), e); logger.logInfo("PosSaveMissionNo---> NIB027010 SQLException:"+e ); } } } }else{ //吊销过一次的板坯,不能再次调用品质和进程 logger.logInfo("PosSaveMissionNo---> 加热炉多次吊销时不允许调用品质和进程:"+RHF_STAT); } }else{ logger.logInfo("PosSaveMissionNo Coil_No_Spec 1:("+SpecCoilNo+")::::"+coilNo[0]); //这里出现的异常情况是板坯号与钢卷号不匹配 String vtemp="MissionNoPart"; context.put("rs", vtemp); } }else{ logger.logInfo("PosSaveMissionNo Failed "); MsgChk = "NOT"; context.put("MsgChk",MsgChk); } return PosBizControlConstants.SUCCESS; } public void SendProg_NIF024060(String SlabNo ) { logger.logInfo("PosSaveMissionNo SendProg_NIF024060 " ); PosContext context = new PosContext(); PosMessage message = new PosMESMessageImpl(); String TcId = "NIF024060"; message.setTCID(TcId); message.setObject("MSG_ID",TcId); message.setObject("TYPE","C"); message.setObject("FROM",SlabNo); message.setObject("TO",SlabNo); message.setObject("REG_ID","UIH020020"); message.setTCID(TcId); context.setMessage(message); // this.processComponent(PosConstants.CREATE_MESSAGE, context); // String transactionCode = context.getMessage().getTC(); String serviceName = "NIF024060"; String SERVICE_POSTFIX = "-service"; context.put(PosBizControlConstants.SERVICE_NAME, serviceName + SERVICE_POSTFIX); // context.setMessage(message); PosBizControlIF controller = PosBizProvider.getController(); controller.doSubController(context,false); } }