package xin.glue.nui.H.H02; import java.math.BigDecimal; import java.sql.CallableStatement; import java.sql.SQLException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import xin.glue.ui.common.PosDateFormat; 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-13 * desc:接收加热炉LEVEL2中所发生的加热炉出炉实绩录入到板坯装炉出炉实绩TABLE中 */ public class XinSaveRhfExtract extends PosActivity { public String runActivity(PosContext context) { // 获取从二级接收过来的数据 String slabNo = (String)context.get("slabNo"); String coilNo = (String)context.get("coilNo"); String devno = (String)context.get("devno"); String infurHour = (String)context.get("infurHour"); String extractDtime = (String)context.get("extractDtime"); String extractAvgTemp = (String)context.get("extractAvgTemp"); String rehttemp1 = (String)context.get("rehttemp1"); String rehttime1 = (String)context.get("rehttime1"); String rehttemp2 = (String)context.get("rehttemp2"); String rehttime2 = (String)context.get("rehttime2"); String eqHtInfurHour = (String)context.get("eqHtInfurHour"); String eqHtTemp = (String)context.get("eqHtTemp"); String sShift = null; //这里在XinInitRhfOut中已经把真实钢卷号转换成流水号,所以这里不需要再次转换 if ( extractDtime.equals("") || extractDtime == null ) { DateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss"); extractDtime = formatter.format(new Date()); } // 这里的班次的时间段就由基础表维护。可能存在2班或者3班的情况,那么就是有值的就进行判断没有的就是没有设定的。 PosParameter paramSA = new PosParameter(); PosParameter paramSB = new PosParameter(); PosParameter paramSC = new PosParameter(); //这里获取三个班次相应的时间 String sqlA = "SELECT to_number(A.SM_EFNM) SM_EFNM,to_number(A.SM_ESNM) SM_ESNM FROM TBZ00_COMMCD A WHERE A.LG_CD = 'H07001' AND A.SM_CD = '1'"; String sqlB = "SELECT to_number(A.SM_EFNM) SM_EFNM,to_number(A.SM_ESNM) SM_ESNM,A.SHRXM FROM TBZ00_COMMCD A WHERE A.LG_CD = 'H07001' AND A.SM_CD = '2'"; String sqlC = "SELECT to_number(A.SM_EFNM) SM_EFNM,to_number(A.SM_ESNM) SM_ESNM FROM TBZ00_COMMCD A WHERE A.LG_CD = 'H07001' AND A.SM_CD = '3'"; PosRowSet ShiftA = getDao("mesdao").findByQueryStatement(sqlA, paramSA); PosRowSet ShiftB = getDao("mesdao").findByQueryStatement(sqlB, paramSB); PosRowSet ShiftC = getDao("mesdao").findByQueryStatement(sqlC, paramSC); BigDecimal SM_EFNMA = null; BigDecimal SM_ESNMA = null; BigDecimal SM_EFNMB = null; BigDecimal SM_ESNMB = null; //这里是中班是否超过0点指标。如果超过0点就判断早班和晚班的情况,其它为中班。如果不超过0点就判断早班和中班的情况,其它为晚班 String SHRXM = null; BigDecimal SM_EFNMC = null; BigDecimal SM_ESNMC = null; if(ShiftA.hasNext()){ PosRow ShiftAA = ShiftA.next(); SM_EFNMA = (BigDecimal) ShiftAA.getAttribute("SM_EFNM"); SM_ESNMA = (BigDecimal) ShiftAA.getAttribute("SM_ESNM"); } if(ShiftB.hasNext()){ PosRow ShiftBB = ShiftB.next(); SM_EFNMB = (BigDecimal) ShiftBB.getAttribute("SM_EFNM"); SM_ESNMB = (BigDecimal) ShiftBB.getAttribute("SM_ESNM"); SHRXM = (String) ShiftBB.getAttribute("SHRXM"); } if(ShiftC.hasNext()){ PosRow ShiftCC = ShiftC.next(); SM_EFNMC = (BigDecimal) ShiftCC.getAttribute("SM_EFNM"); SM_ESNMC = (BigDecimal) ShiftCC.getAttribute("SM_ESNM"); } int SM_EFNMAA; int SM_ESNMAA; int SM_EFNMBB; int SM_ESNMBB; int SM_EFNMCC; int SM_ESNMCC; int hhmi = Integer.parseInt(extractDtime.substring(8, 12)); if(SM_EFNMA == null){ SM_EFNMAA = 0; }else{ SM_EFNMAA = SM_EFNMA.intValue(); } if(SM_ESNMA == null){ SM_ESNMAA = 0; }else{ SM_ESNMAA = SM_ESNMA.intValue(); } if(SM_EFNMB == null){ SM_EFNMBB = 0; }else{ SM_EFNMBB = SM_EFNMB.intValue(); } if(SM_ESNMB == null){ SM_ESNMBB = 0; }else{ SM_ESNMBB = SM_ESNMB.intValue(); } if(SM_EFNMC == null){ SM_EFNMCC = 0; }else{ SM_EFNMCC = SM_EFNMC.intValue(); } if(SM_ESNMC == null){ SM_ESNMCC = 0; }else{ SM_ESNMCC = SM_ESNMC.intValue(); } //如果出现中班输入为空的情况,说明是三班两倒。就一定会存在早班和晚班,那么只要判断早班即可 if(SM_EFNMB == null || SM_ESNMB == null){ if(hhmi > SM_EFNMAA && hhmi < SM_ESNMAA){ //早班,这里只要判断符合不符合早班的情况即可 sShift = "1"; }else{ sShift = "3"; } }else{ if(null != SHRXM && SHRXM.equals("Y")){ //如果标志为Y,说明中班的结束时间超过0点,这时判断早班和晚班的情况。 if(hhmi > SM_EFNMAA && hhmi < SM_ESNMAA){ sShift = "1"; }else if(hhmi > SM_EFNMCC && hhmi < SM_ESNMCC){ sShift = "3"; }else{ sShift = "2"; } }else{ //如果标志不为Y,说明中班的结束时间没有超过0点,这时判断早班和中班的情况。 if(hhmi > SM_EFNMAA && hhmi < SM_ESNMAA){ sShift = "1"; }else if(hhmi > SM_EFNMBB && hhmi < SM_ESNMBB){ sShift = "2"; }else{ sShift = "3"; } } } // PosDateFormat dateFormat = new PosDateFormat(); // sShift = dateFormat.getShiftT(extractDtime); //这里需要用到天数前移一天和后退一天的共用方法,因为对三班和两班而言中班和晚班都可能存在跨天的情况。跨天后取班组时就要把时间前移 PosDateFormat dateFormat = new PosDateFormat(); // sShift = dateFormat.getShiftT(dc_off_dtime); // 这里需要获取昨天和明天的时间 String ZDate = null; String MDate = null; // 当前时间加一天 MDate = dateFormat.AddDateFunc(extractDtime,1); //当前时间减一天 ZDate = dateFormat.AddDateFunc(extractDtime,-1); String sGroup = null; //判断,跨天的班组需要前移时间,这样才能对得上班组 if(SM_EFNMB == null || SM_ESNMB == null){ //两班的情况,这里需要对时间进行前移。把产量计算的昨天晚班的产量 if(null != sShift && sShift.equals("3")){ //这里还需要判断,当前时间是大于晚班开始时间小于2400还是大于0000小于结束时间 if(hhmi >= SM_EFNMCC && hhmi <= 2400){ PosParameter paramA = new PosParameter(); paramA.setWhereClauseParameter(0, extractDtime.substring(0,6)); paramA.setWhereClauseParameter(1, extractDtime.substring(6,8)); paramA.setWhereClauseParameter(2, sShift); paramA.setWhereClauseParameter(3, "H"); PosRowSet groupVO = this.getDao("mesdao").find("NIG020210_SHIFT.select", paramA); if (groupVO.hasNext()){ PosRow groupROW = groupVO.next(); sGroup = (String)groupROW.getAttribute("GR_GROUP_CD"); } logger.logDebug(" 两班早班当前的班次班组!! "+sShift+":"+sGroup+"出炉时间:"+extractDtime); }else if(hhmi >= 0000 && hhmi <= SM_ESNMCC){ PosParameter paramA = new PosParameter(); paramA.setWhereClauseParameter(0, ZDate.substring(0,6)); paramA.setWhereClauseParameter(1, ZDate.substring(6,8)); paramA.setWhereClauseParameter(2, sShift); paramA.setWhereClauseParameter(3, "H"); PosRowSet groupVO = this.getDao("mesdao").find("NIG020210_SHIFT.select", paramA); if (groupVO.hasNext()){ PosRow groupROW = groupVO.next(); sGroup = (String)groupROW.getAttribute("GR_GROUP_CD"); } logger.logDebug(" 两班晚班当前的班次班组!! "+sShift+":"+sGroup+"出炉前移时间:"+ZDate); } }else if(null != sShift && sShift.equals("1")){ PosParameter paramA = new PosParameter(); paramA.setWhereClauseParameter(0, extractDtime.substring(0,6)); paramA.setWhereClauseParameter(1, extractDtime.substring(6,8)); paramA.setWhereClauseParameter(2, sShift); paramA.setWhereClauseParameter(3, "H"); PosRowSet groupVO = this.getDao("mesdao").find("NIG020210_SHIFT.select", paramA); if (groupVO.hasNext()){ PosRow groupROW = groupVO.next(); sGroup = (String)groupROW.getAttribute("GR_GROUP_CD"); } logger.logDebug(" 两班早班当前的班次班组!! "+sShift+":"+sGroup+"出炉时间:"+extractDtime); }else{ //不存在 logger.logDebug(" 两班班次班组不存在的情况!! "); } }else{ //三班的情况 if(null != SHRXM && SHRXM.equals("Y")){ if(null != sShift && sShift.equals("1")){ PosParameter paramA = new PosParameter(); paramA.setWhereClauseParameter(0, extractDtime.substring(0,6)); paramA.setWhereClauseParameter(1, extractDtime.substring(6,8)); paramA.setWhereClauseParameter(2, sShift); paramA.setWhereClauseParameter(3, "H"); PosRowSet groupVO = this.getDao("mesdao").find("NIG020210_SHIFT.select", paramA); if (groupVO.hasNext()){ PosRow groupROW = groupVO.next(); sGroup = (String)groupROW.getAttribute("GR_GROUP_CD"); } logger.logDebug(" 三班早班当前的班次班组!! "+sShift+":"+sGroup+"出炉时间:"+extractDtime); }else if(null != sShift && sShift.equals("2")){ if(hhmi >= SM_EFNMBB && hhmi <= 2400){ PosParameter paramA = new PosParameter(); paramA.setWhereClauseParameter(0, extractDtime.substring(0,6)); paramA.setWhereClauseParameter(1, extractDtime.substring(6,8)); paramA.setWhereClauseParameter(2, sShift); paramA.setWhereClauseParameter(3, "H"); PosRowSet groupVO = this.getDao("mesdao").find("NIG020210_SHIFT.select", paramA); if (groupVO.hasNext()){ PosRow groupROW = groupVO.next(); sGroup = (String)groupROW.getAttribute("GR_GROUP_CD"); } logger.logDebug(" 三班中班当前的班次班组!! "+sShift+":"+sGroup+"出炉时间:"+extractDtime); }else if(hhmi >= 0000 && hhmi <= SM_ESNMBB){ PosParameter paramA = new PosParameter(); paramA.setWhereClauseParameter(0, ZDate.substring(0,6)); paramA.setWhereClauseParameter(1, ZDate.substring(6,8)); paramA.setWhereClauseParameter(2, sShift); paramA.setWhereClauseParameter(3, "H"); PosRowSet groupVO = this.getDao("mesdao").find("NIG020210_SHIFT.select", paramA); if (groupVO.hasNext()){ PosRow groupROW = groupVO.next(); sGroup = (String)groupROW.getAttribute("GR_GROUP_CD"); } logger.logDebug(" 三班中班当前的班次班组!! "+sShift+":"+sGroup+"出炉前移时间:"+ZDate); } }else if(null != sShift && sShift.equals("3")){ //中班超过0点,晚班就是当天的凌晨开始的 PosParameter paramA = new PosParameter(); paramA.setWhereClauseParameter(0, extractDtime.substring(0,6)); paramA.setWhereClauseParameter(1, extractDtime.substring(6,8)); paramA.setWhereClauseParameter(2, sShift); paramA.setWhereClauseParameter(3, "H"); PosRowSet groupVO = this.getDao("mesdao").find("NIG020210_SHIFT.select", paramA); if (groupVO.hasNext()){ PosRow groupROW = groupVO.next(); sGroup = (String)groupROW.getAttribute("GR_GROUP_CD"); } logger.logDebug(" 三班晚班当前的班次班组!! "+sShift+":"+sGroup+"出炉时间:"+extractDtime); } }else{ if(null != sShift && sShift.equals("1")){ PosParameter paramA = new PosParameter(); paramA.setWhereClauseParameter(0, extractDtime.substring(0,6)); paramA.setWhereClauseParameter(1, extractDtime.substring(6,8)); paramA.setWhereClauseParameter(2, sShift); paramA.setWhereClauseParameter(3, "H"); PosRowSet groupVO = this.getDao("mesdao").find("NIG020210_SHIFT.select", paramA); if (groupVO.hasNext()){ PosRow groupROW = groupVO.next(); sGroup = (String)groupROW.getAttribute("GR_GROUP_CD"); } logger.logDebug(" 三班早班当前的班次班组!! "+sShift+":"+sGroup+"出炉时间:"+extractDtime); }else if(null != sShift && sShift.equals("2")){ PosParameter paramA = new PosParameter(); paramA.setWhereClauseParameter(0, extractDtime.substring(0,6)); paramA.setWhereClauseParameter(1, extractDtime.substring(6,8)); paramA.setWhereClauseParameter(2, sShift); paramA.setWhereClauseParameter(3, "H"); PosRowSet groupVO = this.getDao("mesdao").find("NIG020210_SHIFT.select", paramA); if (groupVO.hasNext()){ PosRow groupROW = groupVO.next(); sGroup = (String)groupROW.getAttribute("GR_GROUP_CD"); } logger.logDebug(" 三班中班当前的班次班组!! "+sShift+":"+sGroup+"出炉时间:"+extractDtime); }else if(null != sShift && sShift.equals("3")){ if(hhmi >= 0000 && hhmi <= SM_ESNMCC){ PosParameter paramA = new PosParameter(); paramA.setWhereClauseParameter(0, extractDtime.substring(0,6)); paramA.setWhereClauseParameter(1, extractDtime.substring(6,8)); paramA.setWhereClauseParameter(2, sShift); paramA.setWhereClauseParameter(3, "H"); PosRowSet groupVO = this.getDao("mesdao").find("NIG020210_SHIFT.select", paramA); if (groupVO.hasNext()){ PosRow groupROW = groupVO.next(); sGroup = (String)groupROW.getAttribute("GR_GROUP_CD"); } logger.logDebug(" 三班晚班当前的班次班组!! "+sShift+":"+sGroup+"出炉时间:"+extractDtime); }else if(hhmi >= SM_EFNMCC && hhmi <= 2400){ PosParameter paramA = new PosParameter(); paramA.setWhereClauseParameter(0, MDate.substring(0,6)); paramA.setWhereClauseParameter(1, MDate.substring(6,8)); paramA.setWhereClauseParameter(2, sShift); paramA.setWhereClauseParameter(3, "H"); PosRowSet groupVO = this.getDao("mesdao").find("NIG020210_SHIFT.select", paramA); if (groupVO.hasNext()){ PosRow groupROW = groupVO.next(); sGroup = (String)groupROW.getAttribute("GR_GROUP_CD"); } logger.logDebug(" 三班晚班当前的班次班组!! "+sShift+":"+sGroup+"出炉时间:"+MDate); } } } } Number SlabWgt = null; String BefProgCd = null; String OrdNo = null; String OrdSeq = null; PosParameter param6 = new PosParameter(); param6.setWhereClauseParameter(0,slabNo); PosRowSet rowset5 = getDao("mesdao").find("UIH020020_05.select", param6); if(rowset5.hasNext()) { PosRow row1 = rowset5.next(); SlabWgt = (Number)row1.getAttribute("SLAB_WGT"); OrdNo = (String)row1.getAttribute("ORD_NO"); OrdSeq = (String)row1.getAttribute("ORD_SEQ"); BefProgCd = "RBB"; /* * 以板坯号为条件查询加热炉装炉出口实绩table TBH02_REHEATFUR,如果有记录则加热炉装炉出口实绩table update处理 * 否则加热炉装炉出口实绩table insert处理 */ PosParameter param = new PosParameter(); PosParameter param1 = new PosParameter(); param.setWhereClauseParameter(0, slabNo); param.setWhereClauseParameter(1, coilNo); //用板坯号和钢卷号做为联合主键,可以处理板坯在缺号处理后再次出炉或者入炉的情况 //这里通过RHF_STAT判断是否调用品质,没有出炉前为1。出炉以后就为2 PosRowSet rowset = this.getDao("mesdao").find("NIH020020_01.select", param); //加热炉状态 String RHF_STAT = null; if(rowset.hasNext()){ PosRow row = rowset.next(); RHF_STAT = (String) row.getAttribute("RHF_STAT"); logger.logDebug("PosSAveOutHeatFurnace-后台U--> 加热炉状态:"+RHF_STAT); //通过上面的查询判断入出实际表中是否有值,这里钢卷号不为空所以不改变SQL param1.setWhereClauseParameter(0, coilNo); param1.setWhereClauseParameter(1, devno); param1.setWhereClauseParameter(2, infurHour); param1.setWhereClauseParameter(3, extractDtime); param1.setWhereClauseParameter(4, extractAvgTemp); param1.setWhereClauseParameter(5, rehttemp1); param1.setWhereClauseParameter(6, rehttime1); param1.setWhereClauseParameter(7, rehttemp2); param1.setWhereClauseParameter(8, rehttime2); param1.setWhereClauseParameter(9, eqHtInfurHour); param1.setWhereClauseParameter(10, eqHtTemp); param1.setWhereClauseParameter(11, sShift); param1.setWhereClauseParameter(12, sGroup); param1.setWhereClauseParameter(13, slabNo); param1.setWhereClauseParameter(14, coilNo); this.getDao("mesdao").update("NIH020020_01.update", param1); }else{ PosRow row = rowset.next(); RHF_STAT = (String) row.getAttribute("RHF_STAT"); logger.logDebug("PosSAveOutHeatFurnace-后台I--> 加热炉状态:"+RHF_STAT); param1.setValueParamter(0, slabNo); param1.setValueParamter(1, coilNo); param1.setValueParamter(2, devno); param1.setValueParamter(3, infurHour); param1.setValueParamter(4, extractDtime); param1.setValueParamter(5, extractAvgTemp); param1.setValueParamter(6, rehttemp1); param1.setValueParamter(7, rehttime1); param1.setValueParamter(8, rehttemp2); param1.setValueParamter(9, rehttime2); param1.setValueParamter(10, eqHtInfurHour); param1.setValueParamter(11, eqHtTemp); param1.setValueParamter(12, sShift); param1.setValueParamter(13, sGroup); this.getDao("mesdao").insert("NIH020020_01.insert", param1); } PosParameter param2 = new PosParameter(); param2.setWhereClauseParameter(0, "NIH020020"); param2.setWhereClauseParameter(1, slabNo); //加热炉出炉,改变板坯公共表中的板坯状态 getDao("mesdao").update("UIH020020_03.update", param2); String RegId = "RHF LEVEL2"; //判断加热炉状态,并且决定是否调用品质 if(RHF_STAT.equals("1")){ //MODIFY BY WXY 20111121 //SendProg_NIE012070( slabNo ,BefProgCd,OrdNo,OrdSeq,SlabWgt,RegId ); //SendProg_NIE012080(); //Sampling Direction making call /* logger.logInfo("PosSAveOutHeatFurnace---> NIB027010 TC sql call" ); CallableStatement PlRtn = getDao("mesdao").getCallableStatement("NIH020020_NIB027010"); logger.logInfo("PosSAveOutHeatFurnace---> NIB027010 TC try" ); try { if(PlRtn != null) { PlRtn.setString(1,coilNo); //新增加一个字段,为了废弃的时候使用 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); } else { logger.logInfo("PosSAveOutHeatFurnace---> 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("PosSAveOutHeatFurnace---> NIB027010 SQLException:"+e ); } } } */ }else{ //不在入炉状态的板坯,不能调用品质的存储过程 logger.logDebug("PosSAveOutHeatFurnace-后台---> 多次出炉的情况,不调用品质和进程 :"+RHF_STAT); } } else { logger.logDebug("PosSAveOutHeatFurnace--->Slab No is Not Cutting SLAB_NO:"+slabNo ); } return PosBizControlConstants.SUCCESS; } public void SendProg_NIE012070(String SlabNo,String BefProg,String OrdNo,String OrdSeq,Number wgt,String RegId ) { // 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","NIH020020"); message.setObject("REG_ID",RegId); context.setMessage(message); this.processComponent(PosConstants.CREATE_MESSAGE, context); String transactionCode = context.getMessage().getTC(); 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.logDebug("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); } }