using EasyBL.WebApi.Message; using Entity; using Entity.Sugar; using Entity.ViewModels; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using SqlSugar; using SqlSugar.Base; using System; using System.Collections.Generic; using System.Data; using System.Linq; namespace EasyBL.WEBAPP.OPM { public class OpmComService : ServiceBase { #region 驗證發票號碼是否重複key入 /// /// 驗證發票號碼是否重複key入 /// /// todo: describe i_crm parameter on CheckInvoiceNumber /// public ResponseMessage CheckInvoiceNumber(RequestMessage i_crm) { ResponseMessage rm = null; string sMsg = null; var db = SugarBase.DB; try { do { var bExsit = false; var sInvoiceNumber = _fetchString(i_crm, @"InvoiceNumber"); bExsit = db.Queryable().Any(it => it.InvoiceNumber == sInvoiceNumber && it.OrgID == i_crm.ORIGID); rm = new SuccessResponseMessage(null, i_crm); rm.DATA.Add(BLWording.REL, bExsit); } while (false); } catch (Exception ex) { sMsg = Util.GetLastExceptionMsg(ex); LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(OpmComService), @"進出口管理模組", @"CheckInvoiceNumber(驗證發票號碼是否重複key入)", @"", @"", @""); } finally { if (null != sMsg) { rm = new ErrorResponseMessage(sMsg, i_crm); } } return rm; } #endregion 驗證發票號碼是否重複key入 #region 獲取賬單資料 /// /// 獲取賬單資料 /// /// todo: describe i_crm parameter on GetBills /// public ResponseMessage GetBills(RequestMessage i_crm) { ResponseMessage rm = null; string sMsg = null; var db = SugarBase.DB; try { do { var sBillNO = _fetchString(i_crm, @"BillNO"); //20200721 調整抓取資料回推由一年改為兩年 var rDate = DateTime.Now.AddYears(-2); var saBillInfo = db.Queryable() .OrderBy(x => x.CreateDate) .Where(x => x.OrgID == i_crm.ORIGID && x.CreateDate > rDate) .WhereIF(!string.IsNullOrEmpty(sBillNO), x => x.BillNO == sBillNO) .Select(x => new { x.BillNO }) .ToList(); rm = new SuccessResponseMessage(null, i_crm); rm.DATA.Add(BLWording.REL, saBillInfo); } while (false); } catch (Exception ex) { sMsg = Util.GetLastExceptionMsg(ex); LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(OpmComService), @"進出口管理模組", @"GetBills(獲取賬單資料)", @"", @"", @""); } finally { if (null != sMsg) { rm = new ErrorResponseMessage(sMsg, i_crm); } } return rm; } #endregion 獲取賬單資料 #region 預設預約單資料 /// /// 預設預約單資料 /// /// todo: describe i_crm parameter on InitAppoint /// public ResponseMessage InitAppoint(RequestMessage i_crm) { ResponseMessage rm = null; string sMsg = null; var db = SugarBase.GetIntance(); try { do { var sAppointNO = _fetchString(i_crm, @"AppointNO"); //預約單基本資料 var oTempl = db.Queryable( (t1, t2) => new object[] { JoinType.Inner, t1.OrgID == t2.OrgID && t1.ExhibitionNO == t2.SN.ToString() } ) .Where((t1, t2) => t1.OrgID == i_crm.ORIGID && t1.AppointNO == sAppointNO) .Select((t1, t2) => new OTB_OPM_OtherExhibition { OrgID = t1.OrgID, ExhibitionNO = t2.SN.ToString(), ImportBillName = t2.Exhibitioname_TW, ImportBillEName = t2.Exhibitioname_EN, ExhibitionDateStart = t2.ExhibitionDateStart, ExhibitionDateEnd = t2.ExhibitionDateEnd, Hall = t2.ExhibitionAddress, MuseumMumber = t1.MuseumMumber, Supplier = @"", Contactor = t1.AppointUser, Telephone = t1.AppointTel, SitiContactor = t1.Contactor, SitiTelephone = t1.ContactTel, ApproachTime = t1.ApproachTime, ExitTime = t1.ExitTime }) .Single(); var oImportCustomers = db.Queryable( (t1, t2) => new object[] { JoinType.Inner, t1.OrgID == t2.OrgID && t1.CustomerId == t2.guid.ToString() } ) .Where((t1, t2) => t1.OrgID == i_crm.ORIGID && t1.AppointNO == sAppointNO) .Select((t1, t2) => new { t2.FormalGuid, }) .Single(); oTempl.Supplier = oImportCustomers.FormalGuid; //該展覽所有廠商(排除已經產生賬單的資料) var saImportCustomers = db.Queryable( (t1, t2) => new object[] { JoinType.Inner, t1.OrgID == t2.OrgID && t1.CustomerId == t2.guid.ToString() } ) .Where((t1, t2) => t1.OrgID == i_crm.ORIGID && t1.ExhibitionNO == oTempl.ExhibitionNO && t2.IsFormal == true && SqlFunc.IsNullOrEmpty(t1.OtherId)) .Select((t1, t2) => new { t1.AppointNO, t2.FormalGuid, }) .ToList(); var saKeys = saImportCustomers.Select(x => x.FormalGuid).ToList(); //抓去正式客戶資料 var saCustomers = db.Queryable() .Where(x => x.OrgID == i_crm.ORIGID && saKeys.Contains(x.guid)) .Select(x => new { AppointNO = "", x.guid, x.CustomerNO, x.UniCode, x.CustomerCName, x.CustomerEName, x.Telephone, x.Email }) .ToList(); //添加預約單號碼 var saLast = (from e in saCustomers join f in saImportCustomers on e.guid equals f.FormalGuid select new { f.AppointNO, e.guid, e.CustomerNO, e.UniCode, e.CustomerCName, e.CustomerEName, e.Telephone, e.Email }).Distinct(); var map = new Map { { "Base", oTempl }, { "Customers", saLast } }; rm = new SuccessResponseMessage(null, i_crm); rm.DATA.Add(BLWording.REL, map); } while (false); } catch (Exception ex) { sMsg = Util.GetLastExceptionMsg(ex); LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(OpmComService), @"進出口管理模組", @"InitAppoint(預設預約單資料)", @"", @"", @""); } finally { if (null != sMsg) { rm = new ErrorResponseMessage(sMsg, i_crm); } } return rm; } #endregion 預設預約單資料 #region 獲取賬單關聯 /// /// 獲取賬單關聯 /// /// todo: describe i_crm parameter on InitAppoint /// public ResponseMessage GetBillAssociated(RequestMessage i_crm) { ResponseMessage rm = null; string sMsg = null; var db = SugarBase.GetIntance(); try { do { var sAppointNO = _fetchString(i_crm, @"AppointNO"); var sOtherId = _fetchString(i_crm, @"OtherId"); var sSupplierID = _fetchString(i_crm, @"SupplierID"); var map = new Map(); var tb_FeeItems = new DataTable(@"tb"); if (i_crm.ORIGID == "TG") { var oPackingOrder = db.Queryable( (t1, t2, t3) => new object[] { JoinType.Inner, t1.OrgID == t2.OrgID && t1.CustomerId == t2.guid.ToString(), JoinType.Inner, t2.OrgID == t3.OrgID && t2.FormalGuid == t3.guid } ) .Where((t1, t2, t3) => t1.OrgID == i_crm.ORIGID) .WhereIF(!string.IsNullOrEmpty(sAppointNO), (t1, t2, t3) => t1.AppointNO == sAppointNO) .WhereIF(!string.IsNullOrEmpty(sOtherId), (t1, t2, t3) => t1.OtherId == sOtherId) .WhereIF(!string.IsNullOrEmpty(sSupplierID), (t1, t2, t3) => t2.FormalGuid == sSupplierID && t3.guid == sSupplierID) .Select((t1, t2, t3) => t1).Single(); if (oPackingOrder != null) { var jaPackingInfo = (JArray)JsonConvert.DeserializeObject(oPackingOrder.PackingInfo); var iAllNumber = 0; var iAllWeight = 0; Decimal iAllVolume = 0; var sContactorId = ""; var sContactorName = ""; if (jaPackingInfo.Count > 0) { foreach (var jo in jaPackingInfo) { var iNumber = int.Parse(jo["ExpoNumber"].ToString()); var iWeight = int.Parse(jo["ExpoWeight"].ToString()) * iNumber; var iVolume = Math.Round(Convert.ToDecimal(jo["ExpoLen"].ToString()) * Convert.ToDecimal(jo["ExpoWidth"].ToString()) * Convert.ToDecimal(jo["ExpoHeight"].ToString()) * iNumber / Convert.ToDecimal("1000000"), 2); iAllNumber += iNumber; iAllWeight += iWeight; iAllVolume = iAllVolume + iVolume; } var oCustomers = db.Queryable( (t1, t2, t3) => new object[] { JoinType.Inner, t1.OrgID == t2.OrgID && t1.CustomerId == t2.guid.ToString(), JoinType.Inner, t2.OrgID == t3.OrgID && t2.FormalGuid == t3.guid } ) .Where((t1, t2, t3) => t1.OrgID == i_crm.ORIGID) .WhereIF(!string.IsNullOrEmpty(sAppointNO), (t1, t2, t3) => t1.AppointNO == sAppointNO) .WhereIF(!string.IsNullOrEmpty(sOtherId), (t1, t2, t3) => t1.OtherId == sOtherId) .WhereIF(!string.IsNullOrEmpty(sSupplierID), (t1, t2, t3) => t2.FormalGuid == sSupplierID && t3.guid == sSupplierID) .Select((t1, t2, t3) => t3).Single(); if (!string.IsNullOrEmpty(oCustomers.Contactors)) { var jaContactors = (JArray)JsonConvert.DeserializeObject(oCustomers.Contactors); foreach (var joContacto in jaContactors) { if (joContacto["FullName"].ToString() == oPackingOrder.Contactor) { sContactorId = joContacto["guid"].ToString(); sContactorName = joContacto["FullName"].ToString(); } } } map = new Map { {"CustomerId",oCustomers.guid }, {"CustomerCode",oCustomers.CustomerNO }, {"UniCode",oCustomers.UniCode }, {"ContactorId",sContactorId }, {"ContactorName",sContactorName }, {"ContactTel",oPackingOrder.ContactTel }, {"Number",iAllNumber }, {"Unit","PKG" }, {"Weight",iAllWeight }, {"Volume",iAllVolume } }; } var saPackingInfo = (JArray)JsonConvert.DeserializeObject(oPackingOrder.PackingInfo); tb_FeeItems.Columns.Add(@"guid", typeof(String));//費用代號 tb_FeeItems.Columns.Add(@"FinancialCode", typeof(String));//費用代號 tb_FeeItems.Columns.Add(@"FinancialCostStatement", typeof(String));//費用說明 tb_FeeItems.Columns.Add(@"FinancialCurrency", typeof(String));//幣別 tb_FeeItems.Columns.Add(@"FinancialUnitPrice", typeof(String));//單價 tb_FeeItems.Columns.Add(@"FinancialNumber", typeof(String));//FinancialNumber tb_FeeItems.Columns.Add(@"FinancialUnit", typeof(String));//單位 tb_FeeItems.Columns.Add(@"FinancialAmount", typeof(String));//金額 tb_FeeItems.Columns.Add(@"FinancialExchangeRate", typeof(String));//匯率 tb_FeeItems.Columns.Add(@"FinancialTWAmount", typeof(String));//台幣金額 tb_FeeItems.Columns.Add(@"FinancialTaxRate", typeof(String));//稅率 tb_FeeItems.Columns.Add(@"FinancialTax", typeof(String));//稅額 tb_FeeItems.Columns.Add(@"Memo", typeof(String));//稅額 tb_FeeItems.Columns.Add(@"CreateUser", typeof(String));//創建人 tb_FeeItems.Columns.Add(@"CreateDate", typeof(String));//創建時間 var oExhibitionRules = db.Queryable( (t1, t2) => new object[] { JoinType.Inner, t1.OrgID == t2.OrgID && t1.Guid == t2.CostRulesId } ) .Where((t1, t2) => t1.OrgID == i_crm.ORIGID && t2.SN.ToString() == oPackingOrder.ExhibitionNO) .Select((t1, t2) => t1).Single(); foreach (JObject packingInfo in saPackingInfo) { try { var bExpoStack = (bool)(packingInfo["ExpoStack"] ?? "false"); var bExpoStorage = (bool)(packingInfo["ExpoStorage"] ?? "false"); var bExpoSplit = (bool)(packingInfo["ExpoSplit"] ?? "false"); var bExpoPack = (bool)(packingInfo["ExpoPack"] ?? "false"); var bExpoFeed = (bool)(packingInfo["ExpoFeed"] ?? "false"); var tb_row = tb_FeeItems.NewRow(); if (bExpoStack) {//堆高機 tb_row = GetFeeItemsInfo(i_crm, tb_FeeItems, packingInfo, oExhibitionRules, 1); tb_FeeItems.Rows.Add(tb_row); } if (bExpoSplit) {//進場服務費 tb_row = GetFeeItemsInfo(i_crm, tb_FeeItems, packingInfo, oExhibitionRules, 2); tb_FeeItems.Rows.Add(tb_row); } if (bExpoPack) {//退場服務費 tb_row = GetFeeItemsInfo(i_crm, tb_FeeItems, packingInfo, oExhibitionRules, 3); tb_FeeItems.Rows.Add(tb_row); } if (bExpoFeed) {//空箱收送與儲存(空箱收送) tb_row = GetFeeItemsInfo(i_crm, tb_FeeItems, packingInfo, oExhibitionRules, 4); tb_FeeItems.Rows.Add(tb_row); } if (bExpoStorage) {//空箱收送與儲存(儲存) tb_row = GetFeeItemsInfo(i_crm, tb_FeeItems, packingInfo, oExhibitionRules, 5); tb_FeeItems.Rows.Add(tb_row); } } catch { } } } } var mapRel = new Map { { "Base", map }, { "Fees", tb_FeeItems } }; rm = new SuccessResponseMessage(null, i_crm); rm.DATA.Add(BLWording.REL, mapRel); } while (false); } catch (Exception ex) { sMsg = Util.GetLastExceptionMsg(ex); LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(OpmComService), @"進出口管理模組", @"GetBillAssociated(獲取賬單關聯)", @"", @"", @""); } finally { if (null != sMsg) { rm = new ErrorResponseMessage(sMsg, i_crm); } } return rm; } /// /// /// todo: describe i_crm parameter on GetFeeItemsInfo /// todo: describe tb parameter on GetFeeItemsInfo /// todo: describe joInfo parameter on GetFeeItemsInfo /// todo: describe rule parameter on GetFeeItemsInfo /// todo: describe flag parameter on GetFeeItemsInfo /// private static DataRow GetFeeItemsInfo(RequestMessage i_crm, DataTable tb, JObject joInfo, OTB_WSM_ExhibitionRules rule, int flag) { var tb_row = tb.NewRow(); var dTransferRate = Math.Round(Convert.ToDecimal("100") / Convert.ToDecimal("105"), 5); var iExpoNumber = Convert.ToInt32(joInfo["ExpoNumber"].ToString()); var dTotalCBM = Convert.ToDecimal(joInfo["TotalCBM"].ToString()); var dExpoWeightTon = Convert.ToDecimal(joInfo["ExpoWeightTon"].ToString()); var iExpoDays = Convert.ToInt32(joInfo["ExpoDays"].ToString()); var iPackingPrice = Math.Round(Convert.ToDecimal(rule.PackingPrice) * dTransferRate, 2); var iFeedingPrice = Math.Round(Convert.ToDecimal(rule.FeedingPrice) * dTransferRate, 2); var iStoragePrice = Math.Round(Convert.ToDecimal(rule.StoragePrice) * dTransferRate, 2); dTotalCBM = dTotalCBM < 1 ? 1 : dTotalCBM; tb_row[@"guid"] = Guid.NewGuid(); tb_row[@"Memo"] = @""; tb_row[@"FinancialCurrency"] = @"NTD"; tb_row[@"FinancialNumber"] = iExpoNumber; switch (flag) { case 1://堆高機 { tb_row[@"FinancialCode"] = @"TEC06"; tb_row[@"FinancialCostStatement"] = @"堆高機"; var jaCostRules = (JArray)JsonConvert.DeserializeObject(rule.CostRules); var oCurRule = GetCurRule(joInfo, jaCostRules); var iPrice = Math.Round(int.Parse(oCurRule["Price"].ToString()) * dTransferRate, 2); tb_row[@"FinancialUnitPrice"] = iPrice; if (oCurRule["PricingMode"].ToString() == "T") { tb_row[@"FinancialNumber"] = dExpoWeightTon * iExpoNumber; tb_row[@"FinancialUnit"] = @"TON"; tb_row[@"FinancialAmount"] = iPrice * dExpoWeightTon * iExpoNumber; } else { tb_row[@"FinancialUnit"] = @"SHPT"; tb_row[@"FinancialAmount"] = iPrice * iExpoNumber; } } break; case 2://進場服務費 { tb_row[@"FinancialCode"] = @"TEC34"; tb_row[@"FinancialCostStatement"] = @"進場服務費"; tb_row[@"FinancialUnitPrice"] = iPackingPrice; tb_row[@"FinancialNumber"] = dTotalCBM * iExpoNumber; tb_row[@"FinancialUnit"] = @"CBM"; tb_row[@"FinancialAmount"] = iPackingPrice * dTotalCBM * iExpoNumber; } break; case 3://退場服務費 { tb_row[@"FinancialCode"] = @"TEC35"; tb_row[@"FinancialCostStatement"] = @"退場服務費"; tb_row[@"FinancialUnitPrice"] = iPackingPrice; tb_row[@"FinancialNumber"] = dTotalCBM * iExpoNumber; tb_row[@"FinancialUnit"] = @"CBM"; tb_row[@"FinancialAmount"] = iPackingPrice * dTotalCBM * iExpoNumber; } break; case 4://空箱收送與儲存(空箱收送) { tb_row[@"FinancialCode"] = @"TEC05"; tb_row[@"FinancialCostStatement"] = @"空箱收送與儲存"; tb_row[@"FinancialUnitPrice"] = iFeedingPrice; tb_row[@"FinancialNumber"] = dTotalCBM * iExpoNumber; tb_row[@"FinancialUnit"] = @"CBM"; tb_row[@"FinancialAmount"] = iFeedingPrice * dTotalCBM * iExpoNumber; } break; case 5://空箱收送與儲存(儲存) { tb_row[@"FinancialCode"] = @"TEC05"; tb_row[@"FinancialCostStatement"] = @"空箱收送與儲存"; tb_row[@"FinancialUnitPrice"] = iStoragePrice * dTotalCBM * iExpoNumber; tb_row[@"FinancialNumber"] = iExpoDays; tb_row[@"FinancialUnit"] = @"DAY"; tb_row[@"FinancialAmount"] = iStoragePrice * dTotalCBM * iExpoNumber * iExpoDays; } break; default: break; } tb_row[@"FinancialTWAmount"] = tb_row[@"FinancialAmount"]; tb_row[@"FinancialTaxRate"] = 0.05; tb_row[@"FinancialExchangeRate"] = 1; tb_row[@"FinancialTax"] = Convert.ToDouble(tb_row[@"FinancialTWAmount"].ToString()) * 0.05; tb_row[@"CreateUser"] = i_crm.USERID ?? @""; tb_row[@"CreateDate"] = DateTime.Now.ToString(@"yyyy/MM/dd HH:mm:ss"); return tb_row; } private static JObject GetCurRule(JObject joData, JArray rules) { var jo = new JObject(); var weight = (Decimal)joData["ExpoWeightTon"]; foreach (JObject rule in rules) { var rule_min = PackNum(rule["Weight_Min"]); var rule_max = PackNum(rule["Weight_Max"]); if (weight >= rule_min && weight < rule_max || (weight == 30 && rule_max == 30)) { jo = rule; break; } } return jo; } private static Decimal PackNum(object str) { return Convert.ToDecimal((str == null ? "" : str.ToString()) == "" ? "0" : str); } #endregion 獲取賬單關聯 #region 複製費用項目 /// /// 複製費用項目 /// /// todo: describe i_crm parameter on InitAppoint /// public ResponseMessage GetBillInfos(RequestMessage i_crm) { ResponseMessage rm = null; string sMsg = null; var db = SugarBase.GetIntance(); try { do { var sExhibitionNO = _fetchString(i_crm, @"ExhibitionNO"); var sBillNO = _fetchString(i_crm, @"BillNO"); var saBillInfo = db.Queryable( (t1, t2, t3, t4, t5) => new object[] { JoinType.Inner, t1.OrgID == t2.OrgID && t1.CreateUser == t2.MemberID, JoinType.Inner, t1.OrgID == t3.OrgID && t1.ResponsiblePerson == t3.MemberID, JoinType.Inner, t1.OrgID == t4.OrgID && t1.ExhibitionNO == t4.SN.ToString(), JoinType.Left, t1.OrgID == t5.OrgID && t1.Payer == t5.guid } ) .Where((t1, t2, t3, t4, t5) => t1.OrgID == i_crm.ORIGID) .WhereIF(!string.IsNullOrEmpty(sExhibitionNO), (t1, t2, t3, t4, t5) => t1.ExhibitionNO == sExhibitionNO) .WhereIF(!string.IsNullOrEmpty(sBillNO), (t1, t2, t3, t4, t5) => t1.BillNO == sBillNO) .Select((t1, t2, t3, t4, t5) => new View_OPM_BillInfo { SN = SqlFunc.GetSelfAndAutoFill(t1.SN), CreateUserName = t2.MemberName, ResponsiblePersonName = t3.MemberName, ExhibitioShotName = t4.ExhibitioShotName_CN, ExhibitioName = t4.Exhibitioname_TW, PayerName = SqlFunc.IIF(SqlFunc.HasValue(t5.CustomerCName), t5.CustomerCName, t5.CustomerEName) }) .OrderBy("t1.CreateDate") .ToList(); rm = new SuccessResponseMessage(null, i_crm); rm.DATA.Add(BLWording.REL, saBillInfo); } while (false); } catch (Exception ex) { sMsg = Util.GetLastExceptionMsg(ex); LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(OpmComService), @"進出口管理模組", @"GetBillInfos(複製費用項目)", @"", @"", @""); } finally { if (null != sMsg) { rm = new ErrorResponseMessage(sMsg, i_crm); } } return rm; } #endregion 複製費用項目 #region 取得帳單存取權限 public ResponseMessage GetExhibitionBillAuthorize(RequestMessage i_crm) { ResponseMessage rm = null; string sMsg = null; var db = SugarBase.GetIntance(); try { do { var MemberToAccess = new List(); // Account //select MemberIDs from OVW_SYS_Rules where RuleID in ('Account','Admin') var sRuleIDs = _fetchString(i_crm, @"RuleID"); var sResponsiblePerson = _fetchString(i_crm, @"ResponsiblePerson"); var sMemberdb = new SimpleClient(db); var spOrgID = new SugarParameter("@OrgID", i_crm.ORIGID); var spResponsiblePerson = new SugarParameter("@MemberID", sResponsiblePerson); var spRuleID = new SugarParameter("@RuleID", sRuleIDs); //直屬主管、部門主管 var Supervisors = db.Ado.SqlQuery(@"SELECT M.ImmediateSupervisor + ',' + D.ChiefOfDepartmentID FROM OTB_SYS_Members M LEFT JOIN OTB_SYS_Departments D ON D.DepartmentID = M.DepartmentID WHERE M.OrgID = @OrgID AND M.MemberID = @MemberID ", spOrgID, spResponsiblePerson); MemberToAccess.AddRange(Supervisors); // var oVW_SYS_Rules = db.Queryable().Where(r => r.DelStatus == "N" && r.OrgID == i_crm.ORIGID) .WhereIF(!string.IsNullOrWhiteSpace(sRuleIDs), r => sRuleIDs.Contains(r.RuleID)).Select(c => c.MemberIDs).ToList(); MemberToAccess.AddRange(oVW_SYS_Rules); var BillAuditor = Common.GetSystemSetting(db, i_crm.ORIGID, "BillAuditor"); MemberToAccess.Add(BillAuditor); //var saBillInfo = db.Queryable( // (t1, t2, t3, t4, t5) => new object[] // { // JoinType.Inner, t1.OrgID == t2.OrgID && t1.CreateUser == t2.MemberID, // JoinType.Inner, t1.OrgID == t3.OrgID && t1.ResponsiblePerson == t3.MemberID, // JoinType.Inner, t1.OrgID == t4.OrgID && t1.ExhibitionNO == t4.SN.ToString(), // JoinType.Left, t1.OrgID == t5.OrgID && t1.Payer == t5.guid // } // ) // .Where((t1, t2, t3, t4, t5) => t1.OrgID == i_crm.ORIGID) // .WhereIF(!string.IsNullOrEmpty(sExhibitionNO), (t1, t2, t3, t4, t5) => t1.ExhibitionNO == sExhibitionNO) // .WhereIF(!string.IsNullOrEmpty(sBillNO), (t1, t2, t3, t4, t5) => t1.BillNO == sBillNO) // .Select((t1, t2, t3, t4, t5) => new View_OPM_BillInfo // { // SN = SqlFunc.GetSelfAndAutoFill(t1.SN), // CreateUserName = t2.MemberName, // ResponsiblePersonName = t3.MemberName, // ExhibitioShotName = t4.ExhibitioShotName_CN, // ExhibitioName = t4.Exhibitioname_TW, // PayerName = SqlFunc.IIF(SqlFunc.HasValue(t5.CustomerCName), t5.CustomerCName, t5.CustomerEName) // }) // .OrderBy("t1.CreateDate") // .ToList(); var AccessAccounts = String.Join(",", MemberToAccess); rm = new SuccessResponseMessage(null, i_crm); rm.DATA.Add(BLWording.REL, AccessAccounts); } while (false); } catch (Exception ex) { sMsg = Util.GetLastExceptionMsg(ex); LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(OpmComService), @"進出口管理模組", @"GetExhibitionBillAuthorize(取得帳單存取權限)", @"", @"", @""); } finally { if (null != sMsg) { rm = new ErrorResponseMessage(sMsg, i_crm); } } return rm; } #endregion } }