using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using GThinking.N_MISPROAS.Web.AjaxServices; using GThinking.N_MISPROAS.Data; using System.Collections.Generic; using GThinking.N_MISPRO.Data; using GThinking.N_MISPRO.Utility; using N_PUBLIC2; using System.Text.RegularExpressions; using System.Text; using System.IO; using GThinking.N_MISPRO; using GThinking.N_XLXSBJ; using GThinking.N_PUBLIC2; using System.Web.Script.Serialization; using System.Net; using GThinking.N_MISPROAS.SysData; namespace GThinking.S_XLXSBJ { #region 实体类 public class XLJXMX { public string XLJXDJ = ""; public string XLJXDH = ""; public string XLJXMXH = "0"; public string XLBSC = ""; public string XLJXGZXH = "0"; public string JXXLXHID = ""; public string XLXHID = ""; public string JXXLGGID = ""; public string XLGGID = ""; public string JXDYDJID = ""; public string DYDJID = ""; public string XLBZID = ""; public string JXXLBZID = ""; public string XLYSID = ""; public string JXXLYSID = ""; public string WHR = ""; public string WHRID = ""; public string WHSJ = ""; public string DCZT = "N"; public string DX = ""; public string JLDW = ""; public string SL = "0"; public string FBH = ""; public string JSGFID = ""; } /// /// 线路相似报价单明细批量插入实体。 /// public class XLXSBJDMXEntity { private string _BJDID; [DbColumn("XLXSBJDMX_BJDID")] public string BJDID { get { return _BJDID; } set { _BJDID = value; } } private int _XH; [DbColumn("XLXSBJDMX_XH")] public int XH { get { return _XH; } set { _XH = value; } } private int _XSSX; [DbColumn("XLXSBJDMX_XSSX")] public int XSSX { get { return _XSSX; } set { _XSSX = value; } } private string _BJCP; [DbColumn("XLXSBJDMX_BJCP")] public string BJCP { get { return _BJCP; } set { _BJCP = value; } } private string _JLDW; [DbColumn("XLXSBJDMX_JLDW")] public string JLDW { get { return _JLDW; } set { _JLDW = value; } } private string _XLXHID; [DbColumn("XLXSBJDMX_XLXHID")] public string XLXHID { get { return _XLXHID; } set { _XLXHID = value; } } private string _XDXLXHID; [DbColumn("XLXSBJDMX_XDXLXHID")] public string XDXLXHID { get { return _XDXLXHID; } set { _XDXLXHID = value; } } private string _XLGGID; [DbColumn("XLXSBJDMX_XLGGID")] public string XLGGID { get { return _XLGGID; } set { _XLGGID = value; } } private string _XLBZID; [DbColumn("XLXSBJDMX_XLBZID")] public string XLBZID { get { return _XLBZID; } set { _XLBZID = value; } } private string _XDXLBZID; [DbColumn("XLXSBJDMX_XDXLBZID")] public string XDXLBZID { get { return _XDXLBZID; } set { _XDXLBZID = value; } } private string _DYDJID; [DbColumn("XLXSBJDMX_DYDJID")] public string DYDJID { get { return _DYDJID; } set { _DYDJID = value; } } private string _XLYSID; [DbColumn("XLXSBJDMX_XLYSID")] public string XLYSID { get { return _XLYSID; } set { _XLYSID = value; } } private string _WHR; [DbColumn("XLXSBJDMX_WHR")] public string WHR { get { return _WHR; } set { _WHR = value; } } private string _WHRID; [DbColumn("XLXSBJDMX_WHRID")] public string WHRID { get { return _WHRID; } set { _WHRID = value; } } private DateTime _WHSJ; [DbColumn("XLXSBJDMX_WHSJ")] public DateTime WHSJ { get { return _WHSJ; } set { _WHSJ = value; } } private double _BJSL; [DbColumn("XLXSBJDMX_BJSL")] public double BJSL { get { return _BJSL; } set { _BJSL = value; } } private string _FBH; [DbColumn("XLXSBJDMX_FBH")] public string FBH { get { return _FBH; } set { _FBH = value; } } private string _JSGFSID; [DbColumn("XLXSBJDMX_JSGFSID")] public string JSGFSID { get { return _JSGFSID; } set { _JSGFSID = value; } } private int _DRHH; [DbColumn("XLXSBJDMX_DRHH")] public int DRHH { get { return _DRHH; } set { _DRHH = value; } } } public class XLJXGZ { public string XLJXDJ = ""; public string XLJXDH = ""; public string XLJXGZXH = "0"; public string XLJXGZC = ""; public string WHR = ""; public string WHRID = ""; public string WHSJ = ""; public string XLXHYFC = ""; public string XLGGYFC = ""; public string DYDJYFC = ""; public string XLBZYFC = ""; public string XLYSYFC = ""; } public class JXPZInfo { public string XLJXGZC = ""; public string XLXHYFC = ""; public string XLGGYFC = ""; public string DYDJYFC = ""; public string XLBZYFC = ""; public string XLYSYFC = ""; public string XLXH = ""; public string XLGG = ""; public string DYDJ = ""; public string XLBZ = ""; } public class XLJXJG { public string XLXH = ""; public string XLGG = ""; public string DYDJ = ""; public string XLBZ = ""; } public class Result { public bool success = true; public string msg = ""; } public class CodeClass { public string code = ""; public string message = ""; } public class XJDInfo { public string userName = ""; public List quoteList = new List(); } public class XJDMX { public string XLWBBJDMX_DRHH = ""; public string XLWBBJDMX_XLXHID = ""; public string XLWBBJDMX_XLGGID = ""; public string XLWBBJDMX_DYDJID = ""; public string XLWBBJDMX_XLBZID = ""; public string XLWBBJDMX_JLDW = ""; public string XLWBBJDMX_YS = ""; public string XLWBBJDMX_BJDH = ""; public string YSCP = ""; public double XLWBBJDMX_BJSL = 0; } public class ResultData { private string _code = string.Empty; public string code { get { return _code; } set { _code = value; } } private string _msg = string.Empty; public string msg { get { return _msg; } set { _msg = value; } } private string _data = string.Empty; public string data { get { return _data; } set { _data = value; } } } #endregion public class XLBJJXDRService { #region 服务方法 [AjaxMethod(AuthRequried = false)] public static List GetXLJXMXList(string XLJXDJ, string XLJXDH, string sXLJXGZXH, string sDCZT, string sBJCP, string sXLXH, string sXLGG, string sXLBZ, string sDYDJID, string sQSYS) { TDatabase dberp = null; try { dberp = TContextDatabases.GetDatabase("DBERP"); List resultList = new List(); // 构建查询语句 TSQL sSQL = new TSQL(dberp); sSQL.Clear(); sSQL.Add(@"SELECT XLJXMX_XLJXDJ,XLJXMX_XLJXDH,XLJXMX_XLJXMXH,XLJXMX_XLBSC,XLJXMX_XLJXGZXH,XLJXMX_JXXLXHID,XLJXMX_XLXHID, XLJXMX_JXXLGGID,XLJXMX_XLGGID,XLJXMX_JXDYDJID,XLJXMX_DYDJID,XLJXMX_XLBZID,XLJXMX_JXXLBZID,XLJXMX_XLYSID, XLJXMX_JXXLYSID,XLJXMX_WHR,XLJXMX_WHRID,XLJXMX_WHSJ,XLJXMX_DCZT,XLJXMX_JLDW,XLJXMX_SL,XLJXMX_FBH,XLJXMX_JSGFSID FROM XLJXMX WHERE XLJXMX_XLJXDJ = :XLJXDJ AND XLJXMX_XLJXDH = :XLJXDH "); if (!string.IsNullOrEmpty(sDCZT.Trim())) { sSQL.Add(" AND XLJXMX_DCZT = :DCZT "); sSQL.ParamByName("DCZT").Value = sDCZT; } if (sXLJXGZXH=="-1") sSQL.Add(" AND XLJXMX_XLJXGZXH>0 "); else if (sXLJXGZXH != "-2") { sSQL.Add(" AND XLJXMX_XLJXGZXH = :XLJXGZXH"); sSQL.ParamByName("XLJXGZXH").Value = sXLJXGZXH; } if (!string.IsNullOrEmpty(sBJCP)) { sSQL.Add(" AND XLJXMX_XLBSC like :BJCP "); sSQL.ParamByName("BJCP").Value ="%"+sBJCP+"%"; } if (!string.IsNullOrEmpty(sXLXH)) { sSQL.Add(" AND XLJXMX_JXXLXHID like :XLXH "); sSQL.ParamByName("XLXH").Value = "%" + sXLXH + "%"; } if (!string.IsNullOrEmpty(sXLGG)) { sSQL.Add(" AND XLJXMX_JXXLGGID like :XLGG "); sSQL.ParamByName("XLGG").Value = "%" + sXLGG + "%"; } if (!string.IsNullOrEmpty(sXLBZ)) { if (sXLBZ == "空") { sSQL.Add(" AND isnull(XLJXMX_JXXLBZID,' ') =' ' "); } else { sSQL.Add(" AND XLJXMX_JXXLBZID = :XLBZ "); sSQL.ParamByName("XLBZ").Value = sXLBZ; } } if (!string.IsNullOrEmpty(sDYDJID)) { if (sDYDJID == "空") { sSQL.Add(" AND isnull(XLJXMX_JXDYDJID,' ') =' ' "); } else { sSQL.Add(" AND XLJXMX_JXDYDJID = :DYDJ "); sSQL.ParamByName("DYDJ").Value = sDYDJID; } } AppendMissingElementFilter(sSQL, sQSYS); // 添加查询参数 sSQL.ParamByName("XLJXDJ").Value = XLJXDJ; sSQL.ParamByName("XLJXDH").Value = XLJXDH; sSQL.Add(" order by len(XLJXMX_XLJXMXH),XLJXMX_XLJXMXH"); DataSet ds = dberp.OpenDataSet(sSQL); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { foreach (DataRow row in ds.Tables[0].Rows) { // 使用传统赋值方式(避免对象初始化器) XLJXMX item = new XLJXMX(); item.XLJXDJ = SafeTrim(row["XLJXMX_XLJXDJ"]); item.XLJXDH = SafeTrim(row["XLJXMX_XLJXDH"]); item.XLJXMXH = SafeTrim(row["XLJXMX_XLJXMXH"]); item.XLBSC = SafeTrim(row["XLJXMX_XLBSC"]); item.XLJXGZXH = SafeTrim(row["XLJXMX_XLJXGZXH"]); item.JXXLXHID = SafeTrim(row["XLJXMX_JXXLXHID"]); item.XLXHID = SafeTrim(row["XLJXMX_XLXHID"]); item.JXXLGGID = SafeTrim(row["XLJXMX_JXXLGGID"]); item.XLGGID = SafeTrim(row["XLJXMX_XLGGID"]); item.JXDYDJID = SafeTrim(row["XLJXMX_JXDYDJID"]); item.DYDJID = SafeTrim(row["XLJXMX_DYDJID"]); item.XLBZID = SafeTrim(row["XLJXMX_XLBZID"]); item.JXXLBZID = SafeTrim(row["XLJXMX_JXXLBZID"]); item.XLYSID = SafeTrim(row["XLJXMX_XLYSID"]); item.JXXLYSID = SafeTrim(row["XLJXMX_JXXLYSID"]); item.WHR = SafeTrim(row["XLJXMX_WHR"]); item.WHRID = SafeTrim(row["XLJXMX_WHRID"]); item.WHSJ = SafeTrim(row["XLJXMX_WHSJ"]); item.DCZT = SafeTrim(row["XLJXMX_DCZT"]); item.JLDW = SafeTrim(row["XLJXMX_JLDW"]); item.SL = SafeTrim(row["XLJXMX_SL"]); item.FBH = SafeTrim(row["XLJXMX_FBH"]); item.JSGFID = SafeTrim(row["XLJXMX_JSGFSID"]); if (!string.IsNullOrEmpty(item.XLXHID) && !string.IsNullOrEmpty(item.JXXLXHID)) { if (item.XLXHID != item.JXXLXHID) item.DX += "型号,"; } if (!string.IsNullOrEmpty(item.XLGGID) && !string.IsNullOrEmpty(item.JXXLGGID)) { if (item.XLGGID != item.JXXLGGID) item.DX += "规格,"; } if (!string.IsNullOrEmpty(item.DYDJID) && !string.IsNullOrEmpty(item.JXDYDJID)) { if (item.DYDJID != item.JXDYDJID) item.DX += "电压等级,"; } item.DX = item.DX.TrimEnd(','); resultList.Add(item); } } return resultList; } catch (Exception ex) { return new List(); // 返回空集合 } finally { } } [AjaxMethod(AuthRequried = false)] public static Result DeleteXLJXMX(string XLJXDJ, string XLJXDH, string sXLJXGZXH, string sDCZT, string sBJCP, string sXLXH, string sXLGG, string sXLBZ, string sDYDJID, string sQSYS) { TDatabase dberp = TContextDatabases.GetDatabase("DBERP"); List resultList = new List(); // 构建查询语句 TSQL sSQL = new TSQL(dberp); sSQL.Add(@"DELETE FROM XLJXMX WHERE XLJXMX_XLJXDJ = :XLJXDJ AND XLJXMX_XLJXDH = :XLJXDH"); if (!string.IsNullOrEmpty(sDCZT.Trim())) { sSQL.Add(" AND XLJXMX_DCZT = :DCZT "); sSQL.ParamByName("DCZT").Value = sDCZT; } if (sXLJXGZXH == "-1") sSQL.Add(" AND XLJXMX_XLJXGZXH>0 "); else if (sXLJXGZXH != "-2") { sSQL.Add(" AND XLJXMX_XLJXGZXH = :XLJXGZXH"); sSQL.ParamByName("XLJXGZXH").Value = sXLJXGZXH; } if (!string.IsNullOrEmpty(sBJCP)) { sSQL.Add(" AND XLJXMX_XLBSC like :BJCP "); sSQL.ParamByName("BJCP").Value = "%" + sBJCP + "%"; } if (!string.IsNullOrEmpty(sXLXH)) { sSQL.Add(" AND XLJXMX_JXXLXHID like :XLXH "); sSQL.ParamByName("XLXH").Value = "%" + sXLXH + "%"; } if (!string.IsNullOrEmpty(sXLGG)) { sSQL.Add(" AND XLJXMX_JXXLGGID like :XLGG "); sSQL.ParamByName("XLGG").Value = "%" + sXLGG + "%"; } if (!string.IsNullOrEmpty(sXLBZ)) { sSQL.Add(" AND XLJXMX_JXXLBZID = :XLBZ "); sSQL.ParamByName("XLBZ").Value = sXLBZ; } if (!string.IsNullOrEmpty(sDYDJID)) { sSQL.Add(" AND XLJXMX_JXDYDJID = :DYDJ "); sSQL.ParamByName("DYDJ").Value = sDYDJID; } AppendMissingElementFilter(sSQL, sQSYS); // 添加查询参数 sSQL.ParamByName("XLJXDJ").Value = XLJXDJ; sSQL.ParamByName("XLJXDH").Value = XLJXDH; dberp.ExecSQL(sSQL); Result res = new Result(); res.success = true; return res; } [AjaxMethod(AuthRequried = false)] public static List GetXLJXGZList(string XLJXDJ, string XLJXDH) { TDatabase dberp = null; try { dberp = TContextDatabases.GetDatabase("DBERP"); List resultList = new List(); // 构建查询语句 TSQL sSQL = new TSQL(dberp); sSQL.Clear(); sSQL.Add(@"SELECT XLJXGZ_XLJXDJ, XLJXGZ_XLJXDH, XLJXGZ_XLJXGZXH, XLJXGZ_XLJXGZC, XLJXGZ_WHRID, XLJXGZ_WHR, XLJXGZ_WHSJ, XLJXGZ_XLXHYFC, XLJXGZ_XLGGYFC, XLJXGZ_DYDJYFC, XLJXGZ_XLBZYFC, XLJXGZ_XLYSYFC FROM XLJXGZ WHERE XLJXGZ_XLJXDJ = :XLJXDJ AND (XLJXGZ_XLJXDH = :XLJXDH )"); // 添加查询参数 sSQL.ParamByName("XLJXDJ").Value = XLJXDJ; sSQL.ParamByName("XLJXDH").Value = XLJXDH; DataSet ds = dberp.OpenDataSet(sSQL); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { foreach (DataRow row in ds.Tables[0].Rows) { // 使用传统赋值方式(避免对象初始化器) XLJXGZ item = new XLJXGZ(); item.XLJXDJ = SafeTrim(row["XLJXGZ_XLJXDJ"]); item.XLJXDH = SafeTrim(row["XLJXGZ_XLJXDH"]); item.XLJXGZXH = SafeTrim(row["XLJXGZ_XLJXGZXH"]); item.XLJXGZC = SafeTrim(row["XLJXGZ_XLJXGZC"]); item.WHRID = SafeTrim(row["XLJXGZ_WHRID"]); item.WHR = SafeTrim(row["XLJXGZ_WHR"]); item.WHSJ = SafeTrim(row["XLJXGZ_WHSJ"]); item.XLXHYFC = SafeTrim(row["XLJXGZ_XLXHYFC"]); item.XLGGYFC = SafeTrim(row["XLJXGZ_XLGGYFC"]); item.DYDJYFC = SafeTrim(row["XLJXGZ_DYDJYFC"]); item.XLBZYFC = SafeTrim(row["XLJXGZ_XLBZYFC"]); item.XLYSYFC = SafeTrim(row["XLJXGZ_XLYSYFC"]); resultList.Add(item); } } return resultList; } catch (Exception ex) { return new List(); // 返回空集合 } finally { } } [AjaxMethod(AuthRequried = false)] public static List GetTYXLJXGZList(string XLJXDJ, string XLJXDH) { TDatabase dberp = null; try { dberp = TContextDatabases.GetDatabase("DBERP"); List resultList = new List(); // 构建查询语句 TSQL sSQL = new TSQL(dberp); sSQL.Clear(); sSQL.Add(@"SELECT XLJXGZ_XLJXDJ, XLJXGZ_XLJXDH, XLJXGZ_XLJXGZXH, XLJXGZ_XLJXGZC, XLJXGZ_WHRID, XLJXGZ_WHR, XLJXGZ_WHSJ, XLJXGZ_XLXHYFC, XLJXGZ_XLGGYFC, XLJXGZ_DYDJYFC, XLJXGZ_XLBZYFC, XLJXGZ_XLYSYFC FROM XLJXGZ WHERE XLJXGZ_XLJXDJ = :XLJXDJ AND (XLJXGZ_XLJXDH = :XLJXDH )"); // 添加查询参数 sSQL.ParamByName("XLJXDJ").Value = XLJXDJ; sSQL.ParamByName("XLJXDH").Value = ' '; DataSet ds = dberp.OpenDataSet(sSQL); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { foreach (DataRow row in ds.Tables[0].Rows) { // 使用传统赋值方式(避免对象初始化器) XLJXGZ item = new XLJXGZ(); item.XLJXDJ = SafeTrim(row["XLJXGZ_XLJXDJ"]); item.XLJXDH = SafeTrim(row["XLJXGZ_XLJXDH"]); item.XLJXGZXH = SafeTrim(row["XLJXGZ_XLJXGZXH"]); item.XLJXGZC = SafeTrim(row["XLJXGZ_XLJXGZC"]); item.WHRID = SafeTrim(row["XLJXGZ_WHRID"]); item.WHR = SafeTrim(row["XLJXGZ_WHR"]); item.WHSJ = SafeTrim(row["XLJXGZ_WHSJ"]); item.XLXHYFC = SafeTrim(row["XLJXGZ_XLXHYFC"]); item.XLGGYFC = SafeTrim(row["XLJXGZ_XLGGYFC"]); item.DYDJYFC = SafeTrim(row["XLJXGZ_DYDJYFC"]); item.XLBZYFC = SafeTrim(row["XLJXGZ_XLBZYFC"]); item.XLYSYFC = SafeTrim(row["XLJXGZ_XLYSYFC"]); resultList.Add(item); } } return resultList; } catch (Exception ex) { return new List(); // 返回空集合 } finally { } } [AjaxMethod(AuthRequried = false)] public Result DeleteXLJXGZ(string XLJXDH, string sXLJXGZXH) { Result result = new Result(); TDatabase dberp = dberp = TContextDatabases.GetDatabase("DBERP"); TSQL sSQL = new TSQL(dberp); sSQL.Clear(); sSQL.Add("delete from XLJXGZ where XLJXGZ_XLJXDJ = :XLJXDJ and XLJXGZ_XLJXDH = :XLJXDH and XLJXGZ_XLJXGZXH = :XLJXGZXH "); sSQL.ParamByName("XLJXDJ").Value = "XSBJ"; sSQL.ParamByName("XLJXDH").Value = XLJXDH; sSQL.ParamByName("XLJXGZXH").Value = sXLJXGZXH; dberp.ExecSQL(sSQL); result.success = true; return result; } [AjaxMethod(AuthRequried = false)] public static XLJXGZ GetXLJXGZ(string XLJXDJ, string XLJXDH, string XLJXGZXH) { TDatabase dberp = null; try { dberp = TContextDatabases.GetDatabase("DBERP"); List resultList = new List(); // 构建查询语句 TSQL sSQL = new TSQL(dberp); sSQL.Add(@"SELECT XLJXGZ_XLJXDJ, XLJXGZ_XLJXDH, XLJXGZ_XLJXGZXH, XLJXGZ_XLJXGZC, XLJXGZ_WHRID, XLJXGZ_WHR, XLJXGZ_WHSJ, XLJXGZ_XLXHYFC, XLJXGZ_XLGGYFC, XLJXGZ_DYDJYFC, XLJXGZ_XLBZYFC, XLJXGZ_XLYSYFC FROM XLJXGZ WHERE XLJXGZ_XLJXDJ = :XLJXDJ AND XLJXGZ_XLJXDH = :XLJXDH AND XLJXGZ_XLJXGZXH = :XLJXGZXH "); // 添加查询参数 sSQL.ParamByName("XLJXDJ").Value = XLJXDJ; sSQL.ParamByName("XLJXDH").Value = XLJXDH; sSQL.ParamByName("XLJXGZXH").Value = XLJXGZXH; DataSet ds = dberp.OpenDataSet(sSQL); XLJXGZ item = new XLJXGZ(); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { foreach (DataRow row in ds.Tables[0].Rows) { // 使用传统赋值方式(避免对象初始化器) item.XLJXDJ = SafeTrim(row["XLJXGZ_XLJXDJ"]); item.XLJXDH = SafeTrim(row["XLJXGZ_XLJXDH"]); item.XLJXGZXH = SafeTrim(row["XLJXGZ_XLJXGZXH"]); item.XLJXGZC = SafeTrim(row["XLJXGZ_XLJXGZC"]); item.WHRID = SafeTrim(row["XLJXGZ_WHRID"]); item.WHR = SafeTrim(row["XLJXGZ_WHR"]); item.WHSJ = SafeTrim(row["XLJXGZ_WHSJ"]); item.XLXHYFC = SafeTrim(row["XLJXGZ_XLXHYFC"]); item.XLGGYFC = SafeTrim(row["XLJXGZ_XLGGYFC"]); item.DYDJYFC = SafeTrim(row["XLJXGZ_DYDJYFC"]); item.XLBZYFC = SafeTrim(row["XLJXGZ_XLBZYFC"]); item.XLYSYFC = SafeTrim(row["XLJXGZ_XLYSYFC"]); } } else { sSQL.ParamByName("XLJXDJ").Value = XLJXDJ; sSQL.ParamByName("XLJXDH").Value = ' '; sSQL.ParamByName("XLJXGZXH").Value = XLJXGZXH; ds = dberp.OpenDataSet(sSQL); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { foreach (DataRow row in ds.Tables[0].Rows) { // 使用传统赋值方式(避免对象初始化器) item.XLJXDJ = SafeTrim(row["XLJXGZ_XLJXDJ"]); item.XLJXDH = SafeTrim(row["XLJXGZ_XLJXDH"]); item.XLJXGZXH = SafeTrim(row["XLJXGZ_XLJXGZXH"]); item.XLJXGZC = SafeTrim(row["XLJXGZ_XLJXGZC"]); item.WHRID = SafeTrim(row["XLJXGZ_WHRID"]); item.WHR = SafeTrim(row["XLJXGZ_WHR"]); item.WHSJ = SafeTrim(row["XLJXGZ_WHSJ"]); item.XLXHYFC = SafeTrim(row["XLJXGZ_XLXHYFC"]); item.XLGGYFC = SafeTrim(row["XLJXGZ_XLGGYFC"]); item.DYDJYFC = SafeTrim(row["XLJXGZ_DYDJYFC"]); item.XLBZYFC = SafeTrim(row["XLJXGZ_XLBZYFC"]); item.XLYSYFC = SafeTrim(row["XLJXGZ_XLYSYFC"]); } } } return item; } catch (Exception ex) { return new XLJXGZ(); // 返回空集合 } finally { } } [AjaxMethod(AuthRequried = false)] public static Result InsertXLJXMX(XLJXMX item) { CMISproSession tSession = CMISproSessionManager.GetCurrentSession(); TDatabase dberp = null; Result result = new Result(); try { dberp = TContextDatabases.GetDatabase("DBERP"); dberp.BeginTrans(); // 开启事务 // 构建插入语句 TSQL sSQL = new TSQL(dberp); sSQL.Add(@"INSERT INTO XLJXMX (XLJXMX_XLJXDJ,XLJXMX_XLJXDH,XLJXMX_XLJXMXH,XLJXMX_XLBSC,XLJXMX_XLJXGZXH, XLJXMX_JXXLXHID,XLJXMX_XLXHID,XLJXMX_JXXLGGID,XLJXMX_XLGGID,XLJXMX_JXDYDJID, XLJXMX_DYDJID,XLJXMX_XLBZID,XLJXMX_JXXLBZID,XLJXMX_XLYSID,XLJXMX_JXXLYSID,XLJXMX_WHR,XLJXMX_WHRID, XLJXMX_WHSJ,XLJXMX_DCZT,XLJXMX_JLDW,XLJXMX_SL,XLJXMX_FBH,XLJXMX_JSGFSID ) VALUES (:XLJXDJ,:XLJXDH,:XLJXMXH,:XLBSC,:XLJXGZXH,:JXXLXHID,:XLXHID,:JXXLGGID,:XLGGID, :JXDYDJID,:DYDJID,:XLBZID,:JXXLBZID,:XLYSID,:JXXLYSID,:WHR,:WHRID,:WHSJ,:DCZT,:JLDW,:SL,:FBH,:JSGFSID)"); // 添加参数(确保空值转换为DBNull) sSQL.ParamByName("XLJXDJ").Value = item.XLJXDJ; sSQL.ParamByName("XLJXDH").Value = item.XLJXDH; sSQL.ParamByName("XLJXMXH").Value = GetNextXLJXMXH(dberp, item.XLJXDH); sSQL.ParamByName("XLBSC").Value = GetSafeValue(item.XLBSC); sSQL.ParamByName("XLJXGZXH").Value = 0; sSQL.ParamByName("JXXLXHID").Value = GetSafeValue(item.JXXLXHID); sSQL.ParamByName("XLXHID").Value = GetSafeValue(item.XLXHID); sSQL.ParamByName("JXXLGGID").Value = GetSafeValue(item.JXXLGGID); sSQL.ParamByName("XLGGID").Value = GetSafeValue(item.XLGGID); sSQL.ParamByName("JXDYDJID").Value = GetSafeValue(item.JXDYDJID); sSQL.ParamByName("DYDJID").Value = GetSafeValue(item.DYDJID); sSQL.ParamByName("XLBZID").Value = GetSafeValue(item.XLBZID); sSQL.ParamByName("JXXLBZID").Value = GetSafeValue(item.JXXLBZID); sSQL.ParamByName("XLYSID").Value = GetSafeValue(item.XLYSID); sSQL.ParamByName("JXXLYSID").Value = GetSafeValue(item.JXXLYSID); sSQL.ParamByName("WHR").Value = tSession.UserName; sSQL.ParamByName("WHRID").Value =tSession.UserId; sSQL.ParamByName("WHSJ").Value = DateTime.Now; sSQL.ParamByName("DCZT").Value = "N"; sSQL.ParamByName("JLDW").Value = item.JLDW; sSQL.ParamByName("SL").Value = CMISproConvert.StrToFloat(item.SL); sSQL.ParamByName("FBH").Value = item.FBH; sSQL.ParamByName("JSGFSID").Value = item.JSGFID; // 执行插入 int affectedRows = dberp.ExecSQL(sSQL); dberp.CommitTrans(); result.success = true; result.msg = sSQL.ParamByName("XLJXDH").Value.ToString(); return result; } catch (Exception ex) { // 发生异常时回滚事务 if (dberp != null && dberp.InTransaction) { dberp.RollbackTrans(); } // 记录错误日志 result.success = false; result.msg = "数据插入失败: " + ex.Message; return result; } finally { } } [AjaxMethod(AuthRequried = false)] public static Result InsertXLJXMXList(List items) { CMISproSession tSession = CMISproSessionManager.GetCurrentSession(); TDatabase dberp = TContextDatabases.GetDatabase("DBERP"); TSQL sSQL = new TSQL(dberp); Result result = new Result(); try { dberp.BeginTrans(); // 开启事务 // 创建字典用于按XLJXDH分组 Dictionary> groupedItems = new Dictionary>(); // 按XLJXDH分组 foreach (XLJXMX item in items) { string key = item.XLJXDH; if (!groupedItems.ContainsKey(key)) { groupedItems[key] = new List(); } groupedItems[key].Add(item); } // 处理每个分组 foreach (string key in groupedItems.Keys) { List group = groupedItems[key]; int sequence = GetNextXLJXMXH(dberp, key); // 处理组内每个项目 foreach (XLJXMX item in group) { // 构建插入语句 sSQL.Clear(); sSQL.Add(@"INSERT INTO XLJXMX (XLJXMX_XLJXDJ,XLJXMX_XLJXDH,XLJXMX_XLJXMXH,XLJXMX_XLBSC,XLJXMX_XLJXGZXH, XLJXMX_JXXLXHID,XLJXMX_XLXHID,XLJXMX_JXXLGGID,XLJXMX_XLGGID,XLJXMX_JXDYDJID, XLJXMX_DYDJID,XLJXMX_XLBZID,XLJXMX_JXXLBZID,XLJXMX_XLYSID,XLJXMX_JXXLYSID, XLJXMX_WHR,XLJXMX_WHRID,XLJXMX_WHSJ,XLJXMX_DCZT,XLJXMX_JLDW,XLJXMX_SL,XLJXMX_FBH,XLJXMX_JSGFSID ) VALUES (:XLJXDJ,:XLJXDH,:XLJXMXH,:XLBSC,:XLJXGZXH,:JXXLXHID,:XLXHID, :JXXLGGID,:XLGGID,:JXDYDJID,:DYDJID,:XLBZID,:JXXLBZID,:XLYSID, :JXXLYSID,:WHR,:WHRID,:WHSJ,:DCZT,:JLDW,:SL,:FBH,:JSGFSID)"); // 添加参数 sSQL.ParamByName("XLJXDJ").Value = item.XLJXDJ; sSQL.ParamByName("XLJXDH").Value = item.XLJXDH; sSQL.ParamByName("XLJXMXH").Value = sequence++; sSQL.ParamByName("XLBSC").Value = GetSafeValue(item.XLBSC); sSQL.ParamByName("XLJXGZXH").Value = 0; sSQL.ParamByName("JXXLXHID").Value = GetSafeValue(item.JXXLXHID); sSQL.ParamByName("XLXHID").Value = GetSafeValue(item.XLXHID); sSQL.ParamByName("JXXLGGID").Value = GetSafeValue(item.JXXLGGID); sSQL.ParamByName("XLGGID").Value = GetSafeValue(item.XLGGID); sSQL.ParamByName("JXDYDJID").Value = GetSafeValue(item.JXDYDJID); sSQL.ParamByName("DYDJID").Value = GetSafeValue(item.DYDJID); sSQL.ParamByName("XLBZID").Value = GetSafeValue(item.XLBZID); sSQL.ParamByName("JXXLBZID").Value = GetSafeValue(item.JXXLBZID); sSQL.ParamByName("XLYSID").Value = GetSafeValue(item.XLYSID); sSQL.ParamByName("JXXLYSID").Value = GetSafeValue(item.JXXLYSID); sSQL.ParamByName("WHR").Value = tSession.UserName; sSQL.ParamByName("WHRID").Value = tSession.UserId; sSQL.ParamByName("WHSJ").Value = DateTime.Now; sSQL.ParamByName("DCZT").Value = "N"; sSQL.ParamByName("JLDW").Value = item.JLDW; sSQL.ParamByName("SL").Value =CMISproConvert.StrToFloat( item.SL); sSQL.ParamByName("FBH").Value = item.FBH; sSQL.ParamByName("JSGFSID").Value = item.JSGFID; // 执行插入 dberp.ExecSQL(sSQL); } } dberp.CommitTrans(); result.success = true; result.msg = "成功插入" + items.Count + "条数据"; return result; } catch (Exception ex) { // 发生异常时回滚事务 if (dberp != null && dberp.InTransaction) { dberp.RollbackTrans(); } result.success = false; result.msg = "数据批量插入失败: " + ex.Message; return result; } finally { } } [AjaxMethod(AuthRequried = false)] public static Result UpdateXLJXMXList(List items) { CMISproSession tSession = CMISproSessionManager.GetCurrentSession(); TDatabase dberp = TContextDatabases.GetDatabase("DBERP"); TSQL sSQL = new TSQL(dberp); Result result = new Result(); try { dberp.BeginTrans(); // 开启事务 // 创建字典用于按XLJXDH分组 Dictionary> groupedItems = new Dictionary>(); // 按XLJXDH分组 foreach (XLJXMX item in items) { string key = item.XLJXDH; if (!groupedItems.ContainsKey(key)) { groupedItems[key] = new List(); } groupedItems[key].Add(item); } // 处理每个分组 foreach (string key in groupedItems.Keys) { List group = groupedItems[key]; // 处理组内每个项目 foreach (XLJXMX item in group) { // 构建插入语句 sSQL.Clear(); sSQL.Add(@"update XLJXMX set XLJXMX_JXXLXHID=:JXXLXHID,XLJXMX_JXXLGGID=:JXXLGGID,XLJXMX_JXXLBZID=:JXXLBZID,XLJXMX_JXDYDJID=:JXDYDJID where XLJXMX_XLJXDJ=:XLJXDJ and XLJXMX_XLJXDH=:XLJXDH and XLJXMX_XLJXMXH=:XLJXMXH"); // 添加参数 sSQL.ParamByName("XLJXDJ").Value = item.XLJXDJ; sSQL.ParamByName("XLJXDH").Value = item.XLJXDH; sSQL.ParamByName("XLJXMXH").Value = item.XLJXMXH; sSQL.ParamByName("JXXLXHID").Value = GetSafeValue(item.JXXLXHID); sSQL.ParamByName("JXXLGGID").Value = GetSafeValue(item.JXXLGGID); sSQL.ParamByName("JXDYDJID").Value = GetSafeValue(item.JXDYDJID); sSQL.ParamByName("JXXLBZID").Value = GetSafeValue(item.JXXLBZID); // 执行插入 dberp.ExecSQL(sSQL); } } dberp.CommitTrans(); result.success = true; result.msg = "成功更新" + items.Count + "条数据"; return result; } catch (Exception ex) { // 发生异常时回滚事务 if (dberp != null && dberp.InTransaction) { dberp.RollbackTrans(); } result.success = false; result.msg = "数据批量更新失败: " + ex.Message; return result; } finally { } } #region 解析公共核心 /// /// 首次成功解析时的回调委托,返回要应用的规则序号 /// private delegate string OnFirstSuccessfulParseDelegate(); /// /// 加载等效替换规则 /// private static DataSet LoadReplaceRules(TDatabase dberp) { TSQL sSQL = new TSQL(dberp); sSQL.Clear(); sSQL.Add("select XLXSBJDXTHDZQD_THLX,XLXSBJDXTHDZQD_THQXHZF,XLXSBJDXTHDZQD_THHXHZF,XLXSBJDXTHDZQD_THQGGZF,XLXSBJDXTHDZQD_THHGGZF,"); sSQL.Add(" XLXSBJDXTHDZQD_THQDYDJZF,XLXSBJDXTHDZQD_THHDYDJZF from XLXSBJDXTHDZQD order by XLXSBJDXTHDZQD_THYXJ desc,XLXSBJDXTHDZQD_XH "); return dberp.OpenDataSet(sSQL); } /// /// 根据 XLXSBJDXTHDZQD 配置对解析结果进行等效替换 /// private static void ApplyReplaceRules( DataSet dsTHGZ, ref string sDXHXLXH, ref string sDXHXLGG, ref string sDXHXLBZ, ref string sDXHDYDJ) { if (dsTHGZ == null || dsTHGZ.Tables.Count == 0 || dsTHGZ.Tables[0].Rows.Count == 0) return; bool bXHGGJQTH = false; bool bXHZZDYDJJQTHDYDJ = false; bool bXHDYDJJQTH = false; for (int j = 0; j < dsTHGZ.Tables[0].Rows.Count; j++) { string sTHLX = dsTHGZ.Tables[0].Rows[j]["XLXSBJDXTHDZQD_THLX"].ToString().Trim(); string sTHQXHZF = dsTHGZ.Tables[0].Rows[j]["XLXSBJDXTHDZQD_THQXHZF"].ToString().Trim(); string sTHHXHZF = dsTHGZ.Tables[0].Rows[j]["XLXSBJDXTHDZQD_THHXHZF"].ToString().Trim(); string sTHQGGZF = dsTHGZ.Tables[0].Rows[j]["XLXSBJDXTHDZQD_THQGGZF"].ToString().Trim(); string sTHHGGZF = dsTHGZ.Tables[0].Rows[j]["XLXSBJDXTHDZQD_THHGGZF"].ToString().Trim(); string sTHQDYDJZF = dsTHGZ.Tables[0].Rows[j]["XLXSBJDXTHDZQD_THQDYDJZF"].ToString().Trim(); string sTHHDYDJZF = dsTHGZ.Tables[0].Rows[j]["XLXSBJDXTHDZQD_THHDYDJZF"].ToString().Trim(); if (sTHLX.Equals("XHJQTH") && !bXHGGJQTH) { if (sDXHXLXH.Equals(sTHQXHZF)) { sDXHXLXH = sTHHXHZF; break; } } else if (sTHLX.Equals("XHZZTH") && !bXHGGJQTH) { if (Regex.IsMatch(sDXHXLXH, sTHQXHZF)) { sDXHXLXH = Regex.Replace(sDXHXLXH, sTHQXHZF, sTHHXHZF); break; } } else if (sTHLX.Equals("DYDJJQTH") && !bXHZZDYDJJQTHDYDJ && !bXHDYDJJQTH) { if (sDXHDYDJ.Equals(sTHQDYDJZF)) { sDXHDYDJ = sTHHDYDJZF; } } else if (sTHLX.Equals("XHZZDYDJJQTHDYDJ") && !bXHDYDJJQTH) { if (Regex.IsMatch(sDXHXLXH, sTHQXHZF) && sDXHDYDJ == sTHQDYDJZF) { sDXHDYDJ = sTHHDYDJZF; bXHZZDYDJJQTHDYDJ = true; } } else if (sTHLX.Equals("XHGGJQTH")) { if (sDXHXLXH == sTHQXHZF && sDXHXLGG == sTHQGGZF) { sDXHXLXH = sTHHXHZF; sDXHXLGG = sTHHGGZF; bXHGGJQTH = true; } } else if (sTHLX.Equals("XHGGDYDJJQTH")) { if (sDXHXLXH == sTHQXHZF && sDXHXLGG == sTHQGGZF && sDXHDYDJ == sTHQDYDJZF) { sDXHXLXH = sTHHXHZF; sDXHXLGG = sTHHGGZF; sDXHDYDJ = sTHHDYDJZF; break; } } else if (sTHLX.Equals("XHDYDJJQTH")) { if (sDXHXLXH == sTHQXHZF && sDXHDYDJ == sTHQDYDJZF) { sDXHXLXH = sTHHXHZF; sDXHDYDJ = sTHHDYDJZF; bXHDYDJJQTH = true; break; } } } } /// /// 解析单条产品字符串,返回解析结果及等效替换后的结果 /// private static bool TryParseProduct( string sXLBSC, XLJXGZ rule, DataSet dsTHGZ, out string aXLXH, out string aXLGG, out string aDYDJ, out string aXLBZ, out string aXLYS, out string sDXHXLXH, out string sDXHXLGG, out string sDXHDYDJ, out string sDXHXLBZ) { aXLXH = aXLGG = aDYDJ = aXLBZ = aXLYS = string.Empty; sDXHXLXH = sDXHXLGG = sDXHDYDJ = sDXHXLBZ = string.Empty; string sXLJXGZ = rule.XLJXGZC; string sYFXH = rule.XLXHYFC.Replace("型号码", "A").Replace("前缀码", "B").Replace("后缀码", "C"); string sYFGG = rule.XLGGYFC.Replace("截面", "A").Replace("芯数", "B").Replace("线对数", "C").Replace("线组数", "D"); string sYFDYDJ = rule.DYDJYFC.Replace("相电压", "A").Replace("线电压", "B").Replace("电压单位", "C").Replace("线组数", "D"); string sYFBZ = rule.XLBZYFC.Replace("标准名", "A"); TXLJXGZ xljxgz = new TXLJXGZ(); if (!xljxgz.LoadGZ(sXLJXGZ, sYFXH, sYFGG, sYFDYDJ, sYFBZ, "")) return false; if (!xljxgz.XLYSJX(sXLBSC, out aXLXH, out aXLGG, out aDYDJ, out aXLBZ, out aXLYS)) return false; if (string.IsNullOrEmpty(aXLXH.Trim().Replace("-", "").Replace("/", "").Replace("(", "").Replace(")", ""))) return false; sDXHXLXH = aXLXH; sDXHXLGG = aXLGG; sDXHXLBZ = aXLBZ; sDXHDYDJ = aDYDJ; ApplyReplaceRules(dsTHGZ, ref sDXHXLXH, ref sDXHXLGG, ref sDXHXLBZ, ref sDXHDYDJ); return true; } /// /// 将解析结果更新到 XLJXMX 单条记录 /// private static void UpdateXLJXMXWithParseResult( TDatabase dberp, TSQL sSQL, string sXLJXDJ, string sXLJXDH, string sXLJXMXH, string sXLJXGZXH, string aXLXH, string aXLGG, string aDYDJ, string aXLBZ, string aXLYS, string sDXHXLXH, string sDXHXLGG, string sDXHDYDJ, string sDXHXLBZ) { sSQL.Clear(); sSQL.Add("UPDATE XLJXMX SET "); sSQL.Add(" XLJXMX_XLJXGZXH=:pXLJXGZXH, "); sSQL.Add(" XLJXMX_XLXHID=:pXLXHID, "); sSQL.Add(" XLJXMX_DYDJID=:pDYDJID, "); sSQL.Add(" XLJXMX_XLGGID=:pXLGGID, "); sSQL.Add(" XLJXMX_XLBZID=:pXLBZID, "); sSQL.Add(" XLJXMX_XLYSID=:pXLYSID, "); sSQL.Add(" XLJXMX_JXXLXHID=:pDXXLXHID, "); sSQL.Add(" XLJXMX_JXDYDJID=:pDXDYDJID, "); sSQL.Add(" XLJXMX_JXXLGGID=:pDXXLGGID, "); sSQL.Add(" XLJXMX_JXXLBZID=:pDXXLBZID, "); sSQL.Add(" XLJXMX_JXXLYSID=:pXLYSID "); sSQL.Add(" WHERE XLJXMX_XLJXDJ=:pXLJXDJ "); sSQL.Add(" AND XLJXMX_XLJXDH=:pXLJXDH "); sSQL.Add(" AND XLJXMX_XLJXMXH=:pXLJXMXH "); sSQL.ParamByName("pXLJXDJ").Value = sXLJXDJ; sSQL.ParamByName("pXLJXDH").Value = sXLJXDH; sSQL.ParamByName("pXLJXMXH").Value = sXLJXMXH; sSQL.ParamByName("pXLJXGZXH").Value = sXLJXGZXH; sSQL.ParamByName("pXLXHID").Value = aXLXH.Substring(0, Math.Min(aXLXH.Length, 40)); sSQL.ParamByName("pXLGGID").Value = aXLGG.Substring(0, Math.Min(aXLGG.Length, 60)); sSQL.ParamByName("pDYDJID").Value = aDYDJ.Substring(0, Math.Min(aDYDJ.Length, 20)); sSQL.ParamByName("pXLBZID").Value = aXLBZ.Substring(0, Math.Min(aXLBZ.Length, 10)); sSQL.ParamByName("pXLYSID").Value = aXLYS.Substring(0, Math.Min(aXLYS.Length, 10)); sSQL.ParamByName("pDXXLXHID").Value = sDXHXLXH.Substring(0, Math.Min(sDXHXLXH.Length, 40)); sSQL.ParamByName("pDXXLGGID").Value = sDXHXLGG.Substring(0, Math.Min(sDXHXLGG.Length, 60)); sSQL.ParamByName("pDXDYDJID").Value = sDXHDYDJ.Substring(0, Math.Min(sDXHDYDJ.Length, 20)); sSQL.ParamByName("pDXXLBZID").Value = sDXHXLBZ.Substring(0, Math.Min(sDXHXLBZ.Length, 10)); dberp.ExecSQL(sSQL); } /// /// 保存或更新解析规则到 XLJXGZ,返回规则序号 /// private static double SaveOrUpdateRule( TDatabase dberp, TSQL sSQL, XLJXGZ rule, string IsCommon, string sYGZC, CMISproSession tSession) { string space = " "; string sXLJXGZ = rule.XLJXGZC; string sYFXH = rule.XLXHYFC.Replace("型号码", "A").Replace("前缀码", "B").Replace("后缀码", "C"); string sYFGG = rule.XLGGYFC.Replace("截面", "A").Replace("芯数", "B").Replace("线对数", "C").Replace("线组数", "D"); string sYFDYDJ = rule.DYDJYFC.Replace("相电压", "A").Replace("线电压", "B").Replace("电压单位", "C").Replace("线组数", "D"); string sYFBZ = rule.XLBZYFC.Replace("标准名", "A"); double fNewXLJXGZXH = 0; sSQL.Clear(); sSQL.Add("select XLJXGZ_XLJXGZXH from XLJXGZ where XLJXGZ_XLJXDJ=:pXLJXDJ and XLJXGZ_XLJXDH=:pXLJXDH and XLJXGZ_XLJXGZC =:pXLJXGZC "); sSQL.ParamByName("pXLJXDJ").Value = rule.XLJXDJ; if (IsCommon.Equals("Y")) sSQL.ParamByName("pXLJXDH").Value = space; else sSQL.ParamByName("pXLJXDH").Value = rule.XLJXDH; sSQL.ParamByName("pXLJXGZC").Value = sYGZC; DataSet dsXLJXGZ = dberp.OpenDataSet(sSQL); if (dsXLJXGZ.Tables[0].Rows.Count > 0) { fNewXLJXGZXH = CMISproConvert.StrToFloat(dsXLJXGZ.Tables[0].Rows[0][0].ToString().Trim()); sSQL.Clear(); sSQL.Add(" update XLJXGZ "); sSQL.Add(" set XLJXGZ_XLJXGZC =:pXLJXGZC,XLJXGZ_XLXHYFC=:pXLXHYFC, "); sSQL.Add(" XLJXGZ_XLGGYFC=:pXLGGYFC, "); sSQL.Add(" XLJXGZ_DYDJYFC=:pDYDJYFC, "); sSQL.Add(" XLJXGZ_XLBZYFC=:pXLBZYFC, "); sSQL.Add(" XLJXGZ_XLYSYFC=:pXLYSYFC, "); sSQL.Add(" XLJXGZ_WHRID=:pWHRID, "); sSQL.Add(" XLJXGZ_WHR=:pWHR, "); sSQL.Add(" XLJXGZ_WHSJ=:pWHSJ "); sSQL.Add(" where XLJXGZ_XLJXDJ=:pXLJXDJ and XLJXGZ_XLJXDH=:pXLJXDH and XLJXGZ_XLJXGZXH=:pXLJXGZXH "); sSQL.ParamByName("pXLXHYFC").Value = sYFXH; sSQL.ParamByName("pXLGGYFC").Value = sYFGG; sSQL.ParamByName("pDYDJYFC").Value = sYFDYDJ; sSQL.ParamByName("pXLBZYFC").Value = sYFBZ; sSQL.ParamByName("pXLYSYFC").Value = ""; sSQL.ParamByName("pWHRID").Value = tSession.UserId; sSQL.ParamByName("pWHR").Value = tSession.UserName; sSQL.ParamByName("pWHSJ").Value = DateTime.Now; sSQL.ParamByName("pXLJXDJ").Value = rule.XLJXDJ; if (IsCommon.Equals("Y")) sSQL.ParamByName("pXLJXDH").Value = space; else sSQL.ParamByName("pXLJXDH").Value = rule.XLJXDH; sSQL.ParamByName("pXLJXGZXH").Value = fNewXLJXGZXH; sSQL.ParamByName("pXLJXGZC").Value = sXLJXGZ; dberp.ExecSQL(sSQL); } else { if (IsCommon.Equals("Y")) fNewXLJXGZXH = CMISproDataBase.GetMaxXH("DBERP", "XLJXGZ", "XLJXGZ_XLJXGZXH", string.Format("XLJXGZ_XLJXDJ='{0}' and XLJXGZ_XLJXDH ='{1}'", rule.XLJXDJ, space)) + 1; else fNewXLJXGZXH = CMISproDataBase.GetMaxXH("DBERP", "XLJXGZ", "XLJXGZ_XLJXGZXH", string.Format("XLJXGZ_XLJXDJ='{0}' and XLJXGZ_XLJXDH ='{1}'", rule.XLJXDJ, rule.XLJXDH)) + 1; sSQL.Clear(); sSQL.Add(" insert into XLJXGZ "); sSQL.Add(" (XLJXGZ_XLJXDJ,XLJXGZ_XLJXDH,XLJXGZ_XLJXGZXH,XLJXGZ_XLJXGZC,XLJXGZ_WHRID,XLJXGZ_WHR,XLJXGZ_WHSJ, "); sSQL.Add(" XLJXGZ_XLXHYFC,XLJXGZ_XLGGYFC,XLJXGZ_DYDJYFC,XLJXGZ_XLBZYFC,XLJXGZ_XLYSYFC) "); sSQL.Add(" values "); sSQL.Add(" (:pXLJXDJ,:pXLJXDH,:pXLJXGZXH,:pXLJXGZC,:pWHRID,:pWHR,:pWHSJ, "); sSQL.Add(" :pXLXHYFC,:pXLGGYFC,:pDYDJYFC,:pXLBZYFC,:pXLYSYFC) "); sSQL.ParamByName("pXLXHYFC").Value = sYFXH; sSQL.ParamByName("pXLGGYFC").Value = sYFGG; sSQL.ParamByName("pDYDJYFC").Value = sYFDYDJ; sSQL.ParamByName("pXLBZYFC").Value = sYFBZ; sSQL.ParamByName("pXLYSYFC").Value = ""; sSQL.ParamByName("pWHRID").Value = tSession.UserId; sSQL.ParamByName("pWHR").Value = tSession.UserName; sSQL.ParamByName("pWHSJ").Value = DateTime.Now; sSQL.ParamByName("pXLJXDJ").Value = rule.XLJXDJ; if (IsCommon.Equals("Y")) sSQL.ParamByName("pXLJXDH").Value = space; else sSQL.ParamByName("pXLJXDH").Value = rule.XLJXDH; sSQL.ParamByName("pXLJXGZXH").Value = fNewXLJXGZXH; sSQL.ParamByName("pXLJXGZC").Value = sXLJXGZ; dberp.ExecSQL(sSQL); } return fNewXLJXGZXH; } /// /// 维护 XLYFGZ 语法库 /// private static void SaveSyntaxToXLYFGZ( TDatabase dberp, TSQL sSQL, XLJXGZ rule, CMISproSession tSession) { string sBSC = GetBSC(rule.XLJXGZC); string sYFXH = rule.XLXHYFC.Replace("型号码", "A").Replace("前缀码", "B").Replace("后缀码", "C"); string sYFGG = rule.XLGGYFC.Replace("截面", "A").Replace("芯数", "B").Replace("线对数", "C").Replace("线组数", "D"); string sYFDYDJ = rule.DYDJYFC.Replace("相电压", "A").Replace("线电压", "B").Replace("电压单位", "C").Replace("线组数", "D"); string sYFBZ = rule.XLBZYFC.Replace("标准名", "A"); if (!string.IsNullOrEmpty(sYFXH) && sYFXH.Trim() != "") IntoXLYFGZ(dberp, sSQL, "1", XLYSJXUtils.ProdCPH_XLXH(sBSC), XLYSJXUtils.ProdCXH_XLXH(sBSC), sYFXH); if (!string.IsNullOrEmpty(sYFGG) && sYFGG.Trim() != "") IntoXLYFGZ(dberp, sSQL, "2", XLYSJXUtils.ProdCPH_XLGG(sBSC), XLYSJXUtils.ProdCXH_XLGG(sBSC), sYFGG); if (!string.IsNullOrEmpty(sYFDYDJ) && sYFDYDJ.Trim() != "") IntoXLYFGZ(dberp, sSQL, "3", XLYSJXUtils.ProdCPH_DYDJ(sBSC), XLYSJXUtils.ProdCXH_DYDJ(sBSC), sYFDYDJ); if (!string.IsNullOrEmpty(sYFBZ) && sYFBZ.Trim() != "") IntoXLYFGZ(dberp, sSQL, "4", XLYSJXUtils.ProdCPH_XLBZ(sBSC), XLYSJXUtils.ProdCXH_XLBZ(sBSC), sYFBZ); } /// /// 将引用指定规则的 XLJXMX 明细重置为未解析状态 /// private static void ResetMXByRuleNo( TDatabase dberp, TSQL sSQL, string sXLJXDJ, string sXLJXDH, string sXLJXGZXH) { sSQL.Clear(); sSQL.Add(" update XLJXMX set XLJXMX_XLJXGZXH=0 "); sSQL.Add(" where XLJXMX_XLJXDJ=:pXLJXDJ "); sSQL.Add(" and XLJXMX_XLJXDH=:pXLJXDH "); sSQL.Add(" and XLJXMX_XLJXGZXH=:pXLJXGZXH "); sSQL.ParamByName("pXLJXDJ").Value = sXLJXDJ; sSQL.ParamByName("pXLJXDH").Value = sXLJXDH; sSQL.ParamByName("pXLJXGZXH").Value = sXLJXGZXH; dberp.ExecSQL(sSQL); } /// /// 将指定解析规则应用到目标报价单下所有 XLJXGZXH=0 的明细行 /// /// 首次成功解析时的回调,返回要应用的规则序号;返回空则跳过该行 /// 成功解析并更新的行数 private static int ApplyRuleToMXRows( TDatabase dberp, TSQL sSQL, XLJXGZ rule, DataSet dsTHGZ, string targetBJDID, string targetXLJXDJ, string ruleNoToApply, OnFirstSuccessfulParseDelegate onFirstSuccessfulParse) { int parsedCount = 0; string currentRuleNo = ruleNoToApply; bool firstParseHandled = false; sSQL.Clear(); sSQL.Add(" SELECT XLJXMX_XLJXMXH as XLJXMXH, XLJXMX_XLBSC as XLBSC "); sSQL.Add(" FROM XLJXMX "); sSQL.Add(" WHERE XLJXMX_XLJXDJ = :pXLJXDJ "); sSQL.Add(" AND XLJXMX_XLJXDH = :pXLJXDH "); sSQL.Add(" AND XLJXMX_XLJXGZXH = 0 "); sSQL.Add(" ORDER BY XLJXMX_XLJXMXH "); sSQL.ParamByName("pXLJXDJ").Value = targetXLJXDJ; sSQL.ParamByName("pXLJXDH").Value = targetBJDID; DataSet ds = dberp.OpenDataSet(sSQL); for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { string sXLJXMXH = ds.Tables[0].Rows[i]["XLJXMXH"].ToString().Trim(); string sXLBSC = ds.Tables[0].Rows[i]["XLBSC"].ToString().Trim(); string aXLXH, aXLGG, aDYDJ, aXLBZ, aXLYS; string sDXHXLXH, sDXHXLGG, sDXHDYDJ, sDXHXLBZ; if (!TryParseProduct(sXLBSC, rule, dsTHGZ, out aXLXH, out aXLGG, out aDYDJ, out aXLBZ, out aXLYS, out sDXHXLXH, out sDXHXLGG, out sDXHDYDJ, out sDXHXLBZ)) continue; if (!firstParseHandled && onFirstSuccessfulParse != null) { string savedRuleNo = onFirstSuccessfulParse(); if (!string.IsNullOrEmpty(savedRuleNo)) currentRuleNo = savedRuleNo; firstParseHandled = true; } UpdateXLJXMXWithParseResult(dberp, sSQL, targetXLJXDJ, targetBJDID, sXLJXMXH, currentRuleNo, aXLXH, aXLGG, aDYDJ, aXLBZ, aXLYS, sDXHXLXH, sDXHXLGG, sDXHDYDJ, sDXHXLBZ); parsedCount++; } return parsedCount; } #endregion [AjaxMethod(AuthRequried = false)] public static Result InsertXLJXGZ(XLJXGZ item, string IsCommon) { CMISproSession tSession = CMISproSessionManager.GetCurrentSession(); TDatabase dberp = null; Result result = new Result(); string space = " "; try { dberp = TContextDatabases.GetDatabase("DBERP"); dberp.BeginTrans(); // 开启事务 TSQL sSQL = new TSQL(dberp); // 加载等效替换规则 DataSet dsTHGZ = LoadReplaceRules(dberp); // 获取原有规则串(用于查询是否已存在) string sYGZC = string.Empty; if (CMISproConvert.StrToFloat(item.XLJXGZXH) > 0) { sSQL.Clear(); sSQL.Add(" select XLJXGZ_XLJXGZC from XLJXGZ "); sSQL.Add(" where XLJXGZ_XLJXDJ=:pXLJXDJ and XLJXGZ_XLJXDH=:pXLJXDH and XLJXGZ_XLJXGZXH=:pXLJXGZXH "); sSQL.ParamByName("pXLJXDJ").Value = item.XLJXDJ; if (IsCommon.Equals("Y")) sSQL.ParamByName("pXLJXDH").Value = space; else sSQL.ParamByName("pXLJXDH").Value = item.XLJXDH; sSQL.ParamByName("pXLJXGZXH").Value = item.XLJXGZXH; DataSet dsGZC = dberp.OpenDataSet(sSQL); if (dsGZC.Tables[0].Rows.Count > 0) sYGZC = dsGZC.Tables[0].Rows[0][0].ToString().Trim(); // 若是更新已有规则,先将引用该规则的明细重置为未解析 ResetMXByRuleNo(dberp, sSQL, item.XLJXDJ, item.XLJXDH, item.XLJXGZXH); } // 应用规则到所有未解析行;首次成功解析时才保存规则 string ruleNoToApply = item.XLJXGZXH; double fNewXLJXGZXH = 0; ApplyRuleToMXRows(dberp, sSQL, item, dsTHGZ, item.XLJXDH, item.XLJXDJ, ruleNoToApply, delegate { fNewXLJXGZXH = SaveOrUpdateRule(dberp, sSQL, item, IsCommon, sYGZC, tSession); SaveSyntaxToXLYFGZ(dberp, sSQL, item, tSession); return fNewXLJXGZXH > 0 ? fNewXLJXGZXH.ToString() : item.XLJXGZXH; }); dberp.CommitTrans(); result.success = true; result.msg = fNewXLJXGZXH.ToString(); return result; } catch (Exception ex) { // 发生异常时回滚事务 if (dberp != null && dberp.InTransaction) { dberp.RollbackTrans(); } // 记录错误日志 result.success = false; result.msg = "解析失败: " + ex.Message; return result; } finally { } } [AjaxMethod(AuthRequried = false)] public static List GetDYDJList() { List dydjList = new List(); TDatabase dberp = TContextDatabases.GetDatabase("DBERP"); TSQL sSQL = new TSQL(dberp); sSQL.Clear(); sSQL.Add("select XLDYDJB_DYDJID from XLDYDJB where isnull(XLDYDJB_TYBZ,'N')='N' "); DataSet ds = dberp.OpenDataSet(sSQL); for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { dydjList.Add(ds.Tables[0].Rows[i][0].ToString().Trim()); } return dydjList; } [AjaxMethod(AuthRequried = false)] public static List XLBZList() { List xlbzList = new List(); TDatabase dberp = TContextDatabases.GetDatabase("DBERP"); TSQL sSQL = new TSQL(dberp); sSQL.Clear(); sSQL.Add("select XLBZ_XLBZID,XLBZ_XLBZLXMC from XLBZ where ISNULL(XLBZ_DZSC,'N')='N' "); DataSet ds = dberp.OpenDataSet(sSQL); for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { XLBZ tp = new XLBZ(); tp.XLBZID = ds.Tables[0].Rows[i][0].ToString().Trim(); tp.XLBZMC = ds.Tables[0].Rows[i][1].ToString().Trim(); xlbzList.Add(tp); } return xlbzList; } [AjaxMethod(AuthRequried = false)] public static Result commonParse(string BJDID) { TDatabase dberp = null; Result result = new Result(); try { dberp = TContextDatabases.GetDatabase("DBERP"); dberp.BeginTrans(); // 开启事务 TSQL sSQL = new TSQL(dberp); // 加载等效替换规则 DataSet dsTHGZ = LoadReplaceRules(dberp); // 加载通用规则 + 当前报价单规则 List xljxgzList = new List(); xljxgzList.AddRange(GetXLJXGZList("XSBJ", " ")); xljxgzList.AddRange(GetXLJXGZList("XSBJ", BJDID)); // 依次应用每条规则 foreach (XLJXGZ item in xljxgzList) { ApplyRuleToMXRows(dberp, sSQL, item, dsTHGZ, BJDID, "XSBJ", item.XLJXGZXH, null); } dberp.CommitTrans(); result.msg = "-1"; result.success = true; return result; } catch (Exception ex) { // 发生异常时回滚事务 if (dberp != null && dberp.InTransaction) { dberp.RollbackTrans(); } // 记录错误日志 result.success = false; result.msg = "解析失败: " + ex.Message; return result; } finally { } } [AjaxMethod(AuthRequried = false)] public static XLJXJG XLYSTZJX(XLJXGZ item, string sXLBSC) { XLJXJG jxjg = new XLJXJG(); string aXLXH = ""; string aXLGG = ""; string aDYDJ = ""; string aXLBZ = ""; string aXLYS = ""; string sXLJXGZ = item.XLJXGZC; string sYFXH = item.XLXHYFC.Replace("型号码", "A").Replace("前缀码", "B").Replace("后缀码", "C"); string sYFGG = item.XLGGYFC.Replace("截面", "A").Replace("芯数", "B").Replace("线对数", "C").Replace("线组数", "D"); string sYFDYDJ = item.DYDJYFC.Replace("相电压", "A").Replace("线电压", "B").Replace("电压单位", "C").Replace("线组数", "D"); string sYFBZ = item.XLBZYFC.Replace("标准名", "A"); TXLJXGZ xljxgz = new TXLJXGZ(); if (xljxgz.LoadGZ(sXLJXGZ, sYFXH, sYFGG, sYFDYDJ, sYFBZ, "")) { if (xljxgz.XLYSJX(sXLBSC, out aXLXH, out aXLGG, out aDYDJ, out aXLBZ, out aXLYS)) { jxjg.XLXH = aXLXH; jxjg.XLGG = aXLGG; jxjg.XLBZ = aXLBZ; jxjg.DYDJ = aDYDJ; } } return jxjg; } [AjaxMethod(AuthRequried = false)] public static JXPZInfo GetJXPZ(XLJXMX item) { JXPZInfo jxjg = new JXPZInfo(); XLJXGZ jxgz = GetXLJXGZ(item.XLJXDJ, item.XLJXDH, item.XLJXGZXH); string aXLXH = item.XLXHID; string aXLGG = item.XLGGID; string aDYDJ = item.DYDJID; string aXLBZ = item.XLBZID; string sXLJXGZ = jxgz.XLJXGZC; string sYFXH = jxgz.XLXHYFC; string sYFGG = jxgz.XLGGYFC; string sYFDYDJ = jxgz.DYDJYFC; string sYFBZ = jxgz.XLBZYFC; string sNewJXGZ = string.Empty; if (CMISproConvert.StrToFloat(item.XLJXGZXH) == 0 || string.IsNullOrEmpty(sXLJXGZ)) { jxjg.XLJXGZC = item.XLBSC; } else { TXLJXGZ xljxgz = new TXLJXGZ(); if (xljxgz.LoadGZ(sXLJXGZ, sYFXH, sYFGG, sYFDYDJ, sYFBZ, "")) { sNewJXGZ = xljxgz.ProdGZC(item.XLBSC); if (string.IsNullOrEmpty(sNewJXGZ)) { jxjg.XLJXGZC = sXLJXGZ; } else jxjg.XLJXGZC = sNewJXGZ; } } jxjg.XLXHYFC = sYFXH.Replace("A", "型号码").Replace("B", "前缀码").Replace("C", "后缀码"); jxjg.XLGGYFC = sYFGG.Replace("A", "截面").Replace("B", "芯数").Replace("C", "线对数").Replace("D", "线组数"); jxjg.XLBZYFC = sYFBZ.Replace("A", "标准名"); jxjg.DYDJYFC = sYFDYDJ.Replace("A", "相电压").Replace("B", "线电压").Replace("C", "电压单位"); jxjg.XLXH = aXLXH; jxjg.XLGG = aXLGG; jxjg.XLBZ = aXLBZ; jxjg.DYDJ = aDYDJ; return jxjg; } private static int GetMaxDRHHForBJD(TDatabase dberp, string sBJDID) { TSQL sSQL = new TSQL(dberp); sSQL.Clear(); sSQL.Add("select isnull(max(XLXSBJDMX_DRHH),0) as MAXDRHH from XLXSBJDMX where XLXSBJDMX_BJDID=:pBJDID"); sSQL.ParamByName("pBJDID").Value = sBJDID; DataSet ds = dberp.OpenDataSet(sSQL); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) return CMISproConvert.StrToInt(ds.Tables[0].Rows[0]["MAXDRHH"].ToString().Trim(), 0); return 0; } private static int GetNextXLJXMXH(TDatabase dberp, string sBJDID) { int maxJXMXH = 0; TSQL sSQL = new TSQL(dberp); sSQL.Clear(); sSQL.Add("select top 1 XLJXMX_XLJXMXH as MAXJXMXH from XLJXMX"); sSQL.Add(" where XLJXMX_XLJXDJ='XSBJ' and XLJXMX_XLJXDH=:pBJDID"); sSQL.Add(" order by len(XLJXMX_XLJXMXH) desc, XLJXMX_XLJXMXH desc"); sSQL.ParamByName("pBJDID").Value = sBJDID; DataSet ds = dberp.OpenDataSet(sSQL); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) maxJXMXH = CMISproConvert.StrToInt(SafeTrim(ds.Tables[0].Rows[0]["MAXJXMXH"]), 0); int maxDRHH = GetMaxDRHHForBJD(dberp, sBJDID); return Math.Max(maxJXMXH, maxDRHH) + 1; } private static int GetBJDMXXHByDRHH(TDatabase dberp, string sBJDID, int iDRHH) { if (iDRHH <= 0) return -1; TSQL sSQL = new TSQL(dberp); sSQL.Clear(); sSQL.Add("select XLXSBJDMX_XH from XLXSBJDMX where XLXSBJDMX_BJDID=:pBJDID and XLXSBJDMX_DRHH=:pDRHH"); sSQL.ParamByName("pBJDID").Value = sBJDID; sSQL.ParamByName("pDRHH").Value = iDRHH; DataSet ds = dberp.OpenDataSet(sSQL); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) return CMISproConvert.StrToInt(ds.Tables[0].Rows[0]["XLXSBJDMX_XH"].ToString().Trim(), -1); return -1; } private static string ResolveJXXLBZID(XLJXMX item, Dictionary dicBZ) { if (dicBZ.ContainsKey(item.JXXLBZID)) return dicBZ[item.JXXLBZID]; if (!string.IsNullOrEmpty(item.JXXLBZID)) { string sBZID = GetBZID(item.JXXLBZID); dicBZ.Add(item.JXXLBZID, sBZID); return sBZID; } return " "; } private static void MarkXLJXMXImported(TDatabase dberp, TSQL sSQL, XLJXMX item) { sSQL.Clear(); sSQL.Add(@" update XLJXMX set XLJXMX_DCZT='Y' WHERE XLJXMX_XLJXDJ=:pXLJXDJ and XLJXMX_XLJXDH=:pXLJXDH and XLJXMX_XLJXMXH=:pXLJXMXH "); sSQL.ParamByName("pXLJXDJ").Value = item.XLJXDJ; sSQL.ParamByName("pXLJXDH").Value = item.XLJXDH; sSQL.ParamByName("pXLJXMXH").Value = item.XLJXMXH; dberp.ExecSQL(sSQL); } [AjaxMethod(AuthRequried = false)] public static Result InsertBJDMX(List items, string sBJDID) { //远程电缆 if (SystemUtils.GetSysId().Equals("0510011201")) { return YCDLService.InsertBJDMX(items, sBJDID); } CMISproSession tSession = CMISproSessionManager.GetCurrentSession(); string sURL = tSession.GetOption(102855002, "BJAI001"); if (SystemUtils.GetSysId().Equals("0769000102") && !string.IsNullOrEmpty(sURL) && sURL != "无") { return GenJNXJD(sURL, items, tSession.UserId, sBJDID); } TDatabase dberp = null; BJXX bjd = GetBJDXX(sBJDID); dberp = TContextDatabases.GetDatabase("DBERP"); Result result = new Result(); TSQL sSQL = new TSQL(dberp); Dictionary dicBZ = new Dictionary(); try { if (items == null || items.Count == 0) { result.success = false; result.msg = "没有可导入的数据"; return result; } Dictionary seenJXMXH = new Dictionary(); foreach (XLJXMX item in items) { string sJXMXH = SafeTrim(item.XLJXMXH); if (string.IsNullOrEmpty(sJXMXH)) { result.success = false; result.msg = "存在空的解析序号,无法导入"; return result; } if (seenJXMXH.ContainsKey(sJXMXH)) { result.success = false; result.msg = "解析序号重复:" + sJXMXH + ",请检查后重试"; return result; } seenJXMXH[sJXMXH] = true; } int maxXH = CMISproDataBase.GetMaxXH("DBERP", "XLXSBJDMX", "XLXSBJDMX_XH", " XLXSBJDMX_BJDID='" + sBJDID + "'"); int sequence = maxXH + 1; int insertCount = 0; int updateCount = 0; int minCalcXH = int.MaxValue; List insertMXEntityList = new List(); List insertMXList = new List(); Dictionary dicYSID = new Dictionary(); foreach (XLJXMX item in items) { int iDRHH = CMISproConvert.StrToInt(SafeTrim(item.XLJXMXH), 0); if (iDRHH <= 0) throw new Exception("无效的解析序号:" + item.XLJXMXH); string sXLBZID = ResolveJXXLBZID(item, dicBZ); string sBJCP = XLBJDUtils.GroupBJCPXX(item.JXXLXHID, item.JXXLGGID.Replace("×", "*"), item.JXDYDJID); string sXLXHID = SafeTrim(item.JXXLXHID); if (string.IsNullOrEmpty(sXLXHID)) sXLXHID = " "; string sXLGGID = SafeTrim(item.JXXLGGID.Replace("×", "*")); if (string.IsNullOrEmpty(sXLGGID)) sXLGGID = " "; string sDYDJID = SafeTrim(item.JXDYDJID); if (string.IsNullOrEmpty(sDYDJID)) sDYDJID = " "; string sJLDW = string.IsNullOrEmpty(item.JLDW) ? tSession.GetOption(100860000, "BJU003") : item.JLDW; double fBJSL = CMISproConvert.StrToFloat(item.SL); string sYSID; if (!dicYSID.TryGetValue(sXLXHID, out sYSID)) { sYSID = GetDefaultYSID(item.JXXLXHID, "", ""); dicYSID[sXLXHID] = sYSID; } bool isReimport = SafeTrim(item.DCZT).Equals("Y"); int existingXH = -1; if (isReimport) existingXH = GetBJDMXXHByDRHH(dberp, sBJDID, iDRHH); if (isReimport && existingXH > 0) { sSQL.Clear(); sSQL.Add(@" update XLXSBJDMX set "); sSQL.Add(" XLXSBJDMX_BJCP=:pBJCP, "); sSQL.Add(" XLXSBJDMX_JLDW=:pJLDW, "); sSQL.Add(" XLXSBJDMX_XLXHID=:pXLXHID, "); sSQL.Add(" XLXSBJDMX_XDXLXHID=:pXLXHID, "); sSQL.Add(" XLXSBJDMX_XLGGID=:pXLGGID, "); sSQL.Add(" XLXSBJDMX_XLBZID=:pXLBZID, "); sSQL.Add(" XLXSBJDMX_XDXLBZID=:pXLBZID, "); sSQL.Add(" XLXSBJDMX_DYDJID=:pDYDJID, "); sSQL.Add(" XLXSBJDMX_XLYSID=:pYSID, "); sSQL.Add(" XLXSBJDMX_BJSL=:pBJSL, "); sSQL.Add(" XLXSBJDMX_FBH=:FBH, "); sSQL.Add(" XLXSBJDMX_JSGFSID=:JSGFSID, "); sSQL.Add(" XLXSBJDMX_DRHH=:pDRHH, "); sSQL.Add(" XLXSBJDMX_WHR=:WHR, "); sSQL.Add(" XLXSBJDMX_WHRID=:WHRID, "); sSQL.Add(" XLXSBJDMX_WHSJ=:WHSJ "); sSQL.Add(" where XLXSBJDMX_BJDID=:pBJDID and XLXSBJDMX_XH=:pXH "); sSQL.ParamByName("pBJDID").Value = sBJDID; sSQL.ParamByName("pXH").Value = existingXH; sSQL.ParamByName("pDRHH").Value = iDRHH; sSQL.ParamByName("pBJCP").Value = sBJCP; sSQL.ParamByName("pJLDW").Value = sJLDW; sSQL.ParamByName("pXLXHID").Value = sXLXHID; sSQL.ParamByName("pXLGGID").Value = sXLGGID; sSQL.ParamByName("pXLBZID").Value = sXLBZID; sSQL.ParamByName("pDYDJID").Value = sDYDJID; sSQL.ParamByName("pYSID").Value = sYSID; sSQL.ParamByName("pBJSL").Value = fBJSL; sSQL.ParamByName("FBH").Value = item.FBH; sSQL.ParamByName("JSGFSID").Value = item.JSGFID; sSQL.ParamByName("WHR").Value = tSession.UserName; sSQL.ParamByName("WHRID").Value = tSession.UserId; sSQL.ParamByName("WHSJ").Value = DateTime.Now; dberp.ExecSQL(sSQL); updateCount++; if (existingXH < minCalcXH) minCalcXH = existingXH; MarkXLJXMXImported(dberp, sSQL, item); } else { int newXH = sequence; XLXSBJDMXEntity mxEntity = new XLXSBJDMXEntity(); mxEntity.BJDID = sBJDID; mxEntity.XH = newXH; mxEntity.XSSX = sequence; mxEntity.BJCP = sBJCP; mxEntity.JLDW = sJLDW; mxEntity.XLXHID = sXLXHID; mxEntity.XDXLXHID = sXLXHID; mxEntity.XLGGID = sXLGGID; mxEntity.XLBZID = sXLBZID; mxEntity.XDXLBZID = sXLBZID; mxEntity.DYDJID = sDYDJID; mxEntity.XLYSID = sYSID; mxEntity.WHR = tSession.UserName; mxEntity.WHRID = tSession.UserId; mxEntity.WHSJ = DateTime.Now; mxEntity.BJSL = fBJSL; mxEntity.FBH = item.FBH; mxEntity.JSGFSID = item.JSGFID; mxEntity.DRHH = iDRHH; insertMXEntityList.Add(mxEntity); insertMXList.Add(item); sequence++; insertCount++; if (newXH < minCalcXH) minCalcXH = newXH; } } if (insertMXEntityList.Count > 0) { dberp.BulkInsertByReader(insertMXEntityList, "XLXSBJDMX"); foreach (XLJXMX item in insertMXList) { MarkXLJXMXImported(dberp, sSQL, item); } } if (insertCount == 0 && updateCount == 0) { result.success = false; result.msg = "没有可导入的有效数据"; return result; } dberp.BeginTrans(); XLBJDUtils.SyncXLXSBJXLGGTHB_ByXLXSBJDMX_Batch(dberp, tSession, sBJDID); MatchForXLBZIDAndDYDJID(dberp, sSQL, bjd.JGBID, sBJDID, tSession); string sErrorNum = string.Empty; if (minCalcXH != int.MaxValue) { XLBJDCalcUtils.CalcBJDMXAfterIns(dberp, sSQL, sBJDID, minCalcXH, tSession.GetOption(100860000, "BJU002"), tSession.GetOption(100860000, "BJU003"), tSession.GetOption(100860000, "BJU018"), tSession.UserId, tSession.UserName, ref sErrorNum); } if (!string.IsNullOrEmpty(sErrorNum)) throw new Exception(sErrorNum); dberp.CommitTrans(); result.success = true; result.msg = string.Format("成功导入:新增{0}条,覆盖{1}条", insertCount, updateCount); return result; } catch (Exception ex) { if (dberp != null && dberp.InTransaction) { dberp.RollbackTrans(); } result.success = false; result.msg = "导入报价单明细失败: " + ex.Message; return result; } finally { } } public static Result GenJNXJD(string sURL, List items, string sUSERGH, string sBJDID) { Result rs = new Result(); XJDInfo xjd = new XJDInfo(); xjd.userName = sUSERGH; string sEEOR = string.Empty; foreach (XLJXMX info in items) { XJDMX mx = new XJDMX(); mx.XLWBBJDMX_XLXHID = info.JXXLXHID; mx.XLWBBJDMX_XLGGID = info.JXXLGGID; mx.XLWBBJDMX_DYDJID = info.JXDYDJID; mx.XLWBBJDMX_XLBZID = info.JXXLBZID; mx.XLWBBJDMX_YS = info.JXXLYSID; mx.XLWBBJDMX_JLDW = info.JLDW; mx.XLWBBJDMX_BJDH = sBJDID; mx.YSCP = info.XLBSC; mx.XLWBBJDMX_DRHH = info.XLJXMXH; mx.XLWBBJDMX_BJSL = CMISproConvert.StrToFloat(info.SL); xjd.quoteList.Add(mx); } JavaScriptSerializer jsConvert = new JavaScriptSerializer(); string sParams = jsConvert.Serialize(xjd); //发起请求 Uri uri = new Uri(sURL); WebRequest webRequest = WebRequest.Create(uri); webRequest.ContentType = "application/json;charset=utf-8"; webRequest.Method = "POST"; using (Stream requestStream = webRequest.GetRequestStream()) { byte[] paramBytes = Encoding.UTF8.GetBytes(sParams.ToString()); requestStream.Write(paramBytes, 0, paramBytes.Length); } string result = string.Empty; WebResponse webResponse = webRequest.GetResponse(); using (StreamReader myStreamReader = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8)) { result = myStreamReader.ReadToEnd(); } ResultData resultObj = jsConvert.Deserialize(result); if (resultObj.code == "200") { rs.success = true; rs.msg = resultObj.msg; return rs; } else { rs.success = false; rs.msg = "导入询价单失败,原因:" + resultObj.msg; return rs; } } [AjaxMethod(AuthRequried = false)] public static List GetXLXHYFList(string sXLJXGZC) { List list = new List(); TDatabase dberp = TContextDatabases.GetDatabase("DBERP"); TSQL sSQL = new TSQL(dberp); string sBSC = GetBSC(sXLJXGZC); // 获取型号规则数据 sSQL.Clear(); sSQL.Add("select replace(replace(replace(XLYFGZ_XLYFYFC,'[A','[型号码'),'[B','[前缀码'),'[C','[后缀码') as XLYFYFC "); sSQL.Add("from XLYFGZ where XLYFGZ_XLYFFL='1' "); sSQL.Add("and XLYFGZ_XLYFCPH='" + XLYSJXUtils.ProdCPH_XLXH(sBSC) + "' "); sSQL.Add("and XLYFGZ_XLYFCXH='" + XLYSJXUtils.ProdCXH_XLXH(sBSC) + "' "); sSQL.Add("order by XLYFGZ_XH,XLYFGZ_XLYFYFC"); DataSet ds = dberp.OpenDataSet(sSQL); if (ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { CodeClass code = new CodeClass(); code.code = ds.Tables[0].Rows[i]["XLYFYFC"].ToString().Trim(); code.message = ds.Tables[0].Rows[i]["XLYFYFC"].ToString().Trim(); list.Add(code); } } // 添加默认型号规则 string sMRYFC = GetMRYFC("XLXH", XLYSJXUtils.ProdCPH_XLXH(sBSC), XLYSJXUtils.ProdCXH_XLXH(sBSC)); if (!string.IsNullOrEmpty(sMRYFC.Trim())) { CodeClass code = new CodeClass(); code.code = sMRYFC.Trim(); code.message = sMRYFC.Trim(); list.Insert(0, code); } return list; } [AjaxMethod(AuthRequried = false)] public static List GetXLGGYFList(string sXLJXGZC) { List list = new List(); TDatabase dberp = TContextDatabases.GetDatabase("DBERP"); TSQL sSQL = new TSQL(dberp); string sBSC = GetBSC(sXLJXGZC); sSQL.Clear(); sSQL.Add("select replace(replace(replace(replace(XLYFGZ_XLYFYFC,'[A','[截面'),'[B','[芯数'),'[C','[线对数'),'[D','[线组数') as XLYFYFC "); sSQL.Add("from XLYFGZ where XLYFGZ_XLYFFL='2' "); sSQL.Add("and XLYFGZ_XLYFCPH='" + XLYSJXUtils.ProdCPH_XLGG(sBSC) + "' "); sSQL.Add("and XLYFGZ_XLYFCXH='" + XLYSJXUtils.ProdCXH_XLGG(sBSC) + "' "); sSQL.Add("order by XLYFGZ_XH,XLYFGZ_XLYFYFC"); DataSet ds = dberp.OpenDataSet(sSQL); if (ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { CodeClass code = new CodeClass(); code.code = ds.Tables[0].Rows[i]["XLYFYFC"].ToString().Trim(); code.message = ds.Tables[0].Rows[i]["XLYFYFC"].ToString().Trim(); list.Add(code); } } string sMRYFC = GetMRYFC("XLGG", XLYSJXUtils.ProdCPH_XLGG(sBSC), XLYSJXUtils.ProdCXH_XLGG(sBSC)); if (!string.IsNullOrEmpty(sMRYFC.Trim())) { CodeClass code = new CodeClass(); code.code = sMRYFC.Trim(); code.message = sMRYFC.Trim(); list.Insert(0, code); } return list; } [AjaxMethod(AuthRequried = false)] public static List GetDYDJYFList(string sXLJXGZC) { List list = new List(); TDatabase dberp = TContextDatabases.GetDatabase("DBERP"); TSQL sSQL = new TSQL(dberp); string sBSC = GetBSC(sXLJXGZC); sSQL.Clear(); sSQL.Add("select replace(replace(replace(XLYFGZ_XLYFYFC,'[A','[相电压'),'[B','[线电压'),'[C','[电压单位') as XLYFYFC "); sSQL.Add("from XLYFGZ where XLYFGZ_XLYFFL='3' "); sSQL.Add("and XLYFGZ_XLYFCPH='" + XLYSJXUtils.ProdCPH_DYDJ(sBSC) + "' "); sSQL.Add("and XLYFGZ_XLYFCXH='" + XLYSJXUtils.ProdCXH_DYDJ(sBSC) + "' "); sSQL.Add("order by XLYFGZ_XH,XLYFGZ_XLYFYFC"); DataSet ds = dberp.OpenDataSet(sSQL); if (ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { CodeClass code = new CodeClass(); code.code = ds.Tables[0].Rows[i]["XLYFYFC"].ToString().Trim(); code.message = ds.Tables[0].Rows[i]["XLYFYFC"].ToString().Trim(); list.Add(code); } } string sMRYFC = GetMRYFC("DYDJ", XLYSJXUtils.ProdCPH_DYDJ(sBSC), XLYSJXUtils.ProdCXH_DYDJ(sBSC)); if (!string.IsNullOrEmpty(sMRYFC.Trim())) { CodeClass code = new CodeClass(); code.code = sMRYFC.Trim(); code.message = sMRYFC.Trim(); list.Insert(0, code); } return list; } [AjaxMethod(AuthRequried = false)] public static List GetXLBZYFList(string sXLJXGZC) { List list = new List(); TDatabase dberp = TContextDatabases.GetDatabase("DBERP"); TSQL sSQL = new TSQL(dberp); string sBSC = GetBSC(sXLJXGZC); sSQL.Clear(); sSQL.Add("select replace(XLYFGZ_XLYFYFC,'[A','[标准名') as XLYFYFC "); sSQL.Add("from XLYFGZ where XLYFGZ_XLYFFL='4' "); sSQL.Add("and XLYFGZ_XLYFCPH='" + XLYSJXUtils.ProdCPH_XLBZ(sBSC) + "' "); sSQL.Add("and XLYFGZ_XLYFCXH='" + XLYSJXUtils.ProdCXH_XLBZ(sBSC) + "' "); sSQL.Add("order by XLYFGZ_XH,XLYFGZ_XLYFYFC"); DataSet ds = dberp.OpenDataSet(sSQL); if (ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { CodeClass code = new CodeClass(); code.code = ds.Tables[0].Rows[i]["XLYFYFC"].ToString().Trim(); code.message = ds.Tables[0].Rows[i]["XLYFYFC"].ToString().Trim(); list.Add(code); } } string sMRYFC = GetMRYFC("XLBZ", XLYSJXUtils.ProdCPH_XLBZ(sBSC), XLYSJXUtils.ProdCXH_XLBZ(sBSC)); if (!string.IsNullOrEmpty(sMRYFC.Trim())) { CodeClass code = new CodeClass(); code.code = sMRYFC.Trim(); code.message = sMRYFC.Trim(); list.Insert(0, code); } return list; } [AjaxMethod(AuthRequried = false)] public static string GetXHFGF() { CMISproSession tSession = CMISproSessionManager.GetCurrentSession(); return tSession.GetOption(100860140, "BJU041"); } [AjaxMethod(AuthRequried = false)] public static Result BatchUpdateXLJXMX(List items, string updateType, string updateValue) { CMISproSession tSession = CMISproSessionManager.GetCurrentSession(); TDatabase dberp = null; Result result = new Result(); try { if (items == null || items.Count == 0) { result.success = false; result.msg = "没有可更新的记录"; return result; } string safeUpdateType = SafeTrim(updateType); if (string.IsNullOrEmpty(safeUpdateType)) { result.success = false; result.msg = "更新类型无效"; return result; } string safeUpdateValue = SafeTrim(updateValue); if (string.IsNullOrEmpty(safeUpdateValue)) { result.success = false; result.msg = "调整值不能为空"; return result; } if (safeUpdateType == "spec") { safeUpdateValue = safeUpdateValue.Replace("×", "*"); } string setColumns; if (safeUpdateType == "standard") { setColumns = "XLJXMX_XLBZID = :XLBZID, XLJXMX_JXXLBZID = :JXXLBZID, "; } else if (safeUpdateType == "voltage") { setColumns = "XLJXMX_DYDJID = :DYDJID, XLJXMX_JXDYDJID = :JXDYDJID, "; } else if (safeUpdateType == "model") { setColumns = "XLJXMX_JXXLXHID = :JXXLXHID, XLJXMX_XLXHID = :XLXHID, "; } else if (safeUpdateType == "spec") { setColumns = "XLJXMX_JXXLGGID = :JXXLGGID, XLJXMX_XLGGID = :XLGGID, "; } else { result.success = false; result.msg = "不支持的更新类型: " + safeUpdateType; return result; } // 按 XLJXDJ/XLJXDH 分组,同一分组内用 XLJXMXH IN (...) 批量更新 Dictionary> groups = new Dictionary>(); foreach (XLJXMX item in items) { string key = string.Format("{0}|{1}", GetSafeValue(item.XLJXDJ), GetSafeValue(item.XLJXDH)); if (!groups.ContainsKey(key)) { groups[key] = new List(); } groups[key].Add(item); } dberp = TContextDatabases.GetDatabase("DBERP"); dberp.BeginTrans(); int totalAffectedRows = 0; const int MaxInListSize = 1000; foreach (KeyValuePair> group in groups) { string[] keyParts = group.Key.Split('|'); string dj = keyParts[0] as string; string dh = keyParts[1] as string; List groupItems = group.Value; for (int chunkStart = 0; chunkStart < groupItems.Count; chunkStart += MaxInListSize) { int chunkSize = Math.Min(MaxInListSize, groupItems.Count - chunkStart); TSQL sSQL = new TSQL(dberp); sSQL.Add(@"UPDATE XLJXMX SET "); sSQL.Add(setColumns); sSQL.Add("XLJXMX_WHR = :WHR, "); sSQL.Add("XLJXMX_WHRID = :WHRID, "); sSQL.Add("XLJXMX_WHSJ = :WHSJ "); sSQL.Add("WHERE XLJXMX_XLJXDJ = :XLJXDJ "); sSQL.Add("AND XLJXMX_XLJXDH = :XLJXDH "); sSQL.Add("AND XLJXMX_XLJXMXH IN ("); StringBuilder inParams = new StringBuilder(); for (int i = 0; i < chunkSize; i++) { string paramName = "pMXH" + i.ToString(); if (i > 0) { inParams.Append(", "); } inParams.Append(":").Append(paramName); sSQL.ParamByName(paramName).Value = GetSafeValue(groupItems[chunkStart + i].XLJXMXH); } sSQL.Add(inParams.ToString()); sSQL.Add(")"); if (safeUpdateType == "standard") { sSQL.ParamByName("XLBZID").Value = GetSafeValue(safeUpdateValue); sSQL.ParamByName("JXXLBZID").Value = GetSafeValue(safeUpdateValue); } else if (safeUpdateType == "voltage") { sSQL.ParamByName("DYDJID").Value = GetSafeValue(safeUpdateValue); sSQL.ParamByName("JXDYDJID").Value = GetSafeValue(safeUpdateValue); } else if (safeUpdateType == "model") { sSQL.ParamByName("JXXLXHID").Value = GetSafeValue(safeUpdateValue); sSQL.ParamByName("XLXHID").Value = GetSafeValue(safeUpdateValue); } else if (safeUpdateType == "spec") { sSQL.ParamByName("JXXLGGID").Value = GetSafeValue(safeUpdateValue); sSQL.ParamByName("XLGGID").Value = GetSafeValue(safeUpdateValue); } sSQL.ParamByName("WHR").Value = tSession.UserName; sSQL.ParamByName("WHRID").Value = tSession.UserId; sSQL.ParamByName("WHSJ").Value = DateTime.Now; sSQL.ParamByName("XLJXDJ").Value = dj; sSQL.ParamByName("XLJXDH").Value = dh; totalAffectedRows += dberp.ExecSQL(sSQL); } } if (totalAffectedRows == 0) { dberp.RollbackTrans(); result.success = false; result.msg = "未更新任何记录,请确认已选中有效数据"; return result; } dberp.CommitTrans(); result.success = true; result.msg = string.Format("成功更新 {0} 条记录", totalAffectedRows.ToString()); return result; } catch (Exception ex) { if (dberp != null && dberp.InTransaction) { dberp.RollbackTrans(); } result.success = false; result.msg = "批量更新失败: " + ex.Message; return result; } finally { if (dberp != null) { dberp.Dispose(); } } } #endregion #region 辅助方法 public static string GetDefaultYSID(string sXLXHID, string sXLGGID, string sXLYSID) { if (string.IsNullOrEmpty(sXLYSID)) sXLYSID = "BK"; CMISproSession tSession = CMISproSessionManager.GetCurrentSession(); TDatabase dberp = TContextDatabases.GetDatabase("DBERP"); TSQL SQL = new TSQL(dberp); if (tSession.GetOption(102577000, "BJU052") == "2") { if (!sXLXHID.Equals("")) { SQL.Add("select XLXSBJCPYS_XLYSID,XLXSBJCPYS_XHBBH "); SQL.Add(" from XLXSBJCPYS"); SQL.Add(" where :pXLXH like '%'||rtrim(XLXSBJCPYS_XLJBXHID)||'%' "); SQL.ParamByName("pXLXH").Value = "%" + sXLXHID + "%"; DataSet ds = dberp.OpenDataSet(SQL); if (ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { string sXHBBH = ds.Tables[0].Rows[i]["XLXSBJCPYS_XHBBH"].ToString().Trim(); if (sXHBBH.Equals("") || !sXLXHID.Contains(sXHBBH)) sXLYSID = ds.Tables[0].Rows[i]["XLXSBJCPYS_XLYSID"].ToString().Trim(); } } } } else { if (!sXLXHID.Equals("")) { Dictionary dicXLGGB = XLBJDUtils.GetXXJGIDByXLGGID(sXLGGID, sXLXHID); SQL.Add("select XLXSBJCPYS_XLYSID,"); SQL.Add(" case WHEN XLXSBJCPYS_XLJBXHID<>' ' and XLXSBJCPYS_XXJGID<>' ' and XLXSBJCPYS_XXJGID=:pXXJGID then 1"); SQL.Add(" WHEN XLXSBJCPYS_XLJBXHID<>' ' and XLXSBJCPYS_XXJGID=' ' then 2"); SQL.Add(" WHEN XLXSBJCPYS_XLJBXHID=' ' and XLXSBJCPYS_XXJGID=' ' then 3"); SQL.Add(" else 9999 END AS PX,"); SQL.Add(" XLXSBJCPYS_XLJBXHID,XLXSBJCPYS_XXJGID"); SQL.Add(" from XLXSBJCPYS"); SQL.Add(" where 1=1"); SQL.Add(" and exists(select 1 from XLXHB where XLXHB_XLXHID=:pXLXHID and XLXHB_CPYT=XLXSBJCPYS_CPYT)"); SQL.Add(" and (XLXSBJCPYS_XLJBXHID =' '"); SQL.Add(" or exists(select 1 from XLXHB where XLXHB_XLXHID=:pXLXHID and XLXHB_XLJBXHID=XLXSBJCPYS_XLJBXHID)) "); SQL.Add(" order by PX,XLXSBJCPYS_XLJBXHID,XLXSBJCPYS_XXJGID "); SQL.ParamByName("pXLXHID").Value = sXLXHID; SQL.ParamByName("pXXJGID").Value = dicXLGGB["XXJGID"]; DataSet ds = dberp.OpenDataSet(SQL); if (ds.Tables[0].Rows.Count > 0) { if (!ds.Tables[0].Rows[0]["PX"].ToString().Trim().Equals("9999")) { sXLYSID = ds.Tables[0].Rows[0]["XLXSBJCPYS_XLYSID"].ToString().Trim(); } } } } return sXLYSID; } // 辅助方法:处理空值 public static object GetSafeValue(string value) { return string.IsNullOrEmpty(value) ? " " : (object)value; } private static string GetBSC(string input) { if (string.IsNullOrEmpty(input)) return ""; StringBuilder result = new StringBuilder(); string pattern = @"\[([^\]=]+)=[^\]]+\]"; foreach (Match match in Regex.Matches(input, pattern)) { // 获取等号前的部分并添加方括号 string content = match.Groups[1].Value; result.AppendFormat("[{0}]", content); } return result.ToString(); } private static void IntoXLYFGZ(TDatabase dberp, TSQL sSQL, string sXLYFFL, string sCPH, string sCXH, string sYFC) { CMISproSession tSession = CMISproSessionManager.GetCurrentSession(); sSQL.Clear(); sSQL.Add(" MERGE INTO XLYFGZ USING "); sSQL.Add(" ( "); sSQL.Add(" SELECT :XLYFFL AS XLYFFL, "); sSQL.Add(" :XLYFCPH AS XLYFCPH, "); sSQL.Add(" :XLYFCXH AS XLYFCXH, "); sSQL.Add(" CONVERT(FLOAT,0) AS XH, "); sSQL.Add(" :XLYFYFC AS XLYFYFC, "); sSQL.Add(" :WHRID AS WHRID, "); sSQL.Add(" :WHR AS WHR, "); sSQL.Add(" :WHSJ AS WHSJ "); sSQL.Add(" FROM IDX "); sSQL.Add(" WHERE IDX_ID=1 "); sSQL.Add(" ) A "); sSQL.Add(" ON (XLYFGZ_XLYFFL=A.XLYFFL "); sSQL.Add(" AND XLYFGZ_XLYFCPH=A.XLYFCPH "); sSQL.Add(" AND XLYFGZ_XLYFCXH=A.XLYFCXH "); sSQL.Add(" AND XLYFGZ_XLYFYFC=A.XLYFYFC) "); sSQL.Add(" WHEN MATCHED THEN UPDATE SET "); sSQL.Add(" XLYFGZ_WHRID=A.WHRID, "); sSQL.Add(" XLYFGZ_WHR=A.WHR, "); sSQL.Add(" XLYFGZ_WHSJ=A.WHSJ "); sSQL.Add(" WHEN NOT MATCHED THEN INSERT "); sSQL.Add(" ( "); sSQL.Add(" XLYFGZ_XLYFFL, "); sSQL.Add(" XLYFGZ_XLYFCPH, "); sSQL.Add(" XLYFGZ_XLYFCXH, "); sSQL.Add(" XLYFGZ_XH, "); sSQL.Add(" XLYFGZ_XLYFYFC, "); sSQL.Add(" XLYFGZ_WHRID, "); sSQL.Add(" XLYFGZ_WHR, "); sSQL.Add(" XLYFGZ_WHSJ "); sSQL.Add(" ) "); sSQL.Add(" VALUES "); sSQL.Add(" ( "); sSQL.Add(" A.XLYFFL, "); sSQL.Add(" A.XLYFCPH, "); sSQL.Add(" A.XLYFCXH, "); sSQL.Add(" A.XH, "); sSQL.Add(" A.XLYFYFC, "); sSQL.Add(" A.WHRID, "); sSQL.Add(" A.WHR, "); sSQL.Add(" A.WHSJ "); sSQL.Add(" ) "); sSQL.ParamByName("XLYFFL").Value = sXLYFFL; sSQL.ParamByName("XLYFCPH").Value = sCPH; sSQL.ParamByName("XLYFCXH").Value = sCXH; sSQL.ParamByName("XLYFYFC").Value = sYFC; sSQL.ParamByName("WHR").Value = tSession.UserName; sSQL.ParamByName("WHRID").Value = tSession.UserId; sSQL.ParamByName("WHSJ").Value = DateTime.Now; dberp.ExecSQL(sSQL); } private static bool IsAlphanumeric(string sBJLX, string sBJZ) { bool result = true; if (sBJLX == "型号码" || sBJLX == "前缀码" || sBJLX == "后缀码") { for (int i = 0; i < sBJZ.Length; i++) { if (!(((sBJZ[i] >= '0') && (sBJZ[i] <= '9')) || ((sBJZ[i] >= 'a') && (sBJZ[i] <= 'z')) || ((sBJZ[i] >= 'A') && (sBJZ[i] <= 'Z')))) { result = false; break; } } } if (sBJLX == "芯数" || sBJLX == "线对数" || sBJLX == "线组数") { for (int i = 0; i < sBJZ.Length; i++) { if (!((sBJZ[i] >= '0') && (sBJZ[i] <= '9'))) { result = false; break; } } } if (sBJLX == "截面" || sBJLX == "相电压" || sBJLX == "线电压") { for (int i = 0; i < sBJZ.Length; i++) { if (!(((sBJZ[i] >= '0') && (sBJZ[i] <= '9')) || (sBJZ[i] == '.'))) { result = false; break; } } } if (sBJLX == "电压单位") { for (int i = 0; i < sBJZ.Length; i++) { if (!(((sBJZ[i] >= 'a') && (sBJZ[i] <= 'z')) || ((sBJZ[i] >= 'A') && (sBJZ[i] <= 'Z')))) { result = false; break; } } } return result; } public static bool BJZJY(string sBJLX, string sBJZ) { bool result = true; if (sBJLX == "标准名") { System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"^[\u4e00-\u9fa5a-zA-Z0-9]+$"); for (int i = 0; i < sBJZ.Length; i++) { if (!regex.IsMatch(sBJZ[i].ToString())) { result = false; break; } } } if (sBJLX == "颜色名") { System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"^[\u4e00-\u9fa5]+$"); for (int i = 0; i < sBJZ.Length; i++) { if (!regex.IsMatch(sBJZ[i].ToString())) { result = false; break; } } } return result; } public static string GetMRYFC(string sYFLX, string sCPH, string sCXH) { string sYFC = ""; string sCXH_TMP = sCXH; string sCXH_TMP2 = ""; string sCXH_TMP3 = ""; if (sYFLX.Trim() == "XLXH") { sYFC = ""; sCXH_TMP = sCXH; while (sCXH_TMP.IndexOf("B") >= 0) { sYFC += "[" + sCXH_TMP.Substring(sCXH_TMP.IndexOf("B"), 2).Replace("B", "前缀码") + "]"; sCXH_TMP = sCXH_TMP.Substring(sCXH_TMP.IndexOf("B") + 2); } sCXH_TMP = sCXH; while (sCXH_TMP.IndexOf("A") >= 0) { sYFC += "[" + sCXH_TMP.Substring(sCXH_TMP.IndexOf("A"), 2).Replace("A", "型号码") + "]"; sCXH_TMP = sCXH_TMP.Substring(sCXH_TMP.IndexOf("A") + 2); } sCXH_TMP = sCXH; while (sCXH_TMP.IndexOf("C") >= 0) { sYFC += "[" + sCXH_TMP.Substring(sCXH_TMP.IndexOf("C"), 2).Replace("C", "后缀码") + "]"; sCXH_TMP = sCXH_TMP.Substring(sCXH_TMP.IndexOf("C") + 2); } return sYFC; } else if (sYFLX.Trim() == "XLGG") { sYFC = ""; sCXH_TMP = sCXH; if (sCPH == "A1") { if (sCXH_TMP.IndexOf("A") >= 0) sYFC = "[截面a]"; } else if (sCPH == "A2") { if (sCXH_TMP.IndexOf("A") >= 0) sYFC = "[截面a]/[截面b]"; } else if (sCPH == "A1B1") { if ((sCXH_TMP.IndexOf("B") >= 0) && (sCXH_TMP.IndexOf("A") >= 0)) sYFC = "[" + sCXH_TMP.Substring(sCXH_TMP.IndexOf("B"), 2).Replace("B", "芯数") + "]*[" + sCXH_TMP.Substring(sCXH_TMP.IndexOf("A"), 2).Replace("A", "截面") + "]"; } else if (sCPH == "A1B2") { sCXH_TMP2 = sCXH_TMP.Substring(sCXH_TMP.IndexOf("A") + 2); if ((sCXH_TMP.IndexOf("B") >= 0) && (sCXH_TMP.IndexOf("A") >= 0) && (sCXH_TMP2.IndexOf("A") >= 0)) sYFC = "[" + sCXH_TMP.Substring(sCXH_TMP.IndexOf("B"), 2).Replace("B", "芯数") + "]*[" + sCXH_TMP.Substring(sCXH_TMP.IndexOf("A"), 2).Replace("A", "截面") + "]" + "+[" + sCXH_TMP.Substring(sCXH_TMP.IndexOf("B"), 2).Replace("B", "芯数") + "]*[" + sCXH_TMP2.Substring(sCXH_TMP2.IndexOf("A"), 2).Replace("A", "截面") + "]"; } else if (sCPH == "A2B2") { sCXH_TMP2 = sCXH_TMP.Substring(sCXH_TMP.IndexOf("A") + 2); sCXH_TMP3 = sCXH_TMP.Substring(sCXH_TMP.IndexOf("B") + 2); if ((sCXH_TMP.IndexOf("B") >= 0) && (sCXH_TMP.IndexOf("A") >= 0) && (sCXH_TMP3.IndexOf("B") >= 0) && (sCXH_TMP2.IndexOf("A") >= 0)) sYFC = "[" + sCXH_TMP.Substring(sCXH_TMP.IndexOf("B"), 2).Replace("B", "芯数") + "]*[" + sCXH_TMP.Substring(sCXH_TMP.IndexOf("A"), 2).Replace("A", "截面") + "]" + "+[" + sCXH_TMP3.Substring(sCXH_TMP3.IndexOf("B"), 2).Replace("B", "芯数") + "]*[" + sCXH_TMP2.Substring(sCXH_TMP2.IndexOf("A"), 2).Replace("A", "截面") + "]"; } else if (sCPH == "A1B1C1") { if ((sCXH_TMP.IndexOf("A") >= 0) && (sCXH_TMP.IndexOf("B") >= 0) && (sCXH_TMP.IndexOf("C") >= 0)) sYFC = "[" + sCXH_TMP.Substring(sCXH_TMP.IndexOf("C"), 2).Replace("C", "线对数") + "]*[" + sCXH_TMP.Substring(sCXH_TMP.IndexOf("B"), 2).Replace("B", "芯数") + "]" + "*[" + sCXH_TMP.Substring(sCXH_TMP.IndexOf("A"), 2).Replace("A", "截面") + "]"; } else if (sCPH == "A1B1D1") { if ((sCXH_TMP.IndexOf("A") >= 0) && (sCXH_TMP.IndexOf("B") >= 0) && (sCXH_TMP.IndexOf("D") >= 0)) sYFC = "[" + sCXH_TMP.Substring(sCXH_TMP.IndexOf("D"), 2).Replace("D", "线组数") + "]*[" + sCXH_TMP.Substring(sCXH_TMP.IndexOf("B"), 2).Replace("B", "芯数") + "]" + "*[" + sCXH_TMP.Substring(sCXH_TMP.IndexOf("A"), 2).Replace("A", "截面") + "]"; } if ((sYFC.Trim() == "") && (sCXH.Trim() != "")) { sCXH_TMP = sCXH; sYFC = sCXH_TMP.Replace("A", "][截面").Replace("B", "][芯数").Replace("C", "][线对数").Replace("D", "][线组数"); sYFC = sYFC.Substring(1) + "]"; } return sYFC; } else if (sYFLX.Trim() == "DYDJ") { sYFC = ""; sCXH_TMP = sCXH; if (sCPH == "A1") { if (sCXH_TMP.IndexOf("A") >= 0) sYFC = "[相电压a]"; } else if (sCPH == "B1") { if (sCXH_TMP.IndexOf("B") >= 0) sYFC = "[线电压a]"; } else if (sCPH == "A1B1") { if ((sCXH_TMP.IndexOf("A") >= 0) && (sCXH_TMP.IndexOf("B") >= 0)) sYFC = "[" + sCXH_TMP.Substring(sCXH_TMP.IndexOf("A"), 2).Replace("A", "相电压") + "]/[" + sCXH_TMP.Substring(sCXH_TMP.IndexOf("B"), 2).Replace("B", "线电压") + "]"; } else if (sCPH == "B1C1") { if ((sCXH_TMP.IndexOf("B") >= 0) && (sCXH_TMP.IndexOf("C") >= 0)) sYFC = "[" + sCXH_TMP.Substring(sCXH_TMP.IndexOf("B"), 2).Replace("B", "线电压") + "][" + sCXH_TMP.Substring(sCXH_TMP.IndexOf("C"), 2).Replace("C", "电压单位") + "]"; } else if (sCPH == "A1B1C1") { if ((sCXH_TMP.IndexOf("A") >= 0) && (sCXH_TMP.IndexOf("B") >= 0) && (sCXH_TMP.IndexOf("C") >= 0)) sYFC = "[" + sCXH_TMP.Substring(sCXH_TMP.IndexOf("A"), 2).Replace("A", "相电压") + "]/[" + sCXH_TMP.Substring(sCXH_TMP.IndexOf("B"), 2).Replace("B", "线电压") + "]" + "[" + sCXH_TMP.Substring(sCXH_TMP.IndexOf("C"), 2).Replace("C", "电压单位") + "]"; } if ((sYFC.Trim() == "") && (sCXH.Trim() != "")) { sCXH_TMP = sCXH; sYFC = sCXH_TMP.Replace("A", "][相电压").Replace("B", "][线电压").Replace("C", "][电压单位"); sYFC = sYFC.Substring(1) + "]"; } return sYFC; } else if (sYFLX.Trim() == "XLBZ") { sYFC = ""; sCXH_TMP = sCXH; if (sCPH == "A1") { if (sCXH_TMP.IndexOf("A") >= 0) sYFC = "[标准名a]"; } if ((sYFC.Trim() == "") && (sCXH.Trim() != "")) { sCXH_TMP = sCXH; sYFC = sCXH_TMP.Replace("A", "][标准名"); sYFC = sYFC.Substring(1) + "]"; } return sYFC; } else if (sYFLX.Trim() == "XLYS") { sYFC = ""; sCXH_TMP = sCXH; if (sCPH == "A1") { if (sCXH_TMP.IndexOf("A") >= 0) sYFC = "[颜色名a]"; } else if (sCPH == "A2") { if (sCXH_TMP.IndexOf("A") >= 0) sYFC = "[颜色名a][颜色名b]"; } if ((sYFC.Trim() == "") && (sCXH.Trim() != "")) { sCXH_TMP = sCXH; sYFC = sCXH_TMP.Replace("A", "][颜色名"); sYFC = sYFC.Substring(1) + "]"; } return sYFC; } return ""; } // 安全的Trim处理函数 /// /// 缺失要素多选筛选:XLXH=线缆型号 XLGG=线缆规格 XLBZ=线缆标准 DYDJ=电压等级,多选为 OR 关系 /// private static void AppendMissingElementFilter(TSQL sSQL, string sQSYS) { if (string.IsNullOrEmpty(sQSYS)) return; List conditions = new List(); string[] items = sQSYS.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string raw in items) { switch (raw.Trim()) { case "XLXH": conditions.Add("isnull(XLJXMX_JXXLXHID,' ') = ' '"); break; case "XLGG": conditions.Add("isnull(XLJXMX_JXXLGGID,' ') = ' '"); break; case "XLBZ": conditions.Add("isnull(XLJXMX_JXXLBZID,' ') = ' '"); break; case "DYDJ": conditions.Add("isnull(XLJXMX_JXDYDJID,' ') = ' '"); break; } } if (conditions.Count > 0) sSQL.Add(" AND (" + string.Join(" and ", conditions.ToArray()) + ") "); } private static string SafeTrim(object value) { if (value == null || value == DBNull.Value) { return string.Empty; } return value.ToString().Trim(); } public static string GetBZID(string sMC) { TDatabase dberp = TContextDatabases.GetDatabase("DBERP"); TSQL SQL = new TSQL(dberp); SQL.Clear(); SQL.Clear(); SQL.Add(" select XLBZ_XLBZID,XLBZ_XLBZLXMC from XLBZ "); SQL.Add(" where 1=1 and XLBZ_XLBZLXMC=:pXLBZ_XLBZID order by XLBZ_XLBZID"); SQL.ParamByName("pXLBZ_XLBZID").Value = sMC; DataSet ds = dberp.OpenDataSet(SQL); if (ds.Tables[0].Rows.Count > 0) { return ds.Tables[0].Rows[0]["XLBZ_XLBZID"].ToString().Trim(); } else { return sMC; } } public static BJXX GetBJDXX(string sBJDID) { TDatabase dberp = TContextDatabases.GetDatabase("DBERP"); TSQL SQL = new TSQL(dberp); BJXX bjdxx = new BJXX(); SQL.Clear(); SQL.Add(" select XLXSBJD_JGBID,XLXSBJD_BJRQ,XLXSBJD_BJFLID from XLXSBJD "); SQL.Add(" where XLXSBJD_BJDID=:pBJDID "); SQL.ParamByName("pBJDID").Value = sBJDID; DataSet ds = dberp.OpenDataSet(SQL); if (ds.Tables[0].Rows.Count > 0) { bjdxx.JGBID = ds.Tables[0].Rows[0]["XLXSBJD_JGBID"].ToString().Trim(); bjdxx.BJRQ = ds.Tables[0].Rows[0]["XLXSBJD_BJRQ"].ToString().Trim(); bjdxx.BJFLID = ds.Tables[0].Rows[0]["XLXSBJD_BJFLID"].ToString().Trim(); } else { bjdxx.JGBID = ""; bjdxx.BJRQ = ""; bjdxx.BJFLID = ""; } return bjdxx; } public static bool IsJGE(string sJGBID) { if (CMISproDataBase.ExistsRecord("DBERP", string.Format("select 1 from XLXSJGB where XLXSJGB_JGBID='{0}' and XLXSJGB_MXBH='JGB'", sJGBID.Trim()))) return false; else return true; } public static void MatchForXLBZIDAndDYDJID(TDatabase dberp, TSQL SQL, string sJGBID, string sSELBJDID, CMISproSession CurSession) { //bool bBPPDY = XLBJDUtils.GetXLXSBJPZXX(100860043).XLXSBJPZ_BZDPPDY.Trim().Equals("Y"); bool bBPPDY = false; //清空电压&标准后匹配,会直接将所选记录型号,规格不为空的标准和电压等级全部置空 //型号规格 可以获取唯一值,点击匹配按钮会直接匹配上标准和电压等级。 //型号规格标准 可以获取唯一值,点击匹配按钮会直接匹配上电压等级。 //型号规格电压等级可以获取唯一值,点击匹配按钮会直接匹配上标准。 //----------------------------------------------------------------- SQL.Clear(); SQL.Add("update XLXSBJDMX set XLXSBJDMX_WHR=:pFlag"); SQL.Add(" where XLXSBJDMX_BJDID=:pBJDID"); SQL.Add(" and XLXSBJDMX_DYDJID = ' '"); SQL.ParamByName("pFlag").Value = "DY"; SQL.ParamByName("pBJDID").Value = sSELBJDID; dberp.ExecSQL(SQL); //先匹配型号相同,规格为空的记录更新外部报价单明细 SQL.Clear(); SQL.Add("merge into XLXSBJDMX tar "); SQL.Add(" using XLXSBJCPMRBZDY sor "); SQL.Add(" on(XLXSBJCPMRBZDY_XLXHID=XLXSBJDMX_XLXHID and XLXSBJCPMRBZDY_XLGGID=' ' "); SQL.Add(" and XLXSBJDMX_WHR='DY'"); SQL.Add(" and XLXSBJDMX_BJDID=:pBJDID ) "); SQL.Add(" when matched then update set "); SQL.Add(" XLXSBJDMX_XLBZID=isnull(XLXSBJCPMRBZDY_XLBZID,' ') "); if (!bBPPDY) SQL.Add(" ,XLXSBJDMX_DYDJID=isnull(XLXSBJCPMRBZDY_DYDJID,' ') "); SQL.ParamByName("pBJDID").Value = sSELBJDID; dberp.ExecSQL(SQL); //后匹配型号、规格相等的记录更新外部报价单明细 SQL.Clear(); SQL.Add("merge into XLXSBJDMX tar "); SQL.Add(" using XLXSBJCPMRBZDY sor "); SQL.Add(" on(XLXSBJCPMRBZDY_XLXHID=XLXSBJDMX_XLXHID and XLXSBJCPMRBZDY_XLGGID=XLXSBJDMX_XLGGID "); SQL.Add(" and XLXSBJDMX_WHR='DY'"); SQL.Add(" and XLXSBJDMX_BJDID=:pBJDID ) "); SQL.Add(" when matched then update set "); SQL.Add(" XLXSBJDMX_XLBZID=isnull(XLXSBJCPMRBZDY_XLBZID,' ') "); if (!bBPPDY) SQL.Add(" ,XLXSBJDMX_DYDJID=isnull(XLXSBJCPMRBZDY_DYDJID,' ') "); SQL.ParamByName("pBJDID").Value = sSELBJDID; dberp.ExecSQL(SQL); SQL.Clear(); SQL.Add("update XLXSBJDMX set XLXSBJDMX_WHR=:pWHR"); SQL.Add(" where XLXSBJDMX_BJDID=:pBJDID"); SQL.Add(" and XLXSBJDMX_WHR='DY' "); SQL.ParamByName("pWHR").Value = CurSession.UserName; SQL.ParamByName("pBJDID").Value = sSELBJDID; dberp.ExecSQL(SQL); SQL.Clear(); SQL.Add("update XLXSBJDMX set XLXSBJDMX_WHR=:pFlag"); SQL.Add(" where XLXSBJDMX_BJDID=:pBJDID"); SQL.Add(" and XLXSBJDMX_XLBZID = ' ' and ISNULL(XLXSBJDMX_DYDJID,' ') <> ' ' "); SQL.ParamByName("pFlag").Value = "BZ"; SQL.ParamByName("pBJDID").Value = sSELBJDID; dberp.ExecSQL(SQL); //再匹配型号、规格、电压相等的记录更新到外部报价单明细 SQL.Clear(); SQL.Add("merge into XLXSBJDMX tar "); SQL.Add(" using XLXSBJCPMRBZDY sor "); SQL.Add(" on(XLXSBJCPMRBZDY_XLXHID=XLXSBJDMX_XLXHID and XLXSBJCPMRBZDY_XLGGID=XLXSBJDMX_XLGGID and XLXSBJCPMRBZDY_DYDJID=XLXSBJDMX_DYDJID "); SQL.Add(" and XLXSBJDMX_WHR='BZ'"); SQL.Add(" and XLXSBJDMX_BJDID=:pBJDID ) "); SQL.Add(" when matched then update set "); SQL.Add(" XLXSBJDMX_XLBZID=isnull(XLXSBJCPMRBZDY_XLBZID,' ') "); SQL.ParamByName("pBJDID").Value = sSELBJDID; dberp.ExecSQL(SQL); SQL.Clear(); SQL.Add("update XLXSBJDMX set XLXSBJDMX_WHR=:pWHR"); SQL.Add(" where XLXSBJDMX_BJDID=:pBJDID"); SQL.Add(" and XLXSBJDMX_WHR='BZ' "); SQL.ParamByName("pWHR").Value = CurSession.UserName; SQL.ParamByName("pBJDID").Value = sSELBJDID; dberp.ExecSQL(SQL); string sWBPPZXSX = "D"; //string sWBPPZXSX = "A"; N_XLXSBJ.XLXSBJPZXX pzxx = XLBJDUtils.GetXLXSBJPZXX(100860043); //if (!string.IsNullOrEmpty(pzxx.XLXSBJPZ_WBPPZXSX)) // sWBPPZXSX = pzxx.XLXSBJPZ_WBPPZXSX; string sDefXLBZID = ""; string sDefDYDJID = ""; pzxx = XLBJDUtils.GetXLXSBJPZXX(100860000); if (!string.IsNullOrEmpty(XLBJDUtils.GetXLXSBJPZXX(100860140).XLXSBJPZ_MRXLBZID)) sDefXLBZID = XLBJDUtils.GetXLXSBJPZXX(100860140).XLXSBJPZ_MRXLBZID; if (!string.IsNullOrEmpty(pzxx.XLXSBJPZ_MRDYDJ)) sDefDYDJID = pzxx.XLXSBJPZ_MRDYDJ; if (!sDefXLBZID.Equals("FirstBZ")) { SQL.Clear(); SQL.Add("update XLXSBJDMX set XLXSBJDMX_XLBZID=:pFlag,XLXSBJDMX_XDXLBZID=:pFlag "); SQL.Add(" where XLXSBJDMX_BJDID=:pBJDID"); SQL.Add(" and isnull(XLXSBJDMX_XLBZID,' ') = ' '"); SQL.ParamByName("pFlag").Value = sDefXLBZID; SQL.ParamByName("pBJDID").Value = sSELBJDID; dberp.ExecSQL(SQL); } /* A:线缆销售材料清单 B:线缆销售价格表 C:先材料清单再价格表 D:先价格表再材料清单 */ string ErrorNo = ""; try { if (sWBPPZXSX.Equals("B") || sWBPPZXSX.Equals("D")) { MatchForXLXSJGBMX(dberp, SQL, sJGBID, sSELBJDID, sDefXLBZID, sDefDYDJID, ref ErrorNo, CurSession); if (sWBPPZXSX.Equals("D")) { MatchForXLXSCLQD(dberp, SQL, sJGBID, sSELBJDID, sDefXLBZID, sDefDYDJID, ref ErrorNo, CurSession); } } else { MatchForXLXSCLQD(dberp, SQL, sJGBID, sSELBJDID, sDefXLBZID, sDefDYDJID, ref ErrorNo, CurSession); if (sWBPPZXSX.Equals("C")) { MatchForXLXSJGBMX(dberp, SQL, sJGBID, sSELBJDID, sDefXLBZID, sDefDYDJID, ref ErrorNo, CurSession); } } } catch (Exception ex) { } } public static void MatchForXLXSJGBMX(TDatabase dberp, TSQL SQL, string sJGBID, string sSELBJDID, string sDefXLBZID, string sDefDYDJID, ref string ErrorNo, CMISproSession CurSession) { bool bBPPDY = XLBJDUtils.GetXLXSBJPZXX(100860043).XLXSBJPZ_BZDPPDY.Trim().Equals("Y"); //string sJGFID = XLBJDUtils.GetJGFID(PageParam.GetRTrimString("BJRQ")); //if (!sJGFID.Equals("")) //{ // if (!sJGBID.Equals("")) // { // sJGBID += "," + sJGFID; // } // else // { // sJGBID = sJGFID; // } //} if (dberp.DriverName == "ORACLE")//Oracle下merge into语法被更新的字段不能作为关联条件使用,专门处理 { SQL.Clear(); SQL.Add("update XLXSBJDMX set XLXSBJDMX_WHR=:pFlag"); SQL.Add(" where XLXSBJDMX_BJDID=:pBJDID"); SQL.Add(" and XLXSBJDMX_XLBZID = ' ' and XLXSBJDMX_DYDJID = ' '"); SQL.ParamByName("pFlag").Value = "BZ_DY"; SQL.ParamByName("pBJDID").Value = sSELBJDID; dberp.ExecSQL(SQL); } //使用价格表明细 /* merge into 目标表 tar using 源表 sor on(a.条件字段1=b.条件字段1 and tar.条件字段2=b.条件字段2 ……) when matched then update set a.更新字段=b.字段 when not matched then insert into a(字段1,字段2……)values(值1,值2……) */ if (sDefXLBZID.Equals("")) { ErrorNo = "1.1"; #region 根据型号、规格,匹配唯一标准、电压等级 SQL.Clear(); SQL.Add("merge into XLXSBJDMX tar "); SQL.Add(" using ( "); SQL.Add(" select XLXSJGBMX_XLXHID as XLXHID,XLXSJGBMX_XLGGID as XLGGID, XLXSJGBMX_XLBZID as XLBZID, XLXSJGBMX_DYDJID as DYDJID "); SQL.Add(" from XLXSJGBMX b "); SQL.Add(" where 1=1 and " + CMISproDataBase.GetWhereEqual("XLXSJGBMX_JGBID", sJGBID)); //缩小价格表明细的范围 SQL.Add(" and exists(select 1 from XLXSBJDMX tmp where XLXSBJDMX_BJDID=:pBJDID "); SQL.Add(" and XLXSBJDMX_XLXHID=b.XLXSJGBMX_XLXHID"); SQL.Add(" and XLXSBJDMX_XLGGID=b.XLXSJGBMX_XLGGID"); SQL.Add(" )"); //根据型号、规格就能唯一确定产品的价格表明细记录 SQL.Add(" and exists ( "); SQL.Add(" select a.XLXHID, a.XLGGID from "); SQL.Add(" ( "); SQL.Add(" select XLXSJGBMX_XLXHID as XLXHID,XLXSJGBMX_XLGGID as XLGGID "); SQL.Add(" from XLXSJGBMX"); SQL.Add(" where 1=1 and " + CMISproDataBase.GetWhereEqual("XLXSJGBMX_JGBID", sJGBID)); //缩小价格表明细的范围 SQL.Add(" and exists(select 1 from XLXSBJDMX tmp where XLXSBJDMX_BJDID=:pBJDID "); SQL.Add(" and XLXSBJDMX_XLXHID=XLXSJGBMX_XLXHID"); SQL.Add(" and XLXSBJDMX_XLGGID=XLXSJGBMX_XLGGID"); SQL.Add(" )"); SQL.Add(" group by XLXSJGBMX_XLXHID,XLXSJGBMX_XLGGID "); SQL.Add(" having (count(XLXSJGBMX_XLXHID) + count(XLXSJGBMX_XLGGID)) = 2 "); SQL.Add(" ) a where 1=1 and a.XLXHID = b.XLXSJGBMX_XLXHID and a.XLGGID =b.XLXSJGBMX_XLGGID "); SQL.Add(" ) "); SQL.Add(" ) sor "); SQL.Add(" on( "); SQL.Add(" tar.XLXSBJDMX_XLXHID = sor.XLXHID "); SQL.Add(" and tar.XLXSBJDMX_XLGGID = sor.XLGGID "); SQL.Add(" and tar.XLXSBJDMX_XLXHID <> ' ' and tar.XLXSBJDMX_XLGGID <> ' ' "); if (dberp.DriverName == "ORACLE")//Oracle下merge into语法被更新的字段不能作为关联条件使用,专门处理 SQL.Add(" and tar.XLXSBJDMX_WHR = 'BZ_DY' "); else SQL.Add(" and tar.XLXSBJDMX_XLBZID = ' ' and tar.XLXSBJDMX_DYDJID = ' ' "); SQL.Add(" and tar.XLXSBJDMX_BJDID=:pBJDID "); SQL.Add(" ) "); SQL.Add(" when matched then update set "); SQL.Add(" tar.XLXSBJDMX_XLBZID =sor.XLBZID,tar.XLXSBJDMX_XDXLBZID=sor.XLBZID "); if (!bBPPDY) SQL.Add(", tar.XLXSBJDMX_DYDJID=sor.DYDJID "); SQL.ParamByName("pBJDID").Value = sSELBJDID; dberp.ExecSQL(SQL); #endregion } else if (sDefXLBZID.Equals("FirstBZ")) { ErrorNo = "1.2"; #region 根据型号、规格,匹配第一个标准 SQL.Clear(); SQL.Add("merge into XLXSBJDMX tar "); SQL.Add(" using ( "); SQL.Add(" select XLXSJGBMX_XLXHID as XLXHID,XLXSJGBMX_XLGGID as XLGGID,isnull(XLBZ_XLBZID,' ') as XLBZID"); SQL.Add(" from"); SQL.Add(" ("); SQL.Add(" select XLXSJGBMX_XLXHID,XLXSJGBMX_XLGGID, min(isnull(XLBZPX,0)) as minXLBZPX "); SQL.Add(" from XLXSJGBMX b "); SQL.Add(" left join (select row_number()over(order by XLBZ_DZSC,XLBZ_PX,XLBZ_XLBZID) as XLBZPX,XLBZ_XLBZID from XLBZ where 1=1) tmpXLBZ on XLBZ_XLBZID=XLXSJGBMX_XLBZID"); SQL.Add(" where 1=1 and " + CMISproDataBase.GetWhereEqual("XLXSJGBMX_JGBID", sJGBID)); //缩小价格表明细的范围 SQL.Add(" and exists(select 1 from XLXSBJDMX tmp where XLXSBJDMX_BJDID=:pBJDID "); SQL.Add(" and XLXSBJDMX_XLXHID=b.XLXSJGBMX_XLXHID"); SQL.Add(" and XLXSBJDMX_XLGGID=b.XLXSJGBMX_XLGGID"); SQL.Add(" )"); SQL.Add(" group by XLXSJGBMX_XLXHID,XLXSJGBMX_XLGGID"); SQL.Add(" ) jgbmx"); SQL.Add(" left join (select row_number()over(order by XLBZ_DZSC,XLBZ_PX,XLBZ_XLBZID) as XLBZPX,XLBZ_XLBZID from XLBZ where 1=1) tmpXLBZ on XLBZPX=minXLBZPX"); SQL.Add(" where 1=1"); SQL.Add(" ) sor "); SQL.Add(" on( "); SQL.Add(" tar.XLXSBJDMX_XLXHID = sor.XLXHID "); SQL.Add(" and tar.XLXSBJDMX_XLGGID = sor.XLGGID "); SQL.Add(" and tar.XLXSBJDMX_XLXHID <> ' ' and tar.XLXSBJDMX_XLGGID <> ' ' "); if (dberp.DriverName == "ORACLE")//Oracle下merge into语法被更新的字段不能作为关联条件使用,专门处理 SQL.Add(" and tar.XLXSBJDMX_WHR = 'BZ_DY' "); else SQL.Add(" and tar.XLXSBJDMX_XLBZID = ' ' and tar.XLXSBJDMX_DYDJID = ' ' "); SQL.Add(" and tar.XLXSBJDMX_BJDID=:pBJDID "); SQL.Add(" ) "); SQL.Add(" when matched then update set "); SQL.Add(" tar.XLXSBJDMX_XLBZID =sor.XLBZID,tar.XLXSBJDMX_XDXLBZID=sor.XLBZID "); SQL.ParamByName("pBJDID").Value = sSELBJDID; dberp.ExecSQL(SQL); #endregion } if (dberp.DriverName == "ORACLE")//Oracle下merge into语法被更新的字段不能作为关联条件使用,专门处理 { SQL.Clear(); SQL.Add("update XLXSBJDMX set XLXSBJDMX_WHR=:pFlag"); SQL.Add(" where XLXSBJDMX_BJDID=:pBJDID"); SQL.Add(" and XLXSBJDMX_XLBZID <> ' ' and XLXSBJDMX_DYDJID = ' '"); SQL.ParamByName("pFlag").Value = "DY"; SQL.ParamByName("pBJDID").Value = sSELBJDID; dberp.ExecSQL(SQL); } if (!bBPPDY) { if (sDefDYDJID.Equals("minDY")) { ErrorNo = "2.1"; #region 根据型号、规格、标准,匹配第一个电压等级 SQL.Clear(); SQL.Add("merge into XLXSBJDMX tar "); SQL.Add(" using ("); SQL.Add(" select XLXSJGBMX_XLXHID as XLXHID,XLXSJGBMX_XLGGID as XLGGID, XLXSJGBMX_XLBZID as XLBZID, isnull(XLDYDJB_DYDJID,' ') as DYDJID, PPSL "); SQL.Add(" from"); SQL.Add(" ("); SQL.Add(" select XLXSJGBMX_XLXHID,XLXSJGBMX_XLGGID, XLXSJGBMX_XLBZID,min(isnull(DYDJPX,0)) as minDYDJPX,sum(1) as PPSL ");//匹配数量等于1则表示唯一匹配 SQL.Add(" from XLXSJGBMX b "); SQL.Add(" left join (select row_number()over(order by XLDYDJB_XH,XLDYDJB_DYDJID) as DYDJPX,XLDYDJB_DYDJID from XLDYDJB where 1=1) tmpXLDY on XLDYDJB_DYDJID=XLXSJGBMX_DYDJID"); SQL.Add(" where 1=1 and " + CMISproDataBase.GetWhereEqual("XLXSJGBMX_JGBID", sJGBID)); //缩小价格表明细的范围 SQL.Add(" and exists(select 1 from XLXSBJDMX tmp where XLXSBJDMX_BJDID=:pBJDID "); SQL.Add(" and XLXSBJDMX_XLXHID=b.XLXSJGBMX_XLXHID"); SQL.Add(" and XLXSBJDMX_XLGGID=b.XLXSJGBMX_XLGGID"); SQL.Add(" and XLXSBJDMX_XLBZID=b.XLXSJGBMX_XLBZID"); SQL.Add(" )"); SQL.Add(" group by XLXSJGBMX_XLXHID,XLXSJGBMX_XLGGID,XLXSJGBMX_XLBZID"); SQL.Add(" ) jgbmx"); SQL.Add(" left join (select row_number()over(order by XLDYDJB_XH,XLDYDJB_DYDJID) as DYDJPX,XLDYDJB_DYDJID from XLDYDJB where 1=1) DYDJ on DYDJ.DYDJPX=minDYDJPX"); SQL.Add(" where 1=1"); SQL.Add(" ) sor "); SQL.Add(" on( "); SQL.Add(" tar.XLXSBJDMX_XLXHID = sor.XLXHID "); SQL.Add(" and tar.XLXSBJDMX_XLGGID = sor.XLGGID "); SQL.Add(" and tar.XLXSBJDMX_XLBZID = sor.XLBZID "); SQL.Add(" and tar.XLXSBJDMX_XLXHID <> ' ' and tar.XLXSBJDMX_XLGGID <> ' ' and sor.PPSL >=1 ");//匹配数量等于1表示唯一匹配,无需考虑XLXSBJDMX_BJCPDYDJID if (dberp.DriverName == "ORACLE")//Oracle下merge into语法被更新的字段不能作为关联条件使用,专门处理 SQL.Add(" and tar.XLXSBJDMX_WHR = 'DY' "); else SQL.Add(" and tar.XLXSBJDMX_XLBZID <> ' ' and tar.XLXSBJDMX_DYDJID = ' ' "); SQL.Add(" and tar.XLXSBJDMX_BJDID=:pBJDID "); SQL.Add(" ) "); SQL.Add(" when matched then update set "); SQL.Add(" tar.XLXSBJDMX_DYDJID=sor.DYDJID "); SQL.ParamByName("pBJDID").Value = sSELBJDID; dberp.ExecSQL(SQL); #endregion } else { ErrorNo = "2.2"; #region 根据型号、规格、标准,匹配唯一电压等级 SQL.Clear(); SQL.Add("merge into XLXSBJDMX tar "); SQL.Add(" using ( "); SQL.Add(" select XLXSJGBMX_XLXHID as XLXHID,XLXSJGBMX_XLGGID as XLGGID, XLXSJGBMX_XLBZID as XLBZID, XLXSJGBMX_DYDJID as DYDJID "); SQL.Add(" from XLXSJGBMX b "); SQL.Add(" where 1=1 and " + CMISproDataBase.GetWhereEqual("XLXSJGBMX_JGBID", sJGBID)); //缩小价格表明细的范围 SQL.Add(" and exists(select 1 from XLXSBJDMX tmp where XLXSBJDMX_BJDID=:pBJDID "); SQL.Add(" and XLXSBJDMX_XLXHID=b.XLXSJGBMX_XLXHID"); SQL.Add(" and XLXSBJDMX_XLGGID=b.XLXSJGBMX_XLGGID"); SQL.Add(" and XLXSBJDMX_XLBZID=b.XLXSJGBMX_XLBZID"); SQL.Add(" )"); //根据型号、规格、标准就能唯一确定产品的价格表明细记录 SQL.Add(" and exists ( "); SQL.Add(" select a.XLXHID, a.XLGGID from "); SQL.Add(" ( "); SQL.Add(" select XLXSJGBMX_XLXHID as XLXHID,XLXSJGBMX_XLGGID as XLGGID, XLXSJGBMX_XLBZID as XLBZID "); SQL.Add(" from XLXSJGBMX"); SQL.Add(" where 1=1 and " + CMISproDataBase.GetWhereEqual("XLXSJGBMX_JGBID", sJGBID)); //缩小价格表明细的范围 SQL.Add(" and exists(select 1 from XLXSBJDMX tmp where XLXSBJDMX_BJDID=:pBJDID "); SQL.Add(" and XLXSBJDMX_XLXHID=XLXSJGBMX_XLXHID"); SQL.Add(" and XLXSBJDMX_XLGGID=XLXSJGBMX_XLGGID"); SQL.Add(" and XLXSBJDMX_XLBZID=XLXSJGBMX_XLBZID"); SQL.Add(" )"); SQL.Add(" group by XLXSJGBMX_XLXHID,XLXSJGBMX_XLGGID, XLXSJGBMX_XLBZID "); SQL.Add(" having (count(XLXSJGBMX_XLXHID) + count(XLXSJGBMX_XLGGID) + count(XLXSJGBMX_XLBZID)) = 3 "); SQL.Add(" ) a where 1=1 and a.XLXHID = b.XLXSJGBMX_XLXHID and a.XLGGID =b.XLXSJGBMX_XLGGID and a.XLBZID = b.XLXSJGBMX_XLBZID "); SQL.Add(" ) "); SQL.Add(" ) sor "); SQL.Add(" on( "); SQL.Add(" tar.XLXSBJDMX_XLXHID = sor.XLXHID "); SQL.Add(" and tar.XLXSBJDMX_XLGGID = sor.XLGGID "); SQL.Add(" and tar.XLXSBJDMX_XLBZID = sor.XLBZID "); SQL.Add(" and tar.XLXSBJDMX_XLXHID <> ' ' and tar.XLXSBJDMX_XLGGID <> ' ' "); if (dberp.DriverName == "ORACLE")//Oracle下merge into语法被更新的字段不能作为关联条件使用,专门处理 SQL.Add(" and tar.XLXSBJDMX_WHR = 'DY' "); else SQL.Add(" and tar.XLXSBJDMX_XLBZID <> ' ' and tar.XLXSBJDMX_DYDJID = ' ' "); SQL.Add(" and tar.XLXSBJDMX_BJDID=:pBJDID "); SQL.Add(" ) "); SQL.Add(" when matched then update set "); SQL.Add(" tar.XLXSBJDMX_DYDJID=sor.DYDJID "); SQL.ParamByName("pBJDID").Value = sSELBJDID; dberp.ExecSQL(SQL); #endregion } } if (dberp.DriverName == "ORACLE")//Oracle下merge into语法被更新的字段不能作为关联条件使用,专门处理 { SQL.Clear(); SQL.Add("update XLXSBJDMX set XLXSBJDMX_WHR=:pFlag"); SQL.Add(" where XLXSBJDMX_BJDID=:pBJDID"); SQL.Add(" and XLXSBJDMX_XLBZID = ' ' and XLXSBJDMX_DYDJID <> ' '"); SQL.ParamByName("pFlag").Value = "BZ"; SQL.ParamByName("pBJDID").Value = sSELBJDID; dberp.ExecSQL(SQL); } if (sDefXLBZID.Equals("")) { ErrorNo = "3.1"; #region 根据型号、规格、电压等级,匹配唯一标准 SQL.Clear(); SQL.Add("merge into XLXSBJDMX tar "); SQL.Add(" using ( "); SQL.Add(" select XLXSJGBMX_XLXHID as XLXHID,XLXSJGBMX_XLGGID as XLGGID, XLXSJGBMX_XLBZID as XLBZID, XLXSJGBMX_DYDJID as DYDJID "); SQL.Add(" from XLXSJGBMX b "); SQL.Add(" where 1=1 and " + CMISproDataBase.GetWhereEqual("XLXSJGBMX_JGBID", sJGBID)); //缩小价格表明细的范围 SQL.Add(" and exists(select 1 from XLXSBJDMX tmp where XLXSBJDMX_BJDID=:pBJDID "); SQL.Add(" and XLXSBJDMX_XLXHID=b.XLXSJGBMX_XLXHID"); SQL.Add(" and XLXSBJDMX_XLGGID=b.XLXSJGBMX_XLGGID"); SQL.Add(" and XLXSBJDMX_DYDJID=b.XLXSJGBMX_DYDJID"); SQL.Add(" )"); //根据型号、规格、标准就能唯一确定产品的价格表明细记录 SQL.Add(" and exists ( "); SQL.Add(" select a.XLXHID, a.XLGGID from "); SQL.Add(" ( "); SQL.Add(" select XLXSJGBMX_XLXHID as XLXHID,XLXSJGBMX_XLGGID as XLGGID, XLXSJGBMX_DYDJID as DYDJID "); SQL.Add(" from XLXSJGBMX"); SQL.Add(" where 1=1 and " + CMISproDataBase.GetWhereEqual("XLXSJGBMX_JGBID", sJGBID)); //缩小价格表明细的范围 SQL.Add(" and exists(select 1 from XLXSBJDMX tmp where XLXSBJDMX_BJDID=:pBJDID "); SQL.Add(" and XLXSBJDMX_XLXHID=XLXSJGBMX_XLXHID"); SQL.Add(" and XLXSBJDMX_XLGGID=XLXSJGBMX_XLGGID"); SQL.Add(" and XLXSBJDMX_DYDJID=XLXSJGBMX_DYDJID"); SQL.Add(" )"); SQL.Add(" group by XLXSJGBMX_XLXHID,XLXSJGBMX_XLGGID, XLXSJGBMX_DYDJID "); SQL.Add(" having (count(XLXSJGBMX_XLXHID) + count(XLXSJGBMX_XLGGID) + count(XLXSJGBMX_DYDJID)) = 3 "); SQL.Add(" ) a where 1=1 and a.XLXHID = b.XLXSJGBMX_XLXHID and a.XLGGID =b.XLXSJGBMX_XLGGID and a.DYDJID = b.XLXSJGBMX_DYDJID "); SQL.Add(" ) "); SQL.Add(" ) sor "); SQL.Add(" on( "); SQL.Add(" tar.XLXSBJDMX_XLXHID = sor.XLXHID "); SQL.Add(" and tar.XLXSBJDMX_XLGGID = sor.XLGGID "); SQL.Add(" and tar.XLXSBJDMX_DYDJID=sor.DYDJID "); SQL.Add(" and tar.XLXSBJDMX_XLXHID <> ' ' and tar.XLXSBJDMX_XLGGID <> ' ' "); if (dberp.DriverName == "ORACLE")//Oracle下merge into语法被更新的字段不能作为关联条件使用,专门处理 SQL.Add(" and tar.XLXSBJDMX_WHR = 'BZ' "); else SQL.Add(" and tar.XLXSBJDMX_XLBZID = ' ' and tar.XLXSBJDMX_DYDJID <> ' ' "); SQL.Add(" and tar.XLXSBJDMX_BJDID=:pBJDID "); SQL.Add(" ) "); SQL.Add(" when matched then update set "); SQL.Add(" tar.XLXSBJDMX_XLBZID =sor.XLBZID,tar.XLXSBJDMX_XDXLBZID=sor.XLBZID "); SQL.ParamByName("pBJDID").Value = sSELBJDID; dberp.ExecSQL(SQL); #endregion } else if (sDefXLBZID.Equals("FirstBZ")) { ErrorNo = "3.2"; #region 根据型号、规格、电压等级,匹配第一个标准 SQL.Clear(); SQL.Add("merge into XLXSBJDMX tar "); SQL.Add(" using ( "); SQL.Add(" select XLXSJGBMX_XLXHID as XLXHID,XLXSJGBMX_XLGGID as XLGGID,XLXSJGBMX_DYDJID as DYDJID,isnull(XLBZ_XLBZID,' ') as XLBZID"); SQL.Add(" from"); SQL.Add(" ("); SQL.Add(" select XLXSJGBMX_XLXHID,XLXSJGBMX_XLGGID,XLXSJGBMX_DYDJID, min(isnull(XLBZPX,0)) as minXLBZPX "); SQL.Add(" from XLXSJGBMX b "); SQL.Add(" left join (select row_number()over(order by XLBZ_DZSC,XLBZ_PX,XLBZ_XLBZID) as XLBZPX,XLBZ_XLBZID from XLBZ where 1=1) tmpXLBZ on XLBZ_XLBZID=XLXSJGBMX_XLBZID"); SQL.Add(" where 1=1 and " + CMISproDataBase.GetWhereEqual("XLXSJGBMX_JGBID", sJGBID)); //缩小价格表明细的范围 SQL.Add(" and exists(select 1 from XLXSBJDMX tmp where XLXSBJDMX_BJDID=:pBJDID "); SQL.Add(" and XLXSBJDMX_XLXHID=b.XLXSJGBMX_XLXHID"); SQL.Add(" and XLXSBJDMX_XLGGID=b.XLXSJGBMX_XLGGID"); SQL.Add(" and XLXSBJDMX_DYDJID=b.XLXSJGBMX_DYDJID"); SQL.Add(" )"); SQL.Add(" group by XLXSJGBMX_XLXHID,XLXSJGBMX_XLGGID,XLXSJGBMX_DYDJID"); SQL.Add(" ) jgbmx"); SQL.Add(" left join (select row_number()over(order by XLBZ_DZSC,XLBZ_PX,XLBZ_XLBZID) as XLBZPX,XLBZ_XLBZID from XLBZ where 1=1) tmpXLBZ on XLBZPX=minXLBZPX"); SQL.Add(" where 1=1"); SQL.Add(" ) sor "); SQL.Add(" on( "); SQL.Add(" tar.XLXSBJDMX_XLXHID = sor.XLXHID "); SQL.Add(" and tar.XLXSBJDMX_XLGGID = sor.XLGGID "); SQL.Add(" and tar.XLXSBJDMX_DYDJID=sor.DYDJID "); SQL.Add(" and tar.XLXSBJDMX_XLXHID <> ' ' and tar.XLXSBJDMX_XLGGID <> ' ' "); if (dberp.DriverName == "ORACLE")//Oracle下merge into语法被更新的字段不能作为关联条件使用,专门处理 SQL.Add(" and tar.XLXSBJDMX_WHR = 'BZ' "); else SQL.Add(" and tar.XLXSBJDMX_XLBZID = ' ' and tar.XLXSBJDMX_DYDJID <> ' ' "); SQL.Add(" and tar.XLXSBJDMX_BJDID=:pBJDID "); SQL.Add(" ) "); SQL.Add(" when matched then update set "); SQL.Add(" tar.XLXSBJDMX_XLBZID =sor.XLBZID,tar.XLXSBJDMX_XDXLBZID=sor.XLBZID "); SQL.ParamByName("pBJDID").Value = sSELBJDID; dberp.ExecSQL(SQL); #endregion } if (dberp.DriverName == "ORACLE")//Oracle下merge into语法被更新的字段不能作为关联条件使用,专门处理 { SQL.Clear(); SQL.Add("update XLXSBJDMX set XLXSBJDMX_WHR=:pWHR"); SQL.Add(" where XLXSBJDMX_BJDID=:pBJDID"); SQL.Add(" and (XLXSBJDMX_WHR='BZ_DY' or XLXSBJDMX_WHR='DY' or XLXSBJDMX_WHR='BZ')"); SQL.ParamByName("pWHR").Value = CurSession.UserName; SQL.ParamByName("pBJDID").Value = sSELBJDID; dberp.ExecSQL(SQL); } } public static void MatchForXLXSCLQD(TDatabase dberp, TSQL SQL, string sJGBID, string sSELBJDID, string sDefXLBZID, string sDefDYDJID, ref string ErrorNo, CMISproSession CurSession) { bool bBPPDY = XLBJDUtils.GetXLXSBJPZXX(100860043).XLXSBJPZ_BZDPPDY.Trim().Equals("Y"); if (dberp.DriverName == "ORACLE")//Oracle下merge into语法被更新的字段不能作为关联条件使用,专门处理 { SQL.Clear(); SQL.Add("update XLXSBJDMX set XLXSBJDMX_WHR=:pFlag"); SQL.Add(" where XLXSBJDMX_BJDID=:pBJDID"); SQL.Add(" and XLXSBJDMX_XLBZID = ' ' and XLXSBJDMX_DYDJID = ' '"); SQL.ParamByName("pFlag").Value = "BZ_DY"; SQL.ParamByName("pBJDID").Value = sSELBJDID; dberp.ExecSQL(SQL); } //使用材料清单匹配 if (sDefXLBZID.Equals("")) { ErrorNo = "4.1"; #region 根据型号、规格,匹配唯一标准、电压等级 SQL.Clear(); SQL.Add(" merge into XLXSBJDMX tag"); SQL.Add(" using "); SQL.Add(" ( "); SQL.Add(" select XLXSCLQD_XLXHID,XLXSCLQD_XLGGID,XLXSCLQD_XLBZID,XLXSCLQD_DYDJID FROM XLXSCLQD a "); SQL.Add(" where XLXSCLQD_WPID = 'ZZZZ' "); SQL.Add(" and exists ( "); SQL.Add(" SELECT XLXSCLQD_XLXHID,XLXSCLQD_XLGGID FROM XLXSCLQD b "); SQL.Add(" WHERE a.XLXSCLQD_XLXHID = b.XLXSCLQD_XLXHID and a.XLXSCLQD_XLGGID = b.XLXSCLQD_XLGGID "); SQL.Add(" and b.XLXSCLQD_WPID = 'ZZZZ' and exists( "); SQL.Add(" select XLXSBJDMX_XLXHID, XLXSBJDMX_XLGGID from XLXSBJDMX WHERE XLXSBJDMX_XLXHID = XLXSCLQD_XLXHID "); SQL.Add(" and XLXSBJDMX_XLGGID= XLXSCLQD_XLGGID "); SQL.Add(" and XLXSBJDMX_BJDID=:pBJDID "); SQL.Add(" ) "); SQL.Add(" group by XLXSCLQD_XLXHID,XLXSCLQD_XLGGID "); SQL.Add(" having (count(XLXSCLQD_XLXHID) + count(XLXSCLQD_XLGGID)) = 2 "); SQL.Add(" ) "); SQL.Add(" ) c "); SQL.Add(" on ( XLXSBJDMX_XLXHID <> ' ' and XLXSBJDMX_XLGGID <> ' ' "); if (dberp.DriverName == "ORACLE")//Oracle下merge into语法被更新的字段不能作为关联条件使用,专门处理 SQL.Add(" and XLXSBJDMX_WHR = 'BZ_DY' "); else SQL.Add(" and XLXSBJDMX_XLBZID = ' ' and XLXSBJDMX_DYDJID = ' ' "); SQL.Add(" and XLXSBJDMX_BJDID=:pBJDID "); SQL.Add(" and c.XLXSCLQD_XLXHID =XLXSBJDMX_XLXHID and c.XLXSCLQD_XLGGID=XLXSBJDMX_XLGGID ) "); SQL.Add(" when matched then update set XLXSBJDMX_XLBZID =c.XLXSCLQD_XLBZID,XLXSBJDMX_XDXLBZID=c.XLXSCLQD_XLBZID "); if (!bBPPDY) SQL.Add(" , XLXSBJDMX_DYDJID=c.XLXSCLQD_DYDJID "); SQL.ParamByName("pBJDID").Value = sSELBJDID; dberp.ExecSQL(SQL); #endregion } else if (sDefXLBZID.Equals("FirstBZ")) { ErrorNo = "4.2"; #region 根据型号、规格,匹配第一个标准 SQL.Clear(); SQL.Add(" merge into XLXSBJDMX tag"); SQL.Add(" using "); SQL.Add(" ( "); SQL.Add(" select XLXSCLQD_XLXHID as XLXHID,XLXSCLQD_XLGGID as XLGGID,isnull(XLBZ_XLBZID,' ') as XLBZID"); SQL.Add(" from"); SQL.Add(" ("); SQL.Add(" select XLXSCLQD_XLXHID,XLXSCLQD_XLGGID,min(isnull(XLBZPX,0)) as minXLBZPX FROM XLXSCLQD "); SQL.Add(" left join (select row_number()over(order by XLBZ_DZSC,XLBZ_PX,XLBZ_XLBZID) as XLBZPX,XLBZ_XLBZID from XLBZ where 1=1) tmpXLBZ on XLBZ_XLBZID=XLXSCLQD_XLBZID"); SQL.Add(" where XLXSCLQD_WPID = 'ZZZZ' "); SQL.Add(" and exists( "); SQL.Add(" select 1 from XLXSBJDMX WHERE XLXSBJDMX_XLXHID = XLXSCLQD_XLXHID "); SQL.Add(" and XLXSBJDMX_XLGGID= XLXSCLQD_XLGGID "); SQL.Add(" and XLXSBJDMX_BJDID=:pBJDID "); SQL.Add(" ) "); SQL.Add(" group by XLXSCLQD_XLXHID,XLXSCLQD_XLGGID"); SQL.Add(" ) clqd"); SQL.Add(" left join (select row_number()over(order by XLBZ_DZSC,XLBZ_PX,XLBZ_XLBZID) as XLBZPX,XLBZ_XLBZID from XLBZ where 1=1) tmpXLBZ on XLBZPX=minXLBZPX"); SQL.Add(" where 1=1"); SQL.Add(" ) c "); SQL.Add(" on( XLXSBJDMX_XLXHID <> ' ' and XLXSBJDMX_XLGGID <> ' ' "); if (dberp.DriverName == "ORACLE")//Oracle下merge into语法被更新的字段不能作为关联条件使用,专门处理 SQL.Add(" and XLXSBJDMX_WHR = 'BZ_DY' "); else SQL.Add(" and XLXSBJDMX_XLBZID = ' ' and XLXSBJDMX_DYDJID = ' ' "); SQL.Add(" and XLXSBJDMX_BJDID=:pBJDID "); SQL.Add(" and c.XLXHID =XLXSBJDMX_XLXHID and c.XLGGID=XLXSBJDMX_XLGGID ) "); SQL.Add(" when matched then update set XLXSBJDMX_XLBZID =c.XLBZID,XLXSBJDMX_XDXLBZID=c.XLBZID "); SQL.ParamByName("pBJDID").Value = sSELBJDID; dberp.ExecSQL(SQL); #endregion } if (dberp.DriverName == "ORACLE")//Oracle下merge into语法被更新的字段不能作为关联条件使用,专门处理 { SQL.Clear(); SQL.Add("update XLXSBJDMX set XLXSBJDMX_WHR=:pFlag"); SQL.Add(" where XLXSBJDMX_BJDID=:pBJDID"); SQL.Add(" and XLXSBJDMX_XLBZID <> ' ' and XLXSBJDMX_DYDJID = ' '"); SQL.ParamByName("pFlag").Value = "DY"; SQL.ParamByName("pBJDID").Value = sSELBJDID; dberp.ExecSQL(SQL); } if (!bBPPDY) { if (sDefDYDJID.Equals("minDY")) { ErrorNo = "5.1"; #region 根据型号、规格、标准,匹配第一个电压等级 SQL.Clear(); SQL.Add(" merge into XLXSBJDMX tag "); SQL.Add(" using "); SQL.Add(" ( "); SQL.Add(" select XLXSCLQD_XLXHID,XLXSCLQD_XLGGID,XLXSCLQD_XLBZID, isnull(XLDYDJB_DYDJID,' ') as XLDYDJB_DYDJID,PPSL"); SQL.Add(" from"); SQL.Add(" ("); SQL.Add(" select XLXSCLQD_XLXHID,XLXSCLQD_XLGGID,XLXSCLQD_XLBZID,min(isnull(DYDJPX,0)) as minDYDJPX,sum(1) as PPSL FROM XLXSCLQD ");//匹配数量等于1则表示唯一匹配 SQL.Add(" left join (select row_number()over(order by XLDYDJB_XH,XLDYDJB_DYDJID) as DYDJPX,XLDYDJB_DYDJID from XLDYDJB where 1=1) tmpDYDJ on tmpDYDJ.XLDYDJB_DYDJID=XLXSCLQD_DYDJID"); SQL.Add(" where XLXSCLQD_WPID = 'ZZZZ' "); SQL.Add(" and exists( "); SQL.Add(" select 1 from XLXSBJDMX WHERE XLXSBJDMX_XLXHID = XLXSCLQD_XLXHID "); SQL.Add(" and XLXSBJDMX_XLGGID= XLXSCLQD_XLGGID "); SQL.Add(" and XLXSBJDMX_XLBZID= XLXSCLQD_XLBZID "); SQL.Add(" and XLXSBJDMX_BJDID=:pBJDID "); SQL.Add(" ) "); SQL.Add(" group by XLXSCLQD_XLXHID,XLXSCLQD_XLGGID,XLXSCLQD_XLBZID"); SQL.Add(" ) clqd"); SQL.Add(" left join (select row_number()over(order by XLDYDJB_XH,XLDYDJB_DYDJID) as DYDJPX,XLDYDJB_DYDJID from XLDYDJB where 1=1) DYDJ on DYDJ.DYDJPX=minDYDJPX"); SQL.Add(" where 1=1"); SQL.Add(" ) c "); SQL.Add(" on ( XLXSBJDMX_XLXHID <> ' ' and XLXSBJDMX_XLGGID <> ' ' "); if (dberp.DriverName == "ORACLE")//Oracle下merge into语法被更新的字段不能作为关联条件使用,专门处理 SQL.Add(" and XLXSBJDMX_WHR = 'DY' "); else SQL.Add(" and XLXSBJDMX_XLBZID <> ' ' and XLXSBJDMX_DYDJID = ' ' and c.PPSL >= 1 ");//匹配数量等于1表示唯一匹配,无需考虑XLXSBJDMX_BJCPDYDJID SQL.Add(" and XLXSBJDMX_BJDID=:pBJDID "); SQL.Add(" and c.XLXSCLQD_XLXHID =XLXSBJDMX_XLXHID and c.XLXSCLQD_XLGGID=XLXSBJDMX_XLGGID and c.XLXSCLQD_XLBZID=XLXSBJDMX_XLBZID ) "); SQL.Add(" when matched then update set XLXSBJDMX_DYDJID =c.XLDYDJB_DYDJID "); SQL.ParamByName("pBJDID").Value = sSELBJDID; dberp.ExecSQL(SQL); #endregion } else { ErrorNo = "5.2"; #region 根据型号、规格、标准,匹配唯一电压等级 SQL.Clear(); SQL.Add(" merge into XLXSBJDMX tag "); SQL.Add(" using "); SQL.Add(" ( "); SQL.Add(" select XLXSCLQD_XLXHID,XLXSCLQD_XLGGID,XLXSCLQD_XLBZID,XLXSCLQD_DYDJID FROM XLXSCLQD a "); SQL.Add(" where 1 = 1 and XLXSCLQD_WPID = 'ZZZZ' "); SQL.Add(" and exists ( "); SQL.Add(" SELECT XLXSCLQD_XLXHID,XLXSCLQD_XLGGID,XLXSCLQD_XLBZID FROM XLXSCLQD b "); SQL.Add(" WHERE 1 = 1 and a.XLXSCLQD_XLXHID = b.XLXSCLQD_XLXHID and a.XLXSCLQD_XLGGID = b.XLXSCLQD_XLGGID "); SQL.Add(" and a.XLXSCLQD_XLBZID = b.XLXSCLQD_XLBZID"); SQL.Add(" and b.XLXSCLQD_WPID = 'ZZZZ' and exists( "); SQL.Add(" select XLXSBJDMX_XLXHID, XLXSBJDMX_XLGGID,XLXSBJDMX_XLBZID from XLXSBJDMX WHERE XLXSBJDMX_XLXHID = XLXSCLQD_XLXHID "); SQL.Add(" and XLXSBJDMX_XLGGID= XLXSCLQD_XLGGID "); SQL.Add(" and XLXSBJDMX_XLBZID=XLXSCLQD_XLBZID"); SQL.Add(" and XLXSBJDMX_BJDID=:pBJDID "); SQL.Add(" ) "); SQL.Add(" group by XLXSCLQD_XLXHID,XLXSCLQD_XLGGID,XLXSCLQD_XLBZID "); SQL.Add(" having (count(XLXSCLQD_XLXHID) + count(XLXSCLQD_XLGGID) + count(XLXSCLQD_XLBZID)) = 3 "); SQL.Add(" ) "); SQL.Add(" ) c "); SQL.Add(" on ( XLXSBJDMX_XLXHID <> ' ' and XLXSBJDMX_XLGGID <> ' ' "); if (dberp.DriverName == "ORACLE")//Oracle下merge into语法被更新的字段不能作为关联条件使用,专门处理 SQL.Add(" and XLXSBJDMX_WHR = 'DY' "); else SQL.Add(" and XLXSBJDMX_XLBZID <> ' ' and XLXSBJDMX_DYDJID = ' ' "); SQL.Add(" and XLXSBJDMX_BJDID=:pBJDID "); SQL.Add(" and c.XLXSCLQD_XLXHID =XLXSBJDMX_XLXHID and c.XLXSCLQD_XLGGID=XLXSBJDMX_XLGGID and c.XLXSCLQD_XLBZID=XLXSBJDMX_XLBZID ) "); SQL.Add(" when matched then update set XLXSBJDMX_DYDJID =c.XLXSCLQD_DYDJID "); SQL.ParamByName("pBJDID").Value = sSELBJDID; dberp.ExecSQL(SQL); #endregion } } if (dberp.DriverName == "ORACLE")//Oracle下merge into语法被更新的字段不能作为关联条件使用,专门处理 { SQL.Clear(); SQL.Add("update XLXSBJDMX set XLXSBJDMX_WHR=:pFlag"); SQL.Add(" where XLXSBJDMX_BJDID=:pBJDID"); SQL.Add(" and XLXSBJDMX_XLBZID = ' ' and XLXSBJDMX_DYDJID <> ' '"); SQL.ParamByName("pFlag").Value = "BZ"; SQL.ParamByName("pBJDID").Value = sSELBJDID; dberp.ExecSQL(SQL); } if (sDefXLBZID.Equals("")) { ErrorNo = "6.1"; #region 根据型号、规格、电压等级,匹配唯一标准 SQL.Clear(); SQL.Add(" merge into XLXSBJDMX tag "); SQL.Add(" using "); SQL.Add(" ( "); SQL.Add(" select XLXSCLQD_XLXHID,XLXSCLQD_XLGGID,XLXSCLQD_XLBZID,XLXSCLQD_DYDJID FROM XLXSCLQD a "); SQL.Add(" where 1 = 1 and XLXSCLQD_WPID = 'ZZZZ' "); SQL.Add(" and exists ( "); SQL.Add(" SELECT XLXSCLQD_XLXHID,XLXSCLQD_XLGGID,XLXSCLQD_DYDJID FROM XLXSCLQD b "); SQL.Add(" WHERE 1 = 1 and a.XLXSCLQD_XLXHID = b.XLXSCLQD_XLXHID and a.XLXSCLQD_XLGGID = b.XLXSCLQD_XLGGID "); SQL.Add(" and a.XLXSCLQD_DYDJID = b.XLXSCLQD_DYDJID "); SQL.Add(" and b.XLXSCLQD_WPID = 'ZZZZ' and exists( "); SQL.Add(" select XLXSBJDMX_XLXHID, XLXSBJDMX_XLGGID,XLXSCLQD_DYDJID from XLXSBJDMX WHERE XLXSBJDMX_XLXHID = XLXSCLQD_XLXHID "); SQL.Add(" and XLXSBJDMX_XLGGID= XLXSCLQD_XLGGID"); SQL.Add(" and XLXSBJDMX_DYDJID=XLXSCLQD_DYDJID"); SQL.Add(" and XLXSBJDMX_BJDID=:pBJDID "); SQL.Add(" ) "); SQL.Add(" group by XLXSCLQD_XLXHID,XLXSCLQD_XLGGID,XLXSCLQD_DYDJID "); SQL.Add(" having (count(XLXSCLQD_XLXHID) + count(XLXSCLQD_XLGGID) + count(XLXSCLQD_DYDJID)) = 3 "); SQL.Add(" ) "); SQL.Add(" ) c "); SQL.Add(" on ( XLXSBJDMX_XLXHID <> ' ' and XLXSBJDMX_XLGGID <> ' ' "); if (dberp.DriverName == "ORACLE")//Oracle下merge into语法被更新的字段不能作为关联条件使用,专门处理 SQL.Add(" and XLXSBJDMX_WHR = 'BZ' "); else SQL.Add(" and XLXSBJDMX_XLBZID = ' ' and XLXSBJDMX_DYDJID <> ' ' "); SQL.Add(" and XLXSBJDMX_BJDID=:pBJDID "); SQL.Add(" and c.XLXSCLQD_XLXHID =XLXSBJDMX_XLXHID and c.XLXSCLQD_XLGGID=XLXSBJDMX_XLGGID and c.XLXSCLQD_DYDJID=XLXSBJDMX_DYDJID ) "); SQL.Add(" when matched then update set XLXSBJDMX_XLBZID =c.XLXSCLQD_XLBZID,XLXSBJDMX_XDXLBZID=c.XLXSCLQD_XLBZID "); SQL.ParamByName("pBJDID").Value = sSELBJDID; dberp.ExecSQL(SQL); #endregion } else if (sDefXLBZID.Equals("FirstBZ")) { ErrorNo = "6.2"; #region 根据型号、规格、电压等级,匹配第一个标准 SQL.Clear(); SQL.Add(" merge into XLXSBJDMX tag "); SQL.Add(" using "); SQL.Add(" ( "); SQL.Add(" select XLXSCLQD_XLXHID as XLXHID,XLXSCLQD_XLGGID as XLGGID,XLXSCLQD_DYDJID as DYDJID,isnull(XLBZ_XLBZID,' ') as XLBZID"); SQL.Add(" from"); SQL.Add(" ("); SQL.Add(" select XLXSCLQD_XLXHID,XLXSCLQD_XLGGID,XLXSCLQD_DYDJID,min(isnull(XLBZPX,0)) as minXLBZPX FROM XLXSCLQD "); SQL.Add(" left join (select row_number()over(order by XLBZ_DZSC,XLBZ_PX,XLBZ_XLBZID) as XLBZPX,XLBZ_XLBZID from XLBZ where 1=1) tmpXLBZ on XLBZ_XLBZID=XLXSCLQD_XLBZID"); SQL.Add(" where XLXSCLQD_WPID = 'ZZZZ' "); SQL.Add(" and exists( "); SQL.Add(" select 1 from XLXSBJDMX WHERE XLXSBJDMX_XLXHID = XLXSCLQD_XLXHID "); SQL.Add(" and XLXSBJDMX_XLGGID= XLXSCLQD_XLGGID "); SQL.Add(" and XLXSBJDMX_BJDID=:pBJDID "); SQL.Add(" ) "); SQL.Add(" group by XLXSCLQD_XLXHID,XLXSCLQD_XLGGID,XLXSCLQD_DYDJID"); SQL.Add(" ) clqd"); SQL.Add(" left join (select row_number()over(order by XLBZ_DZSC,XLBZ_PX,XLBZ_XLBZID) as XLBZPX,XLBZ_XLBZID from XLBZ where 1=1) tmpXLBZ on XLBZPX=minXLBZPX"); SQL.Add(" where 1=1"); SQL.Add(" ) c "); SQL.Add(" on( XLXSBJDMX_XLXHID <> ' ' and XLXSBJDMX_XLGGID <> ' ' "); if (dberp.DriverName == "ORACLE")//Oracle下merge into语法被更新的字段不能作为关联条件使用,专门处理 SQL.Add(" and XLXSBJDMX_WHR = 'BZ' "); else SQL.Add(" and XLXSBJDMX_XLBZID = ' ' and XLXSBJDMX_DYDJID <> ' ' "); SQL.Add(" and XLXSBJDMX_BJDID=:pBJDID "); SQL.Add(" and c.XLXHID =XLXSBJDMX_XLXHID and c.XLGGID=XLXSBJDMX_XLGGID and c.DYDJID=XLXSBJDMX_DYDJID ) "); SQL.Add(" when matched then update set XLXSBJDMX_XLBZID =c.XLBZID,XLXSBJDMX_XDXLBZID=c.XLBZID "); SQL.ParamByName("pBJDID").Value = sSELBJDID; dberp.ExecSQL(SQL); #endregion } if (dberp.DriverName == "ORACLE")//Oracle下merge into语法被更新的字段不能作为关联条件使用,专门处理 { SQL.Clear(); SQL.Add("update XLXSBJDMX set XLXSBJDMX_WHR=:pWHR"); SQL.Add(" where XLXSBJDMX_BJDID=:pBJDID"); SQL.Add(" and (XLXSBJDMX_WHR='BZ_DY' or XLXSBJDMX_WHR='DY' or XLXSBJDMX_WHR='BZ')"); SQL.ParamByName("pWHR").Value = CurSession.UserName; SQL.ParamByName("pBJDID").Value = sSELBJDID; dberp.ExecSQL(SQL); } } #endregion } public class XLBZ { private string xlbzid=""; private string xlbzmc=""; public string XLBZID { get { return xlbzid; } set { xlbzid = value; } } public string XLBZMC { get { return xlbzmc; } set { xlbzmc = value; } } } public class BJXX { private string jgbid; private string bjrq; private string bjflid; public string JGBID { get { return jgbid; } set { jgbid = value; } } public string BJRQ { get { return bjrq; } set { bjrq = value; } } public string BJFLID { get { return bjflid; } set { bjflid = value; } } } }