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.ProduceFactory; import com.posdata.glue.PosException; import com.posdata.glue.biz.activity.PosActivity; import com.posdata.glue.biz.constants.PosBizControlConstants; 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.PosMessage; /* * author:王小炎 * date:2008-10-17 * desc:接收LEVEL2中所发生的热轧实绩,将相应的轧制编制信息 TBF02_SPEC_MILL,轧制编制详细信息 TBF02_SPEC_MILL_D * 录入到TBH02_COIL_COMM,TBH02_COIL_COMM_D中 */ public class PosSaveMillToCoilComm extends PosActivity { public String runActivity(PosContext context) { // 获取从二级接收过来的数据 PosMessage message = context.getMessage(); String MSG_DATE = (String)message.get("MSG_DATE"); String slabNo = (String)message.get("SLAB_NO"); String coilNo_L2 = (String)message.get("COIL_NO"); BigDecimal coil_wgt_l2 = (BigDecimal)message.get("COIL_WGT"); //62 钢卷重量 //64 钢卷内径 String coil_outdia = (String)message.get("COIL_OUTDIA"); //65 钢卷外径 String coil_len = (String)message.get("COIL_LEN"); //66 钢卷长度 String dc_no = (String)message.get("DC_NO"); //59 卷取机号 String dc_on_dtime = (String)message.get("DC_ON_DTIME"); //60 开始卷取时刻 String dc_off_dtime = (String)message.get("DC_OFF_DTIME"); //61 结束卷取时刻 //这里钢卷的宽度、厚度应该取轧制的平均宽度、厚度。原先取的是额定的轧制宽度厚度 //这里轧制时间应该取卷取结束时间,这里原先取的是电文时间 090829 TL 修改提示 String fm_ext_strip_thk = (String)message.get("FM_EXT_STRIP_THK_AVG"); //22 额定轧制厚度 String fm_ext_strip_wth = (String)message.get("FM_EXT_STRIP_WTH_AVG"); //27 额定轧制宽度 //计算板坯的理论重量,在二级给不出重量的时候使用 BigDecimal coil_wgt = null; String nextTrans = PosBizControlConstants.SUCCESS; //计划钢卷号 String coilNo = null; String currDate = null; //卷曲结束时间为空的时候取默认时间 if(dc_off_dtime.length() == 0 ){ DateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss"); currDate = formatter.format(new Date()); dc_off_dtime = currDate; } //这里从二级接收过来的卷号为实际卷号,为了能够解析数据到实际表。把实际钢卷号转换为计划钢卷号。 //在执行相应的程序,把数据写入表中 PosParameter paramAA = new PosParameter(); paramAA.setWhereClauseParameter(0, coilNo_L2); //这里是实际钢卷号 logger.logDebug("PosSaveMillToCoilComm 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.logDebug("PosSaveMillToCoilComm COIL_NO !!! "+coilNo); // SLAB REJECT CHECK String slabsql0 = "SELECT SLAB_NO from TBH02_RHF_MISSNO WHERE SLAB_NO = ? AND COIL_NO = ?"; PosParameter param10 = new PosParameter(); param10.setWhereClauseParameter(0,slabNo); param10.setWhereClauseParameter(1,coilNo); PosRowSet slabrejVo = getDao("mesdao").findByQueryStatement(slabsql0, param10); if(slabrejVo.hasNext()) { logger.logDebug("PosSaveMillToCoilComm SLAB REJECT !!! "); nextTrans = "failure"; return nextTrans; } // COIL REJECT CHECK String coilsql0 = "SELECT MISSNO_CLF_CD from TBH02_COIL_COMM WHERE MISSNO_CLF_CD IS NOT NULL AND SLAB_NO = ? AND COIL_NO = ?"; PosParameter paramA = new PosParameter(); paramA.setWhereClauseParameter(0,slabNo); paramA.setWhereClauseParameter(1,coilNo); PosRowSet coilrejVo = getDao("mesdao").findByQueryStatement(coilsql0, paramA); if(coilrejVo.hasNext()) { logger.logDebug("PosSaveMillToCoilComm COIL REJECT !!! "); nextTrans = "failure"; return nextTrans; } /* * 从TBF02_SPEC_MILL中取得被 SELECT的轧钢参数table * 轧钢参数data编辑 ( COIL公用 <-轧钢参数data) * 牌号 .,标准号, 交货期, 合同号, 订单号, 订单用途代码, 产品代码 订单去向 * 需要插入到TBH02_COIL_COMM表中 * 板坯编制号用于查询TBF02_SPEC_MILL_D表时 作为查询条件 */ String stlGrd = ""; //牌号 String specstlGrd = ""; //真实牌号 String specAbbsym = ""; //标准号 String delvReqData = ""; //交货期 String ordNo = ""; //合同号 String ordSeq = ""; //订单号 String route = ""; //订单去向 BigDecimal slabEdtSeq = null; //板坯编制号,TBF02_SPEC_MILL表主键 String OrdCustCd = ""; String DestCd = ""; BigDecimal spec_coil_india = null; BigDecimal spec_coil_outdia = null; /* * 从TBG02_SLAB_COMM中取得 产品代码 需要插入到TBH02_COIL_COMM表中 */ String prodnmCd = ""; //产品代码 /* * 从TBF02_SPEC_MILL_D中取得被 SELECT的轧钢参数详细table * 轧钢参数详细data编辑 (COIL详细 <- 轧钢参数详细data) */ 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 = ""; //订单余才区分 String statusCd = ""; //状态区分 String SpmProcYn = null; String OrdUseCd = null; //订单用途代码 String PathMillCd = null; String PackMethod = null; PosParameter param0 = new PosParameter(); PosParameter param1 = new PosParameter(); PosParameter param2 = new PosParameter(); PosParameter param3 = new PosParameter(); PosParameter param4 = new PosParameter(); PosParameter param5 = new PosParameter(); // 从TBH02_SPEC_MILL中取得数据 需要插入到TBH02_COIL_COMM表中 param0.setWhereClauseParameter(0, slabNo); param0.setWhereClauseParameter(1, coilNo); PosRowSet rowset0 = this.getDao("mesdao").find("NIH020050_02.select", param0); if(rowset0.hasNext()) { PosRow row0 = rowset0.next(); stlGrd = (String)row0.getAttribute("STL_GRD"); //牌号 specstlGrd = (String)row0.getAttribute("SPEC_STL_GRD"); //真实牌号 specAbbsym = (String)row0.getAttribute("SPEC_ABBSYM"); //标准号 delvReqData = (String)row0.getAttribute("DELV_REQ_DATE"); //交货期 ordNo = (String)row0.getAttribute("ORD_NO"); //合同号 ordSeq = (String)row0.getAttribute("ORD_SEQ"); //订单号 OrdUseCd = (String)row0.getAttribute("ORD_USEAGE_CD"); //订单用途代码 route = (String)row0.getAttribute("ROUTE"); //订单去向 slabEdtSeq = (BigDecimal)row0.getAttribute("SLAB_EDT_SEQ"); //板坯编制号 OrdCustCd = (String)row0.getAttribute("ORD_CUST_CD"); //客户代码 DestCd = (String)row0.getAttribute("DEST_CD"); //目的地代码 SpmProcYn = (String)row0.getAttribute("SPM_PROC_YN"); //平整分卷指定判断 PathMillCd = (String)row0.getAttribute("PATH_MILL_CD"); //轧制工艺流程 PackMethod = (String)row0.getAttribute("PACK_METHOD"); //包装方法 spec_coil_india = (BigDecimal)row0.getAttribute("ORD_INDIA"); spec_coil_outdia = (BigDecimal)row0.getAttribute("ORD_OUTDIA"); ordThk = (BigDecimal)row0.getAttribute("ORD_THK"); ordWth = (BigDecimal)row0.getAttribute("ORD_WTH"); ordWgt = (BigDecimal)row0.getAttribute("ORD_WGT"); }else{ logger.logDebug("XinSaveMillResult TBF02_spec_mill unmatch coil_no and slab_no !!! "); nextTrans = "failure"; return nextTrans; } String SpmYn = null; if (SpmProcYn != null && SpmProcYn.equals("Y")) { SpmYn = "1"; } else { SpmYn = ""; } // 从TBG02_SLAB_COMM中取得 产品代码 需要插入到TBH02_COIL_COMM表中 param1.setWhereClauseParameter(0, slabNo); PosRowSet rowset1 = this.getDao("mesdao").find("NIH020050_03.select",param1); if(rowset1.hasNext()) { PosRow row1 = rowset1.next(); prodnmCd = (String)row1.getAttribute("PRODNM_CD"); //产品代码 } //查询板坯重量 String sql0 = "SELECT SLAB_WGT from TBG02_SLAB_COMM WHERE SLAB_NO = ?"; PosParameter param44 = new PosParameter(); param44.setWhereClauseParameter(0,slabNo); PosRowSet slabVo = getDao("mesdao").findByQueryStatement(sql0, param44); Number SlabWgt = null; if(slabVo.hasNext()){ PosRow slabROW = slabVo.next(); SlabWgt = (Number)slabROW.getAttribute("SLAB_WGT"); } //查询成材率数据 String sql11 = "SELECT A.PROC_RATE FROM TBE01_PROC_RATE A WHERE A.PROC_CD = 'R' "; PosParameter param55 = new PosParameter(); //param55.setWhereClauseParameter(0,slabNo); PosRowSet coilVo = getDao("mesdao").findByQueryStatement(sql11, param55); Number PROC_RATE = null; if(coilVo.hasNext()){ PosRow coilRow = coilVo.next(); PROC_RATE = (Number)coilRow.getAttribute("PROC_RATE"); } //计算钢卷理论重量,这里转换为整数型。只要为0就计算 if(coil_wgt_l2.intValue() == 0){ //计算钢卷理论重量 if(SlabWgt != null ){ if(PROC_RATE != null){ String sqlWgt = "SELECT TO_NUMBER(ROUND((?*?)/100,1)) SQL_WGT from dual "; PosParameter paramu = new PosParameter(); paramu.setWhereClauseParameter(0,SlabWgt); paramu.setWhereClauseParameter(1,PROC_RATE); PosRowSet calVo = getDao("mesdao").findByQueryStatement(sqlWgt, paramu); if(calVo.hasNext()){ PosRow calROW = calVo.next(); coil_wgt = (BigDecimal)calROW.getAttribute("SQL_WGT"); logger.logDebug("PosSaveMillToCoilComm 如果钢卷理论重量的计算公式:slab_wgt*PROC_RATE/100 单位为kg"); logger.logDebug("PosSaveMillToCoilComm 如果钢卷重量为空的情况下,理论重量为 :"+coil_wgt); } } } }else{ coil_wgt = coil_wgt_l2; } // 这里需要做出判断,进程代码为SFA\SFB\SFF的时候。不能再次接受电文,修改钢卷公共表的状态 param3.setWhereClauseParameter(0, coilNo); PosRowSet rowset3 = this.getDao("mesdao").find("NIH020050_05.select", param3); if(!rowset3.hasNext()) { PosRow row3 = rowset3.next(); String CUR_PROG_CD = (String) row3.getAttribute("CUR_PROG_CD"); if(CUR_PROG_CD == null || CUR_PROG_CD.equals("") || CUR_PROG_CD.equals("SED")){ param4.setValueParamter(0, coilNo); param4.setValueParamter(1, stlGrd); param4.setValueParamter(2, specAbbsym); param4.setValueParamter(3, delvReqData); param4.setValueParamter(4, ordNo); param4.setValueParamter(5, ordSeq); param4.setValueParamter(6, OrdUseCd); param4.setValueParamter(7, route); param4.setValueParamter(8, prodnmCd); param4.setValueParamter(9, OrdCustCd); param4.setValueParamter(10, DestCd); param4.setValueParamter(11, SpmYn); param4.setValueParamter(12, PathMillCd); param4.setValueParamter(13, PackMethod); param4.setValueParamter(14, slabNo); param4.setValueParamter(15, fm_ext_strip_thk); param4.setValueParamter(16, fm_ext_strip_wth); param4.setValueParamter(17, coil_len); param4.setValueParamter(18, spec_coil_india); param4.setValueParamter(19, coil_outdia); param4.setValueParamter(20, coil_wgt); param4.setValueParamter(21, dc_on_dtime); param4.setValueParamter(22, dc_off_dtime); param4.setValueParamter(23, ordThk); param4.setValueParamter(24, ordWth); param4.setValueParamter(25, spec_coil_india); param4.setValueParamter(26, spec_coil_outdia); param4.setValueParamter(27, ordWgt); //这里轧制时间由电文时间改为卷取时间 param4.setValueParamter(28, dc_off_dtime); param4.setValueParamter(29, specstlGrd); int rowset4 = this.getDao("mesdao").insert("NIH020050_02.insert", param4); //从TBF02_SPEC_MILL_D中取得数据 需要插入到TBH02_COIL_COMM_d表中 param2.setWhereClauseParameter(0, slabEdtSeq); PosRowSet rowset2 = this.getDao("mesdao").find("NIH020050_04.select",param2); while(rowset2.hasNext()) { PosRow row2 = rowset2.next(); coilCutSeq = (String)row2.getAttribute("COIL_CUT_SEQ"); //切割顺序 ordThk = (BigDecimal)row2.getAttribute("ORD_THK"); //订单厚度 ordWth = (BigDecimal)row2.getAttribute("ORD_WTH"); //订单宽度 ordLen = (BigDecimal)row2.getAttribute("ORD_LEN"); //订单长度 ordWgt = (BigDecimal)row2.getAttribute("ORD_WGT"); //订单重量 ordWgtMin = (BigDecimal)row2.getAttribute("ORD_WGT_MIN"); //订单单重下限 ordWgtMax = (BigDecimal)row2.getAttribute("ORD_WGT_MAX"); //订单单重上限 ordIndia = (BigDecimal)row2.getAttribute("ORD_INDIA"); //订单内径 ordOutdia = (BigDecimal)row2.getAttribute("ORD_OUTDIA"); //订单外径 //订单号 ordFl = (String)row2.getAttribute("ORD_FL"); //订单材余材区分 statusCd = (String)row2.getAttribute("STATUS_CD"); //状态区分,没有用到 param5.setValueParamter(0, coilNo); param5.setValueParamter(1, coilCutSeq); param5.setValueParamter(2, ordThk); param5.setValueParamter(3, ordWth); param5.setValueParamter(4, ordLen); param5.setValueParamter(5, ordWgt); param5.setValueParamter(6, ordWgtMin); param5.setValueParamter(7, ordWgtMax); param5.setValueParamter(8, ordIndia); param5.setValueParamter(9, ordOutdia); param5.setValueParamter(10, ordNo); param5.setValueParamter(11, ordSeq); param5.setValueParamter(12, ordFl); int rowset5 = this.getDao("mesdao").insert("NIH020050_03.insert",param5); } } } else { PosRow row3 = rowset3.next(); String CUR_PROG_CD = (String) row3.getAttribute("CUR_PROG_CD"); String ACT_WGT = "0" + row3.getAttribute("ACT_WGT"); if(CUR_PROG_CD == null || CUR_PROG_CD.equals("") || CUR_PROG_CD.equals("SED")){ param4.setValueParamter(0, stlGrd); param4.setValueParamter(1, specAbbsym); param4.setValueParamter(2, delvReqData); param4.setValueParamter(3, ordNo); param4.setValueParamter(4, ordSeq); param4.setValueParamter(5, OrdUseCd); param4.setValueParamter(6, route); param4.setValueParamter(7, prodnmCd); param4.setValueParamter(8, OrdCustCd); param4.setValueParamter(9, DestCd); param4.setValueParamter(10, SpmYn); param4.setValueParamter(11, PathMillCd); param4.setValueParamter(12, PackMethod); param4.setValueParamter(13, slabNo); param4.setValueParamter(14, fm_ext_strip_thk); param4.setValueParamter(15, fm_ext_strip_wth); param4.setValueParamter(16, coil_len); param4.setValueParamter(17, spec_coil_india); param4.setValueParamter(18, coil_outdia); try{ if (ACT_WGT != null && !ACT_WGT.equals("") && Integer.parseInt(ACT_WGT) != 0) { coil_wgt = new BigDecimal(ACT_WGT); } } catch (Exception e) { // TODO: handle exception } param4.setValueParamter(19, coil_wgt); param4.setValueParamter(20, dc_on_dtime); param4.setValueParamter(21, dc_off_dtime); //这里轧制时间由电文时间改为卷取结束时间 param4.setValueParamter(22, dc_off_dtime); param4.setValueParamter(23, specstlGrd); param4.setValueParamter(24, coilNo); int rowset4 = this.getDao("mesdao").update("NIH020050_02.update", param4); } } //如果出现多次吊销的情况,只在第一次的时候给予处理 PosParameter paramx = new PosParameter(); String sqlx = "select RHF_STAT from TBH02_REHEATFUR where slab_no = ? and coil_no = ? "; paramx.setWhereClauseParameter(0, slabNo); paramx.setWhereClauseParameter(1, coilNo); //判断是否有上料,如果没有上料,自动补录 String RHF_STAT = null; PosRowSet rowset2 = getDao("mesdao").findByQueryStatement(sqlx, paramx); if(rowset2.hasNext()){ PosRow row2 = rowset2.next(); RHF_STAT = (String) row2.getAttribute("RHF_STAT"); //加入日志 PosParameter paramhis = new PosParameter(); paramhis.setValueParamter(0, slabNo); paramhis.setValueParamter(1, coilNo); paramhis.setValueParamter(2, RHF_STAT); getDao("mesdao").insert("UIH020036_09.insert", paramhis); if("1".equals(RHF_STAT)) { //此方法用来传送异动点数据 ProduceFactory PD= new ProduceFactory(); PD.ErpDataCover("HSLAB",slabNo,"41A","0","O","加热炉二级丢料","热轧轧制"); } } else{ //此方法用来传送异动点数据 ProduceFactory PD= new ProduceFactory(); PD.ErpDataCover("HSLAB",slabNo,"41A","0","O","加热炉二级丢料","热轧轧制"); } //TL 加入调用品质的存储过程 COPY XinSaveRhfExtract NIB028070 //20180703 在此存储过程中加入更改进程的业务,判断订单是否需要平整,需要的话更改SED—-->SCA By wl CallableStatement PlRtn = getDao("mesdao").getCallableStatement("NIH020050_NIB028040"); try { if(PlRtn != null) { PlRtn.setString(1,coilNo); PlRtn.registerOutParameter(2, java.sql.Types.VARCHAR); PlRtn.registerOutParameter(3, java.sql.Types.VARCHAR); PlRtn.execute(); String sRetCode = PlRtn.getString(2); String sRetMsg = PlRtn.getString(3); logger.logDebug("PosSAveOutHeatFurnace---> NIB028040 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); } } } //调用存货异动点存储过程 /*ProduceFactory PD= new ProduceFactory(); PD.ErpDataCover("HCOIL",coilNo_L2,"11A","0","O","轧制二级","热卷实绩产出");*/ nextTrans = "success"; }else{ //通过实际钢卷号没有获得计划钢卷号的信息 logger.logDebug("XinSaveMillResult OLD_SAMPL_NO - > COIL_NO ERROR "); } return nextTrans; } }