using EasyBL.WebApi.Message; 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.Text; namespace EasyBL.WEBAPP.WSM { public class TrackingLog_QryService : ServiceBase { #region 查詢貨況查詢記錄分組明細 /// /// 查詢貨況查詢記錄分組明細 /// /// /// public ResponseMessage GetGroupInfo(RequestMessage i_crm) { ResponseMessage rm = null; string sMsg = null; var db = SugarBase.DB; try { do { var sDepartmentID = _fetchString(i_crm, @"DepartmentID"); var sQueryNumber = _fetchString(i_crm, @"QueryNumber"); var sQueryTimeStart = _fetchString(i_crm, @"QueryTimeStart"); var sQueryTimeEnd = _fetchString(i_crm, @"QueryTimeEnd"); var sbSql = new StringBuilder(); var spm = new List(); sbSql.Append("select count(1) Count,QueryIp,IPInfo,QueryNumber from OTB_WSM_TrackingLog where 1=1 "); if (!string.IsNullOrEmpty(sDepartmentID)) { sbSql.Append(" and DepartmentIDs like '%@DepartmentIDs%' "); spm.Add(new SugarParameter("@DepartmentIDs", sDepartmentID)); } if (!string.IsNullOrEmpty(sQueryTimeStart)) { sbSql.Append(" and querytime>= @QueryTimeStart "); spm.Add(new SugarParameter("@QueryTimeStart", sQueryTimeStart)); } if (!string.IsNullOrEmpty(sQueryTimeEnd)) { sbSql.Append(" and querytime<= @QueryTimeEnd "); spm.Add(new SugarParameter("@QueryTimeEnd", sQueryTimeEnd)); } sbSql.Append(" group by QueryIp,IPInfo,QueryNumber "); var list = db.SqlQueryable(sbSql.ToString()).AddParameters(spm).Where(it => it.QueryNumber == sQueryNumber).ToList(); rm = new SuccessResponseMessage(null, i_crm); rm.DATA.Add(BLWording.REL, list); } while (false); } catch (Exception ex) { sMsg = Util.GetLastExceptionMsg(ex); LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(TrackingLog_QryService), @"貨況查詢", @"GetGroupInfo(查詢貨況查詢記錄分組明細)", @"", @"", @""); } finally { if (null != sMsg) { rm = new ErrorResponseMessage(sMsg, i_crm); } } return rm; } #endregion 查詢貨況查詢記錄分組明細 #region Tracking(Log記錄)分頁查詢 /// /// Tracking(Log記錄)分頁查詢 /// /// /// public ResponseMessage QueryPage(RequestMessage i_crm) { ResponseMessage rm = null; string sMsg = null; var db = SugarBase.GetIntance(); try { do { var pml = new PageModel { PageIndex = _fetchInt(i_crm, @"pageIndex"), PageSize = _fetchInt(i_crm, @"pageSize") }; var iPageCount = 0; var sSortField = _fetchString(i_crm, @"sortField"); var sSortOrder = _fetchString(i_crm, @"sortOrder"); var sQueryNumber = _fetchString(i_crm, @"QueryNumber"); var sExhibitioName = _fetchString(i_crm, @"ExhibitioName"); var sDepartmentID = _fetchString(i_crm, @"DepartmentID"); var sQueryTimeStart = _fetchString(i_crm, @"QueryTimeStart"); var sQueryTimeEnd = _fetchString(i_crm, @"QueryTimeEnd"); var bExcel = _fetchBool(i_crm, @"Excel"); var rQueryTimeStart = new DateTime(); var rQueryTimeEnd = new DateTime(); if (!string.IsNullOrEmpty(sQueryTimeStart)) { rQueryTimeStart = SqlFunc.ToDate(sQueryTimeStart); } if (!string.IsNullOrEmpty(sQueryTimeEnd)) { rQueryTimeEnd = SqlFunc.ToDate(sQueryTimeEnd).AddDays(1); } var q1 = db.Queryable ((t1, t2, t3) => new object[] { JoinType.Left, t1.OrgID == t2.OrgID && t1.ParentId == t2.ImportBillNO, JoinType.Left, t1.OrgID == t3.OrgID && t1.ParentId == t3.ExportBillNO } ) .Select((t1, t2, t3) => new View_WSM_TrackingLog { NO = SqlFunc.GetSelfAndAutoFill(t1.NO), ExhibitionNO = SqlFunc.IsNull(t2.ExhibitionNO, t3.ExhibitionNO), ResponsiblePerson = SqlFunc.IsNull(t2.ResponsiblePerson, t3.ResponsiblePerson) }); var q2 = db.Queryable(); pml.DataList = db.Queryable (q1, q2, (v1, v2) => v1.OrgID == v2.OrgID && v1.ExhibitionNO == v2.SN.ToString()) .Where((v1, v2) => v1.DepartmentIDs.Contains(sDepartmentID) && v1.QueryNumber.Contains(sQueryNumber) && (v2.Exhibitioname_TW.Contains(sExhibitioName) || v2.Exhibitioname_EN.Contains(sExhibitioName))) .WhereIF(!string.IsNullOrEmpty(sQueryTimeStart), (v1, v2) => v1.QueryTime >= rQueryTimeStart.Date) .WhereIF(!string.IsNullOrEmpty(sQueryTimeEnd), (v1, v2) => v1.QueryTime <= rQueryTimeEnd.Date) .Select((v1, v2) => new View_WSM_TrackingLog { NO = SqlFunc.GetSelfAndAutoFill(v1.NO), Exhibitioname_TW = v2.Exhibitioname_TW, Exhibitioname_EN = v2.Exhibitioname_EN }) .MergeTable() .OrderBy(sSortField, sSortOrder) .ToPageList(pml.PageIndex, bExcel ? 100000 : pml.PageSize, ref iPageCount); pml.Total = iPageCount; rm = new SuccessResponseMessage(null, i_crm); if (bExcel) { const string sFileName = "Tracking查詢記錄"; var oHeader = new Dictionary { { "RowIndex", "項次" }, { "QueryNumber", "查詢碼" }, { "Exhibitioname_TW", "活動/展覽名稱" }, { "Exhibitioname_EN", "英文展名" }, { "AgentName", "國外代理" }, { "CustomerName", "客戶/參展廠商" }, { "QueryIp", "IP" }, { "QueryInfo", "IP地址信息" }, { "QueryTime", "查詢時間 " } }; var saViewTrackingLog = pml.DataList as List; foreach (var item in saViewTrackingLog) { var joIPInfo = (JObject)JsonConvert.DeserializeObject(item.IPInfo); item.IPInfo = joIPInfo["country"] + " " + joIPInfo["area"] + " " + joIPInfo["region"] + " " + joIPInfo["city"]; item.IPInfo = ChineseStringUtility.ToTraditional(item.IPInfo); } var dicAlain = ExcelService.GetExportAlain(oHeader, "QueryTime"); var bOk = new ExcelService().CreateExcelByList(saViewTrackingLog, out string sPath, oHeader, dicAlain, sFileName); rm.DATA.Add(BLWording.REL, sPath); } else { rm.DATA.Add(BLWording.REL, pml); } } while (false); } catch (Exception ex) { sMsg = Util.GetLastExceptionMsg(ex); LogAndSendEmail(sMsg + "Params:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, "EasyBL.WEBAPP.WSM.TrackingLog_QryService", "", "QueryPage(Tracking(Log記錄)分頁查詢)", "", "", ""); } finally { if (null != sMsg) { rm = new ErrorResponseMessage(sMsg, i_crm); } } return rm; } #endregion Tracking(Log記錄)分頁查詢 #region Tracking(Log記錄)(刪除) /// /// Tracking(Log記錄)(刪除) /// /// todo: describe i_crm parameter on UpdImportCustomers /// public ResponseMessage GridDelete(RequestMessage i_crm) { ResponseMessage rm = null; string sMsg = null; try { rm = SugarBase.ExecTran(db => { do { var iNO = _fetchInt(i_crm, @"NO"); var iRel = db.Deleteable() .Where(x => x.OrgID == i_crm.ORIGID && x.NO == iNO).ExecuteCommand(); rm = new SuccessResponseMessage(null, i_crm); rm.DATA.Add(BLWording.REL, iRel); } while (false); return rm; }); } catch (Exception ex) { sMsg = Util.GetLastExceptionMsg(ex); LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(TrackingLog_QryService), @"多語系管理", @"GridDelete(Tracking(Log記錄)(刪除))", @"", @"", @""); } finally { if (null != sMsg) { rm = new ErrorResponseMessage(sMsg, i_crm); } } return rm; } #endregion Tracking(Log記錄)(刪除) } }