From b856678bd1b9ba07d220bfb1a5e2e6346952a6e0 Mon Sep 17 00:00:00 2001 From: sunhao <479527147@qq.com> Date: Wed, 24 Jul 2024 16:50:51 +0800 Subject: [PATCH] 1 --- .../SinglePlateHandle/SurMatSubController.cs | 90 +- .../SinglePlateHandle/SurMatSubServiceTest.cs | 6503 +++++++++++++++++ .../bin/Debug/SinglePlateHandle.exe | Bin 1285632 -> 1286144 bytes .../bin/Debug/SinglePlateHandle.pdb | Bin 2508288 -> 2510336 bytes .../obj/Debug/SinglePlateHandle.exe | Bin 1285632 -> 1286144 bytes .../obj/Debug/SinglePlateHandle.pdb | Bin 2508288 -> 2510336 bytes 6 files changed, 6579 insertions(+), 14 deletions(-) create mode 100644 余材替代程序/SinglePlateHandle/SinglePlateHandle/SurMatSubServiceTest.cs diff --git a/余材替代程序/SinglePlateHandle/SinglePlateHandle/SurMatSubController.cs b/余材替代程序/SinglePlateHandle/SinglePlateHandle/SurMatSubController.cs index d71d613..908bd22 100644 --- a/余材替代程序/SinglePlateHandle/SinglePlateHandle/SurMatSubController.cs +++ b/余材替代程序/SinglePlateHandle/SinglePlateHandle/SurMatSubController.cs @@ -928,7 +928,7 @@ namespace ibk.IPD.Controller.IPD_PS { strWHerePlate += " AND (GP.PROD_DATE > TO_CHAR(SYSdate + '" + intPLATE_DAYS_DIFF.ToString() + "' ,'yyyyMMdd') or GP.STLGRD in ( SELECT STLGRD FROM NISCO.QP_NISCO_CHMC WHERE STLGRD_FL='N' AND STLGRD IN('A20050NIQQT', 'A20051NIQQT', 'A20090NIQQT', 'A20092NIQQT', 'A20093NIQQT')))"; //测试test指定 - //strWHerePlate += " AND GP.PLATE_NO in ('23211884040101')"; + //strWHerePlate += " AND GP.PLATE_NO in ('24205447320101')"; } //余材自动替代周期 if (intORD_DAYS_DIFF != 0) @@ -936,7 +936,7 @@ namespace ibk.IPD.Controller.IPD_PS //strWHereOrd += " AND boi.CUST_DEL_TO_DATE > TO_CHAR(SYSdate + '" + intORD_DAYS_DIFF.ToString() + "' ,'yyyyMMdd')"; //测试test指定 - //strWHereOrd += " AND boi.ORD_NO='OMM24050019' AND boi.ORD_ITEM='085'"; + //strWHereOrd += " AND boi.ORD_NO='OMD24070005' AND boi.ORD_ITEM='096'"; strWHereOrd += " AND (boi.CUST_DEL_TO_DATE > TO_CHAR(SYSdate + '" + intORD_DAYS_DIFF.ToString() + "' ,'yyyyMMdd') or boi.STLGRD in ( SELECT STLGRD FROM NISCO.QP_NISCO_CHMC WHERE STLGRD_FL='N' AND STLGRD IN('A20050NIQQT','A20051NIQQT','A20090NIQQT','A20092NIQQT','A20093NIQQT'))) "; } @@ -7929,20 +7929,23 @@ namespace ibk.IPD.Controller.IPD_PS // && Convert.ToDecimal(itemQP_QLTY_CHEM.CHEM_COMP_MAX) >= Convert.ToDecimal(p.CHEM_RSLT) // && itemQP_QLTY_CHEM.CHEM_COMP_CD + itemQP_QLTY_CHEM.FOMULA_CD == p.CHEM_COMP_CD).ToList(); - //2024/1/4 改 - List ltCheck = ltQPChemRslt.Where - (p => Convert.ToDecimal(itemQP_QLTY_CHEM.CHEM_COMP_MIN) <= Convert.ToDecimal(p.CHEM_RSLT) - && Convert.ToDecimal(itemQP_QLTY_CHEM.CHEM_COMP_MAX) >= Convert.ToDecimal(p.CHEM_RSLT) - && (itemQP_QLTY_CHEM.CHEM_COMP_CD + itemQP_QLTY_CHEM.FOMULA_CD == p.CHEM_COMP_CD || itemQP_QLTY_CHEM.CHEM_COMP_CD == p.CHEM_COMP_CD)).ToList(); - if (ltCheck.Count == 0) + //CEQ 特殊处理 + if (itemQP_QLTY_CHEM.CHEM_COMP_CD.ToUpper() == "CEQ") { - if (itemQP_QLTY_CHEM.CHEM_COMP_CD == "N" && ltQPChemRslt.Where(p => p.CHEM_COMP_CD == "N").ToList().Count == 0) - { - prP_PLATE.SUB_FULL = "P"; - prP_PLATE.SUB_LACK_CON = prP_PLATE.SUB_LACK_CON + "/化学成分N"; - } - else + //CEQ 字符串 + string strCEQ = (itemQP_QLTY_CHEM.CHEM_COMP_CD + ConverDataToString(itemQP_QLTY_CHEM.FOMULA_CD)).Trim(); + //CEQ 字符串长度 + int intSub = strCEQ.Length; + + //2024/1/4 改 + List ltCheck = ltQPChemRslt.Where + (p => Convert.ToDecimal(itemQP_QLTY_CHEM.CHEM_COMP_MIN) <= Convert.ToDecimal(p.CHEM_RSLT) + && Convert.ToDecimal(itemQP_QLTY_CHEM.CHEM_COMP_MAX) >= Convert.ToDecimal(p.CHEM_RSLT) + && (strCEQ == (p.CHEM_COMP_CD + ConverDataToString(p.FOMULA_CD)).Trim())).ToList(); + + if (ltCheck.Count == 0) { + COM_DATA CD = new COM_DATA(); CD.PLATE_NO = prP_PLATE.PLATE_NO; CD.ORD_NO = prorde.ORD_NO; @@ -7953,9 +7956,68 @@ namespace ibk.IPD.Controller.IPD_PS //不满足,返回false //logger.InfoFormat("钢板:{0},订单号:{1}-{2},钢板炉号化学成分不满足订单", prP_PLATE.PLATE_NO, prorde.ORD_NO, prorde.ORD_ITEM); return false; + } + } + else + { + //2024/1/4 改 + List ltCheck = ltQPChemRslt.Where + (p => Convert.ToDecimal(itemQP_QLTY_CHEM.CHEM_COMP_MIN) <= Convert.ToDecimal(p.CHEM_RSLT) + && Convert.ToDecimal(itemQP_QLTY_CHEM.CHEM_COMP_MAX) >= Convert.ToDecimal(p.CHEM_RSLT) + && (itemQP_QLTY_CHEM.CHEM_COMP_CD + itemQP_QLTY_CHEM.FOMULA_CD == p.CHEM_COMP_CD || itemQP_QLTY_CHEM.CHEM_COMP_CD == p.CHEM_COMP_CD)).ToList(); + if (ltCheck.Count == 0) + { + if (itemQP_QLTY_CHEM.CHEM_COMP_CD == "N" && ltQPChemRslt.Where(p => p.CHEM_COMP_CD == "N").ToList().Count == 0) + { + prP_PLATE.SUB_FULL = "P"; + prP_PLATE.SUB_LACK_CON = prP_PLATE.SUB_LACK_CON + "/化学成分N"; + } + else + { + COM_DATA CD = new COM_DATA(); + CD.PLATE_NO = prP_PLATE.PLATE_NO; + CD.ORD_NO = prorde.ORD_NO; + CD.ORD_ITEM = prorde.ORD_ITEM; + CD.Chem = "1"; //化学特性 + //gCOM_DATA.Add(CD);//全局变量添加对不结果数据 + + //不满足,返回false + //logger.InfoFormat("钢板:{0},订单号:{1}-{2},钢板炉号化学成分不满足订单", prP_PLATE.PLATE_NO, prorde.ORD_NO, prorde.ORD_ITEM); + return false; + } + } } + ////2024/1/4 改 + //List ltCheck = ltQPChemRslt.Where + // (p => Convert.ToDecimal(itemQP_QLTY_CHEM.CHEM_COMP_MIN) <= Convert.ToDecimal(p.CHEM_RSLT) + // && Convert.ToDecimal(itemQP_QLTY_CHEM.CHEM_COMP_MAX) >= Convert.ToDecimal(p.CHEM_RSLT) + // && (itemQP_QLTY_CHEM.CHEM_COMP_CD + itemQP_QLTY_CHEM.FOMULA_CD == p.CHEM_COMP_CD || itemQP_QLTY_CHEM.CHEM_COMP_CD == p.CHEM_COMP_CD)).ToList(); + //if (ltCheck.Count == 0) + //{ + // if (itemQP_QLTY_CHEM.CHEM_COMP_CD == "N" && ltQPChemRslt.Where(p => p.CHEM_COMP_CD == "N").ToList().Count == 0) + // { + // prP_PLATE.SUB_FULL = "P"; + // prP_PLATE.SUB_LACK_CON = prP_PLATE.SUB_LACK_CON + "/化学成分N"; + // } + // else + // { + // COM_DATA CD = new COM_DATA(); + // CD.PLATE_NO = prP_PLATE.PLATE_NO; + // CD.ORD_NO = prorde.ORD_NO; + // CD.ORD_ITEM = prorde.ORD_ITEM; + // CD.Chem = "1"; //化学特性 + // //gCOM_DATA.Add(CD);//全局变量添加对不结果数据 + + // //不满足,返回false + // //logger.InfoFormat("钢板:{0},订单号:{1}-{2},钢板炉号化学成分不满足订单", prP_PLATE.PLATE_NO, prorde.ORD_NO, prorde.ORD_ITEM); + // return false; + // } + + //} + + } catch (Exception) { diff --git a/余材替代程序/SinglePlateHandle/SinglePlateHandle/SurMatSubServiceTest.cs b/余材替代程序/SinglePlateHandle/SinglePlateHandle/SurMatSubServiceTest.cs new file mode 100644 index 0000000..8fbeb59 --- /dev/null +++ b/余材替代程序/SinglePlateHandle/SinglePlateHandle/SurMatSubServiceTest.cs @@ -0,0 +1,6503 @@ +using ibk.IPD.Entity; +using ibk.IPD.Entity.IPD_MR.HotRoll; +using ibk.IPD.Entity.IPD_PS; +using ibk.IPD.Entity.IpdPs; +using log4net; +using SinglePlateHandle.Enity; +using SOA.Objects; +using SOA.Persistent; +using System; +using System.Collections.Generic; +using System.Data; +using System.Reflection; +using System.Text; +using System.Linq; +using QP_STD_HEAD = ibk.IPD.Entity.IPD_PS.QP_STD_HEAD; + +namespace ibk.IPD.Service.IPD_PS +{ + public class SurMatSubServiceTest + { + private static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + private static string glstrPlateNo = "24205447320101";//24101846070122 + + private static string glstrOrdNo = "OMD24070005"; + + private static string glstrOrdItem = "096"; + + + #region 获取存储数据 + + /// + /// 获取所有未确认数据 + /// + /// + public IList GetUnConSUPERSEDE() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gSUPERSEDE = null; + + //查询可用订单以及常用字段 + + try + { + strSql.AppendLine("SELECT * FROM SUPERSEDE"); + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + gSUPERSEDE = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetUnConSUPERSEDE 报错", ex); + } + + return gSUPERSEDE; + } + + public IList GetUnConSUPERSEDEHIS() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gSUPERSEDE = null; + + //查询可用订单以及常用字段 + + try + { + strSql.AppendLine("SELECT * FROM SUPERSEDE_HISTORY where 1=1"); + strSql.AppendLine(" and HAN_RSL <> 'S'"); + //strSql.AppendLine(" and to_date(SUB_DATE,'yyyy-mm-dd hh24:mi:ss') < to_date('" + DateTime.Now.AddDays(-1) + "','yyyy-mm-dd hh24:mi:ss')"); + strSql.AppendLine(" and to_date(SUB_DATE,'yyyy-mm-dd hh24:mi:ss') >= to_date('" + DateTime.Now.AddHours(-12) + "','yyyy-mm-dd hh24:mi:ss')"); + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + gSUPERSEDE = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetUnConSUPERSEDE 报错", ex); + } + + return gSUPERSEDE; + } + public IList GetTB_STOCK() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gSUPERSEDE = null; + + //查询可用订单以及常用字段 + + try + { + strSql.AppendLine("SELECT * FROM TB_STOCK where 1=1"); + //strSql.AppendLine(" and HAN_RSL <> 'S'"); + strSql.AppendLine(" and to_date(STOCK_DATE,'yyyy-mm-dd hh24:mi:ss') > to_date('" + DateTime.Now.AddDays(-1) + "','yyyy-mm-dd hh24:mi:ss')"); + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + gSUPERSEDE = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetTB_STOCK 报错", ex); + } + + return gSUPERSEDE; + } + + /// + /// 获取特殊钢板 + /// + /// + public IList GetTB_NEW_ORD() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gTB_NEW_ORD = null; + + //查询可用订单以及常用字段 + + try + { + strSql.AppendLine("SELECT * FROM TB_NEW_ORD where 1=1"); + strSql.AppendLine(" and STATUS = 'N'"); + //strSql.AppendLine(" and to_date(STOCK_DATE,'yyyy-mm-dd hh24:mi:ss') > to_date('" + DateTime.Now.AddDays(-1) + "','yyyy-mm-dd hh24:mi:ss')"); + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + gTB_NEW_ORD = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetTB_NEW_ORD 报错", ex); + } + + return gTB_NEW_ORD; + } + /// + /// 目标仓库 + /// + /// + public IList GetONWAY_PLA_FUNGIBLE_SPECI() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gSUPERSEDE = null; + + //查询可用订单以及常用字段 + + try + { + strSql.AppendLine("SELECT * FROM ONWAY_PLA_FUNGIBLE_SPECI where 1=1"); + + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + gSUPERSEDE = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetUnConSUPERSEDE 报错", ex); + } + + return gSUPERSEDE; + } + + + + public IList GetSTDSPEC_Only_One() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gSTDSPEC = null; + + //查询可用订单以及常用字段 + + try + { + strSql.AppendLine(" select STDSPEC from NISCO.BP_ORDER_ITEM boi where boi.CUST_DEL_TO_DATE > TO_CHAR(SYSdate + '-90' ,'yyyyMMdd') GROUP BY STDSPEC HAVING count(STDSPEC) =1"); + + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + gSTDSPEC = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetSTDSPEC_Only_One 报错", ex); + } + + return gSTDSPEC; + } + + + + ///// + ///// 可用订单选择 + ///// 订单欠量字段 ORD_REM_CNT + ///// + ///// 所有符合条件的订单 集合 + //public IList GetOrder(string strWHereOrd, string strSpecialOrd) + //{ + // StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + // StringBuilder strRemSql = new StringBuilder(); //声明订单欠量sql + // IList gpPlates = null; + + // //查询可用订单以及常用字段 + // strSql.AppendLine(" SELECT "); + // strSql.AppendLine(" BOI.ORD_NO, BOI.ORD_ITEM, QQD.THK_TOL_MIN ,QQD.THK_TOL_MAX ,BOI.REC_STS, BOI.PLN_ORD, BOI.PLN_ORD_ITEM, BOI.ORD_STS, BOI.HOLD_FL, BOI.HOLD_DATE, BOI.HOLD_TIME, BOI.HOLD_EMP_ID "); + // strSql.AppendLine(", BOI.CURRENCY, BOI.EXTRA_FL, BOI.DISCON_PRC, BOI.TOT_PRC, BOI.TRANS_PRC, BOI.EMP_ID, BOI.PROD_PRC, BOI.REG_DATE, BOI.REG_TIME, BOI.CONF_DATE "); + // strSql.AppendLine(", BOI.CONF_TIME, BOI.CONF_EMP_ID, BOI.CUST_CD, BOI.ORD_CUST_CD, BOI.PROD_DGR, BOI.SALE_WAY, BOI.DEPT_CD, BOI.DEST_CD, BOI.DEST_DETAIL "); + // strSql.AppendLine(", BOI.ENDUSE_CD, BOI.STLGRD, BOI.PAYMENT_COND, BOI.DEL_COND, BOI.DEL_TOL_UNIT, BOI.DEL_TOL_MAX, BOI.DEL_TOL_MIN, BOI.WGT_UNIT, BOI.WGT_GRP "); + // strSql.AppendLine(", BOI.PROD_WGT, BOI.PROD_WGT_MIN, BOI.PROD_WGT_MAX, BOI.TOT_WGT, BOI.STDSPEC, BOI.STDSPEC_YY, BOI.ORD_SIZE, BOI.ORD_WID, BOI.ORD_LEN, BOI.ORD_THK "); + // strSql.AppendLine(", BOI.INDIA, BOI.OUTDIA, BOI.CAN_FL, BOI.CAN_DATE, BOI.CAN_TIME, BOI.CAN_EMP_ID, BOI.MOD_FL, BOI.MOD_DATE, BOI.MOD_TIME, BOI.DEL_FR_DATE, BOI.DEL_TO_DATE "); + // strSql.AppendLine(", BOI.CUST_DEL_FR_DATE, BOI.CUST_DEL_TO_DATE, BOI.ORD_PROD_END_DATE, BOI.ORD_PROD_END_TIME, BOI.ORD_SHIP_END_DATE, BOI.ORD_SHIP_END_TIME, BOI.ORD_ACCP_DATE "); + // strSql.AppendLine(", BOI.ORD_ACCP_TIME, BOI.CUST_REQ_PLANT, BOI.TENT_REQ_PLANT, BOI.CONF_PLANT, BOI.CUST_SPEC_NO, BOI.MARKING_WAY, BOI.STAMP, BOI.TRANSP_WAY, BOI.ORD_KND "); + // strSql.AppendLine(", BOI.TRIM_FL, BOI.URGNT_FL, BOI.UST_FL, BOI.PAYMENT_FL, BOI.PAYMENT_DATE, BOI.PAYMENT_TIME, BOI.PAYMENT_EMP_ID, BOI.PACK_WAY, BOI.PACK_WGT_MAX "); + // strSql.AppendLine(", BOI.PACK_WGT_MIN, BOI.NUM_PROD, BOI.SALE_EMP_ID, BOI.END_CUST_CD, BOI.INSP_CD, BOI.DOME_FL, BOI.PROD_CD, BOI.PROD_THK_TGT, BOI.SIZE_KND, BOI.ORD_LEN_MIN "); + // strSql.AppendLine(", BOI.ORD_LEN_MAX, BOI.MATR_FL, BOI.CONT_END_DATE, BOI.CONT_END_TIME, BOI.CONT_END_EMP_ID, BOI.VESSEL_NO, BOI.CUST_REQ_NO, BOI.COLOR_STROKE, BOI.RELEASE_DATE "); + // strSql.AppendLine(", BOI.RELEASE_TIME, BOI.RELEASE_EMP_ID, BOI.PLN_SMS_PLT, BOI.PLN_MILL_PLT, BOI.CFM_SMS_PLT, BOI.CFM_MILL_PLT, BOI.HTM_SHOT_BLAST "); + // strSql.AppendLine(", BOI.INS_DATE, BOI.INS_TIME, BOI.INS_EMPID, BOI.INS_PGMID, BOI.UPD_DATE, BOI.UPD_TIME, BOI.UPD_EMPID, BOI.UPD_PGMID, BOI.SEALMEMO "); + // strSql.AppendLine(", BOI.INSPUNITCODEA, BOI.INSPUNITCODEB, BOI.INSPUNITCODEC, BOI.PRODSPECNOA, BOI.PRODSPECNOB, BOI.PRODSPECNOC, BOI.PAINTNUM, BOI.LP_HD_THK, BOI.LP_MD_THK, BOI.LP_TL_THK "); + // strSql.AppendLine(", BOI.LP_LEN1, BOI.LP_LEN2, BOI.LP_LEN3, BOI.LP_LEN4, BOI.LP_LEN5, BOI.IMP_CONT, BOI.INSPECT_ORGAN, BOI.CONTRACT_NO, BOI.TRIAL_PRODUCT, BOI.TRIAL_NUM, BOI.TRIAL_STR "); + // strSql.AppendLine(", BOI.TRIAL_END, BOI.SIDEMARK, BOI.JIT_STRINGA, BOI.JIT_STRINGB, BOI.JIT_STRINGC, BOI.JITID, BOI.JIT_FLAG, BOI.QO_FL, BOI.SAMPLE_MEMO, BOI.SIZE_MEMO, BOI.PACK_MEMO "); + // strSql.AppendLine(", BOI.FLUSH_FL, BOI.APPOINT_PLT, BOI.MORD_DESIGN_WGT, BOI.MORD_FL, BOI.APPOINT_PLT_REASON, BOI.SURFACE_REQUESTS, BOI.STAMP_FL, BOI.UST_INSP_FL, BOI.SPRAY_FL "); + // strSql.AppendLine(", BOI.BUFPOOL_CD, BOI.MULTI_INSP_FL, BOI.CONTRACT_DATE, BOI.DELIVERY_STATUS, BOI.CUST_CLASS, BOI.CUST_LEVEL, BOI.SPECIAL_OPR_REQ, BOI.WITNESS_CONTENT, BOI.COGGING_FLAG "); + // strSql.AppendLine(", BOI.STD_DET_CLASS_CD, BOI.STD_DET_CLASS_LVL, BOI.CERT_NOTE, BOI.INSPECT_FLAG, BOI.E2E_CUST, BOI.CUST_PURCHASE, BOI.GUID, BOI.NEW_CLASS_STATE, BOI.FACEPAINT "); + // strSql.AppendLine(", BOI.IS_JC, BOI.UST_JC, BOI.LEVEL_JM, BOI.ORDER_NOFH, BOI.ITEM_NOFH, BOI.ORDER_THK_JC, BOI.ORDER_THK_FC, BOI.TYPEFH, BOI.PRODTYPENO, BOI.STEEL_SPRAY "); + // strSql.AppendLine(", BOI.STEEL_PACK, BOI.STEEL_SHOTBLAST, BOI.STEEL_SLOTEPROCESS, BOI.ORDERQTY, BOI.ORDER_CNT, BOI.DELIVERY_STATUS1, BOI.DELIVERY_STATUS2, BOI.DELIVERY_STATUS3 "); + // strSql.AppendLine(", BOI.SPECNOA, BOI.SPECNOB, BOI.SPECNOC, BOI.SPECNOA_YY, BOI.SPECNOB_YY, BOI.SPECNOC_YY, BOI.INSPUNITCODE, BOI.SUBCUSTNO, BOI.ISSHIPORDER, BOI.SAILINGDATE "); + // strSql.AppendLine(", BOI.MARINEBOARD, BOI.ORDERNOYPK, BOI.ORDERITEMYPK, BOI.SORTINGMARK, BOI.UST_FL_PRINT, BOI.PRINTUTLEVEL, BOI.RULLBOARDCUT, BOI.PAINTUPT, BOI.ORDERPRICEB "); + // strSql.AppendLine(", BOI.ADJUSTPRICE, BOI.HOTUT, BOI.HOTUTRATE, BOI.SPECIALSIGN, BOI.UST_MODE, BOI.INSP_CD1, BOI.INSP_CD2, BOI.QKL_CUSTNO "); + // strSql.AppendLine(", CPP.ORD_WGT "); + // //TODO:TEST_DATA + // strSql.AppendLine(",FLOOR( (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100)/ TRUNC(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85,3)) AS SUB_LACK_NUM "); + // //strSql.AppendLine(",1 AS SUB_LACK_NUM "); + // strSql.AppendLine(",(NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100) AS SUB_LACK_WGT "); + // strSql.AppendLine(",QQT.HTM_METH1 "); + // strSql.AppendLine(",QQT.HTM_METH2 "); + // strSql.AppendLine(",QQT.HTM_METH3 "); + // strSql.AppendLine(",count(EP_SLAB_B.REQ_SEQ_NO) SLAB_LACK_NUM , count(EP_SLAB_B.REQ_SEQ_NO) + FLOOR( (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100)/ TRUNC(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85,3)) AS LACK_NUM "); + + // strSql.AppendLine("FROM NISCO.cp_prc CPP "); + // strSql.AppendLine("INNER JOIN "); + // strSql.AppendLine("NISCO.BP_ORDER_ITEM boi "); + // strSql.AppendLine("ON BOI.ORD_NO = CPP.ORD_NO "); + // strSql.AppendLine("AND BOI.ORD_ITEM = CPP.ORD_ITEM "); + // strSql.AppendLine("AND BOI.ORD_WID <> 0 "); + // strSql.AppendLine("AND BOI.ORD_LEN <> 0 "); + // strSql.AppendLine("AND BOI.ORD_THK <> 0 "); + // strSql.AppendLine("LEFT JOIN NISCO.QP_QLTY_TECH QQT "); + // strSql.AppendLine("ON BOI.ORD_NO = QQT.ORD_NO "); + // strSql.AppendLine("AND BOI.ORD_ITEM = QQT.ORD_ITEM "); + // strSql.AppendLine("LEFT JOIN NISCO.QP_QLTY_DELV QQD"); + // strSql.AppendLine("ON BOI.ORD_NO = QQD.ORD_NO"); + // strSql.AppendLine("AND BOI.ORD_ITEM = QQD.ORD_ITEM"); + + // strSql.AppendLine("LEFT JOIN NISCO.EP_REQ_SLAB EP_SLAB "); + // strSql.AppendLine("ON EP_SLAB.ORD_NO = QQD.ORD_NO "); + // strSql.AppendLine("AND EP_SLAB.ORD_ITEM = QQD.ORD_ITEM "); + + // strSql.AppendLine("LEFT JOIN NISCO.EP_REQ_SLAB_D EP_SLAB"); + // strSql.AppendLine("ON EP_SLAB.ORD_NO = QQD.ORD_NO "); + // strSql.AppendLine("AND EP_SLAB.ORD_ITEM = QQD.ORD_ITEM "); + // strSql.AppendLine("AND EP_SLAB.BLOCK_SEQ >= '01'"); + // strSql.AppendLine("AND EP_SLAB.SEQ >= '01'"); + // strSql.AppendLine("LEFT JOIN NISCO.EP_REQ_SLAB EP_SLAB_B"); + // strSql.AppendLine("ON EP_SLAB.REQ_SEQ_NO = EP_SLAB_B.REQ_SEQ_NO"); + // strSql.AppendLine("AND EP_SLAB_B.REC_STS = '1'"); + + // //TODO:TEST_DATA + // strSql.AppendLine("WHERE 1=1 "); + // strSql.AppendLine(" AND ((SELECT COUNT( A.REQ_SEQ_NO) "); + // strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + // strSql.AppendLine(" WHERE "); + // strSql.AppendLine(" 1 = 1 AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + // strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + // strSql.AppendLine(" AND A.SEQ >= '01' "); + // strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + // strSql.AppendLine(" AND B.REC_STS = '1') + NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100)/(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85)>=0.95 "); + + // strSql.AppendLine("AND boi.PROD_CD = 'PP' "); + // strSql.AppendLine("AND boi.REC_STS = '2' "); + // strSql.AppendLine("and boi.ORD_STS IN('E', 'D') "); + // strSql.AppendLine("AND boi.ord_knd IN('A') "); + // strSql.AppendLine("AND boi.ORD_NO NOT LIKE 'OMZ%'"); + // strSql.AppendLine(strWHereOrd); + // strSql.AppendLine(strSpecialOrd); + // //strSql.AppendLine(" or boi.ORD_NO ='OMC22100055'"); + // //strSql.AppendLine(" AND boi.ORD_ITEM ='106'"); + // strSql.AppendLine("GROUP BY BOI.ORD_NO, BOI.ORD_ITEM, QQD.THK_TOL_MIN ,QQD.THK_TOL_MAX ,BOI.REC_STS, BOI.PLN_ORD, BOI.PLN_ORD_ITEM, BOI.ORD_STS, BOI.HOLD_FL, BOI.HOLD_DATE, BOI.HOLD_TIME, BOI.HOLD_EMP_ID "); + // strSql.AppendLine(", BOI.CURRENCY, BOI.EXTRA_FL, BOI.DISCON_PRC, BOI.TOT_PRC, BOI.TRANS_PRC, BOI.EMP_ID, BOI.PROD_PRC, BOI.REG_DATE, BOI.REG_TIME, BOI.CONF_DATE "); + // strSql.AppendLine(", BOI.CONF_TIME, BOI.CONF_EMP_ID, BOI.CUST_CD, BOI.ORD_CUST_CD, BOI.PROD_DGR, BOI.SALE_WAY, BOI.DEPT_CD, BOI.DEST_CD, BOI.DEST_DETAIL "); + // strSql.AppendLine(", BOI.ENDUSE_CD, BOI.STLGRD, BOI.PAYMENT_COND, BOI.DEL_COND, BOI.DEL_TOL_UNIT, BOI.DEL_TOL_MAX, BOI.DEL_TOL_MIN, BOI.WGT_UNIT, BOI.WGT_GRP "); + // strSql.AppendLine(", BOI.PROD_WGT, BOI.PROD_WGT_MIN, BOI.PROD_WGT_MAX, BOI.TOT_WGT, BOI.STDSPEC, BOI.STDSPEC_YY, BOI.ORD_SIZE, BOI.ORD_WID, BOI.ORD_LEN, BOI.ORD_THK "); + // strSql.AppendLine(", BOI.INDIA, BOI.OUTDIA, BOI.CAN_FL, BOI.CAN_DATE, BOI.CAN_TIME, BOI.CAN_EMP_ID, BOI.MOD_FL, BOI.MOD_DATE, BOI.MOD_TIME, BOI.DEL_FR_DATE, BOI.DEL_TO_DATE "); + // strSql.AppendLine(", BOI.CUST_DEL_FR_DATE, BOI.CUST_DEL_TO_DATE, BOI.ORD_PROD_END_DATE, BOI.ORD_PROD_END_TIME, BOI.ORD_SHIP_END_DATE, BOI.ORD_SHIP_END_TIME, BOI.ORD_ACCP_DATE "); + // strSql.AppendLine(", BOI.ORD_ACCP_TIME, BOI.CUST_REQ_PLANT, BOI.TENT_REQ_PLANT, BOI.CONF_PLANT, BOI.CUST_SPEC_NO, BOI.MARKING_WAY, BOI.STAMP, BOI.TRANSP_WAY, BOI.ORD_KND "); + // strSql.AppendLine(", BOI.TRIM_FL, BOI.URGNT_FL, BOI.UST_FL, BOI.PAYMENT_FL, BOI.PAYMENT_DATE, BOI.PAYMENT_TIME, BOI.PAYMENT_EMP_ID, BOI.PACK_WAY, BOI.PACK_WGT_MAX "); + // strSql.AppendLine(", BOI.PACK_WGT_MIN, BOI.NUM_PROD, BOI.SALE_EMP_ID, BOI.END_CUST_CD, BOI.INSP_CD, BOI.DOME_FL, BOI.PROD_CD, BOI.PROD_THK_TGT, BOI.SIZE_KND, BOI.ORD_LEN_MIN "); + // strSql.AppendLine(", BOI.ORD_LEN_MAX, BOI.MATR_FL, BOI.CONT_END_DATE, BOI.CONT_END_TIME, BOI.CONT_END_EMP_ID, BOI.VESSEL_NO, BOI.CUST_REQ_NO, BOI.COLOR_STROKE, BOI.RELEASE_DATE "); + // strSql.AppendLine(", BOI.RELEASE_TIME, BOI.RELEASE_EMP_ID, BOI.PLN_SMS_PLT, BOI.PLN_MILL_PLT, BOI.CFM_SMS_PLT, BOI.CFM_MILL_PLT, BOI.HTM_SHOT_BLAST "); + // strSql.AppendLine(", BOI.INS_DATE, BOI.INS_TIME, BOI.INS_EMPID, BOI.INS_PGMID, BOI.UPD_DATE, BOI.UPD_TIME, BOI.UPD_EMPID, BOI.UPD_PGMID, BOI.SEALMEMO "); + // strSql.AppendLine(", BOI.INSPUNITCODEA, BOI.INSPUNITCODEB, BOI.INSPUNITCODEC, BOI.PRODSPECNOA, BOI.PRODSPECNOB, BOI.PRODSPECNOC, BOI.PAINTNUM, BOI.LP_HD_THK, BOI.LP_MD_THK, BOI.LP_TL_THK "); + // strSql.AppendLine(", BOI.LP_LEN1, BOI.LP_LEN2, BOI.LP_LEN3, BOI.LP_LEN4, BOI.LP_LEN5, BOI.IMP_CONT, BOI.INSPECT_ORGAN, BOI.CONTRACT_NO, BOI.TRIAL_PRODUCT, BOI.TRIAL_NUM, BOI.TRIAL_STR "); + // strSql.AppendLine(", BOI.TRIAL_END, BOI.SIDEMARK, BOI.JIT_STRINGA, BOI.JIT_STRINGB, BOI.JIT_STRINGC, BOI.JITID, BOI.JIT_FLAG, BOI.QO_FL, BOI.SAMPLE_MEMO, BOI.SIZE_MEMO, BOI.PACK_MEMO "); + // strSql.AppendLine(", BOI.FLUSH_FL, BOI.APPOINT_PLT, BOI.MORD_DESIGN_WGT, BOI.MORD_FL, BOI.APPOINT_PLT_REASON, BOI.SURFACE_REQUESTS, BOI.STAMP_FL, BOI.UST_INSP_FL, BOI.SPRAY_FL "); + // strSql.AppendLine(", BOI.BUFPOOL_CD, BOI.MULTI_INSP_FL, BOI.CONTRACT_DATE, BOI.DELIVERY_STATUS, BOI.CUST_CLASS, BOI.CUST_LEVEL, BOI.SPECIAL_OPR_REQ, BOI.WITNESS_CONTENT, BOI.COGGING_FLAG "); + // strSql.AppendLine(", BOI.STD_DET_CLASS_CD, BOI.STD_DET_CLASS_LVL, BOI.CERT_NOTE, BOI.INSPECT_FLAG, BOI.E2E_CUST, BOI.CUST_PURCHASE, BOI.GUID, BOI.NEW_CLASS_STATE, BOI.FACEPAINT "); + // strSql.AppendLine(", BOI.IS_JC, BOI.UST_JC, BOI.LEVEL_JM, BOI.ORDER_NOFH, BOI.ITEM_NOFH, BOI.ORDER_THK_JC, BOI.ORDER_THK_FC, BOI.TYPEFH, BOI.PRODTYPENO, BOI.STEEL_SPRAY "); + // strSql.AppendLine(", BOI.STEEL_PACK, BOI.STEEL_SHOTBLAST, BOI.STEEL_SLOTEPROCESS, BOI.ORDERQTY, BOI.ORDER_CNT, BOI.DELIVERY_STATUS1, BOI.DELIVERY_STATUS2, BOI.DELIVERY_STATUS3 "); + // strSql.AppendLine(", BOI.SPECNOA, BOI.SPECNOB, BOI.SPECNOC, BOI.SPECNOA_YY, BOI.SPECNOB_YY, BOI.SPECNOC_YY, BOI.INSPUNITCODE, BOI.SUBCUSTNO, BOI.ISSHIPORDER, BOI.SAILINGDATE "); + // strSql.AppendLine(", BOI.MARINEBOARD, BOI.ORDERNOYPK, BOI.ORDERITEMYPK, BOI.SORTINGMARK, BOI.UST_FL_PRINT, BOI.PRINTUTLEVEL, BOI.RULLBOARDCUT, BOI.PAINTUPT, BOI.ORDERPRICEB "); + // strSql.AppendLine(", BOI.ADJUSTPRICE, BOI.HOTUT, BOI.HOTUTRATE, BOI.SPECIALSIGN, BOI.UST_MODE, BOI.INSP_CD1, BOI.INSP_CD2, BOI.QKL_CUSTNO "); + // strSql.AppendLine(", CPP.ORD_WGT ,FLOOR( (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100)/(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85)) ,(NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100) "); + // strSql.AppendLine(", QQT.HTM_METH1 "); + // strSql.AppendLine(", QQT.HTM_METH2 "); + // strSql.AppendLine(", QQT.HTM_METH3 "); + // try + // { + // //开启数据库连接查询数据 + // using (IDbContext db = ObjectContainer.GetObject("db_sur")) + // { + // gpPlates = db.Query(strSql.ToString()); + // // logger.Info(gpPlates.Count.ToString()); + // //gpPlates = CommonUtils.DataTableToList(a); + // // logger.Info("gpPlates :" + a.Rows.Count); + // } + // } + // catch (Exception ex) + // { + // logger.Error("GetOrder 报错", ex); + // } + + // return gpPlates; + //} + + + /// + /// 可用订单选择 + /// 订单欠量字段 ORD_REM_CNT + /// + /// 所有符合条件的订单 集合 + public IList GetOrder(string strWHereOrd, string str, string strSpecialOrd) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + StringBuilder strRemSql = new StringBuilder(); //声明订单欠量sql + IList gpPlates = null; + + //查询可用订单以及常用字段 + + //测试test指定 + strSql.AppendLine(" SELECT * from("); + + strSql.AppendLine(" SELECT DISTINCT"); + strSql.AppendLine(" ORD_REMARK.REMARK ,"); + strSql.AppendLine(" BOI.ORD_NO, BOI.ORD_ITEM, QQD.THK_TOL_MIN ,QQD.THK_TOL_MAX ,BOI.REC_STS, BOI.PLN_ORD, BOI.PLN_ORD_ITEM, BOI.ORD_STS, BOI.HOLD_FL, BOI.HOLD_DATE, BOI.HOLD_TIME, BOI.HOLD_EMP_ID "); + strSql.AppendLine(", BOI.CURRENCY, BOI.EXTRA_FL, BOI.DISCON_PRC, BOI.TOT_PRC, BOI.TRANS_PRC, BOI.EMP_ID, BOI.PROD_PRC, BOI.REG_DATE, BOI.REG_TIME, BOI.CONF_DATE "); + strSql.AppendLine(", BOI.CONF_TIME, BOI.CONF_EMP_ID, BOI.CUST_CD, BOI.ORD_CUST_CD, BOI.PROD_DGR, BOI.SALE_WAY, BOI.DEPT_CD, BOI.DEST_CD, BOI.DEST_DETAIL "); + strSql.AppendLine(", BOI.ENDUSE_CD, BOI.STLGRD, BOI.PAYMENT_COND, BOI.DEL_COND, BOI.DEL_TOL_UNIT, BOI.DEL_TOL_MAX, BOI.DEL_TOL_MIN, BOI.WGT_UNIT, BOI.WGT_GRP "); + strSql.AppendLine(", BOI.PROD_WGT, BOI.PROD_WGT_MIN, BOI.PROD_WGT_MAX, BOI.TOT_WGT, BOI.STDSPEC, BOI.STDSPEC_YY, BOI.ORD_SIZE, BOI.ORD_WID, BOI.ORD_LEN, BOI.ORD_THK "); + strSql.AppendLine(", BOI.INDIA, BOI.OUTDIA, BOI.CAN_FL, BOI.CAN_DATE, BOI.CAN_TIME, BOI.CAN_EMP_ID, BOI.MOD_FL, BOI.MOD_DATE, BOI.MOD_TIME, BOI.DEL_FR_DATE, BOI.DEL_TO_DATE "); + strSql.AppendLine(", BOI.CUST_DEL_FR_DATE, BOI.CUST_DEL_TO_DATE, BOI.ORD_PROD_END_DATE, BOI.ORD_PROD_END_TIME, BOI.ORD_SHIP_END_DATE, BOI.ORD_SHIP_END_TIME, BOI.ORD_ACCP_DATE "); + strSql.AppendLine(", BOI.ORD_ACCP_TIME, BOI.CUST_REQ_PLANT, BOI.TENT_REQ_PLANT, BOI.CONF_PLANT, BOI.CUST_SPEC_NO, BOI.MARKING_WAY, BOI.STAMP, BOI.TRANSP_WAY, BOI.ORD_KND "); + strSql.AppendLine(", BOI.TRIM_FL, BOI.URGNT_FL, BOI.UST_FL, BOI.PAYMENT_FL, BOI.PAYMENT_DATE, BOI.PAYMENT_TIME, BOI.PAYMENT_EMP_ID, BOI.PACK_WAY, BOI.PACK_WGT_MAX "); + strSql.AppendLine(", BOI.PACK_WGT_MIN, BOI.NUM_PROD, BOI.SALE_EMP_ID, BOI.END_CUST_CD, BOI.INSP_CD, BOI.DOME_FL, BOI.PROD_CD, BOI.PROD_THK_TGT, BOI.SIZE_KND, BOI.ORD_LEN_MIN "); + strSql.AppendLine(", BOI.ORD_LEN_MAX, BOI.MATR_FL, BOI.CONT_END_DATE, BOI.CONT_END_TIME, BOI.CONT_END_EMP_ID, BOI.VESSEL_NO, BOI.CUST_REQ_NO, BOI.COLOR_STROKE, BOI.RELEASE_DATE "); + strSql.AppendLine(", BOI.RELEASE_TIME, BOI.RELEASE_EMP_ID, BOI.PLN_SMS_PLT, BOI.PLN_MILL_PLT, BOI.CFM_SMS_PLT, BOI.CFM_MILL_PLT, BOI.HTM_SHOT_BLAST "); + strSql.AppendLine(", BOI.INS_DATE, BOI.INS_TIME, BOI.INS_EMPID, BOI.INS_PGMID, BOI.UPD_DATE, BOI.UPD_TIME, BOI.UPD_EMPID, BOI.UPD_PGMID, BOI.SEALMEMO "); + strSql.AppendLine(", BOI.INSPUNITCODEA, BOI.INSPUNITCODEB, BOI.INSPUNITCODEC, BOI.PRODSPECNOA, BOI.PRODSPECNOB, BOI.PRODSPECNOC, BOI.PAINTNUM, BOI.LP_HD_THK, BOI.LP_MD_THK, BOI.LP_TL_THK "); + strSql.AppendLine(", BOI.LP_LEN1, BOI.LP_LEN2, BOI.LP_LEN3, BOI.LP_LEN4, BOI.LP_LEN5, BOI.IMP_CONT, BOI.INSPECT_ORGAN, BOI.CONTRACT_NO, BOI.TRIAL_PRODUCT, BOI.TRIAL_NUM, BOI.TRIAL_STR "); + strSql.AppendLine(", BOI.TRIAL_END, BOI.SIDEMARK, BOI.JIT_STRINGA, BOI.JIT_STRINGB, BOI.JIT_STRINGC, BOI.JITID, BOI.JIT_FLAG, BOI.QO_FL, BOI.SAMPLE_MEMO, BOI.SIZE_MEMO, BOI.PACK_MEMO "); + strSql.AppendLine(", BOI.FLUSH_FL, BOI.APPOINT_PLT, BOI.MORD_DESIGN_WGT, BOI.MORD_FL, BOI.APPOINT_PLT_REASON, BOI.SURFACE_REQUESTS, BOI.STAMP_FL, BOI.UST_INSP_FL, BOI.SPRAY_FL "); + strSql.AppendLine(", BOI.BUFPOOL_CD, BOI.MULTI_INSP_FL, BOI.CONTRACT_DATE, BOI.DELIVERY_STATUS, BOI.CUST_CLASS, BOI.CUST_LEVEL, BOI.SPECIAL_OPR_REQ, BOI.WITNESS_CONTENT, BOI.COGGING_FLAG "); + strSql.AppendLine(", BOI.STD_DET_CLASS_CD, BOI.STD_DET_CLASS_LVL, BOI.CERT_NOTE, BOI.INSPECT_FLAG, BOI.E2E_CUST, BOI.CUST_PURCHASE, BOI.GUID, BOI.NEW_CLASS_STATE, BOI.FACEPAINT "); + strSql.AppendLine(", BOI.IS_JC, BOI.UST_JC, BOI.LEVEL_JM, BOI.ORDER_NOFH, BOI.ITEM_NOFH, BOI.ORDER_THK_JC, BOI.ORDER_THK_FC, BOI.TYPEFH, BOI.PRODTYPENO, BOI.STEEL_SPRAY "); + strSql.AppendLine(", BOI.STEEL_PACK, BOI.STEEL_SHOTBLAST, BOI.STEEL_SLOTEPROCESS, BOI.ORDERQTY, BOI.ORDER_CNT, BOI.DELIVERY_STATUS1, BOI.DELIVERY_STATUS2, BOI.DELIVERY_STATUS3 "); + strSql.AppendLine(", BOI.SPECNOA, BOI.SPECNOB, BOI.SPECNOC, BOI.SPECNOA_YY, BOI.SPECNOB_YY, BOI.SPECNOC_YY, BOI.INSPUNITCODE, BOI.SUBCUSTNO, BOI.ISSHIPORDER, BOI.SAILINGDATE "); + strSql.AppendLine(", BOI.MARINEBOARD, BOI.ORDERNOYPK, BOI.ORDERITEMYPK, BOI.SORTINGMARK, BOI.UST_FL_PRINT, BOI.PRINTUTLEVEL, BOI.RULLBOARDCUT, BOI.PAINTUPT, BOI.ORDERPRICEB "); + strSql.AppendLine(", BOI.ADJUSTPRICE, BOI.HOTUT, BOI.HOTUTRATE, BOI.SPECIALSIGN, BOI.UST_MODE, BOI.INSP_CD1, BOI.INSP_CD2, BOI.QKL_CUSTNO "); + strSql.AppendLine(", CPP.ORD_WGT "); + //TODO:TEST_DATA + //strSql.AppendLine(",FLOOR( (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100)/ TRUNC(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85,3)) AS SUB_LACK_NUM "); + + //20240105改 + strSql.AppendLine(" , round((SELECT COUNT(A.REQ_SEQ_NO) "); + strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + strSql.AppendLine(" WHERE 1 = 1 "); + strSql.AppendLine(" AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + strSql.AppendLine(" AND A.SEQ >= '01' "); + strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + strSql.AppendLine(" AND A.ORD_FL = '1' "); + strSql.AppendLine(" AND B.REC_STS = '1') + (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100) / TRUNC(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85, 3)) AS SUB_LACK_NUM "); + //20240105改 + strSql.AppendLine(" ,nvl((SELECT sum(A.wgt) "); + strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + strSql.AppendLine(" WHERE 1 = 1 "); + strSql.AppendLine(" AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + strSql.AppendLine(" AND A.SEQ >= '01' "); + strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + strSql.AppendLine(" AND A.ORD_FL = '1' "); + strSql.AppendLine(" AND B.REC_STS = '1'),0) + (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100) AS SUB_LACK_WGT "); + + strSql.AppendLine(",QQT.HTM_METH1 "); + strSql.AppendLine(",QQT.HTM_METH2 "); + strSql.AppendLine(",QQT.HTM_METH3 "); + strSql.AppendLine(",MATR.ROUNDSTD "); + //strSql.AppendLine(",count(EP_SLAB_D.REQ_SEQ_NO) SLAB_LACK_NUM , count(EP_SLAB_D.REQ_SEQ_NO) + FLOOR( (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100)/ TRUNC(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85,3)) AS LACK_NUM "); + + strSql.AppendLine(" ,round((SELECT COUNT(A.REQ_SEQ_NO) "); + strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + strSql.AppendLine(" WHERE 1 = 1 "); + strSql.AppendLine(" AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + strSql.AppendLine(" AND A.SEQ >= '01' "); + strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + strSql.AppendLine(" AND A.ORD_FL = '1' "); + strSql.AppendLine(" AND B.REC_STS = '1') ) SLAB_LACK_NUM "); + strSql.AppendLine(" ,round((SELECT COUNT(A.REQ_SEQ_NO) "); + strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + strSql.AppendLine(" WHERE 1 = 1 "); + strSql.AppendLine(" AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + strSql.AppendLine(" AND A.SEQ >= '01' "); + strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + strSql.AppendLine(" AND A.ORD_FL = '1' "); + strSql.AppendLine(" AND B.REC_STS = '1') + (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100) / TRUNC(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85, 3)) AS LACK_NUM "); + + strSql.AppendLine("FROM NISCO.cp_prc CPP "); + strSql.AppendLine("INNER JOIN "); + strSql.AppendLine("NISCO.BP_ORDER_ITEM boi "); + strSql.AppendLine("ON BOI.ORD_NO = CPP.ORD_NO "); + strSql.AppendLine("AND BOI.ORD_ITEM = CPP.ORD_ITEM "); + strSql.AppendLine("AND BOI.ORD_WID <> 0 "); + strSql.AppendLine("AND BOI.ORD_LEN <> 0 "); + strSql.AppendLine("AND BOI.ORD_THK <> 0 "); + strSql.AppendLine("LEFT JOIN NISCO.QP_QLTY_TECH QQT "); + strSql.AppendLine("ON BOI.ORD_NO = QQT.ORD_NO "); + strSql.AppendLine("AND BOI.ORD_ITEM = QQT.ORD_ITEM "); + strSql.AppendLine("LEFT JOIN NISCO.QP_QLTY_DELV QQD"); + strSql.AppendLine("ON BOI.ORD_NO = QQD.ORD_NO"); + strSql.AppendLine("AND BOI.ORD_ITEM = QQD.ORD_ITEM"); + + strSql.AppendLine("LEFT JOIN NISCO.EP_REQ_SLAB EP_SLAB_B "); + strSql.AppendLine("ON EP_SLAB_B.ORD_NO = QQD.ORD_NO "); + strSql.AppendLine("AND EP_SLAB_B.ORD_ITEM = QQD.ORD_ITEM "); + strSql.AppendLine("AND EP_SLAB_B.REC_STS = '1'"); + + //ORD_REMARK + strSql.AppendLine(" LEFT JOIN (SELECT * from (SELECT replace(A.COLOR_STROKE,' ','') REMARK,ORD_NO,ORD_ITEM FROM NISCO.BP_ORDER_ITEM A UNION all SELECT REMARK,ORD_NO,ORD_ITEM FROM NISCO.ORD_REMARK where ROWNUM=1)) ORD_REMARK "); + strSql.AppendLine("ON ORD_REMARK.ORD_NO = boi.ORD_NO "); + strSql.AppendLine("AND ORD_REMARK.ORD_ITEM= boi.ORD_ITEM"); + //QP_QLTY_MATR + strSql.AppendLine("LEFT JOIN NISCO.QP_QLTY_MATR MATR "); + strSql.AppendLine("ON MATR.ORD_NO = boi.ORD_NO "); + strSql.AppendLine("AND MATR.ORD_ITEM= boi.ORD_ITEM"); + + strSql.AppendLine("LEFT JOIN NISCO.EP_REQ_SLAB_D EP_SLAB_D"); + strSql.AppendLine("ON EP_SLAB_D.ORD_NO = QQD.ORD_NO "); + strSql.AppendLine("AND EP_SLAB_D.REQ_SEQ_NO= EP_SLAB_D.REQ_SEQ_NO"); + strSql.AppendLine("AND EP_SLAB_D.ORD_ITEM = QQD.ORD_ITEM "); + strSql.AppendLine("AND EP_SLAB_D.BLOCK_SEQ >= '01'"); + strSql.AppendLine("AND EP_SLAB_D.SEQ >= '01'"); + strSql.AppendLine("AND EP_SLAB_B.REC_STS = '1'"); + + //20240105改 + strSql.AppendLine("WHERE 1=1 "); + strSql.AppendLine(" AND (SELECT COUNT(A.REQ_SEQ_NO) "); + strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + strSql.AppendLine(" WHERE 1 = 1 "); + strSql.AppendLine(" AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + strSql.AppendLine(" AND A.SEQ >= '01' "); + strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + strSql.AppendLine(" AND A.ORD_FL = '1' "); + strSql.AppendLine(" AND B.REC_STS = '1') + (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100) / TRUNC(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85, 3) >= 0.95 "); + + strSql.AppendLine("AND boi.PROD_CD = 'PP' "); + strSql.AppendLine("AND boi.REC_STS = '2' "); + strSql.AppendLine("and boi.ORD_STS IN('E', 'D') "); + strSql.AppendLine("AND boi.ord_knd IN('A') "); + //strSql.AppendLine("AND boi.ORD_NO NOT LIKE 'OMZ%'"); + strSql.AppendLine(strWHereOrd); + strSql.AppendLine(strSpecialOrd); + strSql.AppendLine(str); + + //测试test + strSql.AppendLine(" or (boi.ORD_NO ='" + glstrOrdNo + "'"); + strSql.AppendLine(" AND boi.ORD_ITEM ='" + glstrOrdItem + "')"); + + //20240119注 + //strSql.AppendLine("GROUP BY BOI.ORD_NO, BOI.ORD_ITEM, QQD.THK_TOL_MIN ,QQD.THK_TOL_MAX ,BOI.REC_STS, BOI.PLN_ORD, BOI.PLN_ORD_ITEM, BOI.ORD_STS, BOI.HOLD_FL, BOI.HOLD_DATE, BOI.HOLD_TIME, BOI.HOLD_EMP_ID "); + //strSql.AppendLine(", BOI.CURRENCY, BOI.EXTRA_FL, BOI.DISCON_PRC, BOI.TOT_PRC, BOI.TRANS_PRC, BOI.EMP_ID, BOI.PROD_PRC, BOI.REG_DATE, BOI.REG_TIME, BOI.CONF_DATE "); + //strSql.AppendLine(", BOI.CONF_TIME, BOI.CONF_EMP_ID, BOI.CUST_CD, BOI.ORD_CUST_CD, BOI.PROD_DGR, BOI.SALE_WAY, BOI.DEPT_CD, BOI.DEST_CD, BOI.DEST_DETAIL "); + //strSql.AppendLine(", BOI.ENDUSE_CD, BOI.STLGRD, BOI.PAYMENT_COND, BOI.DEL_COND, BOI.DEL_TOL_UNIT, BOI.DEL_TOL_MAX, BOI.DEL_TOL_MIN, BOI.WGT_UNIT, BOI.WGT_GRP "); + //strSql.AppendLine(", BOI.PROD_WGT, BOI.PROD_WGT_MIN, BOI.PROD_WGT_MAX, BOI.TOT_WGT, BOI.STDSPEC, BOI.STDSPEC_YY, BOI.ORD_SIZE, BOI.ORD_WID, BOI.ORD_LEN, BOI.ORD_THK "); + //strSql.AppendLine(", BOI.INDIA, BOI.OUTDIA, BOI.CAN_FL, BOI.CAN_DATE, BOI.CAN_TIME, BOI.CAN_EMP_ID, BOI.MOD_FL, BOI.MOD_DATE, BOI.MOD_TIME, BOI.DEL_FR_DATE, BOI.DEL_TO_DATE "); + //strSql.AppendLine(", BOI.CUST_DEL_FR_DATE, BOI.CUST_DEL_TO_DATE, BOI.ORD_PROD_END_DATE, BOI.ORD_PROD_END_TIME, BOI.ORD_SHIP_END_DATE, BOI.ORD_SHIP_END_TIME, BOI.ORD_ACCP_DATE "); + //strSql.AppendLine(", BOI.ORD_ACCP_TIME, BOI.CUST_REQ_PLANT, BOI.TENT_REQ_PLANT, BOI.CONF_PLANT, BOI.CUST_SPEC_NO, BOI.MARKING_WAY, BOI.STAMP, BOI.TRANSP_WAY, BOI.ORD_KND "); + //strSql.AppendLine(", BOI.TRIM_FL, BOI.URGNT_FL, BOI.UST_FL, BOI.PAYMENT_FL, BOI.PAYMENT_DATE, BOI.PAYMENT_TIME, BOI.PAYMENT_EMP_ID, BOI.PACK_WAY, BOI.PACK_WGT_MAX "); + //strSql.AppendLine(", BOI.PACK_WGT_MIN, BOI.NUM_PROD, BOI.SALE_EMP_ID, BOI.END_CUST_CD, BOI.INSP_CD, BOI.DOME_FL, BOI.PROD_CD, BOI.PROD_THK_TGT, BOI.SIZE_KND, BOI.ORD_LEN_MIN "); + //strSql.AppendLine(", BOI.ORD_LEN_MAX, BOI.MATR_FL, BOI.CONT_END_DATE, BOI.CONT_END_TIME, BOI.CONT_END_EMP_ID, BOI.VESSEL_NO, BOI.CUST_REQ_NO, BOI.COLOR_STROKE, BOI.RELEASE_DATE "); + //strSql.AppendLine(", BOI.RELEASE_TIME, BOI.RELEASE_EMP_ID, BOI.PLN_SMS_PLT, BOI.PLN_MILL_PLT, BOI.CFM_SMS_PLT, BOI.CFM_MILL_PLT, BOI.HTM_SHOT_BLAST "); + //strSql.AppendLine(", BOI.INS_DATE, BOI.INS_TIME, BOI.INS_EMPID, BOI.INS_PGMID, BOI.UPD_DATE, BOI.UPD_TIME, BOI.UPD_EMPID, BOI.UPD_PGMID, BOI.SEALMEMO "); + //strSql.AppendLine(", BOI.INSPUNITCODEA, BOI.INSPUNITCODEB, BOI.INSPUNITCODEC, BOI.PRODSPECNOA, BOI.PRODSPECNOB, BOI.PRODSPECNOC, BOI.PAINTNUM, BOI.LP_HD_THK, BOI.LP_MD_THK, BOI.LP_TL_THK "); + //strSql.AppendLine(", BOI.LP_LEN1, BOI.LP_LEN2, BOI.LP_LEN3, BOI.LP_LEN4, BOI.LP_LEN5, BOI.IMP_CONT, BOI.INSPECT_ORGAN, BOI.CONTRACT_NO, BOI.TRIAL_PRODUCT, BOI.TRIAL_NUM, BOI.TRIAL_STR "); + //strSql.AppendLine(", BOI.TRIAL_END, BOI.SIDEMARK, BOI.JIT_STRINGA, BOI.JIT_STRINGB, BOI.JIT_STRINGC, BOI.JITID, BOI.JIT_FLAG, BOI.QO_FL, BOI.SAMPLE_MEMO, BOI.SIZE_MEMO, BOI.PACK_MEMO "); + //strSql.AppendLine(", BOI.FLUSH_FL, BOI.APPOINT_PLT, BOI.MORD_DESIGN_WGT, BOI.MORD_FL, BOI.APPOINT_PLT_REASON, BOI.SURFACE_REQUESTS, BOI.STAMP_FL, BOI.UST_INSP_FL, BOI.SPRAY_FL "); + //strSql.AppendLine(", BOI.BUFPOOL_CD, BOI.MULTI_INSP_FL, BOI.CONTRACT_DATE, BOI.DELIVERY_STATUS, BOI.CUST_CLASS, BOI.CUST_LEVEL, BOI.SPECIAL_OPR_REQ, BOI.WITNESS_CONTENT, BOI.COGGING_FLAG "); + //strSql.AppendLine(", BOI.STD_DET_CLASS_CD, BOI.STD_DET_CLASS_LVL, BOI.CERT_NOTE, BOI.INSPECT_FLAG, BOI.E2E_CUST, BOI.CUST_PURCHASE, BOI.GUID, BOI.NEW_CLASS_STATE, BOI.FACEPAINT "); + //strSql.AppendLine(", BOI.IS_JC, BOI.UST_JC, BOI.LEVEL_JM, BOI.ORDER_NOFH, BOI.ITEM_NOFH, BOI.ORDER_THK_JC, BOI.ORDER_THK_FC, BOI.TYPEFH, BOI.PRODTYPENO, BOI.STEEL_SPRAY "); + //strSql.AppendLine(", BOI.STEEL_PACK, BOI.STEEL_SHOTBLAST, BOI.STEEL_SLOTEPROCESS, BOI.ORDERQTY, BOI.ORDER_CNT, BOI.DELIVERY_STATUS1, BOI.DELIVERY_STATUS2, BOI.DELIVERY_STATUS3 "); + //strSql.AppendLine(", BOI.SPECNOA, BOI.SPECNOB, BOI.SPECNOC, BOI.SPECNOA_YY, BOI.SPECNOB_YY, BOI.SPECNOC_YY, BOI.INSPUNITCODE, BOI.SUBCUSTNO, BOI.ISSHIPORDER, BOI.SAILINGDATE "); + //strSql.AppendLine(", BOI.MARINEBOARD, BOI.ORDERNOYPK, BOI.ORDERITEMYPK, BOI.SORTINGMARK, BOI.UST_FL_PRINT, BOI.PRINTUTLEVEL, BOI.RULLBOARDCUT, BOI.PAINTUPT, BOI.ORDERPRICEB "); + //strSql.AppendLine(", BOI.ADJUSTPRICE, BOI.HOTUT, BOI.HOTUTRATE, BOI.SPECIALSIGN, BOI.UST_MODE, BOI.INSP_CD1, BOI.INSP_CD2, BOI.QKL_CUSTNO "); + //strSql.AppendLine(", CPP.ORD_WGT ,FLOOR( (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100)/(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85)) ,(NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100) "); + //strSql.AppendLine(", QQT.HTM_METH1 "); + //strSql.AppendLine(", QQT.HTM_METH2 "); + //strSql.AppendLine(", QQT.HTM_METH3 "); + //strSql.AppendLine(", MATR.ROUNDSTD "); + //strSql.AppendLine(", ORD_REMARK.REMARK "); + + //测试test指定 + strSql.AppendLine(") where ORD_NO ='" + glstrOrdNo + "' AND ORD_ITEM ='" + glstrOrdItem + "' "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + gpPlates = db.Query(strSql.ToString()); + // logger.Info(gpPlates.Count.ToString()); + //gpPlates = CommonUtils.DataTableToList(a); + // logger.Info("gpPlates :" + a.Rows.Count); + } + } + catch (Exception ex) + { + logger.Error("GetOrder 报错", ex); + } + + return gpPlates; + } + + + /// + /// 获取订单当前状态 + /// + /// + /// + public IList GetOrderNow(string orderNow) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gOrderNow = null; + + //查询可用订单以及常用字段 + + strSql.AppendLine(" SELECT * from NISCO.BP_ORDER_ITEM WHERE 1=1 "); + + strSql.AppendLine(orderNow); + + //测试20240119 + logger.InfoFormat("获取订单当前状态SQL:{0}", strSql); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + gOrderNow = db.Query(strSql.ToString()); + + } + } + catch (Exception ex) + { + logger.Error("GetOrderNow 报错", ex); + } + + return gOrderNow; + } + + public IList GetOrder1(string strWHereOrd, string str, string strSpecialOrd) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + StringBuilder strRemSql = new StringBuilder(); //声明订单欠量sql + IList gpPlates = null; + + //查询可用订单以及常用字段 + strSql.AppendLine(" SELECT * from("); + strSql.AppendLine(" SELECT DISTINCT"); + strSql.AppendLine(" ORD_REMARK.REMARK ,"); + strSql.AppendLine(" BOI.ORD_NO, BOI.ORD_ITEM, QQD.THK_TOL_MIN ,QQD.THK_TOL_MAX ,BOI.REC_STS, BOI.PLN_ORD, BOI.PLN_ORD_ITEM, BOI.ORD_STS, BOI.HOLD_FL, BOI.HOLD_DATE, BOI.HOLD_TIME, BOI.HOLD_EMP_ID "); + strSql.AppendLine(", BOI.CURRENCY, BOI.EXTRA_FL, BOI.DISCON_PRC, BOI.TOT_PRC, BOI.TRANS_PRC, BOI.EMP_ID, BOI.PROD_PRC, BOI.REG_DATE, BOI.REG_TIME, BOI.CONF_DATE "); + strSql.AppendLine(", BOI.CONF_TIME, BOI.CONF_EMP_ID, BOI.CUST_CD, BOI.ORD_CUST_CD, BOI.PROD_DGR, BOI.SALE_WAY, BOI.DEPT_CD, BOI.DEST_CD, BOI.DEST_DETAIL "); + strSql.AppendLine(", BOI.ENDUSE_CD, BOI.STLGRD, BOI.PAYMENT_COND, BOI.DEL_COND, BOI.DEL_TOL_UNIT, BOI.DEL_TOL_MAX, BOI.DEL_TOL_MIN, BOI.WGT_UNIT, BOI.WGT_GRP "); + strSql.AppendLine(", BOI.PROD_WGT, BOI.PROD_WGT_MIN, BOI.PROD_WGT_MAX, BOI.TOT_WGT, BOI.STDSPEC, BOI.STDSPEC_YY, BOI.ORD_SIZE, BOI.ORD_WID, BOI.ORD_LEN, BOI.ORD_THK "); + strSql.AppendLine(", BOI.INDIA, BOI.OUTDIA, BOI.CAN_FL, BOI.CAN_DATE, BOI.CAN_TIME, BOI.CAN_EMP_ID, BOI.MOD_FL, BOI.MOD_DATE, BOI.MOD_TIME, BOI.DEL_FR_DATE, BOI.DEL_TO_DATE "); + strSql.AppendLine(", BOI.CUST_DEL_FR_DATE, BOI.CUST_DEL_TO_DATE, BOI.ORD_PROD_END_DATE, BOI.ORD_PROD_END_TIME, BOI.ORD_SHIP_END_DATE, BOI.ORD_SHIP_END_TIME, BOI.ORD_ACCP_DATE "); + strSql.AppendLine(", BOI.ORD_ACCP_TIME, BOI.CUST_REQ_PLANT, BOI.TENT_REQ_PLANT, BOI.CONF_PLANT, BOI.CUST_SPEC_NO, BOI.MARKING_WAY, BOI.STAMP, BOI.TRANSP_WAY, BOI.ORD_KND "); + strSql.AppendLine(", BOI.TRIM_FL, BOI.URGNT_FL, BOI.UST_FL, BOI.PAYMENT_FL, BOI.PAYMENT_DATE, BOI.PAYMENT_TIME, BOI.PAYMENT_EMP_ID, BOI.PACK_WAY, BOI.PACK_WGT_MAX "); + strSql.AppendLine(", BOI.PACK_WGT_MIN, BOI.NUM_PROD, BOI.SALE_EMP_ID, BOI.END_CUST_CD, BOI.INSP_CD, BOI.DOME_FL, BOI.PROD_CD, BOI.PROD_THK_TGT, BOI.SIZE_KND, BOI.ORD_LEN_MIN "); + strSql.AppendLine(", BOI.ORD_LEN_MAX, BOI.MATR_FL, BOI.CONT_END_DATE, BOI.CONT_END_TIME, BOI.CONT_END_EMP_ID, BOI.VESSEL_NO, BOI.CUST_REQ_NO, BOI.COLOR_STROKE, BOI.RELEASE_DATE "); + strSql.AppendLine(", BOI.RELEASE_TIME, BOI.RELEASE_EMP_ID, BOI.PLN_SMS_PLT, BOI.PLN_MILL_PLT, BOI.CFM_SMS_PLT, BOI.CFM_MILL_PLT, BOI.HTM_SHOT_BLAST "); + strSql.AppendLine(", BOI.INS_DATE, BOI.INS_TIME, BOI.INS_EMPID, BOI.INS_PGMID, BOI.UPD_DATE, BOI.UPD_TIME, BOI.UPD_EMPID, BOI.UPD_PGMID, BOI.SEALMEMO "); + strSql.AppendLine(", BOI.INSPUNITCODEA, BOI.INSPUNITCODEB, BOI.INSPUNITCODEC, BOI.PRODSPECNOA, BOI.PRODSPECNOB, BOI.PRODSPECNOC, BOI.PAINTNUM, BOI.LP_HD_THK, BOI.LP_MD_THK, BOI.LP_TL_THK "); + strSql.AppendLine(", BOI.LP_LEN1, BOI.LP_LEN2, BOI.LP_LEN3, BOI.LP_LEN4, BOI.LP_LEN5, BOI.IMP_CONT, BOI.INSPECT_ORGAN, BOI.CONTRACT_NO, BOI.TRIAL_PRODUCT, BOI.TRIAL_NUM, BOI.TRIAL_STR "); + strSql.AppendLine(", BOI.TRIAL_END, BOI.SIDEMARK, BOI.JIT_STRINGA, BOI.JIT_STRINGB, BOI.JIT_STRINGC, BOI.JITID, BOI.JIT_FLAG, BOI.QO_FL, BOI.SAMPLE_MEMO, BOI.SIZE_MEMO, BOI.PACK_MEMO "); + strSql.AppendLine(", BOI.FLUSH_FL, BOI.APPOINT_PLT, BOI.MORD_DESIGN_WGT, BOI.MORD_FL, BOI.APPOINT_PLT_REASON, BOI.SURFACE_REQUESTS, BOI.STAMP_FL, BOI.UST_INSP_FL, BOI.SPRAY_FL "); + strSql.AppendLine(", BOI.BUFPOOL_CD, BOI.MULTI_INSP_FL, BOI.CONTRACT_DATE, BOI.DELIVERY_STATUS, BOI.CUST_CLASS, BOI.CUST_LEVEL, BOI.SPECIAL_OPR_REQ, BOI.WITNESS_CONTENT, BOI.COGGING_FLAG "); + strSql.AppendLine(", BOI.STD_DET_CLASS_CD, BOI.STD_DET_CLASS_LVL, BOI.CERT_NOTE, BOI.INSPECT_FLAG, BOI.E2E_CUST, BOI.CUST_PURCHASE, BOI.GUID, BOI.NEW_CLASS_STATE, BOI.FACEPAINT "); + strSql.AppendLine(", BOI.IS_JC, BOI.UST_JC, BOI.LEVEL_JM, BOI.ORDER_NOFH, BOI.ITEM_NOFH, BOI.ORDER_THK_JC, BOI.ORDER_THK_FC, BOI.TYPEFH, BOI.PRODTYPENO, BOI.STEEL_SPRAY "); + strSql.AppendLine(", BOI.STEEL_PACK, BOI.STEEL_SHOTBLAST, BOI.STEEL_SLOTEPROCESS, BOI.ORDERQTY, BOI.ORDER_CNT, BOI.DELIVERY_STATUS1, BOI.DELIVERY_STATUS2, BOI.DELIVERY_STATUS3 "); + strSql.AppendLine(", BOI.SPECNOA, BOI.SPECNOB, BOI.SPECNOC, BOI.SPECNOA_YY, BOI.SPECNOB_YY, BOI.SPECNOC_YY, BOI.INSPUNITCODE, BOI.SUBCUSTNO, BOI.ISSHIPORDER, BOI.SAILINGDATE "); + strSql.AppendLine(", BOI.MARINEBOARD, BOI.ORDERNOYPK, BOI.ORDERITEMYPK, BOI.SORTINGMARK, BOI.UST_FL_PRINT, BOI.PRINTUTLEVEL, BOI.RULLBOARDCUT, BOI.PAINTUPT, BOI.ORDERPRICEB "); + strSql.AppendLine(", BOI.ADJUSTPRICE, BOI.HOTUT, BOI.HOTUTRATE, BOI.SPECIALSIGN, BOI.UST_MODE, BOI.INSP_CD1, BOI.INSP_CD2, BOI.QKL_CUSTNO "); + strSql.AppendLine(", CPP.ORD_WGT "); + //TODO:TEST_DATA + strSql.AppendLine(",FLOOR( (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100)/ TRUNC(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85,3)) AS SUB_LACK_NUM "); + //strSql.AppendLine(",1 AS SUB_LACK_NUM "); + strSql.AppendLine(",(NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100) AS SUB_LACK_WGT "); + strSql.AppendLine(",QQT.HTM_METH1 "); + strSql.AppendLine(",QQT.HTM_METH2 "); + strSql.AppendLine(",QQT.HTM_METH3 "); + strSql.AppendLine(",MATR.ROUNDSTD "); + //strSql.AppendLine(",count(EP_SLAB_D.REQ_SEQ_NO) SLAB_LACK_NUM , count(EP_SLAB_D.REQ_SEQ_NO) + FLOOR( (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100)/ TRUNC(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85,3)) AS LACK_NUM "); + + strSql.AppendLine(" ,round((SELECT COUNT(A.REQ_SEQ_NO) "); + strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + strSql.AppendLine(" WHERE 1 = 1 "); + strSql.AppendLine(" AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + strSql.AppendLine(" AND A.SEQ >= '01' "); + strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + strSql.AppendLine(" AND A.ORD_FL = '1' "); + strSql.AppendLine(" AND B.REC_STS = '1') ) SLAB_LACK_NUM "); + strSql.AppendLine(" ,round((SELECT COUNT(A.REQ_SEQ_NO) "); + strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + strSql.AppendLine(" WHERE 1 = 1 "); + strSql.AppendLine(" AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + strSql.AppendLine(" AND A.SEQ >= '01' "); + strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + strSql.AppendLine(" AND A.ORD_FL = '1' "); + strSql.AppendLine(" AND B.REC_STS = '1') + (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100) / TRUNC(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85, 3)) AS LACK_NUM "); + + strSql.AppendLine("FROM NISCO.cp_prc CPP "); + strSql.AppendLine("INNER JOIN "); + strSql.AppendLine("NISCO.BP_ORDER_ITEM boi "); + strSql.AppendLine("ON BOI.ORD_NO = CPP.ORD_NO "); + strSql.AppendLine("AND BOI.ORD_ITEM = CPP.ORD_ITEM "); + strSql.AppendLine("AND BOI.ORD_WID <> 0 "); + strSql.AppendLine("AND BOI.ORD_LEN <> 0 "); + strSql.AppendLine("AND BOI.ORD_THK <> 0 "); + strSql.AppendLine("LEFT JOIN NISCO.QP_QLTY_TECH QQT "); + strSql.AppendLine("ON BOI.ORD_NO = QQT.ORD_NO "); + strSql.AppendLine("AND BOI.ORD_ITEM = QQT.ORD_ITEM "); + strSql.AppendLine("LEFT JOIN NISCO.QP_QLTY_DELV QQD"); + strSql.AppendLine("ON BOI.ORD_NO = QQD.ORD_NO"); + strSql.AppendLine("AND BOI.ORD_ITEM = QQD.ORD_ITEM"); + + strSql.AppendLine("LEFT JOIN NISCO.EP_REQ_SLAB EP_SLAB_B "); + strSql.AppendLine("ON EP_SLAB_B.ORD_NO = QQD.ORD_NO "); + strSql.AppendLine("AND EP_SLAB_B.ORD_ITEM = QQD.ORD_ITEM "); + strSql.AppendLine("AND EP_SLAB_B.REC_STS = '1'"); + + //strSql.AppendLine("LEFT JOIN NISCO.EP_REQ_SLAB EP_SLAB_B"); + //strSql.AppendLine("ON EP_SLAB.REQ_SEQ_NO = EP_SLAB_B.REQ_SEQ_NO"); + //ORD_REMARK + strSql.AppendLine(" LEFT JOIN (SELECT * from (SELECT replace(A.COLOR_STROKE,' ','') REMARK,ORD_NO,ORD_ITEM FROM NISCO.BP_ORDER_ITEM A UNION all SELECT REMARK,ORD_NO,ORD_ITEM FROM NISCO.ORD_REMARK where ROWNUM=1)) ORD_REMARK "); + strSql.AppendLine("ON ORD_REMARK.ORD_NO = boi.ORD_NO "); + strSql.AppendLine("AND ORD_REMARK.ORD_ITEM= boi.ORD_ITEM"); + //QP_QLTY_MATR + strSql.AppendLine("LEFT JOIN NISCO.QP_QLTY_MATR MATR "); + strSql.AppendLine("ON MATR.ORD_NO = boi.ORD_NO "); + strSql.AppendLine("AND MATR.ORD_ITEM= boi.ORD_ITEM"); + + strSql.AppendLine("LEFT JOIN NISCO.EP_REQ_SLAB_D EP_SLAB_D"); + strSql.AppendLine("ON EP_SLAB_D.ORD_NO = QQD.ORD_NO "); + strSql.AppendLine("AND EP_SLAB_D.REQ_SEQ_NO= EP_SLAB_D.REQ_SEQ_NO"); + strSql.AppendLine("AND EP_SLAB_D.ORD_ITEM = QQD.ORD_ITEM "); + strSql.AppendLine("AND EP_SLAB_D.BLOCK_SEQ >= '01'"); + strSql.AppendLine("AND EP_SLAB_D.SEQ >= '01'"); + strSql.AppendLine("AND EP_SLAB_B.REC_STS = '1'"); + + //TODO:TEST_DATA + //strSql.AppendLine("WHERE 1=1 "); + //strSql.AppendLine(" AND ((SELECT COUNT( A.REQ_SEQ_NO) "); + //strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + //strSql.AppendLine(" WHERE "); + //strSql.AppendLine(" 1 = 1 AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + //strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + //strSql.AppendLine(" AND A.SEQ >= '01' "); + //strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + //strSql.AppendLine(" AND B.REC_STS = '1') + NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100)/(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85)>=0.95 "); + + //20240105改 + strSql.AppendLine("WHERE 1=1 "); + strSql.AppendLine(" AND (SELECT COUNT(A.REQ_SEQ_NO) "); + strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + strSql.AppendLine(" WHERE 1 = 1 "); + strSql.AppendLine(" AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + strSql.AppendLine(" AND A.SEQ >= '01' "); + strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + strSql.AppendLine(" AND A.ORD_FL = '1' "); + strSql.AppendLine(" AND B.REC_STS = '1') + (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100) / TRUNC(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85, 3) >= 0.95 "); + + strSql.AppendLine("AND boi.PROD_CD = 'PP' "); + strSql.AppendLine("AND boi.REC_STS = '2' "); + //strSql.AppendLine("and boi.ORD_STS IN('E', 'D') "); + //strSql.AppendLine("AND boi.ord_knd IN('A') "); + //strSql.AppendLine("AND boi.ORD_NO NOT LIKE 'OMZ%'"); + strSql.AppendLine(strWHereOrd); + strSql.AppendLine(strSpecialOrd); + strSql.AppendLine(str); + + //strSql.AppendLine("GROUP BY BOI.ORD_NO, BOI.ORD_ITEM, QQD.THK_TOL_MIN ,QQD.THK_TOL_MAX ,BOI.REC_STS, BOI.PLN_ORD, BOI.PLN_ORD_ITEM, BOI.ORD_STS, BOI.HOLD_FL, BOI.HOLD_DATE, BOI.HOLD_TIME, BOI.HOLD_EMP_ID "); + //strSql.AppendLine(", BOI.CURRENCY, BOI.EXTRA_FL, BOI.DISCON_PRC, BOI.TOT_PRC, BOI.TRANS_PRC, BOI.EMP_ID, BOI.PROD_PRC, BOI.REG_DATE, BOI.REG_TIME, BOI.CONF_DATE "); + //strSql.AppendLine(", BOI.CONF_TIME, BOI.CONF_EMP_ID, BOI.CUST_CD, BOI.ORD_CUST_CD, BOI.PROD_DGR, BOI.SALE_WAY, BOI.DEPT_CD, BOI.DEST_CD, BOI.DEST_DETAIL "); + //strSql.AppendLine(", BOI.ENDUSE_CD, BOI.STLGRD, BOI.PAYMENT_COND, BOI.DEL_COND, BOI.DEL_TOL_UNIT, BOI.DEL_TOL_MAX, BOI.DEL_TOL_MIN, BOI.WGT_UNIT, BOI.WGT_GRP "); + //strSql.AppendLine(", BOI.PROD_WGT, BOI.PROD_WGT_MIN, BOI.PROD_WGT_MAX, BOI.TOT_WGT, BOI.STDSPEC, BOI.STDSPEC_YY, BOI.ORD_SIZE, BOI.ORD_WID, BOI.ORD_LEN, BOI.ORD_THK "); + //strSql.AppendLine(", BOI.INDIA, BOI.OUTDIA, BOI.CAN_FL, BOI.CAN_DATE, BOI.CAN_TIME, BOI.CAN_EMP_ID, BOI.MOD_FL, BOI.MOD_DATE, BOI.MOD_TIME, BOI.DEL_FR_DATE, BOI.DEL_TO_DATE "); + //strSql.AppendLine(", BOI.CUST_DEL_FR_DATE, BOI.CUST_DEL_TO_DATE, BOI.ORD_PROD_END_DATE, BOI.ORD_PROD_END_TIME, BOI.ORD_SHIP_END_DATE, BOI.ORD_SHIP_END_TIME, BOI.ORD_ACCP_DATE "); + //strSql.AppendLine(", BOI.ORD_ACCP_TIME, BOI.CUST_REQ_PLANT, BOI.TENT_REQ_PLANT, BOI.CONF_PLANT, BOI.CUST_SPEC_NO, BOI.MARKING_WAY, BOI.STAMP, BOI.TRANSP_WAY, BOI.ORD_KND "); + //strSql.AppendLine(", BOI.TRIM_FL, BOI.URGNT_FL, BOI.UST_FL, BOI.PAYMENT_FL, BOI.PAYMENT_DATE, BOI.PAYMENT_TIME, BOI.PAYMENT_EMP_ID, BOI.PACK_WAY, BOI.PACK_WGT_MAX "); + //strSql.AppendLine(", BOI.PACK_WGT_MIN, BOI.NUM_PROD, BOI.SALE_EMP_ID, BOI.END_CUST_CD, BOI.INSP_CD, BOI.DOME_FL, BOI.PROD_CD, BOI.PROD_THK_TGT, BOI.SIZE_KND, BOI.ORD_LEN_MIN "); + //strSql.AppendLine(", BOI.ORD_LEN_MAX, BOI.MATR_FL, BOI.CONT_END_DATE, BOI.CONT_END_TIME, BOI.CONT_END_EMP_ID, BOI.VESSEL_NO, BOI.CUST_REQ_NO, BOI.COLOR_STROKE, BOI.RELEASE_DATE "); + //strSql.AppendLine(", BOI.RELEASE_TIME, BOI.RELEASE_EMP_ID, BOI.PLN_SMS_PLT, BOI.PLN_MILL_PLT, BOI.CFM_SMS_PLT, BOI.CFM_MILL_PLT, BOI.HTM_SHOT_BLAST "); + //strSql.AppendLine(", BOI.INS_DATE, BOI.INS_TIME, BOI.INS_EMPID, BOI.INS_PGMID, BOI.UPD_DATE, BOI.UPD_TIME, BOI.UPD_EMPID, BOI.UPD_PGMID, BOI.SEALMEMO "); + //strSql.AppendLine(", BOI.INSPUNITCODEA, BOI.INSPUNITCODEB, BOI.INSPUNITCODEC, BOI.PRODSPECNOA, BOI.PRODSPECNOB, BOI.PRODSPECNOC, BOI.PAINTNUM, BOI.LP_HD_THK, BOI.LP_MD_THK, BOI.LP_TL_THK "); + //strSql.AppendLine(", BOI.LP_LEN1, BOI.LP_LEN2, BOI.LP_LEN3, BOI.LP_LEN4, BOI.LP_LEN5, BOI.IMP_CONT, BOI.INSPECT_ORGAN, BOI.CONTRACT_NO, BOI.TRIAL_PRODUCT, BOI.TRIAL_NUM, BOI.TRIAL_STR "); + //strSql.AppendLine(", BOI.TRIAL_END, BOI.SIDEMARK, BOI.JIT_STRINGA, BOI.JIT_STRINGB, BOI.JIT_STRINGC, BOI.JITID, BOI.JIT_FLAG, BOI.QO_FL, BOI.SAMPLE_MEMO, BOI.SIZE_MEMO, BOI.PACK_MEMO "); + //strSql.AppendLine(", BOI.FLUSH_FL, BOI.APPOINT_PLT, BOI.MORD_DESIGN_WGT, BOI.MORD_FL, BOI.APPOINT_PLT_REASON, BOI.SURFACE_REQUESTS, BOI.STAMP_FL, BOI.UST_INSP_FL, BOI.SPRAY_FL "); + //strSql.AppendLine(", BOI.BUFPOOL_CD, BOI.MULTI_INSP_FL, BOI.CONTRACT_DATE, BOI.DELIVERY_STATUS, BOI.CUST_CLASS, BOI.CUST_LEVEL, BOI.SPECIAL_OPR_REQ, BOI.WITNESS_CONTENT, BOI.COGGING_FLAG "); + //strSql.AppendLine(", BOI.STD_DET_CLASS_CD, BOI.STD_DET_CLASS_LVL, BOI.CERT_NOTE, BOI.INSPECT_FLAG, BOI.E2E_CUST, BOI.CUST_PURCHASE, BOI.GUID, BOI.NEW_CLASS_STATE, BOI.FACEPAINT "); + //strSql.AppendLine(", BOI.IS_JC, BOI.UST_JC, BOI.LEVEL_JM, BOI.ORDER_NOFH, BOI.ITEM_NOFH, BOI.ORDER_THK_JC, BOI.ORDER_THK_FC, BOI.TYPEFH, BOI.PRODTYPENO, BOI.STEEL_SPRAY "); + //strSql.AppendLine(", BOI.STEEL_PACK, BOI.STEEL_SHOTBLAST, BOI.STEEL_SLOTEPROCESS, BOI.ORDERQTY, BOI.ORDER_CNT, BOI.DELIVERY_STATUS1, BOI.DELIVERY_STATUS2, BOI.DELIVERY_STATUS3 "); + //strSql.AppendLine(", BOI.SPECNOA, BOI.SPECNOB, BOI.SPECNOC, BOI.SPECNOA_YY, BOI.SPECNOB_YY, BOI.SPECNOC_YY, BOI.INSPUNITCODE, BOI.SUBCUSTNO, BOI.ISSHIPORDER, BOI.SAILINGDATE "); + //strSql.AppendLine(", BOI.MARINEBOARD, BOI.ORDERNOYPK, BOI.ORDERITEMYPK, BOI.SORTINGMARK, BOI.UST_FL_PRINT, BOI.PRINTUTLEVEL, BOI.RULLBOARDCUT, BOI.PAINTUPT, BOI.ORDERPRICEB "); + //strSql.AppendLine(", BOI.ADJUSTPRICE, BOI.HOTUT, BOI.HOTUTRATE, BOI.SPECIALSIGN, BOI.UST_MODE, BOI.INSP_CD1, BOI.INSP_CD2, BOI.QKL_CUSTNO "); + //strSql.AppendLine(", CPP.ORD_WGT ,FLOOR( (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100)/(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85)) ,(NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100) "); + //strSql.AppendLine(", QQT.HTM_METH1 "); + //strSql.AppendLine(", QQT.HTM_METH2 "); + //strSql.AppendLine(", QQT.HTM_METH3 "); + //strSql.AppendLine(", MATR.ROUNDSTD "); + //strSql.AppendLine(", ORD_REMARK.REMARK "); + strSql.AppendLine(") boi where 1=1 "); + strSql.AppendLine(str); + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + gpPlates = db.Query(strSql.ToString()); + // logger.Info(gpPlates.Count.ToString()); + //gpPlates = CommonUtils.DataTableToList(a); + // logger.Info("gpPlates :" + a.Rows.Count); + } + } + catch (Exception ex) + { + logger.Error("GetOrder 报错", ex); + } + + return gpPlates; + } + + + /// + ///查询所有余材的信息 + /// + /// 所有符合条件的XAC,DZB,DZE,QAB 状态余材 集合 + public IList GetGP_SMP_NO(string strWHerePlate, string strNotinPlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gpPlates = new List(); + + //查询语句日期时间拼接起来格式化成yyyy-mm-dd hh24:mi:ss PROD_WGT + strSql.AppendLine("SELECT"); + strSql.AppendLine(" distinct GP.PLATE_NO ,GP.SMP_NO "); + strSql.AppendLine("FROM NISCO.GP_PLATE GP where smp_no is not null "); + + strSql.AppendLine(strWHerePlate); + strSql.AppendLine(strNotinPlate); + strSql.AppendLine("ORDER BY GP.PLATE_NO"); + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + gpPlates = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetGP_SMP_NO 报错", ex); + } + + return gpPlates; + } + + public IList GetNI() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + IList getSTLGRD = new List(); + + strSql.AppendLine(" SELECT STLGRD ,STEEL_GRD_DETAIL "); + strSql.AppendLine(" FROM NISCO.QP_NISCO_CHMC "); + strSql.AppendLine(" WHERE STLGRD_FL='N' "); + strSql.AppendLine(" AND STLGRD IN('A20050NIQQT','A20051NIQQT','A20090NIQQT','A20092NIQQT','A20093NIQQT') "); + strSql.AppendLine(" ORDER BY STEEL_GRD_DETAIL "); + + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + getSTLGRD = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetNI 报错 : ", ex); + } + + return getSTLGRD; + } + + + /// + ///查询降级到余材 + /// + /// 所有符合条件的XAC,DZB,DZE,QAB 状态余材 集合 + public IList GetREP_TYP() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gpPlates = new List(); + + //查询语句日期时间拼接起来格式化成yyyy-mm-dd hh24:mi:ss PROD_WGT + strSql.AppendLine("SELECT"); + strSql.AppendLine(" * FROM NISCO.CP_REP_HIS a "); + strSql.AppendLine(" WHERE 1=1 "); + strSql.AppendLine(" AND REP_TYP = '1' "); + strSql.AppendLine(" AND INS_EMP = '0007299' "); + strSql.AppendLine(" AND TO_CHAR(TO_DATE(a.INS_DATE, 'yyyy-mm-dd hh24:mi:ss'), 'yyyyMMdd') > TO_CHAR(SYSdate -1 ,'yyyyMMdd') "); + strSql.AppendLine(" UNION "); + strSql.AppendLine(" SELECT a.* FROM NISCO.CP_REP_HIS a "); + strSql.AppendLine(" LEFT JOIN NISCO.GP_PLATE b on a.MAT_NO=b.PLATE_NO "); + strSql.AppendLine(" WHERE 1=1 AND a.REP_TYP = '1' and b.PLT in('C2','C3') "); + strSql.AppendLine(" and TO_CHAR(TO_DATE(a.INS_DATE, 'yyyy-mm-dd hh24:mi:ss'), 'yyyyMMdd') > TO_CHAR(SYSdate -1 ,'yyyyMMdd') "); + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + gpPlates = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetREP_TYP 报错", ex); + } + + return gpPlates; + } + + + /// + ///查询所有余材的信息 + /// + /// 所有符合条件的XAC,DZB,DZE,QAB 状态余材 集合 + public IList GetAllMat(string strWHerePlate, string strNotinPlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gpPlates = new List(); + + //查询语句日期时间拼接起来格式化成yyyy-mm-dd hh24:mi:ss PROD_WGT + + //测试test指定 + strSql.AppendLine("SELECT * from("); + + strSql.AppendLine("SELECT"); + strSql.AppendLine(" DISTINCT GP.PLATE_NO "); + strSql.AppendLine(",GI.INSP_B_DEP_FLAW2 "); + strSql.AppendLine(",(SELECT COUNT(*) "); + strSql.AppendLine(" FROM NISCO.GP_USTRESULT GU "); + strSql.AppendLine(" WHERE GU.PLATE_NO = TRIM(GP.PLATE_NO) "); + strSql.AppendLine(" AND GU.UST_DEC = 'Y') GU_CNT "); + strSql.AppendLine(", QQD.THK_TOL_MIN ,QQD.THK_TOL_MAX , GP.OCCR_CD, GP.PLT, GP.PRC_LINE, GP.REC_STS, GP.PROC_CD, GP.BEF_PROC_CD, GP.PROD_CD, GP.STLGRD"); + strSql.AppendLine(", CASE WHEN gpr.THK > 0 and gp.PROC_CD <> 'XAC' THEN gpr.THK ELSE gp.THK END THK"); + strSql.AppendLine(", CASE WHEN gpr.WID > 0 and gp.PROC_CD <> 'XAC' THEN gpr.WID ELSE gp.WID END WID"); + strSql.AppendLine(", CASE WHEN gpr.LEN > 0 and gp.PROC_CD <> 'XAC' THEN gpr.LEN ELSE gp.LEN END LEN"); + + //20231129新增 + strSql.AppendLine(", GP.THK AS GP_THK ,GP.WID AS GP_WID ,GP.LEN AS GP_LEN,GP.WGT AS GP_WGT "); + + strSql.AppendLine(", GP.WGT,GP.CAL_WGT, GP.THK_GRP, GP.WID_GRP, GP.OVER_FL, GP.ORD_FL, GP.WOO_RSN "); + strSql.AppendLine(", GP.ORD_NO, GP.ORD_ITEM, GP.ORG_ORD_NO, GP.ORG_ORD_ITEM, GP.ENDUSE_CD, GP.DEL_TO_DATE, GP.PROD_DATE "); + strSql.AppendLine(", GP.PROD_TIME, GP.SHIFT, GP.GROUP_CD, GP.LOC, GP.BED_PILE_DATE, GP.SMP_FL, GP.SMP_LOC, GP.SMP_LEN "); + strSql.AppendLine(", GP.SMP_NO, GP.INSP_EMP, GP.DSC_DATE, GP.DSC_TIME, GP.PROD_GRD, GP.SURF_GRD, GP.QUALITY_GRD "); + strSql.AppendLine(", GP.QUALITY_UPD_GRD, GP.APLY_STDSPEC, GP.APLY_ENDUSE_CD, GP.IN_PLT_CD, GP.IN_PLT, GP.IN_PLT_DATE "); + strSql.AppendLine(", GP.IN_PLT_TIME, GP.IN_CAR_NO, GP.SLAB_NO, GP.IN_PLT_CO, GP.OUT_PLT_CD, GP.OUT_PLT, GP.OUT_PLT_DATE "); + strSql.AppendLine(", GP.OUT_PLT_TIME, GP.OUT_CAR_NO, GP.OUT_SHEET_NO, GP.HOUSING_DATE, GP.HOUSING_TIME, GP.SHP_IST_NO "); + strSql.AppendLine(", GP.SHP_IST_DATE, GP.SHP_IST_TIME, GP.SHP_DATE, GP.SHP_TIME, GP.TRNS_NO, GP.CAR_NO, GP.TRNS_CMPY_CD "); + strSql.AppendLine(", GP.SHP_EMP, GP.TRAIN_LINE_NAME, GP.DEST_DETAIL, GP.CERT_RPT_FL, GP.CERT_RPT_DATE, GP.CERT_RPT_TIME "); + strSql.AppendLine(", GP.SHP_IST_CAN_DATE, GP.SHP_IST_CAN_TIME, GP.SHP_IST_CAN_FL, GP.INS_DATE, GP.INS_EMP_CD, GP.INS_PGMID "); + strSql.AppendLine(", GP.UPD_DATE, GP.UPD_EMP_CD, GP.UPD_PGM, GP.PLATE_SEC, GP.CR_CD, GP.PILE_NO, GP.PRC, GP.SF_ORNOT, GP.UST_FL "); + strSql.AppendLine(", GP.TRIM_FL, GP.END_RES, GP.ORG_PLATE, GP.ORD_THK, GP.ORD_WID, GP.ORD_LEN, GP.ORD_WGT, GP.NEXT_PROC "); + strSql.AppendLine(", GP.ACT_SMP_FL, GP.ACT_SMP_LEN, GP.CUST_CD, GP.CUR_INV, GP.BEF_APLY_STDSPEC, GP.STDSPEC_UPD_FL "); + strSql.AppendLine(", GP.SIZE_KND, GP.BAOXIN_IF_DATE, GP.SLAB_WGT, GP.CUST_SPEC_NO, GP.LOAD_WGT, GP.PRICE_GRD "); + strSql.AppendLine(", GP.PRICE_GRD_DATE, GP.PRICE_GRD_TIME, GP.PRICE_GRD_EMP_CD, GP.CHG_GRD_RES, GP.MARKING_FL "); + strSql.AppendLine(", GP.MAT_OWNER_FL, GP.MAT_OWNER_CUST_CD, GP.RSLT_PROC_CD, GP.UST_RLT_CD, GP.UST_STATUS "); + strSql.AppendLine(", GP.HTM_SHOT_BLAST, GP.HTM_SHOT_BLAST_RLT, GP.HTM_RSLT_FL, GP.HTM_METH1, GP.HTM_COND1 "); + strSql.AppendLine(", GP.HTM_RLT_METH1, GP.HTM_METH2, GP.HTM_COND2, GP.HTM_RLT_METH2, GP.HTM_METH3, GP.HTM_COND3 "); + strSql.AppendLine(", GP.HTM_RLT_METH3, GP.HTM_METH4, GP.HTM_COND4, GP.HTM_RLT_METH4, GP.HTM_METH5, GP.HTM_COND5 "); + strSql.AppendLine(", GP.HTM_RLT_METH5, GP.GRID_FL, GP.GRID_RSLT, GP.CL_FL, GP.CL_RSLT, GP.GAS_FL, GP.GAS_RSLT, GP.UST_CNT "); + strSql.AppendLine(", GP.CUT_CNT, GP.HTM_CNT, GP.CL_CNT, GP.SB_CNT, GP.GRD_CNT, GP.CLAIM_RES, GP.CLAIM_DATE, GP.CLAIM_THK "); + strSql.AppendLine(", GP.CLAIM_WID, GP.CLAIM_LEN, GP.CLAIM_WGT, GP.ERP_IF_DATE, GP.NEXT_PLAN_HTM, GP.NEXT_PLAN_HTM_COND "); + strSql.AppendLine(", GP.PLAN_CUT_CNT, GP.SMP_SET_FL, GP.FP_FL, GP.FP_RSLT, GP.FP_CNT, GP.ACT_SMP_FL_R, GP.ACT_SMP_LEN_R "); + strSql.AppendLine(", GP.SMP_NO_R, GP.ERP_MPLATE_CHK, GP.ERP_PLATE_IN "); + strSql.AppendLine(", '' SUB_PRO_STA, '' SUB_CON_STA, '' SUB_CUT_POS_1,'' SUB_FULL,'' SUB_LACK_CON "); + strSql.AppendLine(", '' SUB_CUT_POS_2, '' SUB_ORD_NO, '' SUB_ORD_ITEM, '' SUB_ORD_REM, '' SUB_SUR_LEN_1, '' SUB_SUR_WID_1 "); + strSql.AppendLine(", '' SUB_SUR_LEN_2, '' SUB_SUR_WID_2, '' SUB_SUR_STA_1, '' SUB_SUR_STA_2, '' SUB_LOS_WGT, '' SUB_DATE "); + strSql.AppendLine(", '' SUB_NUM, '' SUB_DIR, '' SUB_US_WID, '' SUB_US_LEN, '' SUB_CUT_X, '' SUB_CUT_Y, '' SUB_USER "); + strSql.AppendLine(",bob.ORD_NO BOB_ORD_NO --//--替代前订单订单号 "); + strSql.AppendLine(",bob.ORD_ITEM BOB_ORD_ITEM --//--替代前订单序列 "); + strSql.AppendLine(",bob.STDSPEC BOB_STDSPEC --//--替代前订单订单标准 "); + strSql.AppendLine(",bob.ORD_THK BOB_ORD_THK --//--替代前订单厚度 "); + strSql.AppendLine(",bob.ORD_WID BOB_ORD_WID --//--替代前订单宽度 "); + strSql.AppendLine(",bob.ORD_LEN BOB_ORD_LEN --//--替代前订单长度 "); + strSql.AppendLine(",bob.PROD_WGT BOB_WGT_UNIT --//--替代前订单重量 "); + strSql.AppendLine(",bob.CUST_CD BOB_CUST_CD --//--替代前订单客户名称 "); + strSql.AppendLine(",bob.ENDUSE_CD BOB_ENDUSE_CD --//--替代前订单订单用途 "); + strSql.AppendLine(",bob.ORD_KND BOB_ORD_KND --//--替代前订单订单种类 "); + strSql.AppendLine(",boo.ORD_NO BOO_ORD_NO --//--原始订单订单号 "); + strSql.AppendLine(",boo.ORD_ITEM BOO_ORD_ITEM --//--原始订单序列 "); + strSql.AppendLine(",boo.STDSPEC BOO_STDSPEC --//--原始订单订单标准 "); + strSql.AppendLine(",boo.ORD_THK BOO_ORD_THK --//--原始订单厚度 "); + strSql.AppendLine(",boo.ORD_WID BOO_ORD_WID --//--原始订单宽度 "); + strSql.AppendLine(",boo.ORD_LEN BOO_ORD_LEN --//--原始订单长度 "); + strSql.AppendLine(",boo.PROD_WGT BOO_WGT_UNIT --//--原始订单重量 "); + strSql.AppendLine(",boo.CUST_CD BOO_CUST_CD --//--原始订单客户名称 "); + strSql.AppendLine(",TO_DATE(R.MILL_END_DATE, 'yyyy-mm-dd hh24:mi:ss') MILL_END_DATE --//--轧制日期 "); + strSql.AppendLine(",RE.ORD_REMARK REMARK --//--余材备注 "); + strSql.AppendLine(",MATR.ROUNDSTD ROUNDSTD --//--修约标准 "); + strSql.AppendLine(", CASE WHEN gpr.THK > 0 and gpr.WID > 0 and gpr.LEN >0 and gp.PROC_CD <> 'XAC' THEN 1 ELSE 0 END IS_CP_MOVE "); + strSql.AppendLine(", CASE WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' THEN 1 ELSE 0 END IS_UST "); + strSql.AppendLine("FROM NISCO.GP_PLATE GP "); + strSql.AppendLine("LEFT JOIN NISCO.BP_ORDER_ITEM bob ON gp.ORD_NO = bob.ORD_NO AND gp.ORD_ITEM = bob.ORD_ITEM--// "); + strSql.AppendLine("LEFT JOIN NISCO.BP_ORDER_ITEM boo ON gp.ORG_ORD_NO = boo.ORD_NO AND gp.ORG_ORD_ITEM = boo.ORD_ITEM--// "); + strSql.AppendLine("LEFT JOIN NISCO.QP_QLTY_DELV QQD ON gp.ORG_ORD_NO = QQD.ORD_NO AND gp.ORG_ORD_ITEM = QQD.ORD_ITEM--// "); + strSql.AppendLine("LEFT JOIN NISCO.GP_PLATE_REPLACE gpr ON gpr.PLATE_NO = gp.PLATE_NO "); + strSql.AppendLine("LEFT JOIN NISCO.GP_INSPPLATE GI ON GI.MAT_NO = GP.PLATE_NO "); + strSql.AppendLine("LEFT JOIN NISCO.GP_USTRESULT UST ON UST.PLATE_NO = GP.PLATE_NO "); + strSql.AppendLine("LEFT JOIN NISCO.GP_REMARK RE ON RE.MAT_NO = GP.PLATE_NO "); + strSql.AppendLine("LEFT JOIN NISCO.QP_QLTY_MATR MATR "); + strSql.AppendLine("ON MATR.ORD_NO = boo.ORD_NO "); + strSql.AppendLine("AND MATR.ORD_ITEM= boo.ORD_ITEM"); + strSql.AppendLine(" LEFT JOIN (SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLINGW UNION SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLING) R ON substr(GP.PLATE_NO,1,10)=R.SLAB_NO "); + strSql.AppendLine("WHERE 1=1 "); + strSql.AppendLine("AND GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + strSql.AppendLine("AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine("WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine("WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + + //20240307改 R.MILL_END_DATE<'3'→R.MILL_END_DATE<='6' + strSql.AppendLine("AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '2' AND trunc(months_between(sysdate,to_date(R.MILL_END_DATE,'yyyymmdd hh24:mi:ss'))) <='6' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd <> 'XAC' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '1' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD is null THEN 1 "); + strSql.AppendLine("WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine("WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + strSql.AppendLine("AND GP.APLY_STDSPEC NOT LIKE '%NG-XY%'"); + strSql.AppendLine("AND GP.Len <50000 "); //钢板长度上限50米 + strSql.AppendLine(strWHerePlate); + strSql.AppendLine(strNotinPlate); + //测试test + strSql.AppendLine(" OR GP.PLATE_NO = '" + glstrPlateNo + "'"); + + strSql.AppendLine("ORDER BY GP.PLATE_NO"); + + //测试test指定 + strSql.AppendLine(") where PLATE_NO = '" + glstrPlateNo + "'"); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + gpPlates = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetAllMat 报错", ex); + } + + return gpPlates; + } + + + /// + /// 协议替代 + /// + /// + public IList GetAllMat1(string strWHerePlate, string str, string strNotinPlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gpPlates = new List(); + + //查询语句日期时间拼接起来格式化成yyyy-mm-dd hh24:mi:ss PROD_WGT + //strSql.AppendLine("SELECT * from("); + strSql.AppendLine("SELECT"); + strSql.AppendLine(" DISTINCT GP.PLATE_NO "); + strSql.AppendLine(",GI.INSP_B_DEP_FLAW2 "); + strSql.AppendLine(",(SELECT COUNT(*) "); + strSql.AppendLine(" FROM NISCO.GP_USTRESULT GU "); + strSql.AppendLine(" WHERE GU.PLATE_NO = TRIM(GP.PLATE_NO) "); + strSql.AppendLine(" AND GU.UST_DEC = 'Y') GU_CNT "); + strSql.AppendLine(", QQD.THK_TOL_MIN ,QQD.THK_TOL_MAX , GP.OCCR_CD, GP.PLT, GP.PRC_LINE, GP.REC_STS, GP.PROC_CD, GP.BEF_PROC_CD, GP.PROD_CD, GP.STLGRD"); + strSql.AppendLine(", CASE WHEN gpr.THK > 0 and gp.PROC_CD <> 'XAC' THEN gpr.THK ELSE gp.THK END THK"); + strSql.AppendLine(", CASE WHEN gpr.WID > 0 and gp.PROC_CD <> 'XAC' THEN gpr.WID ELSE gp.WID END WID"); + strSql.AppendLine(", CASE WHEN gpr.LEN > 0 and gp.PROC_CD <> 'XAC' THEN gpr.LEN ELSE gp.LEN END LEN"); + + //20231129新增 + strSql.AppendLine(", GP.THK AS GP_THK ,GP.WID AS GP_WID ,GP.LEN AS GP_LEN,GP.WGT AS GP_WGT"); + + strSql.AppendLine(", GP.WGT, GP.CAL_WGT, GP.THK_GRP, GP.WID_GRP, GP.OVER_FL, GP.ORD_FL, GP.WOO_RSN "); + strSql.AppendLine(", GP.ORD_NO, GP.ORD_ITEM, GP.ORG_ORD_NO, GP.ORG_ORD_ITEM, GP.ENDUSE_CD, GP.DEL_TO_DATE, GP.PROD_DATE "); + strSql.AppendLine(", GP.PROD_TIME, GP.SHIFT, GP.GROUP_CD, GP.LOC, GP.BED_PILE_DATE, GP.SMP_FL, GP.SMP_LOC, GP.SMP_LEN "); + strSql.AppendLine(", GP.SMP_NO, GP.INSP_EMP, GP.DSC_DATE, GP.DSC_TIME, GP.PROD_GRD, GP.SURF_GRD, GP.QUALITY_GRD "); + strSql.AppendLine(", GP.QUALITY_UPD_GRD, GP.APLY_STDSPEC, GP.APLY_ENDUSE_CD, GP.IN_PLT_CD, GP.IN_PLT, GP.IN_PLT_DATE "); + strSql.AppendLine(", GP.IN_PLT_TIME, GP.IN_CAR_NO, GP.SLAB_NO, GP.IN_PLT_CO, GP.OUT_PLT_CD, GP.OUT_PLT, GP.OUT_PLT_DATE "); + strSql.AppendLine(", GP.OUT_PLT_TIME, GP.OUT_CAR_NO, GP.OUT_SHEET_NO, GP.HOUSING_DATE, GP.HOUSING_TIME, GP.SHP_IST_NO "); + strSql.AppendLine(", GP.SHP_IST_DATE, GP.SHP_IST_TIME, GP.SHP_DATE, GP.SHP_TIME, GP.TRNS_NO, GP.CAR_NO, GP.TRNS_CMPY_CD "); + strSql.AppendLine(", GP.SHP_EMP, GP.TRAIN_LINE_NAME, GP.DEST_DETAIL, GP.CERT_RPT_FL, GP.CERT_RPT_DATE, GP.CERT_RPT_TIME "); + strSql.AppendLine(", GP.SHP_IST_CAN_DATE, GP.SHP_IST_CAN_TIME, GP.SHP_IST_CAN_FL, GP.INS_DATE, GP.INS_EMP_CD, GP.INS_PGMID "); + strSql.AppendLine(", GP.UPD_DATE, GP.UPD_EMP_CD, GP.UPD_PGM, GP.PLATE_SEC, GP.CR_CD, GP.PILE_NO, GP.PRC, GP.SF_ORNOT, GP.UST_FL "); + strSql.AppendLine(", GP.TRIM_FL, GP.END_RES, GP.ORG_PLATE, GP.ORD_THK, GP.ORD_WID, GP.ORD_LEN, GP.ORD_WGT, GP.NEXT_PROC "); + strSql.AppendLine(", GP.ACT_SMP_FL, GP.ACT_SMP_LEN, GP.CUST_CD, GP.CUR_INV, GP.BEF_APLY_STDSPEC, GP.STDSPEC_UPD_FL "); + strSql.AppendLine(", GP.SIZE_KND, GP.BAOXIN_IF_DATE, GP.SLAB_WGT, GP.CUST_SPEC_NO, GP.LOAD_WGT, GP.PRICE_GRD "); + strSql.AppendLine(", GP.PRICE_GRD_DATE, GP.PRICE_GRD_TIME, GP.PRICE_GRD_EMP_CD, GP.CHG_GRD_RES, GP.MARKING_FL "); + strSql.AppendLine(", GP.MAT_OWNER_FL, GP.MAT_OWNER_CUST_CD, GP.RSLT_PROC_CD, GP.UST_RLT_CD, GP.UST_STATUS "); + strSql.AppendLine(", GP.HTM_SHOT_BLAST, GP.HTM_SHOT_BLAST_RLT, GP.HTM_RSLT_FL, GP.HTM_METH1, GP.HTM_COND1 "); + strSql.AppendLine(", GP.HTM_RLT_METH1, GP.HTM_METH2, GP.HTM_COND2, GP.HTM_RLT_METH2, GP.HTM_METH3, GP.HTM_COND3 "); + strSql.AppendLine(", GP.HTM_RLT_METH3, GP.HTM_METH4, GP.HTM_COND4, GP.HTM_RLT_METH4, GP.HTM_METH5, GP.HTM_COND5 "); + strSql.AppendLine(", GP.HTM_RLT_METH5, GP.GRID_FL, GP.GRID_RSLT, GP.CL_FL, GP.CL_RSLT, GP.GAS_FL, GP.GAS_RSLT, GP.UST_CNT "); + strSql.AppendLine(", GP.CUT_CNT, GP.HTM_CNT, GP.CL_CNT, GP.SB_CNT, GP.GRD_CNT, GP.CLAIM_RES, GP.CLAIM_DATE, GP.CLAIM_THK "); + strSql.AppendLine(", GP.CLAIM_WID, GP.CLAIM_LEN, GP.CLAIM_WGT, GP.ERP_IF_DATE, GP.NEXT_PLAN_HTM, GP.NEXT_PLAN_HTM_COND "); + strSql.AppendLine(", GP.PLAN_CUT_CNT, GP.SMP_SET_FL, GP.FP_FL, GP.FP_RSLT, GP.FP_CNT, GP.ACT_SMP_FL_R, GP.ACT_SMP_LEN_R "); + strSql.AppendLine(", GP.SMP_NO_R, GP.ERP_MPLATE_CHK, GP.ERP_PLATE_IN "); + strSql.AppendLine(", '' SUB_PRO_STA, '' SUB_CON_STA, '' SUB_CUT_POS_1,'' SUB_FULL,'' SUB_LACK_CON "); + strSql.AppendLine(", '' SUB_CUT_POS_2, '' SUB_ORD_NO, '' SUB_ORD_ITEM, '' SUB_ORD_REM, '' SUB_SUR_LEN_1, '' SUB_SUR_WID_1 "); + strSql.AppendLine(", '' SUB_SUR_LEN_2, '' SUB_SUR_WID_2, '' SUB_SUR_STA_1, '' SUB_SUR_STA_2, '' SUB_LOS_WGT, '' SUB_DATE "); + strSql.AppendLine(", '' SUB_NUM, '' SUB_DIR, '' SUB_US_WID, '' SUB_US_LEN, '' SUB_CUT_X, '' SUB_CUT_Y, '' SUB_USER "); + strSql.AppendLine(",bob.ORD_NO BOB_ORD_NO --//--替代前订单订单号 "); + strSql.AppendLine(",bob.ORD_ITEM BOB_ORD_ITEM --//--替代前订单序列 "); + strSql.AppendLine(",bob.STDSPEC BOB_STDSPEC --//--替代前订单订单标准 "); + strSql.AppendLine(",bob.ORD_THK BOB_ORD_THK --//--替代前订单厚度 "); + strSql.AppendLine(",bob.ORD_WID BOB_ORD_WID --//--替代前订单宽度 "); + strSql.AppendLine(",bob.ORD_LEN BOB_ORD_LEN --//--替代前订单长度 "); + strSql.AppendLine(",bob.PROD_WGT BOB_WGT_UNIT --//--替代前订单重量 "); + strSql.AppendLine(",bob.CUST_CD BOB_CUST_CD --//--替代前订单客户名称 "); + strSql.AppendLine(",bob.ENDUSE_CD BOB_ENDUSE_CD --//--替代前订单订单用途 "); + strSql.AppendLine(",bob.ORD_KND BOB_ORD_KND --//--替代前订单订单种类 "); + strSql.AppendLine(",boo.ORD_NO BOO_ORD_NO --//--原始订单订单号 "); + strSql.AppendLine(",boo.ORD_ITEM BOO_ORD_ITEM --//--原始订单序列 "); + strSql.AppendLine(",boo.STDSPEC BOO_STDSPEC --//--原始订单订单标准 "); + strSql.AppendLine(",boo.ORD_THK BOO_ORD_THK --//--原始订单厚度 "); + strSql.AppendLine(",boo.ORD_WID BOO_ORD_WID --//--原始订单宽度 "); + strSql.AppendLine(",boo.ORD_LEN BOO_ORD_LEN --//--原始订单长度 "); + strSql.AppendLine(",boo.PROD_WGT BOO_WGT_UNIT --//--原始订单重量 "); + strSql.AppendLine(",boo.CUST_CD BOO_CUST_CD --//--原始订单客户名称 "); + strSql.AppendLine(",TO_DATE(R.MILL_END_DATE, 'yyyy-mm-dd hh24:mi:ss') MILL_END_DATE --//--轧制日期 "); + strSql.AppendLine(",RE.ORD_REMARK REMARK --//--余材备注 "); + strSql.AppendLine(",MATR.ROUNDSTD ROUNDSTD --//--修约标准 "); + strSql.AppendLine(", CASE WHEN gpr.THK > 0 and gpr.WID > 0 and gpr.LEN >0 and gp.PROC_CD <> 'XAC' THEN 1 ELSE 0 END IS_CP_MOVE "); + strSql.AppendLine(", CASE WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' THEN 1 ELSE 0 END IS_UST "); + strSql.AppendLine("FROM NISCO.GP_PLATE GP "); + strSql.AppendLine("LEFT JOIN NISCO.BP_ORDER_ITEM bob ON gp.ORD_NO = bob.ORD_NO AND gp.ORD_ITEM = bob.ORD_ITEM--// "); + strSql.AppendLine("LEFT JOIN NISCO.BP_ORDER_ITEM boo ON gp.ORG_ORD_NO = boo.ORD_NO AND gp.ORG_ORD_ITEM = boo.ORD_ITEM--// "); + strSql.AppendLine("LEFT JOIN NISCO.QP_QLTY_DELV QQD ON gp.ORG_ORD_NO = QQD.ORD_NO AND gp.ORG_ORD_ITEM = QQD.ORD_ITEM--// "); + strSql.AppendLine("LEFT JOIN NISCO.GP_PLATE_REPLACE gpr ON gpr.PLATE_NO = gp.PLATE_NO "); + strSql.AppendLine("LEFT JOIN NISCO.GP_INSPPLATE GI ON GI.MAT_NO = GP.PLATE_NO "); + strSql.AppendLine("LEFT JOIN NISCO.GP_USTRESULT UST ON UST.PLATE_NO = GP.PLATE_NO "); + strSql.AppendLine("LEFT JOIN NISCO.GP_REMARK RE ON RE.MAT_NO = GP.PLATE_NO "); + strSql.AppendLine("LEFT JOIN NISCO.QP_QLTY_MATR MATR "); + strSql.AppendLine("ON MATR.ORD_NO = boo.ORD_NO "); + strSql.AppendLine("AND MATR.ORD_ITEM= boo.ORD_ITEM"); + strSql.AppendLine(" LEFT JOIN (SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLINGW UNION SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLING) R ON substr(GP.PLATE_NO,1,10)=R.SLAB_NO "); + strSql.AppendLine("WHERE 1=1 "); + strSql.AppendLine("AND GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + strSql.AppendLine("AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine("WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine("WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + strSql.AppendLine("AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '2' AND trunc(months_between(sysdate,to_date(R.MILL_END_DATE,'yyyymmdd hh24:mi:ss'))) <='6' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd <> 'XAC' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '1' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD is null THEN 1 "); + strSql.AppendLine("WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine("WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + strSql.AppendLine("AND GP.APLY_STDSPEC NOT LIKE '%NG-XY%'"); + strSql.AppendLine("AND GP.Len <50000 "); //钢板长度上限50米 + strSql.AppendLine(strWHerePlate); + strSql.AppendLine(strNotinPlate); + strSql.AppendLine(str); + //strSql.AppendLine(" OR GP.PLATE_NO = '23306992060101'"); + + strSql.AppendLine("ORDER BY GP.PLATE_NO"); + //strSql.AppendLine(") where PLATE_NO = '23306992060101'"); + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + gpPlates = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetAllMat 报错", ex); + } + + return gpPlates; + } + + + /// + /// 可用订单选择 + /// 订单欠量字段 ORD_REM_CNT + /// + /// 所有符合条件的订单 集合 + public IList GetOrders(string strWHereOrd, string strwhere) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + StringBuilder strRemSql = new StringBuilder(); //声明订单欠量sql + IList gpPlates = null; + + //查询可用订单以及常用字段 + strSql.AppendLine(" SELECT * from("); + strSql.AppendLine(" SELECT "); + strSql.AppendLine(" DISTINCT ORD_REMARK.REMARK ,"); + strSql.AppendLine(" BOI.ORD_NO, BOI.ORD_ITEM, QQD.THK_TOL_MIN ,QQD.THK_TOL_MAX ,BOI.REC_STS, BOI.PLN_ORD, BOI.PLN_ORD_ITEM, BOI.ORD_STS, BOI.HOLD_FL, BOI.HOLD_DATE, BOI.HOLD_TIME, BOI.HOLD_EMP_ID "); + strSql.AppendLine(", BOI.CURRENCY, BOI.EXTRA_FL, BOI.DISCON_PRC, BOI.TOT_PRC, BOI.TRANS_PRC, BOI.EMP_ID, BOI.PROD_PRC, BOI.REG_DATE, BOI.REG_TIME, BOI.CONF_DATE "); + strSql.AppendLine(", BOI.CONF_TIME, BOI.CONF_EMP_ID, BOI.CUST_CD, BOI.ORD_CUST_CD, BOI.PROD_DGR, BOI.SALE_WAY, BOI.DEPT_CD, BOI.DEST_CD, BOI.DEST_DETAIL "); + strSql.AppendLine(", BOI.ENDUSE_CD, BOI.STLGRD, BOI.PAYMENT_COND, BOI.DEL_COND, BOI.DEL_TOL_UNIT, BOI.DEL_TOL_MAX, BOI.DEL_TOL_MIN, BOI.WGT_UNIT, BOI.WGT_GRP "); + strSql.AppendLine(", BOI.PROD_WGT, BOI.PROD_WGT_MIN, BOI.PROD_WGT_MAX, BOI.TOT_WGT, BOI.STDSPEC, BOI.STDSPEC_YY, BOI.ORD_SIZE, BOI.ORD_WID, BOI.ORD_LEN, BOI.ORD_THK "); + strSql.AppendLine(", BOI.INDIA, BOI.OUTDIA, BOI.CAN_FL, BOI.CAN_DATE, BOI.CAN_TIME, BOI.CAN_EMP_ID, BOI.MOD_FL, BOI.MOD_DATE, BOI.MOD_TIME, BOI.DEL_FR_DATE, BOI.DEL_TO_DATE "); + strSql.AppendLine(", BOI.CUST_DEL_FR_DATE, BOI.CUST_DEL_TO_DATE, BOI.ORD_PROD_END_DATE, BOI.ORD_PROD_END_TIME, BOI.ORD_SHIP_END_DATE, BOI.ORD_SHIP_END_TIME, BOI.ORD_ACCP_DATE "); + strSql.AppendLine(", BOI.ORD_ACCP_TIME, BOI.CUST_REQ_PLANT, BOI.TENT_REQ_PLANT, BOI.CONF_PLANT, BOI.CUST_SPEC_NO, BOI.MARKING_WAY, BOI.STAMP, BOI.TRANSP_WAY, BOI.ORD_KND "); + strSql.AppendLine(", BOI.TRIM_FL, BOI.URGNT_FL, BOI.UST_FL, BOI.PAYMENT_FL, BOI.PAYMENT_DATE, BOI.PAYMENT_TIME, BOI.PAYMENT_EMP_ID, BOI.PACK_WAY, BOI.PACK_WGT_MAX "); + strSql.AppendLine(", BOI.PACK_WGT_MIN, BOI.NUM_PROD, BOI.SALE_EMP_ID, BOI.END_CUST_CD, BOI.INSP_CD, BOI.DOME_FL, BOI.PROD_CD, BOI.PROD_THK_TGT, BOI.SIZE_KND, BOI.ORD_LEN_MIN "); + strSql.AppendLine(", BOI.ORD_LEN_MAX, BOI.MATR_FL, BOI.CONT_END_DATE, BOI.CONT_END_TIME, BOI.CONT_END_EMP_ID, BOI.VESSEL_NO, BOI.CUST_REQ_NO, BOI.COLOR_STROKE, BOI.RELEASE_DATE "); + strSql.AppendLine(", BOI.RELEASE_TIME, BOI.RELEASE_EMP_ID, BOI.PLN_SMS_PLT, BOI.PLN_MILL_PLT, BOI.CFM_SMS_PLT, BOI.CFM_MILL_PLT, BOI.HTM_SHOT_BLAST "); + strSql.AppendLine(", BOI.INS_DATE, BOI.INS_TIME, BOI.INS_EMPID, BOI.INS_PGMID, BOI.UPD_DATE, BOI.UPD_TIME, BOI.UPD_EMPID, BOI.UPD_PGMID, BOI.SEALMEMO "); + strSql.AppendLine(", BOI.INSPUNITCODEA, BOI.INSPUNITCODEB, BOI.INSPUNITCODEC, BOI.PRODSPECNOA, BOI.PRODSPECNOB, BOI.PRODSPECNOC, BOI.PAINTNUM, BOI.LP_HD_THK, BOI.LP_MD_THK, BOI.LP_TL_THK "); + strSql.AppendLine(", BOI.LP_LEN1, BOI.LP_LEN2, BOI.LP_LEN3, BOI.LP_LEN4, BOI.LP_LEN5, BOI.IMP_CONT, BOI.INSPECT_ORGAN, BOI.CONTRACT_NO, BOI.TRIAL_PRODUCT, BOI.TRIAL_NUM, BOI.TRIAL_STR "); + strSql.AppendLine(", BOI.TRIAL_END, BOI.SIDEMARK, BOI.JIT_STRINGA, BOI.JIT_STRINGB, BOI.JIT_STRINGC, BOI.JITID, BOI.JIT_FLAG, BOI.QO_FL, BOI.SAMPLE_MEMO, BOI.SIZE_MEMO, BOI.PACK_MEMO "); + strSql.AppendLine(", BOI.FLUSH_FL, BOI.APPOINT_PLT, BOI.MORD_DESIGN_WGT, BOI.MORD_FL, BOI.APPOINT_PLT_REASON, BOI.SURFACE_REQUESTS, BOI.STAMP_FL, BOI.UST_INSP_FL, BOI.SPRAY_FL "); + strSql.AppendLine(", BOI.BUFPOOL_CD, BOI.MULTI_INSP_FL, BOI.CONTRACT_DATE, BOI.DELIVERY_STATUS, BOI.CUST_CLASS, BOI.CUST_LEVEL, BOI.SPECIAL_OPR_REQ, BOI.WITNESS_CONTENT, BOI.COGGING_FLAG "); + strSql.AppendLine(", BOI.STD_DET_CLASS_CD, BOI.STD_DET_CLASS_LVL, BOI.CERT_NOTE, BOI.INSPECT_FLAG, BOI.E2E_CUST, BOI.CUST_PURCHASE, BOI.GUID, BOI.NEW_CLASS_STATE, BOI.FACEPAINT "); + strSql.AppendLine(", BOI.IS_JC, BOI.UST_JC, BOI.LEVEL_JM, BOI.ORDER_NOFH, BOI.ITEM_NOFH, BOI.ORDER_THK_JC, BOI.ORDER_THK_FC, BOI.TYPEFH, BOI.PRODTYPENO, BOI.STEEL_SPRAY "); + strSql.AppendLine(", BOI.STEEL_PACK, BOI.STEEL_SHOTBLAST, BOI.STEEL_SLOTEPROCESS, BOI.ORDERQTY, BOI.ORDER_CNT, BOI.DELIVERY_STATUS1, BOI.DELIVERY_STATUS2, BOI.DELIVERY_STATUS3 "); + strSql.AppendLine(", BOI.SPECNOA, BOI.SPECNOB, BOI.SPECNOC, BOI.SPECNOA_YY, BOI.SPECNOB_YY, BOI.SPECNOC_YY, BOI.INSPUNITCODE, BOI.SUBCUSTNO, BOI.ISSHIPORDER, BOI.SAILINGDATE "); + strSql.AppendLine(", BOI.MARINEBOARD, BOI.ORDERNOYPK, BOI.ORDERITEMYPK, BOI.SORTINGMARK, BOI.UST_FL_PRINT, BOI.PRINTUTLEVEL, BOI.RULLBOARDCUT, BOI.PAINTUPT, BOI.ORDERPRICEB "); + strSql.AppendLine(", BOI.ADJUSTPRICE, BOI.HOTUT, BOI.HOTUTRATE, BOI.SPECIALSIGN, BOI.UST_MODE, BOI.INSP_CD1, BOI.INSP_CD2, BOI.QKL_CUSTNO "); + strSql.AppendLine(", CPP.ORD_WGT "); + //TODO:TEST_DATA + strSql.AppendLine(",FLOOR( (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100)/ TRUNC(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85,3)) AS SUB_LACK_NUM "); + //strSql.AppendLine(",1 AS SUB_LACK_NUM "); + strSql.AppendLine(",(NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100) AS SUB_LACK_WGT "); + strSql.AppendLine(",QQT.HTM_METH1 "); + strSql.AppendLine(",QQT.HTM_METH2 "); + strSql.AppendLine(",QQT.HTM_METH3 "); + strSql.AppendLine(",MATR.ROUNDSTD "); + strSql.AppendLine(",count(EP_SLAB_D.REQ_SEQ_NO) SLAB_LACK_NUM , count(EP_SLAB_D.REQ_SEQ_NO) + FLOOR( (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100)/ TRUNC(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85,3)) AS LACK_NUM "); + + strSql.AppendLine("FROM NISCO.cp_prc CPP "); + strSql.AppendLine("INNER JOIN "); + strSql.AppendLine("NISCO.BP_ORDER_ITEM boi "); + strSql.AppendLine("ON BOI.ORD_NO = CPP.ORD_NO "); + strSql.AppendLine("AND BOI.ORD_ITEM = CPP.ORD_ITEM "); + strSql.AppendLine("AND BOI.ORD_WID <> 0 "); + strSql.AppendLine("AND BOI.ORD_LEN <> 0 "); + strSql.AppendLine("AND BOI.ORD_THK <> 0 "); + strSql.AppendLine("LEFT JOIN NISCO.QP_QLTY_TECH QQT "); + strSql.AppendLine("ON BOI.ORD_NO = QQT.ORD_NO "); + strSql.AppendLine("AND BOI.ORD_ITEM = QQT.ORD_ITEM "); + strSql.AppendLine("LEFT JOIN NISCO.QP_QLTY_DELV QQD"); + strSql.AppendLine("ON BOI.ORD_NO = QQD.ORD_NO"); + strSql.AppendLine("AND BOI.ORD_ITEM = QQD.ORD_ITEM"); + + strSql.AppendLine("LEFT JOIN NISCO.EP_REQ_SLAB EP_SLAB_B "); + strSql.AppendLine("ON EP_SLAB_B.ORD_NO = QQD.ORD_NO "); + strSql.AppendLine("AND EP_SLAB_B.ORD_ITEM = QQD.ORD_ITEM "); + strSql.AppendLine("AND EP_SLAB_B.REC_STS = '1'"); + + //strSql.AppendLine("LEFT JOIN NISCO.EP_REQ_SLAB EP_SLAB_B"); + //strSql.AppendLine("ON EP_SLAB.REQ_SEQ_NO = EP_SLAB_B.REQ_SEQ_NO"); + //ORD_REMARK + strSql.AppendLine(" LEFT JOIN (SELECT * from (SELECT replace(A.COLOR_STROKE,' ','') REMARK,ORD_NO,ORD_ITEM FROM NISCO.BP_ORDER_ITEM A UNION all SELECT REMARK,ORD_NO,ORD_ITEM FROM NISCO.ORD_REMARK where ROWNUM=1)) ORD_REMARK "); + strSql.AppendLine("ON ORD_REMARK.ORD_NO = boi.ORD_NO "); + strSql.AppendLine("AND ORD_REMARK.ORD_ITEM= boi.ORD_ITEM"); + //QP_QLTY_MATR + strSql.AppendLine("LEFT JOIN NISCO.QP_QLTY_MATR MATR "); + strSql.AppendLine("ON MATR.ORD_NO = boi.ORD_NO "); + strSql.AppendLine("AND MATR.ORD_ITEM= boi.ORD_ITEM"); + + strSql.AppendLine("LEFT JOIN NISCO.EP_REQ_SLAB_D EP_SLAB_D"); + strSql.AppendLine("ON EP_SLAB_D.ORD_NO = QQD.ORD_NO "); + strSql.AppendLine("AND EP_SLAB_D.REQ_SEQ_NO= EP_SLAB_D.REQ_SEQ_NO"); + strSql.AppendLine("AND EP_SLAB_D.ORD_ITEM = QQD.ORD_ITEM "); + strSql.AppendLine("AND EP_SLAB_D.BLOCK_SEQ >= '01'"); + strSql.AppendLine("AND EP_SLAB_D.SEQ >= '01'"); + strSql.AppendLine("AND EP_SLAB_B.REC_STS = '1'"); + + //TODO:TEST_DATA + //strSql.AppendLine("WHERE 1=1 "); + //strSql.AppendLine(" AND ((SELECT COUNT( A.REQ_SEQ_NO) "); + //strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + //strSql.AppendLine(" WHERE "); + //strSql.AppendLine(" 1 = 1 AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + //strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + //strSql.AppendLine(" AND A.SEQ >= '01' "); + //strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + //strSql.AppendLine(" AND B.REC_STS = '1') + NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100)/(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85)>=0.95 "); + + //20240105改 + strSql.AppendLine("WHERE 1=1 "); + strSql.AppendLine(" AND (SELECT COUNT(A.REQ_SEQ_NO) "); + strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + strSql.AppendLine(" WHERE 1 = 1 "); + strSql.AppendLine(" AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + strSql.AppendLine(" AND A.SEQ >= '01' "); + strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + strSql.AppendLine(" AND A.ORD_FL = '1' "); + strSql.AppendLine(" AND B.REC_STS = '1') + (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100) / TRUNC(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85, 3) >= 0.95 "); + + + strSql.AppendLine("AND boi.PROD_CD = 'PP' "); + strSql.AppendLine("AND boi.REC_STS = '2' "); + strSql.AppendLine("and boi.ORD_STS IN('E', 'D') "); + strSql.AppendLine("AND boi.ord_knd IN('A') "); + //strSql.AppendLine("AND boi.ORD_NO NOT LIKE 'OMZ%'"); + + strSql.AppendLine(strWHereOrd); + //strSql.AppendLine(" or boi.ORD_NO ='OM723020004'"); + //strSql.AppendLine(" AND boi.ORD_ITEM ='092'"); + strSql.AppendLine("GROUP BY BOI.ORD_NO, BOI.ORD_ITEM, QQD.THK_TOL_MIN ,QQD.THK_TOL_MAX ,BOI.REC_STS, BOI.PLN_ORD, BOI.PLN_ORD_ITEM, BOI.ORD_STS, BOI.HOLD_FL, BOI.HOLD_DATE, BOI.HOLD_TIME, BOI.HOLD_EMP_ID "); + strSql.AppendLine(", BOI.CURRENCY, BOI.EXTRA_FL, BOI.DISCON_PRC, BOI.TOT_PRC, BOI.TRANS_PRC, BOI.EMP_ID, BOI.PROD_PRC, BOI.REG_DATE, BOI.REG_TIME, BOI.CONF_DATE "); + strSql.AppendLine(", BOI.CONF_TIME, BOI.CONF_EMP_ID, BOI.CUST_CD, BOI.ORD_CUST_CD, BOI.PROD_DGR, BOI.SALE_WAY, BOI.DEPT_CD, BOI.DEST_CD, BOI.DEST_DETAIL "); + strSql.AppendLine(", BOI.ENDUSE_CD, BOI.STLGRD, BOI.PAYMENT_COND, BOI.DEL_COND, BOI.DEL_TOL_UNIT, BOI.DEL_TOL_MAX, BOI.DEL_TOL_MIN, BOI.WGT_UNIT, BOI.WGT_GRP "); + strSql.AppendLine(", BOI.PROD_WGT, BOI.PROD_WGT_MIN, BOI.PROD_WGT_MAX, BOI.TOT_WGT, BOI.STDSPEC, BOI.STDSPEC_YY, BOI.ORD_SIZE, BOI.ORD_WID, BOI.ORD_LEN, BOI.ORD_THK "); + strSql.AppendLine(", BOI.INDIA, BOI.OUTDIA, BOI.CAN_FL, BOI.CAN_DATE, BOI.CAN_TIME, BOI.CAN_EMP_ID, BOI.MOD_FL, BOI.MOD_DATE, BOI.MOD_TIME, BOI.DEL_FR_DATE, BOI.DEL_TO_DATE "); + strSql.AppendLine(", BOI.CUST_DEL_FR_DATE, BOI.CUST_DEL_TO_DATE, BOI.ORD_PROD_END_DATE, BOI.ORD_PROD_END_TIME, BOI.ORD_SHIP_END_DATE, BOI.ORD_SHIP_END_TIME, BOI.ORD_ACCP_DATE "); + strSql.AppendLine(", BOI.ORD_ACCP_TIME, BOI.CUST_REQ_PLANT, BOI.TENT_REQ_PLANT, BOI.CONF_PLANT, BOI.CUST_SPEC_NO, BOI.MARKING_WAY, BOI.STAMP, BOI.TRANSP_WAY, BOI.ORD_KND "); + strSql.AppendLine(", BOI.TRIM_FL, BOI.URGNT_FL, BOI.UST_FL, BOI.PAYMENT_FL, BOI.PAYMENT_DATE, BOI.PAYMENT_TIME, BOI.PAYMENT_EMP_ID, BOI.PACK_WAY, BOI.PACK_WGT_MAX "); + strSql.AppendLine(", BOI.PACK_WGT_MIN, BOI.NUM_PROD, BOI.SALE_EMP_ID, BOI.END_CUST_CD, BOI.INSP_CD, BOI.DOME_FL, BOI.PROD_CD, BOI.PROD_THK_TGT, BOI.SIZE_KND, BOI.ORD_LEN_MIN "); + strSql.AppendLine(", BOI.ORD_LEN_MAX, BOI.MATR_FL, BOI.CONT_END_DATE, BOI.CONT_END_TIME, BOI.CONT_END_EMP_ID, BOI.VESSEL_NO, BOI.CUST_REQ_NO, BOI.COLOR_STROKE, BOI.RELEASE_DATE "); + strSql.AppendLine(", BOI.RELEASE_TIME, BOI.RELEASE_EMP_ID, BOI.PLN_SMS_PLT, BOI.PLN_MILL_PLT, BOI.CFM_SMS_PLT, BOI.CFM_MILL_PLT, BOI.HTM_SHOT_BLAST "); + strSql.AppendLine(", BOI.INS_DATE, BOI.INS_TIME, BOI.INS_EMPID, BOI.INS_PGMID, BOI.UPD_DATE, BOI.UPD_TIME, BOI.UPD_EMPID, BOI.UPD_PGMID, BOI.SEALMEMO "); + strSql.AppendLine(", BOI.INSPUNITCODEA, BOI.INSPUNITCODEB, BOI.INSPUNITCODEC, BOI.PRODSPECNOA, BOI.PRODSPECNOB, BOI.PRODSPECNOC, BOI.PAINTNUM, BOI.LP_HD_THK, BOI.LP_MD_THK, BOI.LP_TL_THK "); + strSql.AppendLine(", BOI.LP_LEN1, BOI.LP_LEN2, BOI.LP_LEN3, BOI.LP_LEN4, BOI.LP_LEN5, BOI.IMP_CONT, BOI.INSPECT_ORGAN, BOI.CONTRACT_NO, BOI.TRIAL_PRODUCT, BOI.TRIAL_NUM, BOI.TRIAL_STR "); + strSql.AppendLine(", BOI.TRIAL_END, BOI.SIDEMARK, BOI.JIT_STRINGA, BOI.JIT_STRINGB, BOI.JIT_STRINGC, BOI.JITID, BOI.JIT_FLAG, BOI.QO_FL, BOI.SAMPLE_MEMO, BOI.SIZE_MEMO, BOI.PACK_MEMO "); + strSql.AppendLine(", BOI.FLUSH_FL, BOI.APPOINT_PLT, BOI.MORD_DESIGN_WGT, BOI.MORD_FL, BOI.APPOINT_PLT_REASON, BOI.SURFACE_REQUESTS, BOI.STAMP_FL, BOI.UST_INSP_FL, BOI.SPRAY_FL "); + strSql.AppendLine(", BOI.BUFPOOL_CD, BOI.MULTI_INSP_FL, BOI.CONTRACT_DATE, BOI.DELIVERY_STATUS, BOI.CUST_CLASS, BOI.CUST_LEVEL, BOI.SPECIAL_OPR_REQ, BOI.WITNESS_CONTENT, BOI.COGGING_FLAG "); + strSql.AppendLine(", BOI.STD_DET_CLASS_CD, BOI.STD_DET_CLASS_LVL, BOI.CERT_NOTE, BOI.INSPECT_FLAG, BOI.E2E_CUST, BOI.CUST_PURCHASE, BOI.GUID, BOI.NEW_CLASS_STATE, BOI.FACEPAINT "); + strSql.AppendLine(", BOI.IS_JC, BOI.UST_JC, BOI.LEVEL_JM, BOI.ORDER_NOFH, BOI.ITEM_NOFH, BOI.ORDER_THK_JC, BOI.ORDER_THK_FC, BOI.TYPEFH, BOI.PRODTYPENO, BOI.STEEL_SPRAY "); + strSql.AppendLine(", BOI.STEEL_PACK, BOI.STEEL_SHOTBLAST, BOI.STEEL_SLOTEPROCESS, BOI.ORDERQTY, BOI.ORDER_CNT, BOI.DELIVERY_STATUS1, BOI.DELIVERY_STATUS2, BOI.DELIVERY_STATUS3 "); + strSql.AppendLine(", BOI.SPECNOA, BOI.SPECNOB, BOI.SPECNOC, BOI.SPECNOA_YY, BOI.SPECNOB_YY, BOI.SPECNOC_YY, BOI.INSPUNITCODE, BOI.SUBCUSTNO, BOI.ISSHIPORDER, BOI.SAILINGDATE "); + strSql.AppendLine(", BOI.MARINEBOARD, BOI.ORDERNOYPK, BOI.ORDERITEMYPK, BOI.SORTINGMARK, BOI.UST_FL_PRINT, BOI.PRINTUTLEVEL, BOI.RULLBOARDCUT, BOI.PAINTUPT, BOI.ORDERPRICEB "); + strSql.AppendLine(", BOI.ADJUSTPRICE, BOI.HOTUT, BOI.HOTUTRATE, BOI.SPECIALSIGN, BOI.UST_MODE, BOI.INSP_CD1, BOI.INSP_CD2, BOI.QKL_CUSTNO "); + strSql.AppendLine(", CPP.ORD_WGT ,FLOOR( (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100)/(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85)) ,(NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100) "); + strSql.AppendLine(", QQT.HTM_METH1 "); + strSql.AppendLine(", QQT.HTM_METH2 "); + strSql.AppendLine(", QQT.HTM_METH3 "); + strSql.AppendLine(", MATR.ROUNDSTD "); + strSql.AppendLine(", ORD_REMARK.REMARK "); + strSql.AppendLine(") where 1=1 "); + strSql.AppendLine(strwhere); + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + gpPlates = db.Query(strSql.ToString()); + // logger.Info(gpPlates.Count.ToString()); + //gpPlates = CommonUtils.DataTableToList(a); + // logger.Info("gpPlates :" + a.Rows.Count); + } + } + catch (Exception ex) + { + logger.Error("GetOrder 报错", ex); + } + + return gpPlates; + } + + + /// + ///查询所有余材的信息 + /// + /// 所有符合条件的XAC,DZB,DZE,QAB 状态余材 集合 + public IList GetAllCGB(string strWHerePlate, string strNotinPlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gpPlates = new List(); + + //查询语句日期时间拼接起来格式化成yyyy-mm-dd hh24:mi:ss PROD_WGT + strSql.AppendLine("SELECT"); + strSql.AppendLine(" DISTINCT GP.PLATE_NO "); + strSql.AppendLine(",GI.INSP_B_DEP_FLAW2 "); + strSql.AppendLine(",(SELECT COUNT(*) "); + strSql.AppendLine(" FROM NISCO.GP_USTRESULT GU "); + strSql.AppendLine(" WHERE GU.PLATE_NO = TRIM(GP.PLATE_NO) "); + strSql.AppendLine(" AND GU.UST_DEC = 'Y') GU_CNT "); + strSql.AppendLine(", QQD.THK_TOL_MIN ,QQD.THK_TOL_MAX , GP.OCCR_CD, GP.PLT, GP.PRC_LINE, GP.REC_STS, GP.PROC_CD, GP.BEF_PROC_CD, GP.PROD_CD, GP.STLGRD"); + strSql.AppendLine(", CASE WHEN gpr.THK > 0 and gp.PROC_CD <> 'XAC' THEN gpr.THK ELSE gp.THK END THK"); + strSql.AppendLine(", CASE WHEN gpr.WID > 0 and gp.PROC_CD <> 'XAC' THEN gpr.WID ELSE gp.WID END WID"); + strSql.AppendLine(", CASE WHEN gpr.LEN > 0 and gp.PROC_CD <> 'XAC' THEN gpr.LEN ELSE gp.LEN END LEN"); + + + //20231129新增 + strSql.AppendLine(", GP.THK AS GP_THK ,GP.WID AS GP_WID ,GP.LEN AS GP_LEN,GP.WGT AS GP_WGT "); + + strSql.AppendLine(", GP.WGT, GP.CAL_WGT, GP.THK_GRP, GP.WID_GRP, GP.OVER_FL, GP.ORD_FL, GP.WOO_RSN "); + strSql.AppendLine(", GP.ORD_NO, GP.ORD_ITEM, GP.ORG_ORD_NO, GP.ORG_ORD_ITEM, GP.ENDUSE_CD, GP.DEL_TO_DATE, GP.PROD_DATE "); + strSql.AppendLine(", GP.PROD_TIME, GP.SHIFT, GP.GROUP_CD, GP.LOC, GP.BED_PILE_DATE, GP.SMP_FL, GP.SMP_LOC, GP.SMP_LEN "); + strSql.AppendLine(", GP.SMP_NO, GP.INSP_EMP, GP.DSC_DATE, GP.DSC_TIME, GP.PROD_GRD, GP.SURF_GRD, GP.QUALITY_GRD "); + strSql.AppendLine(", GP.QUALITY_UPD_GRD, GP.APLY_STDSPEC, GP.APLY_ENDUSE_CD, GP.IN_PLT_CD, GP.IN_PLT, GP.IN_PLT_DATE "); + strSql.AppendLine(", GP.IN_PLT_TIME, GP.IN_CAR_NO, GP.SLAB_NO, GP.IN_PLT_CO, GP.OUT_PLT_CD, GP.OUT_PLT, GP.OUT_PLT_DATE "); + strSql.AppendLine(", GP.OUT_PLT_TIME, GP.OUT_CAR_NO, GP.OUT_SHEET_NO, GP.HOUSING_DATE, GP.HOUSING_TIME, GP.SHP_IST_NO "); + strSql.AppendLine(", GP.SHP_IST_DATE, GP.SHP_IST_TIME, GP.SHP_DATE, GP.SHP_TIME, GP.TRNS_NO, GP.CAR_NO, GP.TRNS_CMPY_CD "); + strSql.AppendLine(", GP.SHP_EMP, GP.TRAIN_LINE_NAME, GP.DEST_DETAIL, GP.CERT_RPT_FL, GP.CERT_RPT_DATE, GP.CERT_RPT_TIME "); + strSql.AppendLine(", GP.SHP_IST_CAN_DATE, GP.SHP_IST_CAN_TIME, GP.SHP_IST_CAN_FL, GP.INS_DATE, GP.INS_EMP_CD, GP.INS_PGMID "); + strSql.AppendLine(", GP.UPD_DATE, GP.UPD_EMP_CD, GP.UPD_PGM, GP.PLATE_SEC, GP.CR_CD, GP.PILE_NO, GP.PRC, GP.SF_ORNOT, GP.UST_FL "); + strSql.AppendLine(", GP.TRIM_FL, GP.END_RES, GP.ORG_PLATE, GP.ORD_THK, GP.ORD_WID, GP.ORD_LEN, GP.ORD_WGT, GP.NEXT_PROC "); + strSql.AppendLine(", GP.ACT_SMP_FL, GP.ACT_SMP_LEN, GP.CUST_CD, GP.CUR_INV, GP.BEF_APLY_STDSPEC, GP.STDSPEC_UPD_FL "); + strSql.AppendLine(", GP.SIZE_KND, GP.BAOXIN_IF_DATE, GP.SLAB_WGT, GP.CUST_SPEC_NO, GP.LOAD_WGT, GP.PRICE_GRD "); + strSql.AppendLine(", GP.PRICE_GRD_DATE, GP.PRICE_GRD_TIME, GP.PRICE_GRD_EMP_CD, GP.CHG_GRD_RES, GP.MARKING_FL "); + strSql.AppendLine(", GP.MAT_OWNER_FL, GP.MAT_OWNER_CUST_CD, GP.RSLT_PROC_CD, GP.UST_RLT_CD, GP.UST_STATUS "); + strSql.AppendLine(", GP.HTM_SHOT_BLAST, GP.HTM_SHOT_BLAST_RLT, GP.HTM_RSLT_FL, GP.HTM_METH1, GP.HTM_COND1 "); + strSql.AppendLine(", GP.HTM_RLT_METH1, GP.HTM_METH2, GP.HTM_COND2, GP.HTM_RLT_METH2, GP.HTM_METH3, GP.HTM_COND3 "); + strSql.AppendLine(", GP.HTM_RLT_METH3, GP.HTM_METH4, GP.HTM_COND4, GP.HTM_RLT_METH4, GP.HTM_METH5, GP.HTM_COND5 "); + strSql.AppendLine(", GP.HTM_RLT_METH5, GP.GRID_FL, GP.GRID_RSLT, GP.CL_FL, GP.CL_RSLT, GP.GAS_FL, GP.GAS_RSLT, GP.UST_CNT "); + strSql.AppendLine(", GP.CUT_CNT, GP.HTM_CNT, GP.CL_CNT, GP.SB_CNT, GP.GRD_CNT, GP.CLAIM_RES, GP.CLAIM_DATE, GP.CLAIM_THK "); + strSql.AppendLine(", GP.CLAIM_WID, GP.CLAIM_LEN, GP.CLAIM_WGT, GP.ERP_IF_DATE, GP.NEXT_PLAN_HTM, GP.NEXT_PLAN_HTM_COND "); + strSql.AppendLine(", GP.PLAN_CUT_CNT, GP.SMP_SET_FL, GP.FP_FL, GP.FP_RSLT, GP.FP_CNT, GP.ACT_SMP_FL_R, GP.ACT_SMP_LEN_R "); + strSql.AppendLine(", GP.SMP_NO_R, GP.ERP_MPLATE_CHK, GP.ERP_PLATE_IN "); + strSql.AppendLine(", '' SUB_PRO_STA, '' SUB_CON_STA, '' SUB_CUT_POS_1,'' SUB_FULL,'' SUB_LACK_CON "); + strSql.AppendLine(", '' SUB_CUT_POS_2, '' SUB_ORD_NO, '' SUB_ORD_ITEM, '' SUB_ORD_REM, '' SUB_SUR_LEN_1, '' SUB_SUR_WID_1 "); + strSql.AppendLine(", '' SUB_SUR_LEN_2, '' SUB_SUR_WID_2, '' SUB_SUR_STA_1, '' SUB_SUR_STA_2, '' SUB_LOS_WGT, '' SUB_DATE "); + strSql.AppendLine(", '' SUB_NUM, '' SUB_DIR, '' SUB_US_WID, '' SUB_US_LEN, '' SUB_CUT_X, '' SUB_CUT_Y, '' SUB_USER "); + strSql.AppendLine(",bob.ORD_NO BOB_ORD_NO --//--替代前订单订单号 "); + strSql.AppendLine(",bob.ORD_ITEM BOB_ORD_ITEM --//--替代前订单序列 "); + strSql.AppendLine(",bob.STDSPEC BOB_STDSPEC --//--替代前订单订单标准 "); + strSql.AppendLine(",bob.ORD_THK BOB_ORD_THK --//--替代前订单厚度 "); + strSql.AppendLine(",bob.ORD_WID BOB_ORD_WID --//--替代前订单宽度 "); + strSql.AppendLine(",bob.ORD_LEN BOB_ORD_LEN --//--替代前订单长度 "); + strSql.AppendLine(",bob.PROD_WGT BOB_WGT_UNIT --//--替代前订单重量 "); + strSql.AppendLine(",bob.CUST_CD BOB_CUST_CD --//--替代前订单客户名称 "); + strSql.AppendLine(",bob.ENDUSE_CD BOB_ENDUSE_CD --//--替代前订单订单用途 "); + strSql.AppendLine(",bob.ORD_KND BOB_ORD_KND --//--替代前订单订单种类 "); + strSql.AppendLine(",boo.ORD_NO BOO_ORD_NO --//--原始订单订单号 "); + strSql.AppendLine(",boo.ORD_ITEM BOO_ORD_ITEM --//--原始订单序列 "); + strSql.AppendLine(",boo.STDSPEC BOO_STDSPEC --//--原始订单订单标准 "); + strSql.AppendLine(",boo.ORD_THK BOO_ORD_THK --//--原始订单厚度 "); + strSql.AppendLine(",boo.ORD_WID BOO_ORD_WID --//--原始订单宽度 "); + strSql.AppendLine(",boo.ORD_LEN BOO_ORD_LEN --//--原始订单长度 "); + strSql.AppendLine(",boo.PROD_WGT BOO_WGT_UNIT --//--原始订单重量 "); + strSql.AppendLine(",boo.CUST_CD BOO_CUST_CD --//--原始订单客户名称 "); + strSql.AppendLine(",TO_DATE(R.MILL_END_DATE, 'yyyy-mm-dd hh24:mi:ss') MILL_END_DATE --//--轧制日期 "); + strSql.AppendLine(",RE.PROD_REMARK REMARK --//--余材备注 "); + strSql.AppendLine(",MATR.ROUNDSTD ROUNDSTD --//--修约标准 "); + strSql.AppendLine(", CASE WHEN gpr.THK > 0 and gpr.WID > 0 and gpr.LEN >0 and gp.PROC_CD <> 'XAC' THEN 1 ELSE 0 END IS_CP_MOVE "); + strSql.AppendLine(", CASE WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' THEN 1 ELSE 0 END IS_UST "); + strSql.AppendLine("FROM NISCO.GP_PLATE GP "); + strSql.AppendLine("LEFT JOIN NISCO.BP_ORDER_ITEM bob ON gp.ORD_NO = bob.ORD_NO AND gp.ORD_ITEM = bob.ORD_ITEM--// "); + strSql.AppendLine("LEFT JOIN NISCO.BP_ORDER_ITEM boo ON gp.ORG_ORD_NO = boo.ORD_NO AND gp.ORG_ORD_ITEM = boo.ORD_ITEM--// "); + strSql.AppendLine("LEFT JOIN NISCO.QP_QLTY_DELV QQD ON gp.ORG_ORD_NO = QQD.ORD_NO AND gp.ORG_ORD_ITEM = QQD.ORD_ITEM--// "); + strSql.AppendLine("LEFT JOIN NISCO.GP_PLATE_REPLACE gpr ON gpr.PLATE_NO = gp.PLATE_NO "); + strSql.AppendLine("LEFT JOIN NISCO.GP_INSPPLATE GI ON GI.MAT_NO = GP.PLATE_NO "); + strSql.AppendLine("LEFT JOIN NISCO.GP_USTRESULT UST ON UST.PLATE_NO = GP.PLATE_NO "); + strSql.AppendLine("LEFT JOIN NISCO.GP_REMARK RE ON RE.MAT_NO = GP.PLATE_NO "); + strSql.AppendLine("LEFT JOIN NISCO.QP_QLTY_MATR MATR "); + strSql.AppendLine("ON MATR.ORD_NO = boo.ORD_NO "); + strSql.AppendLine("AND MATR.ORD_ITEM= boo.ORD_ITEM"); + strSql.AppendLine(" LEFT JOIN (SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLINGW UNION SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLING) R ON substr(GP.PLATE_NO,1,10)=R.SLAB_NO "); + strSql.AppendLine("WHERE 1=1 "); + strSql.AppendLine("AND GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.REC_STS = '2' and GP.ord_fl='2' "); + strSql.AppendLine("AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine("WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + //20240307改 R.MILL_END_DATE<'3'→R.MILL_END_DATE<='6' + strSql.AppendLine("AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '2' AND trunc(months_between(sysdate,to_date(R.MILL_END_DATE,'yyyymmdd hh24:mi:ss'))) <='6' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd <> 'XAC' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '1' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD is null THEN 1 "); + strSql.AppendLine("WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + strSql.AppendLine("AND GP.APLY_STDSPEC NOT LIKE '%NG-XY%'"); + //strSql.AppendLine("AND GP.Len <50000 "); //钢板长度上限50米 + strSql.AppendLine("AND length(GP.PLATE_NO) =12"); //钢板长度上限50米 + strSql.AppendLine(strWHerePlate); + strSql.AppendLine(strNotinPlate); + strSql.AppendLine("ORDER BY GP.PLATE_NO"); + + + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + gpPlates = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetAllCGB 报错", ex); + } + + return gpPlates; + } + + /// + /// 获取标准集合 + /// + /// 所有标准的集合 + public IList GetStandGroup() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gpPlates = new List(); + + strSql.AppendLine("SELECT "); + strSql.AppendLine(" STLGRD "); + strSql.AppendLine(" , STEEL_GRD_DETAIL "); + strSql.AppendLine(" , STL_SEQ "); + strSql.AppendLine(" , STDSPEC "); + strSql.AppendLine(" , THK_MIN "); + strSql.AppendLine(" , THK_MAX "); + strSql.AppendLine(" , INS_DATE "); + strSql.AppendLine(" , INS_TIME "); + strSql.AppendLine(" , INS_EMP "); + strSql.AppendLine(" , UPD_DATE "); + strSql.AppendLine(" , UPD_TIME "); + strSql.AppendLine(" , UPD_EMP "); + strSql.AppendLine(" , STLGRD_FL "); + strSql.AppendLine(" , ZZ_PLT "); + strSql.AppendLine(" , ZZ_PLT_DESP "); + strSql.AppendLine("FROM NISCO.CP_NISCO_CHMC_SL "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + gpPlates = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetStandGroup 报错", ex); + } + + return gpPlates; + } + + /// + /// 根据订单号找到对应的订单要求化学成分 + /// + /// 对应的化学成分集合 + /// 方法如果被static修饰, 则在接口中无法被发现(原因不详) + public IList GetOrderChemistry(string strWHereOrd, string strSpecialOrd) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + IList orderChemistrys = new List(); + + strSql.AppendLine("SELECT T.*FROM("); + strSql.AppendLine("SELECT QQC.*, rank() over(partition by QQC.ord_no, QQC.ord_item order by knd desc) rk from NISCO.QP_QLTY_CHEM QQC where (QQC.ORD_NO, QQC.ORD_ITEM) IN("); + strSql.AppendLine("SELECT"); + strSql.AppendLine("TO_CHAR(BOI.ORD_NO), TO_CHAR(BOI.ORD_ITEM)"); + strSql.AppendLine("FROM NISCO.cp_prc CPP "); + strSql.AppendLine("INNER JOIN "); + strSql.AppendLine("NISCO.BP_ORDER_ITEM boi "); + strSql.AppendLine("ON BOI.ORD_NO = CPP.ORD_NO "); + strSql.AppendLine("AND BOI.ORD_ITEM = CPP.ORD_ITEM "); + strSql.AppendLine("AND BOI.ORD_WID <> 0 "); + strSql.AppendLine("AND BOI.ORD_LEN <> 0 "); + strSql.AppendLine("AND BOI.ORD_THK <> 0 "); + + //strSql.AppendLine("WHERE 1 = 1 "); + //strSql.AppendLine(" AND ((SELECT COUNT( A.REQ_SEQ_NO) "); + //strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + //strSql.AppendLine(" WHERE "); + //strSql.AppendLine(" 1 = 1 AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + //strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + //strSql.AppendLine(" AND A.SEQ >= '01' "); + //strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + //strSql.AppendLine(" AND B.REC_STS = '1') + NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100)/(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85)>=0.95 "); + + //20240105改 + strSql.AppendLine("WHERE 1=1 "); + strSql.AppendLine(" AND (SELECT COUNT(A.REQ_SEQ_NO) "); + strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + strSql.AppendLine(" WHERE 1 = 1 "); + strSql.AppendLine(" AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + strSql.AppendLine(" AND A.SEQ >= '01' "); + strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + strSql.AppendLine(" AND A.ORD_FL = '1' "); + strSql.AppendLine(" AND B.REC_STS = '1') + (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100) / TRUNC(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85, 3) >= 0.95 "); + + + strSql.AppendLine("AND boi.PROD_CD = 'PP'"); + strSql.AppendLine("AND boi.REC_STS = '2' "); + strSql.AppendLine("and boi.ORD_STS IN('E', 'D') "); + strSql.AppendLine("AND boi.ord_knd IN('A') "); + + strSql.AppendLine(strWHereOrd); + strSql.AppendLine(strSpecialOrd); + //测试test + strSql.AppendLine(" or (boi.ORD_NO ='" + glstrOrdNo + "'"); + strSql.AppendLine(" AND boi.ORD_ITEM ='" + glstrOrdItem + "')"); + strSql.AppendLine(") "); + strSql.AppendLine(" AND QQC.KND IN ('1','2') ) T WHERE T.rk = 1 "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + orderChemistrys = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetSurplusMaterial 报错 : ", ex); + } + + return orderChemistrys; + } + + /// + /// 获取订单化学属性QP_QLTY_CHEM_FP + /// + /// + public IList GetQP_QLTY_CHEM_FP(string strWHereOrd, string strSpecialOrd) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_QLTY_MATR_MAIN = new List(); + + //strSql.AppendLine(" select t.ord_no,t.ord_item,t.knd,t.CHEM_COMP_CD,t.FOMULA_CD,t.CHEM_COMP_MIN, t.CHEM_COMP_MAX,t.CHEM_DIFF_MIN,t.CHEM_DIFF_MAX,t.SMP_CNT,t.GC_NO,t.CHEM_DIGIT,SMP_GC_TYPE from (select t.ord_no,t.ord_item,t.knd,t.CHEM_COMP_CD,t.FOMULA_CD,t.CHEM_COMP_MIN, t.CHEM_COMP_MAX,t.CHEM_DIFF_MIN,t.CHEM_DIFF_MAX,t.SMP_CNT,t.GC_NO,t.CHEM_DIGIT,t.SMP_GC_TYPE, "); + strSql.AppendLine(" select ORD_NO,ORD_ITEM,KND,CHEM_COMP_CD,FOMULA_CD,CHEM_COMP_MIN,CHEM_COMP_MAX,INS_DATE,INS_TIME,UPD_DATE,UPD_TIME,UPD_EMP,CHEM_DIFF_MIN,CHEM_DIFF_MAX,SMP_CNT,GC_NO,CHEM_DIGIT,SMP_GC_TYPE from (select t.*, "); + strSql.AppendLine(" rank() over(partition by t.ord_no,t.ord_item order by knd desc) rk from nisco.QP_QLTY_CHEM_FP t "); + strSql.AppendLine(" where t.knd in ('4','5') and (ord_no,ord_item) in(select BOI.ORD_NO,BOI.ORD_ITEM from NISCO.BP_ORDER_ITEM boi "); + //strSql.AppendLine(" where 1=1 and (ord_no,ord_item) in(select BOI.ORD_NO,BOI.ORD_ITEM from NISCO.BP_ORDER_ITEM boi "); + strSql.AppendLine(" INNER JOIN NISCO.cp_prc CPP "); + strSql.AppendLine(" ON BOI.ORD_NO = CPP.ORD_NO "); + strSql.AppendLine(" AND BOI.ORD_ITEM = CPP.ORD_ITEM "); + strSql.AppendLine(" where BOI.ORD_WID > 0 "); + strSql.AppendLine(" AND BOI.ORD_LEN > 0 "); + strSql.AppendLine(" AND BOI.ORD_THK > 0 "); + strSql.AppendLine(" and boi.PROD_CD = 'PP' "); + strSql.AppendLine(" AND boi.REC_STS = '2' "); + strSql.AppendLine(" and boi.ORD_STS IN('E', 'D') "); + strSql.AppendLine(" AND boi.ord_knd IN('A') "); + + + //strSql.AppendLine(" AND ((SELECT COUNT( A.REQ_SEQ_NO) "); + //strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + //strSql.AppendLine(" WHERE "); + //strSql.AppendLine(" 1 = 1 AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + //strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + //strSql.AppendLine(" AND A.SEQ >= '01' "); + //strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + //strSql.AppendLine(" AND B.REC_STS = '1') + NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100)/(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85)>=0.95 "); + + + //20240105改 + strSql.AppendLine(" AND (SELECT COUNT(A.REQ_SEQ_NO) "); + strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + strSql.AppendLine(" WHERE 1 = 1 "); + strSql.AppendLine(" AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + strSql.AppendLine(" AND A.SEQ >= '01' "); + strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + strSql.AppendLine(" AND A.ORD_FL = '1' "); + strSql.AppendLine(" AND B.REC_STS = '1') + (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100) / TRUNC(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85, 3) >= 0.95 "); + + + strSql.AppendLine(strWHereOrd); + strSql.AppendLine(strSpecialOrd); + + strSql.AppendLine(" )"); + //strSql.AppendLine(" AND t.KND IN ('1','2') ) t where rk = 1 "); + strSql.AppendLine(" ) t where rk = 1 "); + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_QLTY_MATR_MAIN = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_QLTY_CHEM_FP 报错 : ", ex); + } + + return ltQP_QLTY_MATR_MAIN; + } + + + + /// + /// 获取价格信息 + /// + /// + /// + public IList GetTB_BASEPRICE() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + //DataTable dtCheck = new DataTable(); + + IList gTB_BASEPRICE = new List(); + + strSql.AppendLine("SELECT *from TB_BASEPRICE "); + + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + gTB_BASEPRICE = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetTB_BASEPRICE 报错 : ", ex); + } + + return gTB_BASEPRICE; + } + + + + /// + /// 获取价格信息 + /// + /// + /// + public IList GetBASEPRICE() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + //DataTable dtCheck = new DataTable(); + + IList gTB_BASEPRICE = new List(); + + strSql.AppendLine("SELECT *from BASEPRICE1 "); + + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + gTB_BASEPRICE = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetBASEPRICE 报错 : ", ex); + } + + return gTB_BASEPRICE; + } + + /// + /// 根据钢板板坯号找到对应炉号,根据炉号找到对应化学成分 + /// + /// 对应的化学成分集合 + public IList GetChemistry(string strWHerePlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + IList chemistrys = new List(); + + strSql.AppendLine("SELECT* FROM NISCO.QP_CHEM_RSLT WHERE HEAT_NO IN "); + strSql.AppendLine("(SELECT DISTINCT HEAT_NO FROM NISCO.FP_SLAB WHERE SLAB_NO IN "); + strSql.AppendLine("(SELECT DISTINCT GP.SLAB_NO FROM NISCO.GP_PLATE GP "); + strSql.AppendLine(" LEFT JOIN NISCO.GP_USTRESULT UST ON UST.PLATE_NO = GP.PLATE_NO "); + + strSql.AppendLine(" WHERE GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + strSql.AppendLine("AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine("WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + strSql.AppendLine(strWHerePlate); + //测试test + strSql.AppendLine(" OR GP.PLATE_NO = '" + glstrPlateNo + "'"); + strSql.AppendLine(") "); + strSql.AppendLine(") "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + chemistrys = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetChemistry 报错 : ", ex); + } + + return chemistrys; + } + + /// + /// 根据钢板板坯号找到对应炉号,根据炉号找到对应化学成分 + /// + /// 对应的化学成分集合 + public IList GetQP_CHEM_RSLT_FP(string strWHerePlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList chemistrys = new List(); + + //strSql.AppendLine(" SELECT* FROM NISCO.QP_CHEM_RSLT_FP WHERE substr(SMP_NO,1,8) IN "); //版批号前8位是炉号 + //strSql.AppendLine("(SELECT DISTINCT HEAT_NO FROM NISCO.FP_SLAB WHERE SLAB_NO IN "); + //strSql.AppendLine("(SELECT DISTINCT GP.SLAB_NO FROM NISCO.GP_PLATE GP "); + //strSql.AppendLine(" LEFT JOIN NISCO.GP_USTRESULT UST ON UST.PLATE_NO = GP.PLATE_NO "); + //strSql.AppendLine(" WHERE GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + //strSql.AppendLine("AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 "); + //strSql.AppendLine("WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + //strSql.AppendLine(strWHerePlate); + //strSql.AppendLine(") "); + //strSql.AppendLine(") "); + + //20240131改 + strSql.AppendLine(" SELECT * FROM NISCO.QP_CHEM_RSLT_FP WHERE substr(SMP_NO,1,8) IN "); + strSql.AppendLine(" (SELECT DISTINCT HEAT_NO FROM NISCO.FP_SLAB WHERE SLAB_NO IN "); + strSql.AppendLine(" (SELECT DISTINCT GP.SLAB_NO FROM NISCO.GP_PLATE GP "); + strSql.AppendLine(" LEFT JOIN NISCO.GP_USTRESULT UST ON UST.PLATE_NO = GP.PLATE_NO "); + strSql.AppendLine(" LEFT JOIN (SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLINGW UNION SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLING) R ON substr(GP.PLATE_NO,1,10)=R.SLAB_NO "); + strSql.AppendLine(" WHERE 1=1 "); + strSql.AppendLine(" AND GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + strSql.AppendLine(" AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine(" WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine(" WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + //20240307改 R.MILL_END_DATE<'3'→R.MILL_END_DATE<='6' + strSql.AppendLine(" AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '2' AND trunc(months_between(sysdate,to_date(R.MILL_END_DATE,'yyyymmdd hh24:mi:ss'))) <='6' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd <> 'XAC' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD is null THEN 1 "); + strSql.AppendLine(" WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine(" WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + strSql.AppendLine(" AND GP.APLY_STDSPEC NOT LIKE '%NG-XY%' "); + strSql.AppendLine(" AND GP.Len <50000 "); + strSql.AppendLine(strWHerePlate); + //测试test + strSql.AppendLine(" OR GP.PLATE_NO = '" + glstrPlateNo + "'"); + strSql.AppendLine(" ) "); + strSql.AppendLine(" ) "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + chemistrys = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_CHEM_RSLT_FP 报错 : ", ex); + } + + return chemistrys; + } + + /// + /// 获取钢板的炉号 + /// + /// + /// + public IList GetHeat(string strWHerePlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList chemistrys = new List(); + + strSql.AppendLine("SELECT* FROM NISCO.FP_SLAB WHERE SLAB_NO IN "); + strSql.AppendLine("(SELECT DISTINCT GP.SLAB_NO FROM NISCO.GP_PLATE GP "); + strSql.AppendLine(" LEFT JOIN NISCO.GP_USTRESULT UST ON UST.PLATE_NO = GP.PLATE_NO "); + strSql.AppendLine(" WHERE GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + strSql.AppendLine("AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine("WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + strSql.AppendLine(strWHerePlate); + //测试test + strSql.AppendLine(" OR GP.PLATE_NO = '" + glstrPlateNo + "'"); + strSql.AppendLine(") "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + chemistrys = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetChemistry 报错 : ", ex); + } + + return chemistrys; + } + + /// + /// 获取钢板信息 + /// + /// + /// + public GP_PLATE GetPlate(string strWHerePlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + + GP_PLATE rePlate = new GP_PLATE(); + + strSql.AppendFormat("SELECT * FROM NISCO.GP_PLATE WHERE PLATE_NO ='{0}'", strWHerePlate); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + rePlate = db.QuerySingle(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetPlate 报错 : ", ex); + } + + return rePlate; + } + + + /// + /// 获取船板信息 + /// + /// + /// + public IList GetQP_STD_HEAD() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + //DataTable dtCheck = new DataTable(); + + IList gQP_STD_HEAD = new List(); + + strSql.AppendLine("SELECT * from NISCO.QP_STD_HEAD where CERT_TYPE ='S'"); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + gQP_STD_HEAD = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_STD_HEAD 报错 : ", ex); + } + + return gQP_STD_HEAD; + } + + /// + /// 获取船级社信息 + /// + /// + public IList GetZP_CD_CD() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gZP_CD_CD = new List(); + strSql.AppendLine("SELECT T.* FROM NISCO.ZP_CD T WHERE T.CD_MANA_NO IN ('Q0052')"); + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + gZP_CD_CD = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetZP_CD_CD 报错 : ", ex); + } + + return gZP_CD_CD; + } + + + + /// + /// 获取订单物理属性 + /// + /// + public IList GetQP_QLTY_MATR() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_QLTY_MATR = new List(); + + strSql.AppendLine("SELECT* from QP_QLTY_MATR where(ORD_NO || '-' || ORD_ITEM) IN("); + strSql.AppendLine("SELECT"); + strSql.AppendLine("TO_CHAR(BOI.ORD_NO) || '-' || TO_CHAR(BOI.ORD_ITEM)"); + strSql.AppendLine("FROM cp_prc CPP "); + strSql.AppendLine("INNER JOIN "); + strSql.AppendLine("BP_ORDER_ITEM boi "); + strSql.AppendLine("ON BOI.ORD_NO = CPP.ORD_NO "); + strSql.AppendLine("AND BOI.ORD_ITEM = CPP.ORD_ITEM "); + strSql.AppendLine("AND BOI.ORD_WID <> 0 "); + strSql.AppendLine("AND BOI.ORD_LEN <> 0 "); + strSql.AppendLine("AND BOI.ORD_THK <> 0 "); + strSql.AppendLine("WHERE CPP.ORD_REM_WGT / (((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85) > 1"); + strSql.AppendLine("AND boi.PROD_CD = 'PP' "); + strSql.AppendLine("AND boi.REC_STS = '2' "); + strSql.AppendLine("and boi.ORD_STS IN('E', 'D') "); + strSql.AppendLine("AND boi.ord_knd IN('A') "); + strSql.AppendLine("OR (SELECT COUNT( A.REQ_SEQ_NO)"); + strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B"); + strSql.AppendLine(" WHERE"); + strSql.AppendLine(" 1 = 1 AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM=BOI.ORD_ITEM "); + strSql.AppendLine(" AND A.BLOCK_SEQ >= '01'"); + strSql.AppendLine(" AND A.SEQ >= '01'"); + strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO"); + strSql.AppendLine(" AND B.REC_STS = '1') > 0 "); + strSql.AppendLine(")"); + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_QLTY_MATR = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetChemistry 报错 : ", ex); + } + + return ltQP_QLTY_MATR; + } + + /// + /// 获取钢板物理特性 + /// + /// + public IList GetQP_TEST_RSLT() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_TEST_RSLT = new List(); + + //strSql.AppendLine(string.Format("SELECT * FROM QP_CHEM_RSLT WHERE HEAT_NO = (SELECT HEAT_NO FROM FP_SLAB WHERE SLAB_NO = '{0}')", plate.SLAB_NO)); + strSql.AppendLine("SELECT * FROM QP_TEST_RSLT WHERE SMP_NO IN "); + strSql.AppendLine("(SELECT DISTINCT GP.SMP_NO FROM GP_PLATE GP "); + strSql.AppendLine("WHERE proc_cd IN('DZB','DZE','QAB','XAC') AND PROD_CD = 'PP' AND REC_STS = '2' "); + strSql.AppendLine("AND(CASE WHEN proc_cd = 'XAC' AND PROD_GRD = '1' AND SURF_GRD = '1' THEN 1 "); + strSql.AppendLine("WHEN proc_cd = 'QAB' AND PROD_GRD = '1' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 ELSE 0 END) = 1 "); + + strSql.AppendLine(") "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_TEST_RSLT = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetChemistry 报错 : ", ex); + } + + return ltQP_TEST_RSLT; + } + + + /// + /// 获取钢板物理特性 + /// + /// + public IList GetZP_CD() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltZP_CD = new List(); + + //strSql.AppendLine(string.Format("SELECT * FROM QP_CHEM_RSLT WHERE HEAT_NO = (SELECT HEAT_NO FROM FP_SLAB WHERE SLAB_NO = '{0}')", plate.SLAB_NO)); + strSql.AppendLine("select * from ZP_CD where cd_mana_no='G0099' "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + ltZP_CD = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetZP_CD 报错 : ", ex); + } + + return ltZP_CD; + } + + /// + /// 获取DZB处理仓库 + /// + /// + public IList GetDZBWar() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltZP_CD = new List(); + strSql.AppendLine("select * from ZP_CD where cd_mana_no='WLCK' "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + ltZP_CD = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetZP_CD 报错 : ", ex); + } + + return ltZP_CD; + } + + + /// + /// 获取DZB处理仓库 + /// + /// + public IList GetRCLLW() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltZP_CD = new List(); + strSql.AppendLine("select * from ZP_CD where cd_mana_no='RCLLW' "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + ltZP_CD = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetRCLLW 报错 : ", ex); + } + + return ltZP_CD; + } + + + /// + /// 获取厚度公差配置 + /// + /// + public IList GetGCJJ() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltZP_CD = new List(); + strSql.AppendLine(" SELECT * from THK_TOLER_INTER "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + ltZP_CD = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetGCJJ 报错 : ", ex); + } + + return ltZP_CD; + } + + // + /// 获取历史信息 + /// + /// + /// + public IList GetHistory() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltHISTORY = new List(); + + strSql.AppendLine("SELECT * FROM SUPERSEDE_HISTORY WHERE 1=1 "); + strSql.AppendLine(" and to_date(SUB_DATE ,'yyyy-mm-dd hh24:mi:ss') > to_date('" + DateTime.Now.AddHours(-2) + "','yyyy-mm-dd hh24:mi:ss')"); + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + ltHISTORY = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetPlate 报错 : ", ex); + } + + return ltHISTORY; + } + + /// + /// 替代确认数据 + /// + /// 替代确认数据 实体类集合 + public void UpdateManual(IList ltManual) + { + using (IDbContext db = ObjectContainer.GetObject("db")) + { + try + { + string upd_date = DateTime.Now.ToString("yyyyMMdd"); + string upd_time = DateTime.Now.ToString("HHmmss"); + //开启事务 + db.BeginTransaction(); + bool b = true; + #region 自动确认 + foreach (TB_PLATE_MANUAL model in ltManual) + { + string strSql = string.Format("Update TB_PLATE_MANUAL Set RETURN_RESULTS = '{0}' WHERE PLATE_NO = '{1}' AND ORD_NO = '{2}' AND ORD_ITEM = '{3}'", model.RETURN_RESULTS, model.PLATE_NO, model.ORD_NO, model.ORD_ITEM); + if (db.Execute(strSql) == 0) + { + b = false; + break; + } + } + #endregion + if (b) + { + //数据操作成功则保存数据 + db.Commit(); + } + else + { + //操作失败回滚数据到初始状态 + db.Rollback(); + } + } + catch (Exception ex) + { + //数据如果发生错误则回滚 + db.Rollback(); + + logger.Error("UpdateManual 报错", ex); + } + } + } + + + + /// + /// 替代确认数据 + /// + /// 替代确认数据 实体类集合 + public void SaveSupersede(IList ltSup, IList ltsupOrd, IList gTEMP_DATA) + { + using (IDbContext db = ObjectContainer.GetObject("db")) + { + try + { + //因为是同时操作两个表, 所以开启事务 + db.BeginTransaction(); + + db.Insert(ltSup); + db.Insert(ltsupOrd); + + bool b = true; + #region 自动确认 + foreach (SUPERSEDE delAddModel in ltSup) + { + string strSql = string.Format("DELETE FROM SUPERSEDE WHERE PLATE_NO = '{0}' AND APLY_STDSPEC = '{1}' AND ORD_NO = '{2}' AND ORD_ITEM = '{3}'", delAddModel.PLATE_NO, delAddModel.APLY_STDSPEC, delAddModel.ORD_NO, delAddModel.ORD_ITEM); + + //将匹配表的记录信息复制给历史记录表 + SUPERSEDE_CONFIRAM sc = new SUPERSEDE_CONFIRAM + { + PLATE_NO = delAddModel.PLATE_NO, + PROC_CD = delAddModel.PROC_CD, + ORD_NO = delAddModel.ORD_NO, + ORD_ITEM = delAddModel.ORD_ITEM, + INS_DATE = DateTime.Now.ToString("yyyyMMdd"), + INS_TIME = DateTime.Now.ToString("HHmmss"), + + //替代状态 + STATE = "1" + }; + TEMP_DATA TD = gTEMP_DATA.Where(p => p.PLATE_NO == delAddModel.PLATE_NO && p.ORD_NO == delAddModel.ORD_NO && p.ORD_ITEM == delAddModel.ORD_ITEM).FirstOrDefault(); + SUPERSEDE supData = new SUPERSEDE(); + + string strSqlSup = "SELECT * FROM SUPERSEDE WHERE PLATE_NO ='" + delAddModel.PLATE_NO + "'"; + + //获取替代信息 + supData = db.QuerySingle(strSqlSup); + + //替代履历 + SUPERSEDE_HISTORY supHis = GetSupHis(supData); + + if (TD.IsWG == "1") + { + REMA_LOC_WG InsertREMA_LOC_WG = GetREMA_LOC_WG(supData, TD); + db.Insert(InsertREMA_LOC_WG); + } + else + { + //PDO + TBDIPDO InsertPDO = GetTBDIBKDPDO(supData, TD); + + db.Insert(InsertPDO); + } + //db.Insert(supHis); + if (db.Execute(strSql) == 0) + { + b = false; + break; + } + if (db.Insert(supHis) == 0) + { + b = false; + break; + } + logger.InfoFormat("钢板号:{0},订单号:{1}-{2},替代方式:{3},替代成功", delAddModel.PLATE_NO, delAddModel.ORD_NO, delAddModel.ORD_ITEM, delAddModel.SUB_FULL); + } + #endregion + if (b) + { + //测试test指定 + //数据操作成功则保存数据 + //db.Commit(); + db.Rollback(); + } + else + { + //操作失败回滚数据到初始状态 + db.Rollback(); + } + } + catch (Exception ex) + { + //数据如果发生错误则回滚 + db.Rollback(); + + logger.Error("DelSupAddSupersedeConfiram 报错", ex); + } + } + } + + + /// + /// 删除不可替代钢板 + /// + /// 替代确认数据 实体类集合 + public void deleteTBPLATESPE(List delModel) + { + //RequestEntity result = new RequestEntity(); + StringBuilder strSql = new StringBuilder(); + + try + { + using (IDbContext db = ObjectContainer.GetObject("db")) + { + foreach (var model in delModel) + { + try + { + //PLATE_NO + strSql.AppendLine("DELETE FROM TB_PLATE_SPE WHERE 1=1 "); + strSql.AppendLine(string.Format("AND PLATE_NO like '%{0}%' ", model.PLATE_NO)); + db.Execute(strSql.ToString()); // 执行删除数据操作 + //执行完操作之后清空strSql 准备下次 appendLine + strSql.Length = 0; + } + catch + { + logger.Error("该条记录删除失败: " + delModel.ToString()); + } + + } + + } + } + catch (Exception ex) + { + logger.Error("DelTbPlateSpe 报错", ex); + } + //return result; + } + + // + /// 替代数据 + /// + /// 替代数据 实体类集合 + public void SaveProcessData(TB_PROCESS_DATA data) + { + using (IDbContext db = ObjectContainer.GetObject("db")) + { + try + { + db.Insert(data); + } + catch (Exception ex) + { + logger.Info("替代确认错误信息:" + ex.ToString()); + } + + } + + } + public void SaveTB_STOCK(TB_STOCK data) + { + using (IDbContext db = ObjectContainer.GetObject("db")) + { + try + { + db.Insert(data); + } + catch (Exception ex) + { + logger.Info("替代确认错误信息:" + ex.ToString()); + } + + } + + } + public void SaveSupersedetest(IList ltSup, IList ltsupOrd) + { + using (IDbContext db = ObjectContainer.GetObject("db")) + { + try + { + //因为是同时操作两个表, 所以开启事务 + db.BeginTransaction(); + if (ltSup.Count > 0) + { + db.Insert(ltSup); + } + if (ltsupOrd.Count > 0) + { + db.Insert(ltsupOrd); + } + bool b = true; + + //if (db.Execute(strSql) == 0) + //{ + // b = false; + // //break; + //} + //if (db.Insert(supHis) == 0) + //{ + // b = false; + // //break; + //} + + if (b) + { + //数据操作成功则保存数据 + db.Commit(); + } + else + { + //操作失败回滚数据到初始状态 + db.Rollback(); + } + } + catch (Exception ex) + { + //数据如果发生错误则回滚 + db.Rollback(); + + logger.Error("DelSupAddSupersedeConfiram 报错", ex); + } + } + } + + + public void UpdateTbneword(IList list) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + + //查询可用订单以及常用字段 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + //开启数据库连接查询数据 + db.BeginTransaction(); + try + { + bool b = true; + foreach (var tB_NEW_ORD in list) + { + StringBuilder strsql = new StringBuilder(); + if (tB_NEW_ORD.ORD_NO != string.Empty) + { + strsql.AppendLine("UPDATE TB_NEW_ORD SET STATUS='0'"); + strsql.AppendLine("WHERE ORD_NO='" + tB_NEW_ORD.ORD_NO + "'"); + strsql.AppendLine("AND ORD_ITEM='" + tB_NEW_ORD.ORD_ITEM + "'"); + } + if (db.Execute(strsql.ToString()) == 0) + { + b = false; + } + } + if (b) + { + //数据操作成功则保存数据 + db.Commit(); + } + else + { + //操作失败回滚数据到初始状态 + db.Rollback(); + } + } + catch (Exception ex) + { + db.Rollback(); + logger.Error("UpdateTbneword 报错", ex); + } + } + } + + /// + /// 获取时间戳 + /// + /// + public static string GetTimeStamp() + { + TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 8, 0, 0, 0); + return Convert.ToInt64(ts.TotalMilliseconds).ToString(); + } + + //20240308 整理wg仓库替代余材 + public static REMA_LOC_WG GetREMA_LOC_WG(SUPERSEDE prsup, TEMP_DATA TD) + { + REMA_LOC_WG Result = new REMA_LOC_WG(); + + Result.PLATE_NO = TD.PLATE_NO; + Result.ORD_NO = TD.ORD_NO; + Result.ORD_ITEM = TD.ORD_ITEM; + Result.INS_DATE = DateTime.Now.ToString("yyyyMMddHHmmss"); + Result.GP_CUR_INV = prsup.GP_CUR_INV; + Result.LOC = prsup.LOC; + Result.SUB_FULL = prsup.SUB_FULL; + + //Data字段:数值型、字符型都是后补空格 + //Result.TIMESTAMP = GetTimeStamp(); //TIMESTAMP: 1970.1.1 8:00:00 至当前时间的毫秒数 + //Result.SERIALNO = "0";//Serialno :默认0,对于TIMESTAMP: 重复时的区分号 + Result.QUEUEID = "BKDMES000";//:主键,BKDYC0001 ,有时序先后顺序的必须用同一个QUEUEID + //Result.HEADER = "";// 未使用 + //Result.STATUS = "N";// 发送方写入N,读取成功后变0,异常变1 + //Result.PROCESSTIME = DateTime.Now.ToString("yyyyMMddHHmmss");//:读取时间 + //Result.DESCRIPTION = "";//:读取异常备注 + StringBuilder strData = new StringBuilder(); + bool b = false; + if (prsup.PROC_CD == "XAC") + { + strData.Append(("BKDERP001").PadRight(10));//FORMID:10位 ,BKDERP001 固定 + strData.Append(prsup.ID.PadRight(12)); // 业务ID号 NUMBER(12) 流水号,需要再应答中带回 + strData.Append(prsup.SUB_FULL); // 替代类型:VARCHAR2(1), C - 完全替代,P - 退判替代 + strData.Append((prsup.PLATE_NO).PadRight(14));// 钢板号: VARCHAR2(14) + strData.Append((prsup.ORD_NO).PadRight(11));// 订单号: VARCHAR2(11) + strData.Append((prsup.ORD_ITEM).PadRight(4)); // 订单项次号: VARCHAR2(4) + strData.Append(GetSlabNo(prsup).PadRight(14)); // 板坯号: VARCHAR2(14) + if (prsup.SUB_FULL != "C") + { + if (!string.IsNullOrEmpty(prsup.SUB_LACK_CON)) + { + if (prsup.SUB_LACK_CON.Contains("取样")) + { + strData.Append("1"); // 取样: VARCHAR2(1) + b = true; + } + else + { + strData.Append("0"); // 不取样: VARCHAR2(1) + } + } + else + { + strData.Append("0"); // 不取样: VARCHAR2(1) + } + } + else + { + strData.Append("0"); // 不取样: VARCHAR2(1) + + } + //是否终结 + if (prsup.IS_END == "是") + { + strData.Append("1"); // 终结订单: VARCHAR2(1) + } + else + { + strData.Append("0"); // 非终结订单: VARCHAR2(1) + } + if (prsup.SPLITTING == "1") + { + decimal len = Convert.ToDecimal(prsup.GP_LEN); + string SPLITTING = "B"; + strData.Append((SPLITTING).PadRight(20)); //分板备注: VARCHAR2(20) + if (prsup.SIZE_KND == "02") + { + strData.Append((prsup.BOI_ORD_LEN).PadRight(5)); //单定尺 订单长度 : VARCHAR2(5) + } + else + { + strData.Append((len.ToString()).PadRight(5)); + } + } + if (prsup.SPLITTING == "2") + { + string SPLITTING = "A"; + strData.Append((SPLITTING).PadRight(20)); //分板备注: VARCHAR2(20) + if (prsup.SIZE_KND == "02") + { + strData.Append((prsup.BOI_ORD_LEN).PadRight(5)); //单定尺 订单长度 : VARCHAR2(5) + } + else + { + if (!string.IsNullOrEmpty(prsup.CUTTING_LEN)) + strData.Append((prsup.CUTTING_LEN).PadRight(5)); //单定尺 订单长度 : VARCHAR2(5) + else + strData.Append((prsup.GP_LEN).PadRight(5)); //单定尺 订单长度 : VARCHAR2(5) + } + + } + if (string.IsNullOrEmpty(prsup.SPLITTING)) + { + string SPLITTING = ""; + string dec = ""; + strData.Append((SPLITTING).PadRight(20)); //分板备注: VARCHAR2(20) + if (prsup.SIZE_KND == "02") + { + strData.Append((prsup.BOI_ORD_LEN).PadRight(5)); //单定尺 订单长度 : VARCHAR2(5) + } + else + { + strData.Append((prsup.GP_LEN).PadRight(5)); //单定尺 订单长度 : VARCHAR2(5) + } + + } + Result.QUEUEID = "BKDERP000"; + } + else + { + strData.Append(("BKDMES002").PadRight(10));// FORMID:10位 ,BKDMES002 固定 + strData.Append(prsup.ID.PadRight(12));// 业务ID号 NUMBER(12) 流水号,需要再应答中带回 + strData.Append(prsup.SUB_FULL); // 替代类型:VARCHAR2(1), C - 完全替代,P - 退判替代 + strData.Append((prsup.PLATE_NO).PadRight(14)); // 钢板号: VARCHAR2(14) + strData.Append((prsup.ORD_NO).PadRight(11));// 订单号: VARCHAR2(11) + strData.Append((prsup.ORD_ITEM).PadRight(4)); // 订单项次号: VARCHAR2(4) + strData.Append(GetSlabNo(prsup).PadRight(14)); // 板坯号: VARCHAR2(14) 改为 炼钢缓冲区号 + if (prsup.SUB_FULL != "C") + { + if (!string.IsNullOrEmpty(prsup.SUB_LACK_CON)) + { + if (prsup.SUB_LACK_CON.Contains("取样")) + { + strData.Append("1"); // 取样: VARCHAR2(1) + b = true; + } + else + { + strData.Append("0"); // 不取样: VARCHAR2(1) + } + } + else + { + strData.Append("0"); // 不取样: VARCHAR2(1) + } + } + else + { + strData.Append("0"); // 不取样: VARCHAR2(1) + } + //是否终结 + if (prsup.IS_END == "是") + { + strData.Append("1"); // 终结订单: VARCHAR2(1) + } + else + { + strData.Append("0"); // 非终结订单: VARCHAR2(1) + } + if (prsup.SPLITTING == "1") + { + decimal len = Convert.ToDecimal(prsup.GP_LEN); + string SPLITTING = "B";// 分板:长度倍尺分板 + strData.Append((SPLITTING).PadRight(20)); //分板备注: VARCHAR2(20) + if (prsup.SIZE_KND == "02") + { + strData.Append((prsup.BOI_ORD_LEN).PadRight(5)); //单定尺 订单长度 : VARCHAR2(5) + } + else + { + strData.Append((len.ToString()).PadRight(5)); //单定尺 订单长度 : VARCHAR2(5) + } + + } + if (prsup.SPLITTING == "2") + { + string SPLITTING = "A";//A 分板: 一块正品一块余材; + strData.Append((SPLITTING).PadRight(20)); //分板备注: VARCHAR2(20) + if (prsup.SIZE_KND == "02") + { + strData.Append((prsup.BOI_ORD_LEN).PadRight(5)); //单定尺 订单长度 : VARCHAR2(5) + } + else + { + if (!string.IsNullOrEmpty(prsup.CUTTING_LEN)) + strData.Append((prsup.CUTTING_LEN).PadRight(5)); //单定尺 订单长度 : VARCHAR2(5) + else + strData.Append((prsup.GP_LEN).PadRight(5)); //单定尺 订单长度 : VARCHAR2(5) + } + + } + if (string.IsNullOrEmpty(prsup.SPLITTING)) + { + string SPLITTING = ""; + string dec = ""; + strData.Append((SPLITTING).PadRight(20)); //分板备注: VARCHAR2(20) + if (prsup.SIZE_KND == "02") + { + strData.Append((prsup.BOI_ORD_LEN).PadRight(5)); //单定尺 订单长度 : VARCHAR2(5) + } + else + { + strData.Append((prsup.GP_LEN).PadRight(5)); //单定尺 订单长度 : VARCHAR2(5) + } + + } + + + Result.QUEUEID = "BKDMES000"; + } + //化学成分N + if (prsup.SUB_LACK_CON == null) + { + strData.Append("0"); + } + else + { + if (prsup.SUB_LACK_CON.Contains("化学成分N")) + { + strData.Append("1"); + + } + else + { + strData.Append("0"); + } + } + //添加钢印 + if (!string.IsNullOrEmpty(prsup.BOI_SEALMEMO)) + { + strData.Append("1"); // 终结订单: VARCHAR2(1) + } + else + { + strData.Append("0"); // 非终结订单: VARCHAR2(1) + } + + string nosmpno = ""; + strData.Append(nosmpno.PadRight(14)); // 添加smp_no: VARCHAR2(14) + strData.Append(TD.IS_MERGE); + strData.Append(TD.AGREEMENT); + //20240126 标记是否做切割替代指示 + strData.Append(TD.IsSMPLens); + //20240306 IsXAC =1 标记XAC 现货替代 + strData.Append(TD.IsXAC); + //20240307 如果是小尺板替代 需要标记出来 + if (TD.IS_SMALL_PLATE == "是") + { + strData.Append("1"); + } + else + { + strData.Append("0"); + } + + Result.DATA = strData.ToString(); + + return Result; + + } + + + /// + /// 整理 PDO 实体类数据 + /// + /// 钢板数据 + /// 订单数据库 + /// + public static TBDIPDO GetTBDIBKDPDO(SUPERSEDE prsup, TEMP_DATA TD) + { + BP_ORDER_ITEM bp_order = new BP_ORDER_ITEM(); + + TBDIPDO Result = new TBDIPDO(); + + //Data字段:数值型、字符型都是后补空格 + Result.TIMESTAMP = GetTimeStamp(); //TIMESTAMP: 1970.1.1 8:00:00 至当前时间的毫秒数 + Result.SERIALNO = "0";//Serialno :默认0,对于TIMESTAMP: 重复时的区分号 + Result.QUEUEID = "BKDMES000";//:主键,BKDYC0001 ,有时序先后顺序的必须用同一个QUEUEID + Result.HEADER = "";// 未使用 + //Result.DATA = "";// 前10位记录FORMID(例如:BKD001 / BKD002) + Result.STATUS = "N";// 发送方写入N,读取成功后变0,异常变1 + Result.PROCESSTIME = DateTime.Now.ToString("yyyyMMddHHmmss");//:读取时间 + Result.DESCRIPTION = "";//:读取异常备注 + StringBuilder strData = new StringBuilder(); + bool b = false; + if (prsup.PROC_CD == "XAC") + { + + strData.Append(("BKDERP001").PadRight(10));//FORMID:10位 ,BKDERP001 固定 + strData.Append(prsup.ID.PadRight(12)); // 业务ID号 NUMBER(12) 流水号,需要再应答中带回 + strData.Append(prsup.SUB_FULL); // 替代类型:VARCHAR2(1), C - 完全替代,P - 退判替代 + strData.Append((prsup.PLATE_NO).PadRight(14));// 钢板号: VARCHAR2(14) + strData.Append((prsup.ORD_NO).PadRight(11));// 订单号: VARCHAR2(11) + strData.Append((prsup.ORD_ITEM).PadRight(4)); // 订单项次号: VARCHAR2(4) + strData.Append(GetSlabNo(prsup).PadRight(14)); // 板坯号: VARCHAR2(14) + if (prsup.SUB_FULL != "C") + { + if (!string.IsNullOrEmpty(prsup.SUB_LACK_CON)) + { + if (prsup.SUB_LACK_CON.Contains("取样")) + { + strData.Append("1"); // 取样: VARCHAR2(1) + b = true; + } + else + { + strData.Append("0"); // 不取样: VARCHAR2(1) + } + } + else + { + strData.Append("0"); // 不取样: VARCHAR2(1) + } + } + else + { + strData.Append("0"); // 不取样: VARCHAR2(1) + + } + //是否终结 + if (prsup.IS_END == "是") + { + strData.Append("1"); // 终结订单: VARCHAR2(1) + } + else + { + strData.Append("0"); // 非终结订单: VARCHAR2(1) + } + if (prsup.SPLITTING == "1") + { + decimal len = Convert.ToDecimal(prsup.GP_LEN); + string SPLITTING = "B"; + strData.Append((SPLITTING).PadRight(20)); //分板备注: VARCHAR2(20) + if (prsup.SIZE_KND == "02") + { + strData.Append((prsup.BOI_ORD_LEN).PadRight(5)); //单定尺 订单长度 : VARCHAR2(5) + } + else + { + strData.Append((len.ToString()).PadRight(5)); + } + + + } + if (prsup.SPLITTING == "2") + { + string SPLITTING = "A"; + strData.Append((SPLITTING).PadRight(20)); //分板备注: VARCHAR2(20) + if (prsup.SIZE_KND == "02") + { + strData.Append((prsup.BOI_ORD_LEN).PadRight(5)); //单定尺 订单长度 : VARCHAR2(5) + } + else + { + if (!string.IsNullOrEmpty(prsup.CUTTING_LEN)) + strData.Append((prsup.CUTTING_LEN).PadRight(5)); //单定尺 订单长度 : VARCHAR2(5) + else + strData.Append((prsup.GP_LEN).PadRight(5)); //单定尺 订单长度 : VARCHAR2(5) + } + + } + if (string.IsNullOrEmpty(prsup.SPLITTING)) + { + string SPLITTING = ""; + string dec = ""; + strData.Append((SPLITTING).PadRight(20)); //分板备注: VARCHAR2(20) + if (prsup.SIZE_KND == "02") + { + strData.Append((prsup.BOI_ORD_LEN).PadRight(5)); //单定尺 订单长度 : VARCHAR2(5) + } + else + { + strData.Append((prsup.GP_LEN).PadRight(5)); //单定尺 订单长度 : VARCHAR2(5) + } + + } + Result.QUEUEID = "BKDERP000"; + } + else + { + strData.Append(("BKDMES002").PadRight(10));// FORMID:10位 ,BKDMES002 固定 + strData.Append(prsup.ID.PadRight(12));// 业务ID号 NUMBER(12) 流水号,需要再应答中带回 + strData.Append(prsup.SUB_FULL); // 替代类型:VARCHAR2(1), C - 完全替代,P - 退判替代 + strData.Append((prsup.PLATE_NO).PadRight(14)); // 钢板号: VARCHAR2(14) + strData.Append((prsup.ORD_NO).PadRight(11));// 订单号: VARCHAR2(11) + strData.Append((prsup.ORD_ITEM).PadRight(4)); // 订单项次号: VARCHAR2(4) + strData.Append(GetSlabNo(prsup).PadRight(14)); // 板坯号: VARCHAR2(14) 改为 炼钢缓冲区号 + if (prsup.SUB_FULL != "C") + { + if (!string.IsNullOrEmpty(prsup.SUB_LACK_CON)) + { + if (prsup.SUB_LACK_CON.Contains("取样")) + { + strData.Append("1"); // 取样: VARCHAR2(1) + b = true; + } + else + { + strData.Append("0"); // 不取样: VARCHAR2(1) + } + } + else + { + strData.Append("0"); // 不取样: VARCHAR2(1) + } + } + else + { + strData.Append("0"); // 不取样: VARCHAR2(1) + } + //是否终结 + if (prsup.IS_END == "是") + { + strData.Append("1"); // 终结订单: VARCHAR2(1) + } + else + { + strData.Append("0"); // 非终结订单: VARCHAR2(1) + } + if (prsup.SPLITTING == "1") + { + decimal len = Convert.ToDecimal(prsup.GP_LEN); + string SPLITTING = "B";// 分板:长度倍尺分板 + strData.Append((SPLITTING).PadRight(20)); //分板备注: VARCHAR2(20) + if (prsup.SIZE_KND == "02") + { + strData.Append((prsup.BOI_ORD_LEN).PadRight(5)); //单定尺 订单长度 : VARCHAR2(5) + } + else + { + strData.Append((len.ToString()).PadRight(5)); //单定尺 订单长度 : VARCHAR2(5) + } + + } + if (prsup.SPLITTING == "2") + { + string SPLITTING = "A";//A 分板: 一块正品一块余材; + strData.Append((SPLITTING).PadRight(20)); //分板备注: VARCHAR2(20) + if (prsup.SIZE_KND == "02") + { + strData.Append((prsup.BOI_ORD_LEN).PadRight(5)); //单定尺 订单长度 : VARCHAR2(5) + } + else + { + if (!string.IsNullOrEmpty(prsup.CUTTING_LEN)) + strData.Append((prsup.CUTTING_LEN).PadRight(5)); //单定尺 订单长度 : VARCHAR2(5) + else + strData.Append((prsup.GP_LEN).PadRight(5)); //单定尺 订单长度 : VARCHAR2(5) + } + + } + if (string.IsNullOrEmpty(prsup.SPLITTING)) + { + string SPLITTING = ""; + string dec = ""; + strData.Append((SPLITTING).PadRight(20)); //分板备注: VARCHAR2(20) + if (prsup.SIZE_KND == "02") + { + strData.Append((prsup.BOI_ORD_LEN).PadRight(5)); //单定尺 订单长度 : VARCHAR2(5) + } + else + { + strData.Append((prsup.GP_LEN).PadRight(5)); //单定尺 订单长度 : VARCHAR2(5) + } + + } + + + Result.QUEUEID = "BKDMES000"; + } + //化学成分N + if (prsup.SUB_LACK_CON == null) + { + strData.Append("0"); + } + else + { + if (prsup.SUB_LACK_CON.Contains("化学成分N")) + { + strData.Append("1"); + + } + else + { + strData.Append("0"); + } + } + //添加钢印 + if (!string.IsNullOrEmpty(prsup.BOI_SEALMEMO)) + { + strData.Append("1"); // 终结订单: VARCHAR2(1) + } + else + { + strData.Append("0"); // 非终结订单: VARCHAR2(1) + } + //添加smp_no + //if(b) + //{ + // string SPLITTING = ""; + // strData.Append(SPLITTING.PadRight(14)); // 添加smp_no: VARCHAR2(14) + //} + //else + //{ + // if (TD != null) + // { + // if (!string.IsNullOrEmpty(TD.SMP_NO)) + // { + // strData.Append(TD.SMP_NO.PadRight(14)); // 添加smp_no: VARCHAR2(14) + // } + // else + // { + // string SPLITTING = ""; + // strData.Append(SPLITTING.PadRight(14)); // 添加smp_no: VARCHAR2(14) + // } + + // } + // else + // { + // string SPLITTING = ""; + // strData.Append(SPLITTING.PadRight(14)); // 添加smp_no: VARCHAR2(14) + // } + //} + //不传smp_no + + string nosmpno = ""; + strData.Append(nosmpno.PadRight(14)); // 添加smp_no: VARCHAR2(14) + strData.Append(TD.IS_MERGE); + strData.Append(TD.AGREEMENT); + //20240126 标记是否做切割替代指示 + strData.Append(TD.IsSMPLens); + //20240306 IsXAC =1 标记XAC 现货替代 + strData.Append(TD.IsXAC); + //20240307 如果是小尺板替代 需要标记出来 + if (TD.IS_SMALL_PLATE == "是") + { + strData.Append("1"); + } + else + { + strData.Append("0"); + } + + Result.DATA = strData.ToString(); + + return Result; + } + + /// + /// 获取缓冲区板坯号 + /// + /// 变量数据 + /// + public static string GetSlabNo(SUPERSEDE prsup) + { + string strSlabNo = string.Empty; + DataTable dtReturn = new DataTable(); + StringBuilder strSql = new StringBuilder(); + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + //strSql.AppendLine(" SELECT "); + //strSql.AppendLine(" R.SLAB_NO "); + //strSql.AppendLine(" ,R.REQ_SEQ_NO "); + //strSql.AppendLine(" , R.ORD_NO "); + //strSql.AppendLine(" , R.ORD_ITEM "); + //strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB R "); + //strSql.AppendLine(" WHERE R.SUPLY_SMS_PLT = 'B1' "); + //strSql.AppendLine(" AND R.REQ_SEQ_NO NOT IN(SELECT REQ_SEQ_NO "); + //strSql.AppendLine(" FROM NISCO.EP_SLAB_EDT "); + //strSql.AppendLine(" WHERE REQ_SEQ_NO IS NOT NULL) "); + //strSql.AppendLine(" AND NVL(R.CNF_FL,' ') = 'F' "); + //strSql.AppendLine(" AND NVL(R.REC_STS,' ') = '1' "); + + strSql.AppendLine(" SELECT A.REQ_SEQ_NO "); + strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B"); + strSql.AppendLine(" WHERE "); + strSql.AppendLine(" 1 = 1 "); + strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + strSql.AppendLine(" AND A.SEQ >= '01' "); + strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + strSql.AppendLine(" AND B.REC_STS = '1' "); + strSql.AppendFormat(" AND A.ORD_NO = '{0}' ", prsup.ORD_NO); + strSql.AppendFormat(" AND A.ORD_ITEM = '{0}' ", prsup.ORD_ITEM); + + dtReturn = db.Query(strSql.ToString()); + + if (dtReturn.Rows.Count > 0) + { + strSlabNo = dtReturn.Rows[0]["REQ_SEQ_NO"].ToString(); + } + } + } + catch (Exception) + { + } + //if (prsup.SLAB_LACK_FLG=="1")//欠量不用炼钢缓存区的量 + //{ + // strSlabNo = String.Empty; + //} + return strSlabNo; + } + + public static SUPERSEDE_HISTORY GetSupHis(SUPERSEDE prsup) + { + SUPERSEDE_HISTORY Result = new SUPERSEDE_HISTORY(); + + Result.APLY_STDSPEC = prsup.APLY_STDSPEC; + + Result.ID = prsup.ID; + Result.PLATE_NO = prsup.PLATE_NO; + Result.APLY_STDSPEC = prsup.APLY_STDSPEC; + Result.PROC_CD = prsup.PROC_CD; + Result.THK = prsup.THK; + Result.WID = prsup.WID; + Result.LEN = prsup.LEN; + Result.WGT = prsup.WGT; + Result.REDO_HOT = prsup.REDO_HOT; + Result.SIZE_KND = prsup.SIZE_KND; + Result.TRIMMING = prsup.TRIMMING; + Result.ORD_NO = prsup.ORD_NO; + Result.SUB_RATE = prsup.SUB_RATE; + Result.ORD_ITEM = prsup.ORD_ITEM; + Result.STLGRD = prsup.STLGRD; + Result.TRIMMING_WID = prsup.TRIMMING_WID; + Result.TRIMMING_LEN = prsup.TRIMMING_LEN; + Result.SURPLUS_WID = prsup.SURPLUS_WID; + Result.SURPLUS_LEN = prsup.SURPLUS_LEN; + Result.PLATE_SIZE = prsup.PLATE_SIZE; + Result.SUB_DATE = prsup.SUB_DATE; + Result.GP_THK = prsup.GP_THK; + Result.GP_WID = prsup.GP_WID; + Result.GP_LEN = prsup.GP_LEN; + Result.GP_WGT = prsup.GP_WGT; + + //20231130 原始钢板长宽厚 + Result.GP_Y_THK = prsup.GP_Y_THK; + Result.GP_Y_WID = prsup.GP_Y_WID; + Result.GP_Y_LEN = prsup.GP_Y_LEN; + Result.GP_Y_WGT = prsup.GP_Y_WGT; + + Result.GP_APLY_STDSPEC = prsup.GP_APLY_STDSPEC; + Result.GP_ORD_FL = prsup.GP_ORD_FL; + Result.GP_SURF_GRD = prsup.GP_SURF_GRD; + Result.BOI_ORD_NO = prsup.BOI_ORD_NO; + Result.BOI_ORD_ITEM = prsup.BOI_ORD_ITEM; + Result.BOI_STDSPEC = prsup.BOI_STDSPEC; + Result.BOI_ORD_THK = prsup.BOI_ORD_THK; + Result.BOI_ORD_WID = prsup.BOI_ORD_WID; + Result.BOI_ORD_LEN = prsup.BOI_ORD_LEN; + Result.BOI_WGT_UNIT = prsup.BOI_WGT_UNIT; + Result.BOI_CUST_CD = prsup.BOI_CUST_CD; + Result.BOI_ENDUSE_CD = prsup.BOI_ENDUSE_CD; + Result.BOI_ORD_KND = prsup.BOI_ORD_KND; + Result.BOB_ORD_NO = prsup.BOB_ORD_NO; + Result.BOB_ORD_ITEM = prsup.BOB_ORD_ITEM; + Result.BOB_STDSPEC = prsup.BOB_STDSPEC; + Result.BOB_ORD_THK = prsup.BOB_ORD_THK; + Result.BOB_ORD_WID = prsup.BOB_ORD_WID; + Result.BOB_ORD_LEN = prsup.BOB_ORD_LEN; + Result.BOB_WGT_UNIT = prsup.BOB_WGT_UNIT; + Result.BOB_CUST_CD = prsup.BOB_CUST_CD; + Result.BOB_ENDUSE_CD = prsup.BOB_ENDUSE_CD; + Result.BOB_ORD_KND = prsup.BOB_ORD_KND; + Result.BOO_ORD_NO = prsup.BOO_ORD_NO; + Result.BOO_ORD_ITEM = prsup.BOO_ORD_ITEM; + Result.BOO_STDSPEC = prsup.BOO_STDSPEC; + Result.BOO_ORD_THK = prsup.BOO_ORD_THK; + Result.BOO_ORD_WID = prsup.BOO_ORD_WID; + Result.BOO_ORD_LEN = prsup.BOO_ORD_LEN; + Result.BOO_WGT_UNIT = prsup.BOO_WGT_UNIT; + Result.BOO_CUST_CD = prsup.BOO_CUST_CD; + Result.SUB_USER = prsup.SUB_USER; + Result.SUR_PRO_REM = prsup.SUR_PRO_REM; + Result.GP_PLT = prsup.GP_PLT; + Result.GP_PROD_TIME = prsup.GP_PROD_TIME; + Result.SUR_FIR_TIM = prsup.SUR_FIR_TIM; + Result.GP_WOO_RSN = prsup.GP_WOO_RSN; + Result.SUR_COM = prsup.SUR_COM; + Result.SUB_NUM = prsup.SUB_NUM; + Result.SUB_DIR = prsup.SUB_DIR; + Result.SUB_US_WID = prsup.SUB_US_WID; + Result.SUB_US_LEN = prsup.SUB_US_LEN; + Result.SUB_CUT_X = prsup.SUB_CUT_X; + Result.SUB_CUT_Y = prsup.SUB_CUT_Y; + Result.SUB_LOS_WGT = prsup.SUB_LOS_WGT; + Result.SUB_FOR = prsup.SUB_FOR; + Result.SUB_REM = prsup.SUB_REM; + Result.GP_CUR_INV = prsup.GP_CUR_INV; + Result.GP_TRIM_FL = prsup.GP_TRIM_FL; + Result.GP_SIZE_KND = prsup.GP_SIZE_KND; + Result.ORD_REM = prsup.ORD_REM; + Result.GP_UST_RLT_CD = prsup.GP_UST_RLT_CD; + Result.GP_GAS_FL = prsup.GP_GAS_FL; + Result.GP_CL_FL = prsup.GP_CL_FL; + Result.GP_HTM_CNT = prsup.GP_HTM_CNT; + Result.GP_STLGRD = prsup.GP_STLGRD; + Result.BOI_SURFACE_REQUESTS = prsup.BOI_SURFACE_REQUESTS; + Result.BOI_VESSEL_NO = prsup.BOI_VESSEL_NO; + Result.BOI_SIDEMARK = prsup.BOI_SIDEMARK; + Result.BOI_FACEPAINT = prsup.BOI_FACEPAINT; + Result.BOI_SEALMEMO = prsup.BOI_SEALMEMO; + Result.BOI_ORD_PROD_END_TIME = prsup.BOI_ORD_PROD_END_TIME; + Result.BOI_PROD_CD = prsup.BOI_PROD_CD; + Result.BOI_DOME_FL = prsup.BOI_DOME_FL; + Result.BOI_DEL_FR_DATE = prsup.BOI_DEL_TO_DATE; + Result.SUB_FULL = prsup.SUB_FULL; + Result.SUB_LACK_CON = prsup.SUB_LACK_CON; + //TODO:履历信息 + Result.CON_DATE = DateTime.Now.ToString(); + Result.CON_USER = "Auto"; + Result.CON_RSL = "1"; + + Result.PROD_GRD = prsup.PROD_GRD; + Result.CUR_INV = prsup.CUR_INV; + Result.LOC = prsup.LOC; + Result.EFF_RATE = prsup.EFF_RATE; + Result.PRICE_GRD = prsup.PRICE_GRD; + Result.STATE = "1"; + Result.SUB_LACK_NUM = prsup.SUB_LACK_NUM; + Result.ORD_WGT = prsup.ORD_WGT; + Result.SUB_LACK_WGT = prsup.SUB_LACK_WGT; + + Result.SLAB_LACK_NUM = prsup.SLAB_LACK_NUM; + Result.LACK_NUM = prsup.LACK_NUM; + Result.SLAB_LACK_FLG = prsup.SLAB_LACK_FLG; + + Result.Cutting_WGT = prsup.Cutting_WGT; + Result.STEEL_SCRAP_WGT = prsup.STEEL_SCRAP_WGT; + Result.SUB_PLATE_WGT = prsup.SUB_PLATE_WGT; + + Result.CUTTING_LEN = prsup.CUTTING_LEN; + Result.CUTTING_WID = prsup.CUTTING_WID; + Result.CUTTING_THK = prsup.CUTTING_THK; + Result.IS_END = prsup.IS_END; + + Result.ALTERNATIVE_PRICE = prsup.ALTERNATIVE_PRICE; + + Result.GENUINE_PRICE = prsup.GENUINE_PRICE; + Result.BREAKAGE_COSTS = prsup.BREAKAGE_COSTS; + Result.CUTTING_COSTS = prsup.CUTTING_COSTS; + Result.TRANSPORT_COSTS = prsup.TRANSPORT_COSTS; + Result.INSPECT_COSTS = prsup.INSPECT_COSTS; + Result.INSPECT_COSTS = prsup.INSPECT_COSTS; + Result.PRICE = prsup.PRICE; + Result.Spot_Price = prsup.Spot_Price; + Result.Scrap_Price = prsup.Scrap_Price; + Result.HOISTING_WAREHOUSE = prsup.HOISTING_WAREHOUSE; + Result.HOISTING_COSTS = prsup.HOISTING_COSTS; + Result.PROFIT = prsup.PROFIT; + Result.IS_SMALL_PLATE = prsup.IS_SMALL_PLATE; + //20240312 是否分板 + Result.SPLITTING = prsup.SPLITTING; + return Result; + } + + /// + /// 获取配置参数 + /// + /// + public IList GetTBPSRules() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gTBSubRules = null; + + //查询可用订单以及常用字段 + + try + { + strSql.AppendLine("SELECT * FROM TB_PS_CONFIG"); + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + gTBSubRules = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetTBSubRules 报错", ex); + } + + return gTBSubRules; + } + + + + /// + /// GetTB_NEW_PLATEAND GP.REC_STS = '2' and GP.ord_fl = '2' + /// + /// + public IList GetTB_NEW_PLATE() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + IList ltTB_NEW_PLATE = new List(); + strSql.AppendLine("SELECT * FROM TB_NEW_PLATE "); + strSql.AppendLine(" WHERE STATUS ='N'"); + strSql.AppendLine(" and to_date(INS_DATE || INS_TIME,'yyyy-mm-dd hh24:mi:ss') > to_date('" + DateTime.Now.AddHours(-1) + "','yyyy-mm-dd hh24:mi:ss')"); + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + ltTB_NEW_PLATE = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetTB_NEW_PLATE 报错 : ", ex); + } + + return ltTB_NEW_PLATE; + } + + + public IList GetTB_INVENTORY_ANALYSIS() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + IList ltTB_INVENTORY_ANALYSIS = new List(); + strSql.AppendLine("SELECT * FROM TB_INVENTORY_ANALYSIS "); + strSql.AppendLine(" WHERE 1=1"); + strSql.AppendLine(" and to_date(INS_DATE || INS_TIME,'yyyy-mm-dd hh24:mi:ss') > to_date('" + DateTime.Now.AddMonths(-3) + "','yyyy-mm-dd hh24:mi:ss')"); + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + ltTB_INVENTORY_ANALYSIS = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetTB_INVENTORY_ANALYSIS 报错 : ", ex); + } + + return ltTB_INVENTORY_ANALYSIS; + } + + + + /// + /// GetTB_NEW_PLATEAND GP.REC_STS = '2' and GP.ord_fl = '2' + /// + /// + public IList GetSUB_TYPE_MGT() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + IList ltSUB_TYPE_MGT = new List(); + strSql.AppendLine("SELECT * FROM SUB_TYPE_MGT "); + strSql.AppendLine(" WHERE IS_RUN ='是'"); + //strSql.AppendLine(" and to_date(INS_DATE || INS_TIME,'yyyy-mm-dd hh24:mi:ss') > to_date('" + DateTime.Now.AddHours(-1) + "','yyyy-mm-dd hh24:mi:ss')"); + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + ltSUB_TYPE_MGT = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetTB_NEW_PLATE 报错 : ", ex); + } + + return ltSUB_TYPE_MGT; + } + + + /// + /// 在途的仓库 + /// + /// + public IList GetCPMOVESLT(string strWHerePlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltCP_MOVE_SLT = new List(); + + strSql.AppendLine("SELECT * FROM( "); + strSql.AppendLine("SELECT "); + strSql.AppendLine("rank() over(partition BY CMS.MAT_NO order by CMS.SND_TIME desc) rk ,CMS.* "); + strSql.AppendLine("FROM NISCO.CP_MOVE_SLT CMS "); + strSql.AppendLine(" WHERE CMS.MAT_NO IN "); + strSql.AppendLine("(SELECT DISTINCT GP.PLATE_NO FROM NISCO.GP_PLATE GP "); + strSql.AppendLine(" WHERE GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl = '2' "); + strSql.AppendLine("AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 ELSE 0 END) = 1 "); + strSql.AppendLine(strWHerePlate); + strSql.AppendLine(") ) "); + strSql.AppendLine("WHERE rk = 1 "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltCP_MOVE_SLT = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetChemistry 报错 : ", ex); + } + + return ltCP_MOVE_SLT; + } + + public IList GetWarDiffDays() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gTBSubRules = null; + + //查询可用订单以及常用字段 + try + { + strSql.AppendLine("SELECT * FROM REMA_PLA_SUBSI_WAREH_MANAGE"); + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + gTBSubRules = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetWarDiffDays 报错", ex); + } + + return gTBSubRules; + } + + + public IList GetTB_PLATE_MANUAL(string strWHerePlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gTBSubRules = null; + + //查询可用订单以及常用字段 + try + { + strSql.AppendLine("SELECT * FROM TB_PLATE_MANUAL where 1=1 "); + if (!string.IsNullOrEmpty(strWHerePlate)) + { + strSql.AppendLine(" AND PLATE_NO IN (" + strWHerePlate + ")"); + } + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + gTBSubRules = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetWarDiffDays 报错", ex); + } + + return gTBSubRules; + } + + + + public IList GetLOCMSNAGE() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gTBSubRules = null; + + //查询可用订单以及常用字段 + try + { + strSql.AppendLine("SELECT * FROM REMA_PLA_SUBSI_LOC_MANAGE"); + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + gTBSubRules = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetLOCMSNAGE 报错", ex); + } + + return gTBSubRules; + } + + //20240307 查询未维护标准 + public IList GetYCTD_WH_NO() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gTBYCTD_WH_NO = null; + + //查询可用订单以及常用字段 + try + { + strSql.AppendLine(" SELECT * FROM YCTD_WH_NO "); + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + gTBYCTD_WH_NO = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetYCTD_WH_NO 报错", ex); + } + + return gTBYCTD_WH_NO; + } + + + //20240309 WG仓库可替代余材信息 + public IList GetREMA_LOC_WG() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gREMA_LOC_WG = null; + + //查询可用订单以及常用字段 + try + { + strSql.AppendLine(" SELECT * FROM REMA_LOC_WG "); + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + gREMA_LOC_WG = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetREMA_LOC_WG 报错", ex); + } + + return gREMA_LOC_WG; + } + + public IList GetGP_PLATE(string strNotinPlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gGP_PLATE = null; + + //查询可用订单以及常用字段 + + strSql.AppendLine("SELECT"); + strSql.AppendLine(" GP.PLATE_NO "); + strSql.AppendLine(",GI.INSP_B_DEP_FLAW2 "); + strSql.AppendLine(",(SELECT COUNT(*) "); + strSql.AppendLine(" FROM NISCO.GP_USTRESULT GU "); + strSql.AppendLine(" WHERE GU.PLATE_NO = TRIM(GP.PLATE_NO) "); + strSql.AppendLine(" AND GU.UST_DEC = 'Y') GU_CNT "); + strSql.AppendLine(", QQD.THK_TOL_MIN ,QQD.THK_TOL_MAX , GP.OCCR_CD, GP.PLT, GP.PRC_LINE, GP.REC_STS, GP.PROC_CD, GP.BEF_PROC_CD, GP.PROD_CD, GP.STLGRD"); + strSql.AppendLine(", CASE WHEN gpr.THK > 0 and gp.PROC_CD <> 'XAC' THEN gpr.THK ELSE gp.THK END THK"); + strSql.AppendLine(", CASE WHEN gpr.WID > 0 and gp.PROC_CD <> 'XAC' THEN gpr.WID ELSE gp.WID END WID"); + strSql.AppendLine(", CASE WHEN gpr.LEN > 0 and gp.PROC_CD <> 'XAC' THEN gpr.LEN ELSE gp.LEN END LEN"); + //strSql.AppendLine(",GP.THK"); + //strSql.AppendLine(",GP.WID"); + //strSql.AppendLine(",GP.LEN"); + strSql.AppendLine(", GP.WGT, GP.CAL_WGT, GP.THK_GRP, GP.WID_GRP, GP.OVER_FL, GP.ORD_FL, GP.WOO_RSN "); + strSql.AppendLine(", GP.ORD_NO, GP.ORD_ITEM, GP.ORG_ORD_NO, GP.ORG_ORD_ITEM, GP.ENDUSE_CD, GP.DEL_TO_DATE, GP.PROD_DATE "); + strSql.AppendLine(", GP.PROD_TIME, GP.SHIFT, GP.GROUP_CD, GP.LOC, GP.BED_PILE_DATE, GP.SMP_FL, GP.SMP_LOC, GP.SMP_LEN "); + strSql.AppendLine(", GP.SMP_NO, GP.INSP_EMP, GP.DSC_DATE, GP.DSC_TIME, GP.PROD_GRD, GP.SURF_GRD, GP.QUALITY_GRD "); + strSql.AppendLine(", GP.QUALITY_UPD_GRD, GP.APLY_STDSPEC, GP.APLY_ENDUSE_CD, GP.IN_PLT_CD, GP.IN_PLT, GP.IN_PLT_DATE "); + strSql.AppendLine(", GP.IN_PLT_TIME, GP.IN_CAR_NO, GP.SLAB_NO, GP.IN_PLT_CO, GP.OUT_PLT_CD, GP.OUT_PLT, GP.OUT_PLT_DATE "); + strSql.AppendLine(", GP.OUT_PLT_TIME, GP.OUT_CAR_NO, GP.OUT_SHEET_NO, GP.HOUSING_DATE, GP.HOUSING_TIME, GP.SHP_IST_NO "); + strSql.AppendLine(", GP.SHP_IST_DATE, GP.SHP_IST_TIME, GP.SHP_DATE, GP.SHP_TIME, GP.TRNS_NO, GP.CAR_NO, GP.TRNS_CMPY_CD "); + strSql.AppendLine(", GP.SHP_EMP, GP.TRAIN_LINE_NAME, GP.DEST_DETAIL, GP.CERT_RPT_FL, GP.CERT_RPT_DATE, GP.CERT_RPT_TIME "); + strSql.AppendLine(", GP.SHP_IST_CAN_DATE, GP.SHP_IST_CAN_TIME, GP.SHP_IST_CAN_FL, GP.INS_DATE, GP.INS_EMP_CD, GP.INS_PGMID "); + strSql.AppendLine(", GP.UPD_DATE, GP.UPD_EMP_CD, GP.UPD_PGM, GP.PLATE_SEC, GP.CR_CD, GP.PILE_NO, GP.PRC, GP.SF_ORNOT, GP.UST_FL "); + strSql.AppendLine(", GP.TRIM_FL, GP.END_RES, GP.ORG_PLATE, GP.ORD_THK, GP.ORD_WID, GP.ORD_LEN, GP.ORD_WGT, GP.NEXT_PROC "); + strSql.AppendLine(", GP.ACT_SMP_FL, GP.ACT_SMP_LEN, GP.CUST_CD, GP.CUR_INV, GP.BEF_APLY_STDSPEC, GP.STDSPEC_UPD_FL "); + strSql.AppendLine(", GP.SIZE_KND, GP.BAOXIN_IF_DATE, GP.SLAB_WGT, GP.CUST_SPEC_NO, GP.LOAD_WGT, GP.PRICE_GRD "); + strSql.AppendLine(", GP.PRICE_GRD_DATE, GP.PRICE_GRD_TIME, GP.PRICE_GRD_EMP_CD, GP.CHG_GRD_RES, GP.MARKING_FL "); + strSql.AppendLine(", GP.MAT_OWNER_FL, GP.MAT_OWNER_CUST_CD, GP.RSLT_PROC_CD, GP.UST_RLT_CD, GP.UST_STATUS "); + strSql.AppendLine(", GP.HTM_SHOT_BLAST, GP.HTM_SHOT_BLAST_RLT, GP.HTM_RSLT_FL, GP.HTM_METH1, GP.HTM_COND1 "); + strSql.AppendLine(", GP.HTM_RLT_METH1, GP.HTM_METH2, GP.HTM_COND2, GP.HTM_RLT_METH2, GP.HTM_METH3, GP.HTM_COND3 "); + strSql.AppendLine(", GP.HTM_RLT_METH3, GP.HTM_METH4, GP.HTM_COND4, GP.HTM_RLT_METH4, GP.HTM_METH5, GP.HTM_COND5 "); + strSql.AppendLine(", GP.HTM_RLT_METH5, GP.GRID_FL, GP.GRID_RSLT, GP.CL_FL, GP.CL_RSLT, GP.GAS_FL, GP.GAS_RSLT, GP.UST_CNT "); + strSql.AppendLine(", GP.CUT_CNT, GP.HTM_CNT, GP.CL_CNT, GP.SB_CNT, GP.GRD_CNT, GP.CLAIM_RES, GP.CLAIM_DATE, GP.CLAIM_THK "); + strSql.AppendLine(", GP.CLAIM_WID, GP.CLAIM_LEN, GP.CLAIM_WGT, GP.ERP_IF_DATE, GP.NEXT_PLAN_HTM, GP.NEXT_PLAN_HTM_COND "); + strSql.AppendLine(", GP.PLAN_CUT_CNT, GP.SMP_SET_FL, GP.FP_FL, GP.FP_RSLT, GP.FP_CNT, GP.ACT_SMP_FL_R, GP.ACT_SMP_LEN_R "); + strSql.AppendLine(", GP.SMP_NO_R, GP.ERP_MPLATE_CHK, GP.ERP_PLATE_IN "); + strSql.AppendLine(", '' SUB_PRO_STA, '' SUB_CON_STA, '' SUB_CUT_POS_1,'' SUB_FULL,'' SUB_LACK_CON "); + strSql.AppendLine(", '' SUB_CUT_POS_2, '' SUB_ORD_NO, '' SUB_ORD_ITEM, '' SUB_ORD_REM, '' SUB_SUR_LEN_1, '' SUB_SUR_WID_1 "); + strSql.AppendLine(", '' SUB_SUR_LEN_2, '' SUB_SUR_WID_2, '' SUB_SUR_STA_1, '' SUB_SUR_STA_2, '' SUB_LOS_WGT, '' SUB_DATE "); + strSql.AppendLine(", '' SUB_NUM, '' SUB_DIR, '' SUB_US_WID, '' SUB_US_LEN, '' SUB_CUT_X, '' SUB_CUT_Y, '' SUB_USER "); + strSql.AppendLine(",bob.ORD_NO BOB_ORD_NO --//--替代前订单订单号 "); + strSql.AppendLine(",bob.ORD_ITEM BOB_ORD_ITEM --//--替代前订单序列 "); + strSql.AppendLine(",bob.STDSPEC BOB_STDSPEC --//--替代前订单订单标准 "); + strSql.AppendLine(",bob.ORD_THK BOB_ORD_THK --//--替代前订单厚度 "); + strSql.AppendLine(",bob.ORD_WID BOB_ORD_WID --//--替代前订单宽度 "); + strSql.AppendLine(",bob.ORD_LEN BOB_ORD_LEN --//--替代前订单长度 "); + strSql.AppendLine(",bob.PROD_WGT BOB_WGT_UNIT --//--替代前订单重量 "); + strSql.AppendLine(",bob.CUST_CD BOB_CUST_CD --//--替代前订单客户名称 "); + strSql.AppendLine(",bob.ENDUSE_CD BOB_ENDUSE_CD --//--替代前订单订单用途 "); + strSql.AppendLine(",bob.ORD_KND BOB_ORD_KND --//--替代前订单订单种类 "); + strSql.AppendLine(",boo.ORD_NO BOO_ORD_NO --//--原始订单订单号 "); + strSql.AppendLine(",boo.ORD_ITEM BOO_ORD_ITEM --//--原始订单序列 "); + strSql.AppendLine(",boo.STDSPEC BOO_STDSPEC --//--原始订单订单标准 "); + strSql.AppendLine(",boo.ORD_THK BOO_ORD_THK --//--原始订单厚度 "); + strSql.AppendLine(",boo.ORD_WID BOO_ORD_WID --//--原始订单宽度 "); + strSql.AppendLine(",boo.ORD_LEN BOO_ORD_LEN --//--原始订单长度 "); + strSql.AppendLine(",boo.PROD_WGT BOO_WGT_UNIT --//--原始订单重量 "); + strSql.AppendLine(",boo.CUST_CD BOO_CUST_CD --//--原始订单客户名称 "); + strSql.AppendLine("FROM NISCO.GP_PLATE GP "); + strSql.AppendLine("LEFT JOIN NISCO.BP_ORDER_ITEM bob ON gp.ORD_NO = bob.ORD_NO AND gp.ORD_ITEM = bob.ORD_ITEM--// "); + strSql.AppendLine("LEFT JOIN NISCO.BP_ORDER_ITEM boo ON gp.ORG_ORD_NO = boo.ORD_NO AND gp.ORG_ORD_ITEM = boo.ORD_ITEM--// "); + strSql.AppendLine("LEFT JOIN NISCO.QP_QLTY_DELV QQD ON gp.ORG_ORD_NO = QQD.ORD_NO AND gp.ORG_ORD_ITEM = QQD.ORD_ITEM--// "); + strSql.AppendLine("LEFT JOIN NISCO.GP_PLATE_REPLACE gpr ON gpr.PLATE_NO = gp.PLATE_NO "); + strSql.AppendLine("LEFT JOIN NISCO.GP_INSPPLATE GI ON GI.MAT_NO = GP.PLATE_NO "); + strSql.AppendLine("WHERE 1=1 "); + strSql.AppendLine("AND GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + strSql.AppendLine("AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 ELSE 0 END) = 1 "); + strSql.AppendLine("AND GP.APLY_STDSPEC NOT LIKE '%NG-XY%'"); + strSql.AppendLine("AND GP.Len <50000 "); //钢板长度上限50米 + + strSql.AppendLine(strNotinPlate); + strSql.AppendLine("ORDER BY GP.PLATE_NO"); + //开启数据库连接查询数据 + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + gGP_PLATE = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetGP_PLATE 报错", ex); + } + + + + return gGP_PLATE; + } + + /// + /// 更新配置参数 + /// + public void UpdateTbPSConf(TB_PS_CONFIG prTBSubRules) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + + //查询可用订单以及常用字段 + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + StringBuilder strsql = new StringBuilder(); + if (prTBSubRules.ID != string.Empty) + { + strsql.AppendLine("UPDATE TB_PS_CONFIG SET ID='" + prTBSubRules.ID + "'"); + + if (!string.IsNullOrEmpty(prTBSubRules.LOOP_CYC)) + { + strsql.AppendLine(", LOOP_CYC='" + prTBSubRules.LOOP_CYC + "'"); + } + + if (!string.IsNullOrEmpty(prTBSubRules.EFF_LEN)) + { + strsql.AppendLine(", EFF_LEN='" + prTBSubRules.EFF_LEN + "'"); + } + + if (!string.IsNullOrEmpty(prTBSubRules.EFF_WID)) + { + strsql.AppendLine(", EFF_WID='" + prTBSubRules.EFF_WID + "'"); + } + + if (!string.IsNullOrEmpty(prTBSubRules.ORD_DAYS_DIFF)) + { + strsql.AppendLine(", ORD_DAYS_DIFF='" + prTBSubRules.ORD_DAYS_DIFF + "'"); + } + + if (!string.IsNullOrEmpty(prTBSubRules.PLATE_DAYS_DIFF)) + { + strsql.AppendLine(", PLATE_DAYS_DIFF='" + prTBSubRules.PLATE_DAYS_DIFF + "'"); + } + + if (!string.IsNullOrEmpty(prTBSubRules.SUB_RATE)) + { + strsql.AppendLine(", SUB_RATE='" + prTBSubRules.SUB_RATE + "'"); + } + + if (!string.IsNullOrEmpty(prTBSubRules.SUB_REM)) + { + strsql.AppendLine(", SUB_REM='" + prTBSubRules.SUB_REM + "'"); + } + if (!string.IsNullOrEmpty(prTBSubRules.SPLITTING_LEN)) + { + strsql.AppendLine(", SPLITTING_LEN='" + prTBSubRules.SPLITTING_LEN + "'"); + } + + strsql.AppendLine("WHERE ID='" + prTBSubRules.ID + "'"); + } + db.Execute(strsql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("UpdateParaConf 报错", ex); + } + } + + public IList GetQPSTDHEAD() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gQPSTDHEAD = null; + + //查询可用订单以及常用字段 + + try + { + strSql.AppendLine("SELECT * FROM NISCO.QP_STD_HEAD"); + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + gQPSTDHEAD = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQPSTDHEAD 报错", ex); + } + + return gQPSTDHEAD; + } + + public IList GetGPTHKADD() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gGPTHKADD = null; + + //查询可用订单以及常用字段 + + try + { + strSql.AppendLine("SELECT * FROM NISCO.GP_THK_ADD"); + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + gGPTHKADD = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetGPTHKADD 报错", ex); + } + + return gGPTHKADD; + } + + public IList GetTBPlateSpe() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gTBPlateSpe = null; + + //查询可用订单以及常用字段 + + try + { + strSql.AppendLine("SELECT * FROM TB_PLATE_SPE"); + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + gTBPlateSpe = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetTBPlateSpe 报错", ex); + } + + return gTBPlateSpe; + } + + + + public IList GetTB_PLATE_SPE() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gTB_PLATE_SPE = null; + + //查询可用订单以及常用字段 + + try + { + strSql.AppendLine("SELECT * FROM TB_PLATE_SPE WHERE 1 = 1"); + //strSql.AppendLine(" and to_date(INS_DATE || INS_TIME ,'yyyy-mm-dd hh24:mi:ss') < to_date('" + DateTime.Now.AddDays(-1) + "','yyyy-mm-dd hh24:mi:ss')"); + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + gTB_PLATE_SPE = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetTB_PLATE_SPE 报错", ex); + } + + return gTB_PLATE_SPE; + } + /// + /// 不可替代钢种 + /// + /// + public IList GetTB_STLGRD_SPE() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gTB_STLGRD_SPE = null; + + //查询可用订单以及常用字段 + + try + { + strSql.AppendLine("SELECT * FROM TB_STLGRD_SPE WHERE 1 = 1"); + //strSql.AppendLine(" and to_date(INS_DATE || INS_TIME ,'yyyy-mm-dd hh24:mi:ss') < to_date('" + DateTime.Now.AddDays(-1) + "','yyyy-mm-dd hh24:mi:ss')"); + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + gTB_STLGRD_SPE = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetTB_STLGRD_SPE 报错", ex); + } + + return gTB_STLGRD_SPE; + } + + /// + /// 配置替代牌号 + /// + /// + public IList GetSPECIAL_ORD() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gTB_STLGRD_SPE = null; + + //查询可用订单以及常用字段 + + try + { + strSql.AppendLine("SELECT * FROM SPECIAL_ORD WHERE 1 = 1"); + //strSql.AppendLine(" and to_date(INS_DATE || INS_TIME ,'yyyy-mm-dd hh24:mi:ss') < to_date('" + DateTime.Now.AddDays(-1) + "','yyyy-mm-dd hh24:mi:ss')"); + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + gTB_STLGRD_SPE = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetSPECIAL_ORD 报错", ex); + } + + return gTB_STLGRD_SPE; + } + + /// + /// 获取牌号价格,用来标识钢板标准的计价 + /// + /// + public IList GetBrandPrice() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gTB_BRAND_PRICE = null; + + //查询可用订单以及常用字段 + + try + { + strSql.AppendLine("SELECT * FROM TB_BRAND_PRICE WHERE 1 = 1"); + //strSql.AppendLine(" and to_date(INS_DATE || INS_TIME ,'yyyy-mm-dd hh24:mi:ss') < to_date('" + DateTime.Now.AddDays(-1) + "','yyyy-mm-dd hh24:mi:ss')"); + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + gTB_BRAND_PRICE = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetBrandPrice 报错", ex); + } + + return gTB_BRAND_PRICE; + } + + /// + /// 不可替代钢种 + /// + /// + public IList GetSPECIAL_STDSPEC() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gTB_STLGRD_SPE = null; + + //查询可用订单以及常用字段 + + try + { + strSql.AppendLine("SELECT * FROM SPECIAL_STDSPEC WHERE 1 = 1"); + //strSql.AppendLine(" and to_date(INS_DATE || INS_TIME ,'yyyy-mm-dd hh24:mi:ss') < to_date('" + DateTime.Now.AddDays(-1) + "','yyyy-mm-dd hh24:mi:ss')"); + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + gTB_STLGRD_SPE = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetSPECIAL_STDSPEC 报错", ex); + } + + return gTB_STLGRD_SPE; + } + + /// + /// 特殊订单 + /// + /// + public IList GetTBOrdSpe() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gTBOrdSpe = null; + + //查询可用订单以及常用字段 + + try + { + strSql.AppendLine("SELECT * FROM TB_ORD_SPE"); + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + gTBOrdSpe = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetTBOrdSpe 报错", ex); + } + + return gTBOrdSpe; + } + + /// + /// 特殊订单 客户代码是SD2441且标准号是“G1”或者“G2”或者“G3”订单不做余材替代 + /// + /// + /// + public IList GetTBOrdNospe() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gTBOrdNospe = null; + + //查询可用订单以及常用字段 + try + { + strSql.AppendLine(" SELECT * FROM TB_ORD_NOSPE "); + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + gTBOrdNospe = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetTBOrdNospe 报错", ex); + } + return gTBOrdNospe; + } + + /// + /// 获取所有钢板探伤实绩数据 + /// + /// + public IList GetGP_USTRESULT() + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gTBOrdNospe = null; + + //查询可用订单以及常用字段 + try + { + + strSql.AppendLine("SELECT UST.* FROM NISCO.GP_USTRESULT UST WHERE 1=1 "); + strSql.AppendLine("AND UST.PLATE_NO IN ( "); + strSql.AppendLine("SELECT "); + strSql.AppendLine(" DISTINCT GP.PLATE_NO "); + strSql.AppendLine("FROM NISCO.GP_PLATE GP "); + strSql.AppendLine("LEFT JOIN NISCO.BP_ORDER_ITEM bob ON gp.ORD_NO = bob.ORD_NO AND gp.ORD_ITEM = bob.ORD_ITEM--// "); + strSql.AppendLine("LEFT JOIN NISCO.BP_ORDER_ITEM boo ON gp.ORG_ORD_NO = boo.ORD_NO AND gp.ORG_ORD_ITEM = boo.ORD_ITEM--// "); + strSql.AppendLine("LEFT JOIN NISCO.QP_QLTY_DELV QQD ON gp.ORG_ORD_NO = QQD.ORD_NO AND gp.ORG_ORD_ITEM = QQD.ORD_ITEM--// "); + strSql.AppendLine("LEFT JOIN NISCO.GP_PLATE_REPLACE gpr ON gpr.PLATE_NO = gp.PLATE_NO "); + strSql.AppendLine("LEFT JOIN NISCO.GP_INSPPLATE GI ON GI.MAT_NO = GP.PLATE_NO "); + strSql.AppendLine("LEFT JOIN NISCO.GP_USTRESULT UST ON UST.PLATE_NO = GP.PLATE_NO "); + strSql.AppendLine("LEFT JOIN NISCO.GP_REMARK RE ON RE.MAT_NO = GP.PLATE_NO "); + strSql.AppendLine("LEFT JOIN NISCO.QP_QLTY_MATR MATR "); + strSql.AppendLine("ON MATR.ORD_NO = boo.ORD_NO "); + strSql.AppendLine("AND MATR.ORD_ITEM= boo.ORD_ITEM "); + strSql.AppendLine(" LEFT JOIN (SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLINGW UNION SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLING) R ON substr(GP.PLATE_NO,1,10)=R.SLAB_NO "); + strSql.AppendLine("WHERE 1=1 "); + strSql.AppendLine("AND GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + strSql.AppendLine("AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine("WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine("WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + //20240307改 R.MILL_END_DATE<'3'→R.MILL_END_DATE<='6' + strSql.AppendLine("AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '2' AND trunc(months_between(sysdate,to_date(R.MILL_END_DATE,'yyyymmdd hh24:mi:ss'))) <='6' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd <> 'XAC' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '1' THEN 1 "); + strSql.AppendLine("WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD is null THEN 1 "); + strSql.AppendLine("WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine("WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + strSql.AppendLine("AND GP.APLY_STDSPEC NOT LIKE '%NG-XY%' "); + strSql.AppendLine("AND GP.Len <50000 "); + strSql.AppendLine(" AND (GP.PROD_DATE > TO_CHAR(SYSdate + '-400' ,'yyyyMMdd') or GP.STLGRD in ( SELECT STLGRD FROM NISCO.QP_NISCO_CHMC WHERE STLGRD_FL='N' "); + strSql.AppendLine(" AND STLGRD IN('A20050NIQQT', 'A20051NIQQT', 'A20090NIQQT', 'A20092NIQQT', 'A20093NIQQT'))) "); + strSql.AppendLine(") "); + strSql.AppendLine(" AND UST.UST_DEC = 'N' "); + + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + gTBOrdNospe = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetTBOrdNospe 报错", ex); + } + return gTBOrdNospe; + } + + + + public IList GetTbSpecialOrd(string ORD_FLG) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gTBOrdSpe = null; + + //查询可用订单以及常用字段 + + try + { + strSql.AppendLine("SELECT * FROM TB_SPECIAL_ORD where 1=1 "); + //if (!string.IsNullOrWhiteSpace(ORD_FLG)) strSql.AppendLine(" AND ORD_FLG = '" + ORD_FLG + "'"); + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db")) + { + gTBOrdSpe = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetTBOrdSpe 报错", ex); + } + + return gTBOrdSpe; + } + + /// + /// 是否可替代记录 + /// + /// + public IList GetGpPlateReplace(string PLATE_NO = null) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gGpPlateReplace = null; + + //查询可用订单以及常用字段 + + try + { + strSql.AppendLine("SELECT * FROM NISCO.GP_PLATE_REPLACE GP where 1=1 "); + if (!string.IsNullOrEmpty(PLATE_NO)) + { + strSql.AppendLine(PLATE_NO); + } + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + gGpPlateReplace = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetGpPlateReplace 报错", ex); + } + + return gGpPlateReplace; + } + + + + /// + /// 获取保留的余材 + /// + /// + public IList GetGP_ZZP_YJ(string PLATE_NO = null) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltGetGP_ZZP_YJ = new List(); + strSql.AppendLine("select * from NISCO.GP_ZZP_YJ where 1=1 "); + if (!string.IsNullOrEmpty(PLATE_NO)) + { + strSql.AppendLine(PLATE_NO); + } + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltGetGP_ZZP_YJ = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetGP_ZZP_YJ 报错 : ", ex); + } + + return ltGetGP_ZZP_YJ; + } + + public IList GetYCTDWH(string strWhereSTD) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gYCTDWH = null; + + //查询可用订单以及常用字段 + + try + { + strSql.AppendLine("SELECT * FROM NISCO.YCTD_WH"); + strSql.AppendLine("WHERE 1=1 "); + strSql.AppendLine(strWhereSTD); + + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + gYCTDWH = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetYCTDWH 报错", ex); + } + + return gYCTDWH; + } + + public IList GetNOTD_ORDs() + { + + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + IList gNOTD_ORD = null; + + //查询可用订单以及常用字段 + + try + { + strSql.AppendLine("SELECT * FROM NISCO.NOTD_ORD "); + //strSql.AppendLine("WHERE 1=1 "); + //strSql.AppendLine(strWhereSTD); + + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + gNOTD_ORD = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetNOTD_ORDs 报错", ex); + } + + return gNOTD_ORD; + + } + #endregion 获取存储数据 + + #region 订单物理特性 + + /// + /// 获取订单物理属性QP_QLTY_MATR_MAIN + /// + /// + public IList GetQP_QLTY_MATR_MAIN(string strWHereOrd, string strSpecialOrd) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_QLTY_MATR_MAIN = new List(); + + strSql.AppendLine(" SELECT* FROM(SELECT QQM.*,"); + strSql.AppendLine(" rank() over(partition by QQM.ord_no, QQM.ord_item order by knd desc) rk"); + strSql.AppendLine(" from NISCO.QP_QLTY_MATR_MAIN QQM "); + strSql.AppendLine(" where(QQM.ORD_NO, QQM.ORD_ITEM) IN( "); + strSql.AppendLine(" SELECT "); + strSql.AppendLine(" TO_CHAR(BOI.ORD_NO), TO_CHAR(BOI.ORD_ITEM) "); + strSql.AppendLine("FROM NISCO.cp_prc CPP "); + strSql.AppendLine("INNER JOIN "); + strSql.AppendLine("NISCO.BP_ORDER_ITEM boi "); + strSql.AppendLine("ON BOI.ORD_NO = CPP.ORD_NO "); + strSql.AppendLine("AND BOI.ORD_ITEM = CPP.ORD_ITEM "); + strSql.AppendLine("AND BOI.ORD_WID<> 0 "); + strSql.AppendLine("AND BOI.ORD_LEN<> 0 "); + strSql.AppendLine("AND BOI.ORD_THK<> 0 "); + + //strSql.AppendLine("WHERE 1=1 ");// ROUND(CPP.ORD_REM_WGT / (((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85)) >= 1"); + //strSql.AppendLine(" AND ((SELECT COUNT( A.REQ_SEQ_NO) "); + //strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + //strSql.AppendLine(" WHERE "); + //strSql.AppendLine(" 1 = 1 AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + //strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + //strSql.AppendLine(" AND A.SEQ >= '01' "); + //strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + //strSql.AppendLine(" AND B.REC_STS = '1') + NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100)/(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85)>=0.95 "); + + //20240105改 + strSql.AppendLine("WHERE 1=1 "); + strSql.AppendLine(" AND (SELECT COUNT(A.REQ_SEQ_NO) "); + strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + strSql.AppendLine(" WHERE 1 = 1 "); + strSql.AppendLine(" AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + strSql.AppendLine(" AND A.SEQ >= '01' "); + strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + strSql.AppendLine(" AND A.ORD_FL = '1' "); + strSql.AppendLine(" AND B.REC_STS = '1') + (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100) / TRUNC(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85, 3) >= 0.95 "); + + + strSql.AppendLine(" AND boi.PROD_CD = 'PP' "); + strSql.AppendLine(" AND boi.REC_STS = '2' "); + strSql.AppendLine(" and boi.ORD_STS IN('E', 'D') "); + strSql.AppendLine(" AND boi.ord_knd IN('A') "); + + strSql.AppendLine(strWHereOrd); + strSql.AppendLine(strSpecialOrd); + + strSql.AppendLine(" )"); + strSql.AppendLine(") T WHERE T.RK = 1"); + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_QLTY_MATR_MAIN = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("QP_QLTY_MATR_MAIN 报错 : ", ex); + } + + return ltQP_QLTY_MATR_MAIN; + } + + /// + /// 获取订单物理属性QP_QLTY_MATR_HA + /// + /// + public IList GetQP_QLTY_MATR_HA(string strWHereOrd, string strSpecialOrd) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_QLTY_MATR_HA = new List(); + + strSql.AppendLine(" SELECT* FROM(SELECT QQM.*,"); + strSql.AppendLine(" rank() over(partition by QQM.ord_no, QQM.ord_item order by knd desc) rk"); + strSql.AppendLine(" from NISCO.QP_QLTY_MATR_HA QQM "); + strSql.AppendLine(" where(QQM.ORD_NO, QQM.ORD_ITEM) IN( "); + strSql.AppendLine(" SELECT "); + strSql.AppendLine(" TO_CHAR(BOI.ORD_NO), TO_CHAR(BOI.ORD_ITEM) "); + strSql.AppendLine("FROM NISCO.cp_prc CPP "); + strSql.AppendLine("INNER JOIN "); + strSql.AppendLine("NISCO.BP_ORDER_ITEM boi "); + strSql.AppendLine("ON BOI.ORD_NO = CPP.ORD_NO "); + strSql.AppendLine("AND BOI.ORD_ITEM = CPP.ORD_ITEM "); + strSql.AppendLine("AND BOI.ORD_WID<> 0 "); + strSql.AppendLine("AND BOI.ORD_LEN<> 0 "); + strSql.AppendLine("AND BOI.ORD_THK<> 0 "); + + //strSql.AppendLine("WHERE 1=1 "); + //strSql.AppendLine(" AND ((SELECT COUNT( A.REQ_SEQ_NO) "); + //strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + //strSql.AppendLine(" WHERE "); + //strSql.AppendLine(" 1 = 1 AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + //strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + //strSql.AppendLine(" AND A.SEQ >= '01' "); + //strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + //strSql.AppendLine(" AND B.REC_STS = '1') + NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100)/(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85)>=0.95 "); + + //20240105改 + strSql.AppendLine("WHERE 1=1 "); + strSql.AppendLine(" AND (SELECT COUNT(A.REQ_SEQ_NO) "); + strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + strSql.AppendLine(" WHERE 1 = 1 "); + strSql.AppendLine(" AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + strSql.AppendLine(" AND A.SEQ >= '01' "); + strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + strSql.AppendLine(" AND A.ORD_FL = '1' "); + strSql.AppendLine(" AND B.REC_STS = '1') + (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100) / TRUNC(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85, 3) >= 0.95 "); + + + strSql.AppendLine(" AND boi.PROD_CD = 'PP' "); + strSql.AppendLine(" AND boi.REC_STS = '2' "); + strSql.AppendLine(" and boi.ORD_STS IN('E', 'D') "); + strSql.AppendLine(" AND boi.ord_knd IN('A') "); + + strSql.AppendLine(strWHereOrd); + strSql.AppendLine(strSpecialOrd); + + //测试test + strSql.AppendLine(" or (boi.ORD_NO ='" + glstrOrdNo + "'"); + strSql.AppendLine(" AND boi.ORD_ITEM ='" + glstrOrdItem + "')"); + + strSql.AppendLine(" )"); + strSql.AppendLine(") T WHERE T.RK = 1"); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_QLTY_MATR_HA = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_QLTY_MATR_HA 报错 : ", ex); + } + + return ltQP_QLTY_MATR_HA; + } + + /// + /// 获取订单物理属性QP_QLTY_MATR_HB + /// + /// + public IList GetQP_QLTY_MATR_HB(string strWHereOrd, string strSpecialOrd) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_QLTY_MATR_HB = new List(); + + strSql.AppendLine(" SELECT* FROM(SELECT QQM.*,"); + strSql.AppendLine(" rank() over(partition by QQM.ord_no, QQM.ord_item order by knd desc) rk"); + strSql.AppendLine(" from NISCO.QP_QLTY_MATR_HB QQM "); + strSql.AppendLine(" where(QQM.ORD_NO, QQM.ORD_ITEM) IN( "); + strSql.AppendLine(" SELECT "); + strSql.AppendLine(" TO_CHAR(BOI.ORD_NO), TO_CHAR(BOI.ORD_ITEM) "); + strSql.AppendLine("FROM NISCO.cp_prc CPP "); + strSql.AppendLine("INNER JOIN "); + strSql.AppendLine("NISCO.BP_ORDER_ITEM boi "); + strSql.AppendLine("ON BOI.ORD_NO = CPP.ORD_NO "); + strSql.AppendLine("AND BOI.ORD_ITEM = CPP.ORD_ITEM "); + strSql.AppendLine("AND BOI.ORD_WID<> 0 "); + strSql.AppendLine("AND BOI.ORD_LEN<> 0 "); + strSql.AppendLine("AND BOI.ORD_THK<> 0 "); + + + //strSql.AppendLine("WHERE 1=1 "); + //strSql.AppendLine(" AND ((SELECT COUNT( A.REQ_SEQ_NO) "); + //strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + //strSql.AppendLine(" WHERE "); + //strSql.AppendLine(" 1 = 1 AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + //strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + //strSql.AppendLine(" AND A.SEQ >= '01' "); + //strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + //strSql.AppendLine(" AND B.REC_STS = '1') + NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100)/(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85)>=0.95 "); + + //20240105改 + strSql.AppendLine("WHERE 1=1 "); + strSql.AppendLine(" AND (SELECT COUNT(A.REQ_SEQ_NO) "); + strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + strSql.AppendLine(" WHERE 1 = 1 "); + strSql.AppendLine(" AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + strSql.AppendLine(" AND A.SEQ >= '01' "); + strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + strSql.AppendLine(" AND A.ORD_FL = '1' "); + strSql.AppendLine(" AND B.REC_STS = '1') + (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100) / TRUNC(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85, 3) >= 0.95 "); + + + strSql.AppendLine(" AND boi.PROD_CD = 'PP' "); + strSql.AppendLine(" AND boi.REC_STS = '2' "); + strSql.AppendLine(" and boi.ORD_STS IN('E', 'D') "); + strSql.AppendLine(" AND boi.ord_knd IN('A') "); + + strSql.AppendLine(strWHereOrd); + strSql.AppendLine(strSpecialOrd); + //测试test + strSql.AppendLine(" or (boi.ORD_NO ='" + glstrOrdNo + "'"); + strSql.AppendLine(" AND boi.ORD_ITEM ='" + glstrOrdItem + "')"); + strSql.AppendLine(" )"); + strSql.AppendLine(") T WHERE T.RK = 1"); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_QLTY_MATR_HB = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_QLTY_MATR_HB 报错 : ", ex); + } + + return ltQP_QLTY_MATR_HB; + } + + /// + /// 获取订单物理属性QP_QLTY_MATR_HC + /// + /// + public IList GetQP_QLTY_MATR_HC(string strWHereOrd, string strSpecialOrd) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_QLTY_MATR_HC = new List(); + + strSql.AppendLine(" SELECT* FROM(SELECT QQM.*,"); + strSql.AppendLine(" rank() over(partition by QQM.ord_no, QQM.ord_item order by knd desc) rk"); + strSql.AppendLine(" from NISCO.QP_QLTY_MATR_HC QQM "); + strSql.AppendLine(" where(QQM.ORD_NO, QQM.ORD_ITEM) IN( "); + strSql.AppendLine(" SELECT "); + strSql.AppendLine(" TO_CHAR(BOI.ORD_NO), TO_CHAR(BOI.ORD_ITEM) "); + strSql.AppendLine("FROM NISCO.cp_prc CPP "); + strSql.AppendLine("INNER JOIN "); + strSql.AppendLine("NISCO.BP_ORDER_ITEM boi "); + strSql.AppendLine("ON BOI.ORD_NO = CPP.ORD_NO "); + strSql.AppendLine("AND BOI.ORD_ITEM = CPP.ORD_ITEM "); + strSql.AppendLine("AND BOI.ORD_WID<> 0 "); + strSql.AppendLine("AND BOI.ORD_LEN<> 0 "); + strSql.AppendLine("AND BOI.ORD_THK<> 0 "); + + + + //strSql.AppendLine("WHERE 1=1 "); + //strSql.AppendLine(" AND ((SELECT COUNT( A.REQ_SEQ_NO) "); + //strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + //strSql.AppendLine(" WHERE "); + //strSql.AppendLine(" 1 = 1 AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + //strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + //strSql.AppendLine(" AND A.SEQ >= '01' "); + //strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + //strSql.AppendLine(" AND B.REC_STS = '1') + NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100)/(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85)>=0.95 "); + + //20240105改 + strSql.AppendLine("WHERE 1=1 "); + strSql.AppendLine(" AND (SELECT COUNT(A.REQ_SEQ_NO) "); + strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + strSql.AppendLine(" WHERE 1 = 1 "); + strSql.AppendLine(" AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + strSql.AppendLine(" AND A.SEQ >= '01' "); + strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + strSql.AppendLine(" AND A.ORD_FL = '1' "); + strSql.AppendLine(" AND B.REC_STS = '1') + (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100) / TRUNC(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85, 3) >= 0.95 "); + + + strSql.AppendLine(" AND boi.PROD_CD = 'PP' "); + strSql.AppendLine(" AND boi.REC_STS = '2' "); + strSql.AppendLine(" and boi.ORD_STS IN('E', 'D') "); + strSql.AppendLine(" AND boi.ord_knd IN('A') "); + + strSql.AppendLine(strWHereOrd); + strSql.AppendLine(strSpecialOrd); + //测试test + strSql.AppendLine(" or (boi.ORD_NO ='" + glstrOrdNo + "'"); + strSql.AppendLine(" AND boi.ORD_ITEM ='" + glstrOrdItem + "')"); + strSql.AppendLine(" )"); + strSql.AppendLine(") T WHERE T.RK = 1"); + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_QLTY_MATR_HC = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_QLTY_MATR_HC 报错 : ", ex); + } + + return ltQP_QLTY_MATR_HC; + } + + /// + /// 获取订单物理属性QP_QLTY_MATR_HD + /// + /// + public IList GetQP_QLTY_MATR_HD(string strWHereOrd, string strSpecialOrd) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_QLTY_MATR_HD = new List(); + + strSql.AppendLine(" SELECT* FROM(SELECT QQM.*,"); + strSql.AppendLine(" rank() over(partition by QQM.ord_no, QQM.ord_item order by knd desc) rk"); + strSql.AppendLine(" from NISCO.QP_QLTY_MATR_HD QQM "); + strSql.AppendLine(" where(QQM.ORD_NO, QQM.ORD_ITEM) IN( "); + strSql.AppendLine(" SELECT "); + strSql.AppendLine(" TO_CHAR(BOI.ORD_NO), TO_CHAR(BOI.ORD_ITEM) "); + strSql.AppendLine("FROM NISCO.cp_prc CPP "); + strSql.AppendLine("INNER JOIN "); + strSql.AppendLine("NISCO.BP_ORDER_ITEM boi "); + strSql.AppendLine("ON BOI.ORD_NO = CPP.ORD_NO "); + strSql.AppendLine("AND BOI.ORD_ITEM = CPP.ORD_ITEM "); + strSql.AppendLine("AND BOI.ORD_WID<> 0 "); + strSql.AppendLine("AND BOI.ORD_LEN<> 0 "); + strSql.AppendLine("AND BOI.ORD_THK<> 0 "); + + + //strSql.AppendLine("WHERE 1=1 "); + //strSql.AppendLine(" AND ((SELECT COUNT( A.REQ_SEQ_NO) "); + //strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + //strSql.AppendLine(" WHERE "); + //strSql.AppendLine(" 1 = 1 AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + //strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + //strSql.AppendLine(" AND A.SEQ >= '01' "); + //strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + //strSql.AppendLine(" AND B.REC_STS = '1') + NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100)/(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85)>=0.95 "); + + //20240105改 + strSql.AppendLine("WHERE 1=1 "); + strSql.AppendLine(" AND (SELECT COUNT(A.REQ_SEQ_NO) "); + strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + strSql.AppendLine(" WHERE 1 = 1 "); + strSql.AppendLine(" AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + strSql.AppendLine(" AND A.SEQ >= '01' "); + strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + strSql.AppendLine(" AND A.ORD_FL = '1' "); + strSql.AppendLine(" AND B.REC_STS = '1') + (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100) / TRUNC(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85, 3) >= 0.95 "); + + + strSql.AppendLine(" AND boi.PROD_CD = 'PP' "); + strSql.AppendLine(" AND boi.REC_STS = '2' "); + strSql.AppendLine(" and boi.ORD_STS IN('E', 'D') "); + strSql.AppendLine(" AND boi.ord_knd IN('A') "); + + strSql.AppendLine(strWHereOrd); + strSql.AppendLine(strSpecialOrd); + //测试test + strSql.AppendLine(" or (boi.ORD_NO ='" + glstrOrdNo + "'"); + strSql.AppendLine(" AND boi.ORD_ITEM ='" + glstrOrdItem + "')"); + strSql.AppendLine(" )"); + strSql.AppendLine(") T WHERE T.RK = 1"); + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_QLTY_MATR_HD = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_QLTY_MATR_HD 报错 : ", ex); + } + + return ltQP_QLTY_MATR_HD; + } + + /// + /// 获取订单物理属性QP_QLTY_MATR_HE + /// + /// + public IList GetQP_QLTY_MATR_HE(string strWHereOrd, string strSpecialOrd) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_QLTY_MATR_HE = new List(); + + strSql.AppendLine(" SELECT* FROM(SELECT QQM.*,"); + strSql.AppendLine(" rank() over(partition by QQM.ord_no, QQM.ord_item order by knd desc) rk"); + strSql.AppendLine(" from NISCO.QP_QLTY_MATR_HE QQM "); + strSql.AppendLine(" where(QQM.ORD_NO, QQM.ORD_ITEM) IN( "); + strSql.AppendLine(" SELECT "); + strSql.AppendLine(" TO_CHAR(BOI.ORD_NO), TO_CHAR(BOI.ORD_ITEM) "); + strSql.AppendLine("FROM NISCO.cp_prc CPP "); + strSql.AppendLine("INNER JOIN "); + strSql.AppendLine("NISCO.BP_ORDER_ITEM boi "); + strSql.AppendLine("ON BOI.ORD_NO = CPP.ORD_NO "); + strSql.AppendLine("AND BOI.ORD_ITEM = CPP.ORD_ITEM "); + strSql.AppendLine("AND BOI.ORD_WID<> 0 "); + strSql.AppendLine("AND BOI.ORD_LEN<> 0 "); + strSql.AppendLine("AND BOI.ORD_THK<> 0 "); + + + //strSql.AppendLine("WHERE 1=1 "); + //strSql.AppendLine(" AND ((SELECT COUNT( A.REQ_SEQ_NO) "); + //strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + //strSql.AppendLine(" WHERE "); + //strSql.AppendLine(" 1 = 1 AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + //strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + //strSql.AppendLine(" AND A.SEQ >= '01' "); + //strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + //strSql.AppendLine(" AND B.REC_STS = '1') + NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100)/(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85)>=0.95 "); + + + //20240105改 + strSql.AppendLine("WHERE 1=1 "); + strSql.AppendLine(" AND (SELECT COUNT(A.REQ_SEQ_NO) "); + strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + strSql.AppendLine(" WHERE 1 = 1 "); + strSql.AppendLine(" AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + strSql.AppendLine(" AND A.SEQ >= '01' "); + strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + strSql.AppendLine(" AND A.ORD_FL = '1' "); + strSql.AppendLine(" AND B.REC_STS = '1') + (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100) / TRUNC(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85, 3) >= 0.95 "); + + + strSql.AppendLine(" AND boi.PROD_CD = 'PP' "); + strSql.AppendLine(" AND boi.REC_STS = '2' "); + strSql.AppendLine(" and boi.ORD_STS IN('E', 'D') "); + strSql.AppendLine(" AND boi.ord_knd IN('A') "); + + strSql.AppendLine(strWHereOrd); + strSql.AppendLine(strSpecialOrd); + //测试test + strSql.AppendLine(" or (boi.ORD_NO ='" + glstrOrdNo + "'"); + strSql.AppendLine(" AND boi.ORD_ITEM ='" + glstrOrdItem + "')"); + strSql.AppendLine(" )"); + strSql.AppendLine(") T WHERE T.RK = 1"); + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_QLTY_MATR_HE = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_QLTY_MATR_HE 报错 : ", ex); + } + + return ltQP_QLTY_MATR_HE; + } + + /// + /// 获取订单物理属性QP_QLTY_MATR_HF + /// + /// + public IList GetQP_QLTY_MATR_HF(string strWHereOrd, string strSpecialOrd) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_QLTY_MATR_HF = new List(); + + strSql.AppendLine(" SELECT* FROM(SELECT QQM.*,"); + strSql.AppendLine(" rank() over(partition by QQM.ord_no, QQM.ord_item order by knd desc) rk"); + strSql.AppendLine(" from NISCO.QP_QLTY_MATR_HF QQM "); + strSql.AppendLine(" where(QQM.ORD_NO, QQM.ORD_ITEM) IN( "); + strSql.AppendLine(" SELECT "); + strSql.AppendLine(" TO_CHAR(BOI.ORD_NO), TO_CHAR(BOI.ORD_ITEM) "); + strSql.AppendLine("FROM NISCO.cp_prc CPP "); + strSql.AppendLine("INNER JOIN "); + strSql.AppendLine("NISCO.BP_ORDER_ITEM boi "); + strSql.AppendLine("ON BOI.ORD_NO = CPP.ORD_NO "); + strSql.AppendLine("AND BOI.ORD_ITEM = CPP.ORD_ITEM "); + strSql.AppendLine("AND BOI.ORD_WID<> 0 "); + strSql.AppendLine("AND BOI.ORD_LEN<> 0 "); + strSql.AppendLine("AND BOI.ORD_THK<> 0 "); + + + //strSql.AppendLine("WHERE 1=1 "); + //strSql.AppendLine(" AND ((SELECT COUNT( A.REQ_SEQ_NO) "); + //strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + //strSql.AppendLine(" WHERE "); + //strSql.AppendLine(" 1 = 1 AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + //strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + //strSql.AppendLine(" AND A.SEQ >= '01' "); + //strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + //strSql.AppendLine(" AND B.REC_STS = '1') + NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100)/(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85)>=0.95 "); + + //20240105改 + strSql.AppendLine("WHERE 1=1 "); + strSql.AppendLine(" AND (SELECT COUNT(A.REQ_SEQ_NO) "); + strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + strSql.AppendLine(" WHERE 1 = 1 "); + strSql.AppendLine(" AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + strSql.AppendLine(" AND A.SEQ >= '01' "); + strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + strSql.AppendLine(" AND A.ORD_FL = '1' "); + strSql.AppendLine(" AND B.REC_STS = '1') + (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100) / TRUNC(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85, 3) >= 0.95 "); + + + strSql.AppendLine(" AND boi.PROD_CD = 'PP' "); + strSql.AppendLine(" AND boi.REC_STS = '2' "); + strSql.AppendLine(" and boi.ORD_STS IN('E', 'D') "); + strSql.AppendLine(" AND boi.ord_knd IN('A') "); + + strSql.AppendLine(strWHereOrd); + strSql.AppendLine(strSpecialOrd); + //测试test + strSql.AppendLine(" or (boi.ORD_NO ='" + glstrOrdNo + "'"); + strSql.AppendLine(" AND boi.ORD_ITEM ='" + glstrOrdItem + "')"); + strSql.AppendLine(" )"); + strSql.AppendLine(") T WHERE T.RK = 1"); + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_QLTY_MATR_HF = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_QLTY_MATR_HF 报错 : ", ex); + } + + return ltQP_QLTY_MATR_HF; + } + + /// + /// 获取订单物理属性QP_QLTY_MATR_HJ + /// + /// + public IList GetQP_QLTY_MATR_HJ(string strWHereOrd, string strSpecialOrd) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_QLTY_MATR_HJ = new List(); + + strSql.AppendLine(" SELECT* FROM(SELECT QQM.*,"); + strSql.AppendLine(" rank() over(partition by QQM.ord_no, QQM.ord_item order by knd desc) rk"); + strSql.AppendLine(" from NISCO.QP_QLTY_MATR_HJ QQM "); + strSql.AppendLine(" where(QQM.ORD_NO, QQM.ORD_ITEM) IN( "); + strSql.AppendLine(" SELECT "); + strSql.AppendLine(" TO_CHAR(BOI.ORD_NO), TO_CHAR(BOI.ORD_ITEM) "); + strSql.AppendLine("FROM NISCO.cp_prc CPP "); + strSql.AppendLine("INNER JOIN "); + strSql.AppendLine("NISCO.BP_ORDER_ITEM boi "); + strSql.AppendLine("ON BOI.ORD_NO = CPP.ORD_NO "); + strSql.AppendLine("AND BOI.ORD_ITEM = CPP.ORD_ITEM "); + strSql.AppendLine("AND BOI.ORD_WID<> 0 "); + strSql.AppendLine("AND BOI.ORD_LEN<> 0 "); + strSql.AppendLine("AND BOI.ORD_THK<> 0 "); + + + //strSql.AppendLine("WHERE 1=1 "); + //strSql.AppendLine(" AND ((SELECT COUNT( A.REQ_SEQ_NO) "); + //strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + //strSql.AppendLine(" WHERE "); + //strSql.AppendLine(" 1 = 1 AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + //strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + //strSql.AppendLine(" AND A.SEQ >= '01' "); + //strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + //strSql.AppendLine(" AND B.REC_STS = '1') + NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100)/(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85)>=0.95 "); + + //20240105改 + strSql.AppendLine("WHERE 1=1 "); + strSql.AppendLine(" AND (SELECT COUNT(A.REQ_SEQ_NO) "); + strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + strSql.AppendLine(" WHERE 1 = 1 "); + strSql.AppendLine(" AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + strSql.AppendLine(" AND A.SEQ >= '01' "); + strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + strSql.AppendLine(" AND A.ORD_FL = '1' "); + strSql.AppendLine(" AND B.REC_STS = '1') + (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100) / TRUNC(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85, 3) >= 0.95 "); + + + strSql.AppendLine(" AND boi.PROD_CD = 'PP' "); + strSql.AppendLine(" AND boi.REC_STS = '2' "); + strSql.AppendLine(" and boi.ORD_STS IN('E', 'D') "); + strSql.AppendLine(" AND boi.ord_knd IN('A') "); + + strSql.AppendLine(strWHereOrd); + strSql.AppendLine(strSpecialOrd); + //测试test + strSql.AppendLine(" or (boi.ORD_NO ='" + glstrOrdNo + "'"); + strSql.AppendLine(" AND boi.ORD_ITEM ='" + glstrOrdItem + "')"); + strSql.AppendLine(" )"); + strSql.AppendLine(") T WHERE T.RK = 1"); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_QLTY_MATR_HJ = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_QLTY_MATR_HJ 报错 : ", ex); + } + + return ltQP_QLTY_MATR_HJ; + } + + /// + /// 获取订单物理属性QP_QLTY_MATR_HK + /// + /// + public IList GetQP_QLTY_MATR_HK(string strWHereOrd, string strSpecialOrd) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_QLTY_MATR_HK = new List(); + + strSql.AppendLine(" SELECT* FROM(SELECT QQM.*,"); + strSql.AppendLine(" rank() over(partition by QQM.ord_no, QQM.ord_item order by knd desc) rk"); + strSql.AppendLine(" from NISCO.QP_QLTY_MATR_HK QQM "); + strSql.AppendLine(" where(QQM.ORD_NO, QQM.ORD_ITEM) IN( "); + strSql.AppendLine(" SELECT "); + strSql.AppendLine(" TO_CHAR(BOI.ORD_NO), TO_CHAR(BOI.ORD_ITEM) "); + strSql.AppendLine("FROM NISCO.cp_prc CPP "); + strSql.AppendLine("INNER JOIN "); + strSql.AppendLine("NISCO.BP_ORDER_ITEM boi "); + strSql.AppendLine("ON BOI.ORD_NO = CPP.ORD_NO "); + strSql.AppendLine("AND BOI.ORD_ITEM = CPP.ORD_ITEM "); + strSql.AppendLine("AND BOI.ORD_WID<> 0 "); + strSql.AppendLine("AND BOI.ORD_LEN<> 0 "); + strSql.AppendLine("AND BOI.ORD_THK<> 0 "); + + + //strSql.AppendLine("WHERE 1=1 "); + //strSql.AppendLine(" AND ((SELECT COUNT( A.REQ_SEQ_NO) "); + //strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + //strSql.AppendLine(" WHERE "); + //strSql.AppendLine(" 1 = 1 AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + //strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + //strSql.AppendLine(" AND A.SEQ >= '01' "); + //strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + //strSql.AppendLine(" AND B.REC_STS = '1') + NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100)/(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85)>=0.95 "); + + //20240105改 + strSql.AppendLine("WHERE 1=1 "); + strSql.AppendLine(" AND (SELECT COUNT(A.REQ_SEQ_NO) "); + strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + strSql.AppendLine(" WHERE 1 = 1 "); + strSql.AppendLine(" AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + strSql.AppendLine(" AND A.SEQ >= '01' "); + strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + strSql.AppendLine(" AND A.ORD_FL = '1' "); + strSql.AppendLine(" AND B.REC_STS = '1') + (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100) / TRUNC(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85, 3) >= 0.95 "); + + + strSql.AppendLine(" AND boi.PROD_CD = 'PP' "); + strSql.AppendLine(" AND boi.REC_STS = '2' "); + strSql.AppendLine(" and boi.ORD_STS IN('E', 'D') "); + strSql.AppendLine(" AND boi.ord_knd IN('A') "); + + strSql.AppendLine(strWHereOrd); + strSql.AppendLine(strSpecialOrd); + //测试test + strSql.AppendLine(" or (boi.ORD_NO ='" + glstrOrdNo + "'"); + strSql.AppendLine(" AND boi.ORD_ITEM ='" + glstrOrdItem + "')"); + strSql.AppendLine(" )"); + strSql.AppendLine(") T WHERE T.RK = 1"); + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_QLTY_MATR_HK = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_QLTY_MATR_HK 报错 : ", ex); + } + + return ltQP_QLTY_MATR_HK; + } + + /// + /// 获取订单物理属性QP_QLTY_MATR_HM + /// + /// + public IList GetQP_QLTY_MATR_HM(string strWHereOrd, string strSpecialOrd) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_QLTY_MATR_HM = new List(); + + strSql.AppendLine(" SELECT* FROM(SELECT QQM.*,"); + strSql.AppendLine(" rank() over(partition by QQM.ord_no, QQM.ord_item order by knd desc) rk"); + strSql.AppendLine(" from NISCO.QP_QLTY_MATR_HM QQM "); + strSql.AppendLine(" where(QQM.ORD_NO, QQM.ORD_ITEM) IN( "); + strSql.AppendLine(" SELECT "); + strSql.AppendLine(" TO_CHAR(BOI.ORD_NO), TO_CHAR(BOI.ORD_ITEM) "); + strSql.AppendLine("FROM NISCO.cp_prc CPP "); + strSql.AppendLine("INNER JOIN "); + strSql.AppendLine("NISCO.BP_ORDER_ITEM boi "); + strSql.AppendLine("ON BOI.ORD_NO = CPP.ORD_NO "); + strSql.AppendLine("AND BOI.ORD_ITEM = CPP.ORD_ITEM "); + strSql.AppendLine("AND BOI.ORD_WID<> 0 "); + strSql.AppendLine("AND BOI.ORD_LEN<> 0 "); + strSql.AppendLine("AND BOI.ORD_THK<> 0 "); + + + + //strSql.AppendLine("WHERE 1=1 "); + //strSql.AppendLine(" AND ((SELECT COUNT( A.REQ_SEQ_NO) "); + //strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + //strSql.AppendLine(" WHERE "); + //strSql.AppendLine(" 1 = 1 AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + //strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + //strSql.AppendLine(" AND A.SEQ >= '01' "); + //strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + //strSql.AppendLine(" AND B.REC_STS = '1') + NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100)/(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85)>=0.95 "); + + //20240105改 + strSql.AppendLine("WHERE 1=1 "); + strSql.AppendLine(" AND (SELECT COUNT(A.REQ_SEQ_NO) "); + strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + strSql.AppendLine(" WHERE 1 = 1 "); + strSql.AppendLine(" AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + strSql.AppendLine(" AND A.SEQ >= '01' "); + strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + strSql.AppendLine(" AND A.ORD_FL = '1' "); + strSql.AppendLine(" AND B.REC_STS = '1') + (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100) / TRUNC(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85, 3) >= 0.95 "); + + + strSql.AppendLine(" AND boi.PROD_CD = 'PP' "); + strSql.AppendLine(" AND boi.REC_STS = '2' "); + strSql.AppendLine(" and boi.ORD_STS IN('E', 'D') "); + strSql.AppendLine(" AND boi.ord_knd IN('A') "); + + strSql.AppendLine(strWHereOrd); + strSql.AppendLine(strSpecialOrd); + + //测试test + strSql.AppendLine(" or (boi.ORD_NO ='" + glstrOrdNo + "'"); + strSql.AppendLine(" AND boi.ORD_ITEM ='" + glstrOrdItem + "')"); + strSql.AppendLine(" )"); + strSql.AppendLine(") T WHERE T.RK = 1"); + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_QLTY_MATR_HM = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_QLTY_MATR_HM 报错 : ", ex); + } + + return ltQP_QLTY_MATR_HM; + } + + /// + /// 获取订单物理属性QP_QLTY_MATR_HN + /// + /// + public IList GetQP_QLTY_MATR_HN(string strWHereOrd, string strSpecialOrd) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_QLTY_MATR_HN = new List(); + + strSql.AppendLine(" SELECT* FROM(SELECT QQM.*,"); + strSql.AppendLine(" rank() over(partition by QQM.ord_no, QQM.ord_item order by knd desc) rk"); + strSql.AppendLine(" from NISCO.QP_QLTY_MATR_HN QQM "); + strSql.AppendLine(" where(QQM.ORD_NO, QQM.ORD_ITEM) IN( "); + strSql.AppendLine(" SELECT "); + strSql.AppendLine(" TO_CHAR(BOI.ORD_NO), TO_CHAR(BOI.ORD_ITEM) "); + strSql.AppendLine("FROM NISCO.cp_prc CPP "); + strSql.AppendLine("INNER JOIN "); + strSql.AppendLine("NISCO.BP_ORDER_ITEM boi "); + strSql.AppendLine("ON BOI.ORD_NO = CPP.ORD_NO "); + strSql.AppendLine("AND BOI.ORD_ITEM = CPP.ORD_ITEM "); + strSql.AppendLine("AND BOI.ORD_WID<> 0 "); + strSql.AppendLine("AND BOI.ORD_LEN<> 0 "); + strSql.AppendLine("AND BOI.ORD_THK<> 0 "); + + //strSql.AppendLine("WHERE 1=1 "); + //strSql.AppendLine(" AND ((SELECT COUNT( A.REQ_SEQ_NO) "); + //strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + //strSql.AppendLine(" WHERE "); + //strSql.AppendLine(" 1 = 1 AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + //strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + //strSql.AppendLine(" AND A.SEQ >= '01' "); + //strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + //strSql.AppendLine(" AND B.REC_STS = '1') + NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100)/(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85)>=0.95 "); + + //20240105改 + strSql.AppendLine("WHERE 1=1 "); + strSql.AppendLine(" AND (SELECT COUNT(A.REQ_SEQ_NO) "); + strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + strSql.AppendLine(" WHERE 1 = 1 "); + strSql.AppendLine(" AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + strSql.AppendLine(" AND A.SEQ >= '01' "); + strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + strSql.AppendLine(" AND A.ORD_FL = '1' "); + strSql.AppendLine(" AND B.REC_STS = '1') + (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100) / TRUNC(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85, 3) >= 0.95 "); + + + strSql.AppendLine(" AND boi.PROD_CD = 'PP' "); + strSql.AppendLine(" AND boi.REC_STS = '2' "); + strSql.AppendLine(" and boi.ORD_STS IN('E', 'D') "); + strSql.AppendLine(" AND boi.ord_knd IN('A') "); + + strSql.AppendLine(strWHereOrd); + strSql.AppendLine(strSpecialOrd); + //测试test + strSql.AppendLine(" or (boi.ORD_NO ='" + glstrOrdNo + "'"); + strSql.AppendLine(" AND boi.ORD_ITEM ='" + glstrOrdItem + "')"); + strSql.AppendLine(" )"); + strSql.AppendLine(") T WHERE T.RK = 1"); + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_QLTY_MATR_HN = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_QLTY_MATR_HN 报错 : ", ex); + } + + return ltQP_QLTY_MATR_HN; + } + + /// + /// 获取订单物理属性QP_QLTY_MATR_HR + /// + /// + public IList GetQP_QLTY_MATR_HR(string strWHereOrd, string strSpecialOrd) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_QLTY_MATR_HR = new List(); + + strSql.AppendLine(" SELECT* FROM(SELECT QQM.*,"); + strSql.AppendLine(" rank() over(partition by QQM.ord_no, QQM.ord_item order by knd desc) rk"); + strSql.AppendLine(" from NISCO.QP_QLTY_MATR_HR QQM "); + strSql.AppendLine(" where(QQM.ORD_NO, QQM.ORD_ITEM) IN( "); + strSql.AppendLine(" SELECT "); + strSql.AppendLine(" TO_CHAR(BOI.ORD_NO), TO_CHAR(BOI.ORD_ITEM) "); + strSql.AppendLine("FROM NISCO.cp_prc CPP "); + strSql.AppendLine("INNER JOIN "); + strSql.AppendLine("NISCO.BP_ORDER_ITEM boi "); + strSql.AppendLine("ON BOI.ORD_NO = CPP.ORD_NO "); + strSql.AppendLine("AND BOI.ORD_ITEM = CPP.ORD_ITEM "); + strSql.AppendLine("AND BOI.ORD_WID<> 0 "); + strSql.AppendLine("AND BOI.ORD_LEN<> 0 "); + strSql.AppendLine("AND BOI.ORD_THK<> 0 "); + + + //strSql.AppendLine("WHERE 1=1 "); + //strSql.AppendLine(" AND ((SELECT COUNT( A.REQ_SEQ_NO) "); + //strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + //strSql.AppendLine(" WHERE "); + //strSql.AppendLine(" 1 = 1 AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + //strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + //strSql.AppendLine(" AND A.SEQ >= '01' "); + //strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + //strSql.AppendLine(" AND B.REC_STS = '1') + NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100)/(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85)>=0.95 "); + + + //20240105改 + strSql.AppendLine("WHERE 1=1 "); + strSql.AppendLine(" AND (SELECT COUNT(A.REQ_SEQ_NO) "); + strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + strSql.AppendLine(" WHERE 1 = 1 "); + strSql.AppendLine(" AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + strSql.AppendLine(" AND A.SEQ >= '01' "); + strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + strSql.AppendLine(" AND A.ORD_FL = '1' "); + strSql.AppendLine(" AND B.REC_STS = '1') + (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100) / TRUNC(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85, 3) >= 0.95 "); + + + strSql.AppendLine(" AND boi.PROD_CD = 'PP' "); + strSql.AppendLine(" AND boi.REC_STS = '2' "); + strSql.AppendLine(" and boi.ORD_STS IN('E', 'D') "); + strSql.AppendLine(" AND boi.ord_knd IN('A') "); + + strSql.AppendLine(strWHereOrd); + strSql.AppendLine(strSpecialOrd); + //测试test + strSql.AppendLine(" or (boi.ORD_NO ='" + glstrOrdNo + "'"); + strSql.AppendLine(" AND boi.ORD_ITEM ='" + glstrOrdItem + "')"); + + strSql.AppendLine(" )"); + strSql.AppendLine(") T WHERE T.RK = 1"); + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_QLTY_MATR_HR = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_QLTY_MATR_HR 报错 : ", ex); + } + + return ltQP_QLTY_MATR_HR; + } + + /// + /// 获取订单物理属性QP_QLTY_MATR_HZ + /// + /// + public IList GetQP_QLTY_MATR_HZ(string strWHereOrd, string strSpecialOrd) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_QLTY_MATR_HZ = new List(); + + strSql.AppendLine(" SELECT* FROM(SELECT QQM.*,"); + strSql.AppendLine(" rank() over(partition by QQM.ord_no, QQM.ord_item order by knd desc) rk"); + strSql.AppendLine(" from NISCO.QP_QLTY_MATR_HZ QQM "); + strSql.AppendLine(" where(QQM.ORD_NO, QQM.ORD_ITEM) IN( "); + strSql.AppendLine(" SELECT "); + strSql.AppendLine(" TO_CHAR(BOI.ORD_NO), TO_CHAR(BOI.ORD_ITEM) "); + strSql.AppendLine("FROM NISCO.cp_prc CPP "); + strSql.AppendLine("INNER JOIN "); + strSql.AppendLine("NISCO.BP_ORDER_ITEM boi "); + strSql.AppendLine("ON BOI.ORD_NO = CPP.ORD_NO "); + strSql.AppendLine("AND BOI.ORD_ITEM = CPP.ORD_ITEM "); + strSql.AppendLine("AND BOI.ORD_WID<> 0 "); + strSql.AppendLine("AND BOI.ORD_LEN<> 0 "); + strSql.AppendLine("AND BOI.ORD_THK<> 0 "); + + //strSql.AppendLine("WHERE 1=1 "); + //strSql.AppendLine(" AND ((SELECT COUNT( A.REQ_SEQ_NO) "); + //strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + //strSql.AppendLine(" WHERE "); + //strSql.AppendLine(" 1 = 1 AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + //strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + //strSql.AppendLine(" AND A.SEQ >= '01' "); + //strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + //strSql.AppendLine(" AND B.REC_STS = '1') + NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100)/(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85)>=0.95 "); + + //20240105改 + strSql.AppendLine("WHERE 1=1 "); + strSql.AppendLine(" AND (SELECT COUNT(A.REQ_SEQ_NO) "); + strSql.AppendLine(" FROM NISCO.EP_REQ_SLAB_D A, NISCO.EP_REQ_SLAB B "); + strSql.AppendLine(" WHERE 1 = 1 "); + strSql.AppendLine(" AND A.ORD_NO = BOI.ORD_NO AND A.ORD_ITEM = BOI.ORD_ITEM "); + strSql.AppendLine(" AND A.BLOCK_SEQ >= '01' "); + strSql.AppendLine(" AND A.SEQ >= '01' "); + strSql.AppendLine(" And B.REQ_SEQ_NO = A.REQ_SEQ_NO "); + strSql.AppendLine(" AND A.ORD_FL = '1' "); + strSql.AppendLine(" AND B.REC_STS = '1') + (NVL(CPP.ORD_REM_WGT, 0) - CPP.ORD_WGT * (CPP.DEL_TOL_MAX + ABS(CPP.DEL_TOL_MIN)) / 100) / TRUNC(((BOI.ORD_WID / 1000) * (BOI.ORD_LEN / 1000) * (BOI.ORD_THK / 1000)) * 7.85, 3) >= 0.95 "); + + + strSql.AppendLine(" AND boi.PROD_CD = 'PP' "); + strSql.AppendLine(" AND boi.REC_STS = '2' "); + strSql.AppendLine(" and boi.ORD_STS IN('E', 'D') "); + strSql.AppendLine(" AND boi.ord_knd IN('A') "); + + strSql.AppendLine(strWHereOrd); + strSql.AppendLine(strSpecialOrd); + //测试test + strSql.AppendLine(" or (boi.ORD_NO ='" + glstrOrdNo + "'"); + strSql.AppendLine(" AND boi.ORD_ITEM ='" + glstrOrdItem + "')"); + strSql.AppendLine(" )"); + strSql.AppendLine(") T WHERE T.RK = 1"); + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_QLTY_MATR_HZ = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_QLTY_MATR_HZ 报错 : ", ex); + } + + return ltQP_QLTY_MATR_HZ; + } + + #endregion 订单物理特性 + + #region 钢板物理特性 + + /// + /// 获取钢板物理属性QP_TEST_RSLT_HA + /// + /// + public IList GetQP_TEST_RSLT_HA(string strWHerePlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_TEST_RSLT_HA = new List(); + + //strSql.AppendLine("SELECT* FROM NISCO.QP_TEST_RSLT_HA "); + //strSql.AppendLine(" WHERE SMP_NO IN"); + //strSql.AppendLine("(SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP"); + //strSql.AppendLine(" WHERE GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + //strSql.AppendLine("AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 ELSE 0 END) = 1 "); + ////strSql.AppendLine(" WHERE 1=1 "); + //strSql.AppendLine(strWHerePlate); + //strSql.AppendLine(") "); + + //20240131改 + strSql.AppendLine(" SELECT* FROM NISCO.QP_TEST_RSLT_HA "); + strSql.AppendLine(" WHERE SMP_NO IN "); + strSql.AppendLine("( "); + strSql.AppendLine(" SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP "); + strSql.AppendLine(" LEFT JOIN NISCO.GP_USTRESULT UST ON UST.PLATE_NO = GP.PLATE_NO "); + strSql.AppendLine(" LEFT JOIN (SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLINGW UNION SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLING) R ON substr(GP.PLATE_NO,1,10)=R.SLAB_NO "); + strSql.AppendLine(" WHERE 1=1 "); + strSql.AppendLine(" AND GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + strSql.AppendLine(" AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine(" WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine(" WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + //20240307改 R.MILL_END_DATE<'3'→R.MILL_END_DATE<='6' + strSql.AppendLine(" AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '2' AND trunc(months_between(sysdate,to_date(R.MILL_END_DATE,'yyyymmdd hh24:mi:ss'))) <='6' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd <> 'XAC' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD is null THEN 1 "); + strSql.AppendLine(" WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine(" WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + strSql.AppendLine(" AND GP.APLY_STDSPEC NOT LIKE '%NG-XY%' "); + strSql.AppendLine(" AND GP.Len <50000 "); + strSql.AppendLine(strWHerePlate); + //测试test + strSql.AppendLine(" OR GP.PLATE_NO = '" + glstrPlateNo + "'"); + + strSql.AppendLine(") "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_TEST_RSLT_HA = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_TEST_RSLT_HA 报错 : ", ex); + } + + return ltQP_TEST_RSLT_HA; + } + + /// + /// 获取钢板物理属性QP_TEST_RSLT_HB + /// + /// + public IList GetQP_TEST_RSLT_HB(string strWHerePlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_TEST_RSLT_HB = new List(); + + //strSql.AppendLine("SELECT* FROM NISCO.QP_TEST_RSLT_HB "); + //strSql.AppendLine(" WHERE SMP_NO IN"); + //strSql.AppendLine("(SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP"); + //strSql.AppendLine(" WHERE GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + //strSql.AppendLine("AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 ELSE 0 END) = 1 "); + ////strSql.AppendLine(" WHERE 1=1 "); + //strSql.AppendLine(strWHerePlate); + //strSql.AppendLine(") "); + + + //20240131改 + strSql.AppendLine(" SELECT* FROM NISCO.QP_TEST_RSLT_HB "); + strSql.AppendLine(" WHERE SMP_NO IN "); + strSql.AppendLine("( "); + strSql.AppendLine(" SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP "); + strSql.AppendLine(" LEFT JOIN NISCO.GP_USTRESULT UST ON UST.PLATE_NO = GP.PLATE_NO "); + strSql.AppendLine(" LEFT JOIN (SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLINGW UNION SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLING) R ON substr(GP.PLATE_NO,1,10)=R.SLAB_NO "); + strSql.AppendLine(" WHERE 1=1 "); + strSql.AppendLine(" AND GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + strSql.AppendLine(" AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine(" WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine(" WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + //20240307改 R.MILL_END_DATE<'3'→R.MILL_END_DATE<='6' + strSql.AppendLine(" AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '2' AND trunc(months_between(sysdate,to_date(R.MILL_END_DATE,'yyyymmdd hh24:mi:ss'))) <='6' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd <> 'XAC' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD is null THEN 1 "); + strSql.AppendLine(" WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine(" WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + strSql.AppendLine(" AND GP.APLY_STDSPEC NOT LIKE '%NG-XY%' "); + strSql.AppendLine(" AND GP.Len <50000 "); + strSql.AppendLine(strWHerePlate); + //测试test + strSql.AppendLine(" OR GP.PLATE_NO = '" + glstrPlateNo + "'"); + strSql.AppendLine(") "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_TEST_RSLT_HB = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_TEST_RSLT_HB 报错 : ", ex); + } + + return ltQP_TEST_RSLT_HB; + } + + /// + /// 获取钢板物理属性QP_TEST_RSLT_HC + /// + /// + public IList GetQP_TEST_RSLT_HC(string strWHerePlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_TEST_RSLT_HC = new List(); + + //strSql.AppendLine("SELECT* FROM NISCO.QP_TEST_RSLT_HC "); + //strSql.AppendLine(" WHERE SMP_NO IN"); + //strSql.AppendLine("(SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP"); + //strSql.AppendLine(" WHERE GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + //strSql.AppendLine("AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 ELSE 0 END) = 1 "); + ////strSql.AppendLine(" WHERE 1=1 "); + //strSql.AppendLine(strWHerePlate); + //strSql.AppendLine(") "); + + + //20240131改 + strSql.AppendLine(" SELECT* FROM NISCO.QP_TEST_RSLT_HC "); + strSql.AppendLine(" WHERE SMP_NO IN "); + strSql.AppendLine("( "); + strSql.AppendLine(" SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP "); + strSql.AppendLine(" LEFT JOIN NISCO.GP_USTRESULT UST ON UST.PLATE_NO = GP.PLATE_NO "); + strSql.AppendLine(" LEFT JOIN (SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLINGW UNION SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLING) R ON substr(GP.PLATE_NO,1,10)=R.SLAB_NO "); + strSql.AppendLine(" WHERE 1=1 "); + strSql.AppendLine(" AND GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + strSql.AppendLine(" AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine(" WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine(" WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + //20240307改 R.MILL_END_DATE<'3'→R.MILL_END_DATE<='6' + strSql.AppendLine(" AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '2' AND trunc(months_between(sysdate,to_date(R.MILL_END_DATE,'yyyymmdd hh24:mi:ss'))) <='6' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd <> 'XAC' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD is null THEN 1 "); + strSql.AppendLine(" WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine(" WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + strSql.AppendLine(" AND GP.APLY_STDSPEC NOT LIKE '%NG-XY%' "); + strSql.AppendLine(" AND GP.Len <50000 "); + strSql.AppendLine(strWHerePlate); + //测试test + strSql.AppendLine(" OR GP.PLATE_NO = '" + glstrPlateNo + "'"); + strSql.AppendLine(") "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_TEST_RSLT_HC = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_TEST_RSLT_HC 报错 : ", ex); + } + + return ltQP_TEST_RSLT_HC; + } + + /// + /// 获取钢板物理属性QP_TEST_RSLT_HD + /// + /// + public IList GetQP_TEST_RSLT_HD(string strWHerePlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_TEST_RSLT_HD = new List(); + + //strSql.AppendLine("SELECT* FROM NISCO.QP_TEST_RSLT_HD "); + //strSql.AppendLine(" WHERE SMP_NO IN"); + //strSql.AppendLine("(SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP"); + //strSql.AppendLine(" WHERE GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + //strSql.AppendLine("AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 ELSE 0 END) = 1 "); + ////strSql.AppendLine(" WHERE 1=1 "); + //strSql.AppendLine(strWHerePlate); + //strSql.AppendLine(") "); + + //20240131改 + strSql.AppendLine(" SELECT* FROM NISCO.QP_TEST_RSLT_HD "); + strSql.AppendLine(" WHERE SMP_NO IN "); + strSql.AppendLine("( "); + strSql.AppendLine(" SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP "); + strSql.AppendLine(" LEFT JOIN NISCO.GP_USTRESULT UST ON UST.PLATE_NO = GP.PLATE_NO "); + strSql.AppendLine(" LEFT JOIN (SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLINGW UNION SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLING) R ON substr(GP.PLATE_NO,1,10)=R.SLAB_NO "); + strSql.AppendLine(" WHERE 1=1 "); + strSql.AppendLine(" AND GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + strSql.AppendLine(" AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine(" WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine(" WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + //20240307改 R.MILL_END_DATE<'3'→R.MILL_END_DATE<='6' + strSql.AppendLine(" AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '2' AND trunc(months_between(sysdate,to_date(R.MILL_END_DATE,'yyyymmdd hh24:mi:ss'))) <='6' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd <> 'XAC' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD is null THEN 1 "); + strSql.AppendLine(" WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine(" WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + strSql.AppendLine(" AND GP.APLY_STDSPEC NOT LIKE '%NG-XY%' "); + strSql.AppendLine(" AND GP.Len <50000 "); + strSql.AppendLine(strWHerePlate); + //测试test + strSql.AppendLine(" OR GP.PLATE_NO = '" + glstrPlateNo + "'"); + strSql.AppendLine(") "); + + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_TEST_RSLT_HD = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_TEST_RSLT_HD 报错 : ", ex); + } + + return ltQP_TEST_RSLT_HD; + } + + /// + /// 获取钢板物理属性QP_TEST_RSLT_HE + /// + /// + public IList GetQP_TEST_RSLT_HE(string strWHerePlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_TEST_RSLT_HE = new List(); + + //strSql.AppendLine("SELECT* FROM NISCO.QP_TEST_RSLT_HE "); + //strSql.AppendLine(" WHERE SMP_NO IN"); + //strSql.AppendLine("(SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP"); + //strSql.AppendLine(" WHERE GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + //strSql.AppendLine("AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 ELSE 0 END) = 1 "); + ////strSql.AppendLine(" WHERE 1=1 "); + //strSql.AppendLine(strWHerePlate); + //strSql.AppendLine(") "); + + + //20240131改 + strSql.AppendLine(" SELECT* FROM NISCO.QP_TEST_RSLT_HE "); + strSql.AppendLine(" WHERE SMP_NO IN "); + strSql.AppendLine("( "); + strSql.AppendLine(" SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP "); + strSql.AppendLine(" LEFT JOIN NISCO.GP_USTRESULT UST ON UST.PLATE_NO = GP.PLATE_NO "); + strSql.AppendLine(" LEFT JOIN (SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLINGW UNION SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLING) R ON substr(GP.PLATE_NO,1,10)=R.SLAB_NO "); + strSql.AppendLine(" WHERE 1=1 "); + strSql.AppendLine(" AND GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + strSql.AppendLine(" AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine(" WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine(" WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + //20240307改 R.MILL_END_DATE<'3'→R.MILL_END_DATE<='6' + strSql.AppendLine(" AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '2' AND trunc(months_between(sysdate,to_date(R.MILL_END_DATE,'yyyymmdd hh24:mi:ss'))) <='6' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd <> 'XAC' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD is null THEN 1 "); + strSql.AppendLine(" WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine(" WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + strSql.AppendLine(" AND GP.APLY_STDSPEC NOT LIKE '%NG-XY%' "); + strSql.AppendLine(" AND GP.Len <50000 "); + strSql.AppendLine(strWHerePlate); + //测试test + strSql.AppendLine(" OR GP.PLATE_NO = '" + glstrPlateNo + "'"); + strSql.AppendLine(") "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_TEST_RSLT_HE = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_TEST_RSLT_HE 报错 : ", ex); + } + + return ltQP_TEST_RSLT_HE; + } + + /// + /// 获取钢板物理属性QP_TEST_RSLT_HF + /// + /// + public IList GetQP_TEST_RSLT_HF(string strWHerePlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_TEST_RSLT_HF = new List(); + + //strSql.AppendLine("SELECT* FROM NISCO.QP_TEST_RSLT_HF "); + //strSql.AppendLine(" WHERE SMP_NO IN"); + //strSql.AppendLine("(SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP"); + + //strSql.AppendLine(" WHERE GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + //strSql.AppendLine("AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 ELSE 0 END) = 1 "); + ////strSql.AppendLine(" WHERE 1=1 "); + //strSql.AppendLine(strWHerePlate); + //strSql.AppendLine(") "); + + //20240131改 + strSql.AppendLine(" SELECT* FROM NISCO.QP_TEST_RSLT_HF "); + strSql.AppendLine(" WHERE SMP_NO IN "); + strSql.AppendLine("( "); + strSql.AppendLine(" SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP "); + strSql.AppendLine(" LEFT JOIN NISCO.GP_USTRESULT UST ON UST.PLATE_NO = GP.PLATE_NO "); + strSql.AppendLine(" LEFT JOIN (SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLINGW UNION SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLING) R ON substr(GP.PLATE_NO,1,10)=R.SLAB_NO "); + strSql.AppendLine(" WHERE 1=1 "); + strSql.AppendLine(" AND GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + strSql.AppendLine(" AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine(" WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine(" WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + //20240307改 R.MILL_END_DATE<'3'→R.MILL_END_DATE<='6' + strSql.AppendLine(" AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '2' AND trunc(months_between(sysdate,to_date(R.MILL_END_DATE,'yyyymmdd hh24:mi:ss'))) <='6' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd <> 'XAC' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD is null THEN 1 "); + strSql.AppendLine(" WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine(" WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + strSql.AppendLine(" AND GP.APLY_STDSPEC NOT LIKE '%NG-XY%' "); + strSql.AppendLine(" AND GP.Len <50000 "); + strSql.AppendLine(strWHerePlate); + //测试test + strSql.AppendLine(" OR GP.PLATE_NO = '" + glstrPlateNo + "'"); + strSql.AppendLine(") "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_TEST_RSLT_HF = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_TEST_RSLT_HF 报错 : ", ex); + } + + return ltQP_TEST_RSLT_HF; + } + + /// + /// 获取钢板物理属性QP_TEST_RSLT_HJ + /// + /// + public IList GetQP_TEST_RSLT_HJ(string strWHerePlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_TEST_RSLT_HJ = new List(); + + //strSql.AppendLine("SELECT* FROM NISCO.QP_TEST_RSLT_HJ "); + //strSql.AppendLine(" WHERE SMP_NO IN"); + //strSql.AppendLine("(SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP"); + //strSql.AppendLine(" WHERE GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + //strSql.AppendLine("AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 ELSE 0 END) = 1 "); + ////strSql.AppendLine(" WHERE 1=1 "); + //strSql.AppendLine(strWHerePlate); + //strSql.AppendLine(") "); + + //20240131改 + strSql.AppendLine(" SELECT* FROM NISCO.QP_TEST_RSLT_HJ "); + strSql.AppendLine(" WHERE SMP_NO IN "); + strSql.AppendLine("( "); + strSql.AppendLine(" SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP "); + strSql.AppendLine(" LEFT JOIN NISCO.GP_USTRESULT UST ON UST.PLATE_NO = GP.PLATE_NO "); + strSql.AppendLine(" LEFT JOIN (SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLINGW UNION SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLING) R ON substr(GP.PLATE_NO,1,10)=R.SLAB_NO "); + strSql.AppendLine(" WHERE 1=1 "); + strSql.AppendLine(" AND GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + strSql.AppendLine(" AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine(" WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine(" WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + //20240307改 R.MILL_END_DATE<'3'→R.MILL_END_DATE<='6' + strSql.AppendLine(" AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '2' AND trunc(months_between(sysdate,to_date(R.MILL_END_DATE,'yyyymmdd hh24:mi:ss'))) <='6' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd <> 'XAC' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD is null THEN 1 "); + strSql.AppendLine(" WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine(" WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + strSql.AppendLine(" AND GP.APLY_STDSPEC NOT LIKE '%NG-XY%' "); + strSql.AppendLine(" AND GP.Len <50000 "); + strSql.AppendLine(strWHerePlate); + //测试test + strSql.AppendLine(" OR GP.PLATE_NO = '" + glstrPlateNo + "'"); + strSql.AppendLine(") "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_TEST_RSLT_HJ = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_TEST_RSLT_HJ 报错 : ", ex); + } + + return ltQP_TEST_RSLT_HJ; + } + + /// + /// 获取钢板物理属性QP_TEST_RSLT_HK + /// + /// + public IList GetQP_TEST_RSLT_HK(string strWHerePlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_TEST_RSLT_HK = new List(); + + //strSql.AppendLine("SELECT* FROM NISCO.QP_TEST_RSLT_HK "); + //strSql.AppendLine(" WHERE SMP_NO IN"); + //strSql.AppendLine("(SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP"); + //strSql.AppendLine(" WHERE GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + //strSql.AppendLine("AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 ELSE 0 END) = 1 "); + ////strSql.AppendLine(" WHERE 1=1 "); + //strSql.AppendLine(strWHerePlate); + //strSql.AppendLine(") "); + + + //20240131改 + strSql.AppendLine(" SELECT* FROM NISCO.QP_TEST_RSLT_HK "); + strSql.AppendLine(" WHERE SMP_NO IN "); + strSql.AppendLine("( "); + strSql.AppendLine(" SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP "); + strSql.AppendLine(" LEFT JOIN NISCO.GP_USTRESULT UST ON UST.PLATE_NO = GP.PLATE_NO "); + strSql.AppendLine(" LEFT JOIN (SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLINGW UNION SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLING) R ON substr(GP.PLATE_NO,1,10)=R.SLAB_NO "); + strSql.AppendLine(" WHERE 1=1 "); + strSql.AppendLine(" AND GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + strSql.AppendLine(" AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine(" WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine(" WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + //20240307改 R.MILL_END_DATE<'3'→R.MILL_END_DATE<='6' + strSql.AppendLine(" AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '2' AND trunc(months_between(sysdate,to_date(R.MILL_END_DATE,'yyyymmdd hh24:mi:ss'))) <='6' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd <> 'XAC' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD is null THEN 1 "); + strSql.AppendLine(" WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine(" WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + strSql.AppendLine(" AND GP.APLY_STDSPEC NOT LIKE '%NG-XY%' "); + strSql.AppendLine(" AND GP.Len <50000 "); + strSql.AppendLine(strWHerePlate); + //测试test + strSql.AppendLine(" OR GP.PLATE_NO = '" + glstrPlateNo + "'"); + strSql.AppendLine(") "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_TEST_RSLT_HK = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_TEST_RSLT_HK 报错 : ", ex); + } + + return ltQP_TEST_RSLT_HK; + } + + /// + /// 获取钢板物理属性QP_TEST_RSLT_HM + /// + /// + public IList GetQP_TEST_RSLT_HM(string strWHerePlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_TEST_RSLT_HM = new List(); + + //strSql.AppendLine("SELECT* FROM NISCO.QP_TEST_RSLT_HM "); + //strSql.AppendLine(" WHERE SMP_NO IN"); + //strSql.AppendLine("(SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP"); + //strSql.AppendLine(" WHERE GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + //strSql.AppendLine("AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 ELSE 0 END) = 1 "); + ////strSql.AppendLine(" WHERE 1=1 "); + //strSql.AppendLine(strWHerePlate); + //strSql.AppendLine(") "); + + //20240131改 + strSql.AppendLine(" SELECT* FROM NISCO.QP_TEST_RSLT_HM "); + strSql.AppendLine(" WHERE SMP_NO IN "); + strSql.AppendLine("( "); + strSql.AppendLine(" SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP "); + strSql.AppendLine(" LEFT JOIN NISCO.GP_USTRESULT UST ON UST.PLATE_NO = GP.PLATE_NO "); + strSql.AppendLine(" LEFT JOIN (SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLINGW UNION SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLING) R ON substr(GP.PLATE_NO,1,10)=R.SLAB_NO "); + strSql.AppendLine(" WHERE 1=1 "); + strSql.AppendLine(" AND GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + strSql.AppendLine(" AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine(" WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine(" WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + //20240307改 R.MILL_END_DATE<'3'→R.MILL_END_DATE<='6' + strSql.AppendLine(" AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '2' AND trunc(months_between(sysdate,to_date(R.MILL_END_DATE,'yyyymmdd hh24:mi:ss'))) <='6' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd <> 'XAC' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD is null THEN 1 "); + strSql.AppendLine(" WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine(" WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + strSql.AppendLine(" AND GP.APLY_STDSPEC NOT LIKE '%NG-XY%' "); + strSql.AppendLine(" AND GP.Len <50000 "); + strSql.AppendLine(strWHerePlate); + //测试test + strSql.AppendLine(" OR GP.PLATE_NO = '" + glstrPlateNo + "'"); + strSql.AppendLine(") "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_TEST_RSLT_HM = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_TEST_RSLT_HM 报错 : ", ex); + } + + return ltQP_TEST_RSLT_HM; + } + + /// + /// 获取钢板物理属性QP_TEST_RSLT_HN + /// + /// + public IList GetQP_TEST_RSLT_HN(string strWHerePlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_TEST_RSLT_HN = new List(); + + //strSql.AppendLine("SELECT* FROM NISCO.QP_TEST_RSLT_HN "); + //strSql.AppendLine(" WHERE SMP_NO IN"); + //strSql.AppendLine("(SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP"); + //strSql.AppendLine(" WHERE GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + //strSql.AppendLine("AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 ELSE 0 END) = 1 "); + ////strSql.AppendLine(" WHERE 1=1 "); + //strSql.AppendLine(strWHerePlate); + //strSql.AppendLine(") "); + + //20240131改 + strSql.AppendLine(" SELECT* FROM NISCO.QP_TEST_RSLT_HN "); + strSql.AppendLine(" WHERE SMP_NO IN "); + strSql.AppendLine("( "); + strSql.AppendLine(" SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP "); + strSql.AppendLine(" LEFT JOIN NISCO.GP_USTRESULT UST ON UST.PLATE_NO = GP.PLATE_NO "); + strSql.AppendLine(" LEFT JOIN (SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLINGW UNION SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLING) R ON substr(GP.PLATE_NO,1,10)=R.SLAB_NO "); + strSql.AppendLine(" WHERE 1=1 "); + strSql.AppendLine(" AND GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + strSql.AppendLine(" AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine(" WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine(" WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + //20240307改 R.MILL_END_DATE<'3'→R.MILL_END_DATE<='6' + strSql.AppendLine(" AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '2' AND trunc(months_between(sysdate,to_date(R.MILL_END_DATE,'yyyymmdd hh24:mi:ss'))) <='6' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd <> 'XAC' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD is null THEN 1 "); + strSql.AppendLine(" WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine(" WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + strSql.AppendLine(" AND GP.APLY_STDSPEC NOT LIKE '%NG-XY%' "); + strSql.AppendLine(" AND GP.Len <50000 "); + strSql.AppendLine(strWHerePlate); + //测试test + strSql.AppendLine(" OR GP.PLATE_NO = '" + glstrPlateNo + "'"); + strSql.AppendLine(") "); + + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_TEST_RSLT_HN = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_TEST_RSLT_HN 报错 : ", ex); + } + + return ltQP_TEST_RSLT_HN; + } + + /// + /// 获取钢板物理属性QP_TEST_RSLT_HR + /// + /// + public IList GetQP_TEST_RSLT_HR(string strWHerePlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_TEST_RSLT_HR = new List(); + + //strSql.AppendLine("SELECT* FROM NISCO.QP_TEST_RSLT_HR "); + //strSql.AppendLine(" WHERE SMP_NO IN"); + //strSql.AppendLine("(SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP"); + //strSql.AppendLine(" WHERE GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + //strSql.AppendLine("AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 ELSE 0 END) = 1 "); + ////strSql.AppendLine(" WHERE 1=1 "); + //strSql.AppendLine(strWHerePlate); + //strSql.AppendLine(") "); + + //20240131改 + strSql.AppendLine(" SELECT* FROM NISCO.QP_TEST_RSLT_HR "); + strSql.AppendLine(" WHERE SMP_NO IN "); + strSql.AppendLine("( "); + strSql.AppendLine(" SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP "); + strSql.AppendLine(" LEFT JOIN NISCO.GP_USTRESULT UST ON UST.PLATE_NO = GP.PLATE_NO "); + strSql.AppendLine(" LEFT JOIN (SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLINGW UNION SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLING) R ON substr(GP.PLATE_NO,1,10)=R.SLAB_NO "); + strSql.AppendLine(" WHERE 1=1 "); + strSql.AppendLine(" AND GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + strSql.AppendLine(" AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine(" WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine(" WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + //20240307改 R.MILL_END_DATE<'3'→R.MILL_END_DATE<='6' + strSql.AppendLine(" AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '2' AND trunc(months_between(sysdate,to_date(R.MILL_END_DATE,'yyyymmdd hh24:mi:ss'))) <='6' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd <> 'XAC' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD is null THEN 1 "); + strSql.AppendLine(" WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine(" WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + strSql.AppendLine(" AND GP.APLY_STDSPEC NOT LIKE '%NG-XY%' "); + strSql.AppendLine(" AND GP.Len <50000 "); + strSql.AppendLine(strWHerePlate); + //测试test + strSql.AppendLine(" OR GP.PLATE_NO = '" + glstrPlateNo + "'"); + strSql.AppendLine(") "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_TEST_RSLT_HR = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_TEST_RSLT_HR 报错 : ", ex); + } + + return ltQP_TEST_RSLT_HR; + } + + /// + /// 获取钢板物理属性QP_TEST_RSLT_HZ + /// + /// + public IList GetQP_TEST_RSLT_HZ(string strWHerePlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_TEST_RSLT_HZ = new List(); + + //strSql.AppendLine("SELECT* FROM NISCO.QP_TEST_RSLT_HZ "); + //strSql.AppendLine(" WHERE SMP_NO IN"); + //strSql.AppendLine("(SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP"); + //strSql.AppendLine(" WHERE GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + //strSql.AppendLine("AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + //strSql.AppendLine("WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 ELSE 0 END) = 1 "); + ////strSql.AppendLine(" WHERE 1=1 "); + //strSql.AppendLine(strWHerePlate); + //strSql.AppendLine(") "); + + //20240131改 + strSql.AppendLine(" SELECT* FROM NISCO.QP_TEST_RSLT_HZ "); + strSql.AppendLine(" WHERE SMP_NO IN "); + strSql.AppendLine("( "); + strSql.AppendLine(" SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP "); + strSql.AppendLine(" LEFT JOIN NISCO.GP_USTRESULT UST ON UST.PLATE_NO = GP.PLATE_NO "); + strSql.AppendLine(" LEFT JOIN (SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLINGW UNION SELECT SLAB_NO,MILL_END_DATE from NISCO.GP_ROLLING) R ON substr(GP.PLATE_NO,1,10)=R.SLAB_NO "); + strSql.AppendLine(" WHERE 1=1 "); + strSql.AppendLine(" AND GP.proc_cd IN('DZB','DZE','QAB','XAC') AND GP.PROD_CD = 'PP' AND GP.REC_STS = '2' and GP.ord_fl='2' "); + strSql.AppendLine(" AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PROD_GRD = '1' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'QAB' AND GP.SURF_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'DZB' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'DZE' AND GP.SURF_GRD = '4' THEN 1 "); + strSql.AppendLine(" WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine(" WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + //20240307改 R.MILL_END_DATE<'3'→R.MILL_END_DATE<='6' + strSql.AppendLine(" AND(CASE WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '2' AND trunc(months_between(sysdate,to_date(R.MILL_END_DATE,'yyyymmdd hh24:mi:ss'))) <='6' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd <> 'XAC' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD = '1' THEN 1 "); + strSql.AppendLine(" WHEN GP.proc_cd = 'XAC' AND GP.PRICE_GRD is null THEN 1 "); + strSql.AppendLine(" WHEN GP.PROD_GRD = '2' AND GP.SURF_GRD = '2' AND GP.PLT='C3' THEN 1 "); + strSql.AppendLine(" WHEN UST.UST_DEC = 'N' and UST.UST_DEC_FP_1 = 'Y' AND (GP.SURF_GRD = '1' OR GP.SURF_GRD = '2' OR GP.SURF_GRD = '4') THEN 1 ELSE 0 END) = 1 "); + strSql.AppendLine(" AND GP.APLY_STDSPEC NOT LIKE '%NG-XY%' "); + strSql.AppendLine(" AND GP.Len <50000 "); + strSql.AppendLine(strWHerePlate); + //测试test + strSql.AppendLine(" OR GP.PLATE_NO = '" + glstrPlateNo + "'"); + strSql.AppendLine(") "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_TEST_RSLT_HZ = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_TEST_RSLT_HZ 报错 : ", ex); + } + + return ltQP_TEST_RSLT_HZ; + } + + + + + #endregion 钢板物理特性 + + #region 钢板物理特性 + + /// + /// 获取钢板物理属性QP_TEST_RSLT_HA + /// + /// + public IList GetQP_TEST_RSLT_HA_SLAB(string strWHerePlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_TEST_RSLT_HA = new List(); + + strSql.AppendLine("SELECT* FROM NISCO.QP_TEST_RSLT_HA "); + strSql.AppendLine(" WHERE SMP_NO IN"); + strSql.AppendLine("(SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP"); + //strSql.AppendLine(" WHERE TEST_KND='0' AND PLATE_NO like '"); + //strSql.AppendLine(" WHERE TEST_KND='0' AND PLATE_NO like '" + strWHerePlate + "%'"); + strSql.AppendLine(" WHERE TEST_KND='0'"); + strSql.AppendLine(strWHerePlate); + //strSql.AppendLine("%'"); + strSql.AppendLine(") "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + if (!string.IsNullOrEmpty(strWHerePlate)) + { + ltQP_TEST_RSLT_HA = db.Query(strSql.ToString()); + } + + } + } + catch (Exception ex) + { + logger.Error("GetQP_TEST_RSLT_HA_SLAB 报错 : ", ex); + } + + return ltQP_TEST_RSLT_HA; + } + + /// + /// 获取钢板物理属性QP_TEST_RSLT_HB + /// + /// + public IList GetQP_TEST_RSLT_HB_SLAB(string strWHerePlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_TEST_RSLT_HB = new List(); + + strSql.AppendLine("SELECT* FROM NISCO.QP_TEST_RSLT_HB "); + strSql.AppendLine(" WHERE SMP_NO IN"); + strSql.AppendLine("(SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP"); + //strSql.AppendLine(" WHERE TEST_KND='0' AND PLATE_NO like '"); + //strSql.AppendLine(" WHERE TEST_KND='0' AND PLATE_NO like '" + strWHerePlate + "%'"); + strSql.AppendLine(" WHERE TEST_KND='0'"); + strSql.AppendLine(strWHerePlate); + //strSql.AppendLine("%'"); + strSql.AppendLine(") "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_TEST_RSLT_HB = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_TEST_RSLT_HB_SLAB 报错 : ", ex); + } + + return ltQP_TEST_RSLT_HB; + } + + ///// + ///// 获取钢板物理属性QP_TEST_RSLT_HC + ///// + ///// + public IList GetQP_TEST_RSLT_HC_SLAB(string strWHerePlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_TEST_RSLT_HC = new List(); + + strSql.AppendLine("SELECT* FROM NISCO.QP_TEST_RSLT_HC "); + strSql.AppendLine(" WHERE SMP_NO IN"); + strSql.AppendLine("(SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP"); + //strSql.AppendLine(" WHERE TEST_KND='0' AND PLATE_NO like '"); + //strSql.AppendLine(" WHERE TEST_KND='0' AND PLATE_NO like '" + strWHerePlate + "%'"); + strSql.AppendLine(" WHERE TEST_KND='0'"); + strSql.AppendLine(strWHerePlate); + //strSql.AppendLine("%'"); + strSql.AppendLine(") "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_TEST_RSLT_HC = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_TEST_RSLT_HC_SLAB 报错 : ", ex); + } + + return ltQP_TEST_RSLT_HC; + } + + ///// + ///// 获取钢板物理属性QP_TEST_RSLT_HD + ///// + ///// + public IList GetQP_TEST_RSLT_HD_SLAB(string strWHerePlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_TEST_RSLT_HD = new List(); + + strSql.AppendLine("SELECT* FROM NISCO.QP_TEST_RSLT_HD "); + strSql.AppendLine(" WHERE SMP_NO IN"); + strSql.AppendLine("(SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP"); + //strSql.AppendLine(" WHERE TEST_KND='0' AND PLATE_NO like '"); + //strSql.AppendLine(" WHERE TEST_KND='0' AND PLATE_NO like '" + strWHerePlate + "%'"); + strSql.AppendLine(" WHERE TEST_KND='0'"); + strSql.AppendLine(strWHerePlate); + //strSql.AppendLine("%'"); + strSql.AppendLine(") "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_TEST_RSLT_HD = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_TEST_RSLT_HD_SLAB 报错 : ", ex); + } + + return ltQP_TEST_RSLT_HD; + } + + /// + /// 获取钢板物理属性QP_TEST_RSLT_HE + /// + /// + public IList GetQP_TEST_RSLT_HE_SLAB(string strWHerePlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_TEST_RSLT_HE = new List(); + + strSql.AppendLine("SELECT* FROM NISCO.QP_TEST_RSLT_HE "); + strSql.AppendLine(" WHERE SMP_NO IN"); + strSql.AppendLine("(SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP"); + //strSql.AppendLine(" WHERE TEST_KND='0' AND PLATE_NO like '"); + //strSql.AppendLine(" WHERE TEST_KND='0' AND PLATE_NO like '" + strWHerePlate + "%'"); + strSql.AppendLine(" WHERE TEST_KND='0'"); + strSql.AppendLine(strWHerePlate); + //strSql.AppendLine("%'"); + strSql.AppendLine(") "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_TEST_RSLT_HE = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_TEST_RSLT_HE_SLAB 报错 : ", ex); + } + + return ltQP_TEST_RSLT_HE; + } + + /// + /// 获取钢板物理属性QP_TEST_RSLT_HF + /// + /// + public IList GetQP_TEST_RSLT_HF_SLAB(string strWHerePlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_TEST_RSLT_HF = new List(); + + strSql.AppendLine("SELECT* FROM NISCO.QP_TEST_RSLT_HF "); + strSql.AppendLine(" WHERE SMP_NO IN"); + strSql.AppendLine("(SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP"); + //strSql.AppendLine(" WHERE TEST_KND='0' AND PLATE_NO like '"); + //strSql.AppendLine(" WHERE TEST_KND='0' AND PLATE_NO like '" + strWHerePlate + "%'"); + strSql.AppendLine(" WHERE TEST_KND='0'"); + strSql.AppendLine(strWHerePlate); + //strSql.AppendLine("%'"); + strSql.AppendLine(") "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_TEST_RSLT_HF = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_TEST_RSLT_HF_SLAB 报错 : ", ex); + } + + return ltQP_TEST_RSLT_HF; + } + + /// + /// 获取钢板物理属性QP_TEST_RSLT_HJ + /// + /// + public IList GetQP_TEST_RSLT_HJ_SLAB(string strWHerePlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_TEST_RSLT_HJ = new List(); + + strSql.AppendLine("SELECT* FROM NISCO.QP_TEST_RSLT_HJ "); + strSql.AppendLine(" WHERE SMP_NO IN"); + strSql.AppendLine("(SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP"); + //strSql.AppendLine(" WHERE TEST_KND='0' AND PLATE_NO like '"); + //strSql.AppendLine(" WHERE TEST_KND='0' AND PLATE_NO like '" + strWHerePlate + "%'"); + strSql.AppendLine(" WHERE TEST_KND='0'"); + strSql.AppendLine(strWHerePlate); + //strSql.AppendLine("%'"); + strSql.AppendLine(") "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_TEST_RSLT_HJ = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_TEST_RSLT_HJ_SLAB 报错 : ", ex); + } + + return ltQP_TEST_RSLT_HJ; + } + + /// + /// 获取钢板物理属性QP_TEST_RSLT_HK + /// + /// + public IList GetQP_TEST_RSLT_HK_SLAB(string strWHerePlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_TEST_RSLT_HK = new List(); + + strSql.AppendLine("SELECT* FROM NISCO.QP_TEST_RSLT_HK "); + strSql.AppendLine(" WHERE SMP_NO IN"); + strSql.AppendLine("(SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP"); + //strSql.AppendLine(" WHERE TEST_KND='0' AND PLATE_NO like '"); + //strSql.AppendLine(" WHERE TEST_KND='0' AND PLATE_NO like '" + strWHerePlate + "%'"); + strSql.AppendLine(" WHERE TEST_KND='0'"); + strSql.AppendLine(strWHerePlate); + //strSql.AppendLine("%'"); + strSql.AppendLine(") "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_TEST_RSLT_HK = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_TEST_RSLT_HK_SLAB 报错 : ", ex); + } + + return ltQP_TEST_RSLT_HK; + } + + /// + /// 获取钢板物理属性QP_TEST_RSLT_HM + /// + /// + public IList GetQP_TEST_RSLT_HM_SLAB(string strWHerePlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_TEST_RSLT_HM = new List(); + + strSql.AppendLine("SELECT* FROM NISCO.QP_TEST_RSLT_HM "); + strSql.AppendLine(" WHERE SMP_NO IN"); + strSql.AppendLine("(SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP"); + //strSql.AppendLine(" WHERE TEST_KND='0' AND PLATE_NO like '"); + //strSql.AppendLine(" WHERE TEST_KND='0' AND PLATE_NO like '" + strWHerePlate + "%'"); + strSql.AppendLine(" WHERE TEST_KND='0'"); + strSql.AppendLine(strWHerePlate); + //strSql.AppendLine("%'"); + strSql.AppendLine(") "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_TEST_RSLT_HM = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_TEST_RSLT_HM_SLAB 报错 : ", ex); + } + + return ltQP_TEST_RSLT_HM; + } + + /// + /// 获取钢板物理属性QP_TEST_RSLT_HN + /// + /// + public IList GetQP_TEST_RSLT_HN_SLAB(string strWHerePlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_TEST_RSLT_HN = new List(); + + strSql.AppendLine("SELECT* FROM NISCO.QP_TEST_RSLT_HN "); + strSql.AppendLine(" WHERE SMP_NO IN"); + strSql.AppendLine("(SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP"); + //strSql.AppendLine(" WHERE TEST_KND='0' AND PLATE_NO like '"); + //strSql.AppendLine(" WHERE TEST_KND='0' AND PLATE_NO like '" + strWHerePlate + "%'"); + strSql.AppendLine(" WHERE TEST_KND='0'"); + strSql.AppendLine(strWHerePlate); + //strSql.AppendLine("%'"); + strSql.AppendLine(") "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_TEST_RSLT_HN = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_TEST_RSLT_HN_SLAB 报错 : ", ex); + } + + return ltQP_TEST_RSLT_HN; + } + + /// + /// 获取钢板物理属性QP_TEST_RSLT_HR + /// + /// + public IList GetQP_TEST_RSLT_HR_SLAB(string strWHerePlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_TEST_RSLT_HR = new List(); + + strSql.AppendLine("SELECT* FROM NISCO.QP_TEST_RSLT_HR "); + strSql.AppendLine(" WHERE SMP_NO IN"); + strSql.AppendLine("(SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP"); + //strSql.AppendLine(" WHERE TEST_KND='0' AND PLATE_NO like '"); + //strSql.AppendLine(" WHERE TEST_KND='0' AND PLATE_NO like '" + strWHerePlate + "%'"); + strSql.AppendLine(" WHERE TEST_KND='0'"); + strSql.AppendLine(strWHerePlate); + //strSql.AppendLine("%'"); + strSql.AppendLine(") "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_TEST_RSLT_HR = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_TEST_RSLT_HR_SLAB 报错 : ", ex); + } + + return ltQP_TEST_RSLT_HR; + } + + /// + /// 获取钢板物理属性QP_TEST_RSLT_HZ + /// + /// + public IList GetQP_TEST_RSLT_HZ_SLAB(string strWHerePlate) + { + StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量 + DataTable dtCheck = new DataTable(); + + IList ltQP_TEST_RSLT_HZ = new List(); + + strSql.AppendLine("SELECT* FROM NISCO.QP_TEST_RSLT_HZ "); + strSql.AppendLine(" WHERE SMP_NO IN"); + strSql.AppendLine("(SELECT DISTINCT GP.SMP_NO FROM NISCO.GP_PLATE GP"); + //strSql.AppendLine(" WHERE TEST_KND='0' AND PLATE_NO like '"); + //strSql.AppendLine(" WHERE TEST_KND='0' AND PLATE_NO like '" + strWHerePlate + "%'"); + strSql.AppendLine(" WHERE TEST_KND='0'"); + strSql.AppendLine(strWHerePlate); + //strSql.AppendLine("%'"); + strSql.AppendLine(") "); + + try + { + //开启数据库连接查询数据 + using (IDbContext db = ObjectContainer.GetObject("db_sur")) + { + ltQP_TEST_RSLT_HZ = db.Query(strSql.ToString()); + } + } + catch (Exception ex) + { + logger.Error("GetQP_TEST_RSLT_HZ_SLAB 报错 : ", ex); + } + + return ltQP_TEST_RSLT_HZ; + } + + + + + #endregion 钢板物理特性 + } +} \ No newline at end of file diff --git a/余材替代程序/SinglePlateHandle/SinglePlateHandle/bin/Debug/SinglePlateHandle.exe b/余材替代程序/SinglePlateHandle/SinglePlateHandle/bin/Debug/SinglePlateHandle.exe index 2fab207687f6830dd553eaffabc96f8d128b16f6..1597c509784e318e41b47b82d80723ff65e47553 100644 GIT binary patch literal 1286144 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྾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�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�DJ{;cSqsp?)kzeaQ2Opqa+{&iZM* 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