package xin.glue.nui.H.H02; import java.math.BigDecimal; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import xin.glue.ui.common.PosDateFormat; 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-12 * desc:接收在加热炉LEVEL2中所发生的加热炉装炉实绩录入到板坯装炉出炉实绩TABLE中 */ public class XinSaveRhfCharging extends PosActivity { public String runActivity(PosContext context) { logger.logInfo("XinSaveRhfCharging START !!! "); // 获取从二级接收过来的数据 PosMessage message = context.getMessage(); String coilNo_L2 = (String)message.get("COIL_NO"); String slabNo = (String)message.get("SLAB_NO"); String devno = (String)message.get("DEVNO"); String RowNum = (String)message.get("ROW_NUM"); String chargingDtime = (String)message.get("CHARGING_DTIME"); //改为String 与接口表对应 String chrgingBefWgt = (String)message.get("CHRGING_BEF_WGT"); String chrgingBefTemp = (String)message.get("CHRGING_BEF_TEMP"); Number SlabWgt = null; String BefProgCd = null; String OrdNo = null; String OrdSeq = null; String sShift = null; //这里需要进行卷号的转换,发给加热炉二级的变成了实际卷号。所以收到的电文也是实际卷号,转换成计划卷号就可以了。 // 计划钢卷号 String coilNo = null; // 在执行相应的程序,把数据写入表中 PosParameter paramAA = new PosParameter(); paramAA.setWhereClauseParameter(0, coilNo_L2); //这里是实际钢卷号 logger.logInfo("XinSaveRhfCharging OLD_SAMPL_NO !!! "+coilNo_L2); PosRowSet CoilNoVo = getDao("mesdao").find("NIH020050_06.select", paramAA); // 查询出计划卷号的情况下,处理相应的业务类数据 if(CoilNoVo.hasNext()){ PosRow CoilNoRow = CoilNoVo.next(); coilNo = (String) CoilNoRow.getAttribute("COIL_NO"); //这里是计划钢卷号 logger.logInfo("XinSaveRhfCharging COIL_NO !!! "+coilNo); if ( chargingDtime.equals("") || chargingDtime == null ) { DateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss"); chargingDtime = 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(chargingDtime.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(dc_off_dtime); // 这里需要获取昨天和明天的时间 String ZDate = null; String MDate = null; // 当前时间加一天 MDate = dateFormat.AddDateFunc(chargingDtime,1); //当前时间减一天 ZDate = dateFormat.AddDateFunc(chargingDtime,-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, chargingDtime.substring(0,6)); paramA.setWhereClauseParameter(1, chargingDtime.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.logInfo(" 两班早班当前的班次班组!! "+sShift+":"+sGroup+"入炉时间:"+chargingDtime); }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.logInfo(" 两班晚班当前的班次班组!! "+sShift+":"+sGroup+"入炉前移时间:"+ZDate); } }else if(null != sShift && sShift.equals("1")){ PosParameter paramA = new PosParameter(); paramA.setWhereClauseParameter(0, chargingDtime.substring(0,6)); paramA.setWhereClauseParameter(1, chargingDtime.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.logInfo(" 两班早班当前的班次班组!! "+sShift+":"+sGroup+"入炉时间:"+chargingDtime); }else{ //不存在 logger.logInfo(" 两班班次班组不存在的情况!! "); } }else{ //三班的情况,产量是从当天零点开始到次日零点 if(null != SHRXM && SHRXM.equals("Y")){ if(null != sShift && sShift.equals("1")){ PosParameter paramA = new PosParameter(); paramA.setWhereClauseParameter(0, chargingDtime.substring(0,6)); paramA.setWhereClauseParameter(1, chargingDtime.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.logInfo(" 三班早班当前的班次班组!! "+sShift+":"+sGroup+"入炉时间:"+chargingDtime); }else if(null != sShift && sShift.equals("2")){ if(hhmi >= SM_EFNMBB && hhmi <= 2400){ PosParameter paramA = new PosParameter(); paramA.setWhereClauseParameter(0, chargingDtime.substring(0,6)); paramA.setWhereClauseParameter(1, chargingDtime.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.logInfo(" 三班中班当前的班次班组!! "+sShift+":"+sGroup+"入炉时间:"+chargingDtime); }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.logInfo(" 三班中班当前的班次班组!! "+sShift+":"+sGroup+"入炉前移时间:"+ZDate); } }else if(null != sShift && sShift.equals("3")){ //中班超过0点,所以晚班就是从当天的凌晨开始的。 PosParameter paramA = new PosParameter(); paramA.setWhereClauseParameter(0, chargingDtime.substring(0,6)); paramA.setWhereClauseParameter(1, chargingDtime.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.logInfo(" 三班晚班当前的班次班组!! "+sShift+":"+sGroup+"入炉时间:"+chargingDtime); } }else{ if(null != sShift && sShift.equals("1")){ PosParameter paramA = new PosParameter(); paramA.setWhereClauseParameter(0, chargingDtime.substring(0,6)); paramA.setWhereClauseParameter(1, chargingDtime.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.logInfo(" 三班早班当前的班次班组!! "+sShift+":"+sGroup+"入炉时间:"+chargingDtime); }else if(null != sShift && sShift.equals("2")){ PosParameter paramA = new PosParameter(); paramA.setWhereClauseParameter(0, chargingDtime.substring(0,6)); paramA.setWhereClauseParameter(1, chargingDtime.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.logInfo(" 三班中班当前的班次班组!! "+sShift+":"+sGroup+"入炉时间:"+chargingDtime); }else if(null != sShift && sShift.equals("3")){ //因为是晚班从昨天开始到今天凌晨,所以今天凌晨的算今天的晚班 if(hhmi >= 0000 && hhmi <= SM_ESNMCC){ PosParameter paramA = new PosParameter(); paramA.setWhereClauseParameter(0, chargingDtime.substring(0,6)); paramA.setWhereClauseParameter(1, chargingDtime.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.logInfo(" 三班晚班当前的班次班组!! "+sShift+":"+sGroup+"入炉时间:"+chargingDtime); }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.logInfo(" 三班晚班当前的班次班组!! "+sShift+":"+sGroup+"入炉时间:"+MDate); } } } } PosParameter param3 = new PosParameter(); param3.setWhereClauseParameter(0, slabNo ); param3.setWhereClauseParameter(1, coilNo ); PosRowSet specVo = getDao("mesdao").find("NIH020020_SPEC_MILL.select", param3); if (specVo.hasNext()) { PosRow specROW = specVo.next(); Number SLAB_EDT_SEQ = (Number)specROW.getAttribute("SLAB_EDT_SEQ"); String STATUS_CD = (String)specROW.getAttribute("STATUS_CD"); if(STATUS_CD.equals("A") || STATUS_CD.equals("B")) { PosParameter param4 = new PosParameter(); param4.setWhereClauseParameter(0, "B" ); param4.setWhereClauseParameter(1, slabNo ); param4.setWhereClauseParameter(2, coilNo ); getDao("mesdao").update("NIH020020_SPEC_MILL.update", param4); PosParameter param5 = new PosParameter(); param5.setWhereClauseParameter(0, "B" ); param5.setWhereClauseParameter(1, SLAB_EDT_SEQ ); getDao("mesdao").update("NIH020020_SPEC_MILL_D.update", param5); PosParameter param6 = new PosParameter(); param6.setWhereClauseParameter(0, "B" ); param6.setWhereClauseParameter(1, SLAB_EDT_SEQ ); getDao("mesdao").update("NIH020020_MILL_IDX.update", param6); logger.logInfo(" jihua !! "); PosParameter param0 = new PosParameter(); param0.setWhereClauseParameter(0,slabNo ); //这里查询板坯公共表,看看板坯公共表中是否存在此板坯信息 PosRowSet rowset5 = getDao("mesdao").find("UIH020020_05.select", param0); if(rowset5.hasNext()) { PosRow row1 = rowset5.next(); SlabWgt = (Number)row1.getAttribute("SLAB_WGT"); BefProgCd = (String)row1.getAttribute("CUR_PROG_CD"); OrdNo = (String)row1.getAttribute("ORD_NO"); OrdSeq = (String)row1.getAttribute("ORD_SEQ"); String ROLL_MANA_NO = null; Number ROLL_SLAB_SEQ = null; PosParameter paramB = new PosParameter(); paramB.setWhereClauseParameter(0,coilNo ); PosRowSet specMillVO = getDao("mesdao").find("NIH020020_02.select", paramB); if(specMillVO.hasNext()) { PosRow specMillROW = specMillVO.next(); ROLL_MANA_NO = (String)specMillROW.getAttribute("ROLL_MANA_NO"); ROLL_SLAB_SEQ = (Number)specMillROW.getAttribute("ROLL_SLAB_SEQ"); } /* * 以板坯号为条件查询加热炉装炉出口实绩table,如果有记录则加热炉装炉出口实绩table update处理 * 否则加热炉装炉出口实绩table insert处理 */ PosParameter param = new PosParameter(); PosParameter param1 = new PosParameter(); param.setWhereClauseParameter(0, slabNo); param.setWhereClauseParameter(1, coilNo); //这里已板坯号和钢卷号作为联合主键,处理板坯回送的状态情况 TL PosRowSet rowset = this.getDao("mesdao").find("NIH020010.select", param); if(rowset.hasNext()) { param1.setWhereClauseParameter(0, devno); param1.setWhereClauseParameter(1, chargingDtime); param1.setWhereClauseParameter(2, chrgingBefWgt); param1.setWhereClauseParameter(3, chrgingBefTemp); param1.setWhereClauseParameter(4, RowNum); param1.setWhereClauseParameter(5, sShift); param1.setWhereClauseParameter(6, sGroup); param1.setWhereClauseParameter(7, ROLL_MANA_NO); param1.setWhereClauseParameter(8, ROLL_SLAB_SEQ); param1.setWhereClauseParameter(9, slabNo); param1.setWhereClauseParameter(10, coilNo); int updateRowCount = this.getDao("mesdao").update("NIH020010.update", param1); } else { param1.setValueParamter(0, slabNo); param1.setValueParamter(1, coilNo); param1.setValueParamter(2, devno); param1.setValueParamter(3, chargingDtime); param1.setValueParamter(4, chrgingBefWgt); param1.setValueParamter(5, chrgingBefTemp); param1.setValueParamter(6, RowNum); param1.setValueParamter(7, sShift); param1.setValueParamter(8, sGroup); param1.setValueParamter(9, ROLL_MANA_NO); param1.setValueParamter(10, ROLL_SLAB_SEQ); int insertRowCount = this.getDao("mesdao").insert("NIH020010.insert", param1); } // TBG02_SLAB_COMM UPDATE CUR_PROG_CD = 'RBB' PosParameter param2 = new PosParameter(); param2.setWhereClauseParameter(0, slabNo ); getDao("mesdao").update("UIH020020_02.update", param2); // RHF ENTRY slab is cleared in Roller table address PosParameter param9 = new PosParameter(); param9.setWhereClauseParameter(0, slabNo ); PosRowSet rollerVo = getDao("mesdao").find("NIH020010_ROLLER.select", param9); while(rollerVo.hasNext()) { PosRow rollerROW = rollerVo.next(); String YardAddr = (String)rollerROW.getAttribute("YARD_ADDR"); PosParameter paramD = new PosParameter(); paramD.setWhereClauseParameter(0, YardAddr ); getDao("mesdao").update("NIH020010_ROLLER.update", paramD); logger.logInfo(" GGGGGGGGGGGGGGGGGGGGGGGGGG !! "); } } else { logger.logInfo("XinSaveRhfCharging---> Slab No is not cutting SLAB_NO==> "+slabNo ); } } else { logger.logInfo("PosSaveInHeatFurnace Failed TBF02_SPEC_MILL STATUS_CD:("+STATUS_CD+")"); } } }else{ // 通过实际钢卷号没有获得计划钢卷号的信息 logger.logInfo("XinSaveRhfCharging OLD_SAMPL_NO - > COIL_NO ERROR "); } logger.logInfo(" ENDDDDDDD !! "); return PosBizControlConstants.SUCCESS; } }