307 lines
17 KiB

3 years ago
  1. using EasyBL.WebApi.Message;
  2. using Entity;
  3. using Entity.Sugar;
  4. using Entity.ViewModels;
  5. using Newtonsoft.Json;
  6. using Newtonsoft.Json.Linq;
  7. using SqlSugar;
  8. using SqlSugar.Base;
  9. using System;
  10. using System.Collections.Generic;
  11. using System.Data;
  12. namespace EasyBL.WEBAPP.WSM
  13. {
  14. public class PackingOrder_QryService : ServiceBase
  15. {
  16. #region 預約記錄分頁查詢
  17. /// <summary>
  18. /// 預約記錄分頁查詢
  19. /// </summary>
  20. /// <param name="i_crm"></param>
  21. /// <returns></returns>
  22. public ResponseMessage QueryPage(RequestMessage i_crm)
  23. {
  24. ResponseMessage rm = null;
  25. string sMsg = null;
  26. var db = SugarBase.GetIntance();
  27. try
  28. {
  29. do
  30. {
  31. var pml = new PageModel
  32. {
  33. PageIndex = _fetchInt(i_crm, @"pageIndex"),
  34. PageSize = _fetchInt(i_crm, @"pageSize")
  35. };
  36. var iPageCount = 0;
  37. var sSortField = _fetchString(i_crm, @"sortField");
  38. var sSortOrder = _fetchString(i_crm, @"sortOrder");
  39. var sMuseumMumber = _fetchString(i_crm, @"MuseumMumber");
  40. var sSearchWords = _fetchString(i_crm, @"SearchWords");
  41. var sAppointDateTimeStart = _fetchString(i_crm, @"AppointDateTimeStart");
  42. var sAppointDateTimeEnd = _fetchString(i_crm, @"AppointDateTimeEnd");
  43. var sApproachTime = _fetchString(i_crm, @"ApproachTime");
  44. var sExitTime = _fetchString(i_crm, @"ExitTime");
  45. var bExcel = _fetchBool(i_crm, @"Excel");
  46. var rAppointDateTimeStart = new DateTime();
  47. var rAppointDateTimeEnd = new DateTime();
  48. var rApproachTime = new DateTime();
  49. var rExitTime = new DateTime();
  50. if (!string.IsNullOrEmpty(sAppointDateTimeStart))
  51. {
  52. rAppointDateTimeStart = SqlFunc.ToDate(sAppointDateTimeStart);
  53. }
  54. if (!string.IsNullOrEmpty(sAppointDateTimeEnd))
  55. {
  56. rAppointDateTimeEnd = SqlFunc.ToDate(sAppointDateTimeEnd).AddDays(1);
  57. }
  58. if (!string.IsNullOrEmpty(sApproachTime))
  59. {
  60. rApproachTime = SqlFunc.ToDate(sApproachTime);
  61. }
  62. if (!string.IsNullOrEmpty(sExitTime))
  63. {
  64. rExitTime = SqlFunc.ToDate(sExitTime).AddDays(1);
  65. }
  66. if (i_crm.ORIGID == "TE")
  67. {
  68. pml.DataList = db.Queryable<OTB_WSM_PackingOrder, OTB_OPM_Exhibition, OTB_CRM_Customers>
  69. ((t1, t2, t3) =>
  70. new object[] {
  71. JoinType.Left, t1.ExhibitionNO == t2.SN.ToString(),
  72. JoinType.Left, t1.CustomerId == t3.guid
  73. }
  74. )
  75. .Where((t1, t2, t3) => t1.OrgID == i_crm.ORIGID && t1.MuseumMumber.Contains(sMuseumMumber))
  76. .Where((t1, t2, t3) => t1.CompName.Contains(sSearchWords) || t1.AppointNO.Contains(sSearchWords) || t1.AppointUser.Contains(sSearchWords) || t1.AppointTel.Contains(sSearchWords) || t1.AppointEmail.Contains(sSearchWords) || t1.Contactor.Contains(sSearchWords) || t1.ContactTel.Contains(sSearchWords) || t1.PackingInfo.Contains(sSearchWords) || t2.Exhibitioname_TW.Contains(sSearchWords) || t2.Exhibitioname_EN.Contains(sSearchWords))
  77. .WhereIF(!string.IsNullOrEmpty(sAppointDateTimeStart), (t1, t2, t3) => t1.CreateDate >= rAppointDateTimeStart.Date)
  78. .WhereIF(!string.IsNullOrEmpty(sAppointDateTimeEnd), (t1, t2, t3) => t1.CreateDate <= rAppointDateTimeEnd.Date)
  79. .WhereIF(!string.IsNullOrEmpty(sApproachTime), (t1, t2, t3) => t1.ExitTime >= rApproachTime.Date)
  80. .WhereIF(!string.IsNullOrEmpty(sExitTime), (t1, t2, t3) => t1.ApproachTime <= rExitTime.Date)
  81. .Select((t1, t2, t3) => new View_WSM_PackingOrder
  82. {
  83. AppointNO = t1.AppointNO,
  84. OrgID = t1.OrgID,
  85. ExhibitionNO = t1.ExhibitionNO,
  86. CompName = t1.CompName,
  87. Unicode = t1.Unicode,
  88. MuseumMumber = t1.MuseumMumber,
  89. AppointUser = t1.AppointUser,
  90. AppointTel = t1.AppointTel + "(" + t1.AppointExt + ")",
  91. AppointEmail = t1.AppointEmail,
  92. Contactor = t1.Contactor,
  93. ContactTel = t1.ContactTel,
  94. ApproachTime = t1.ApproachTime,
  95. ExitTime = t1.ExitTime,
  96. PackingInfo = t1.PackingInfo,
  97. Total = t1.Total,
  98. Memo = t1.Memo,
  99. PaymentWay = t1.PaymentWay,
  100. CreateUser = t1.CreateUser,
  101. CreateDate = t1.CreateDate,
  102. CustomerId = t1.CustomerId,
  103. OtherId = t1.OtherId,
  104. AppointDateTime = t1.AppointDateTime,
  105. IsKeyMode = t1.IsKeyMode,
  106. OtherIdFrom = t1.OtherIdFrom,
  107. Exhibitioname_TW = t2.Exhibitioname_TW,
  108. Exhibitioname_EN = t2.Exhibitioname_EN,
  109. IsFormal = SqlFunc.IIF(t3.IsAudit == "N", false, true)
  110. })
  111. .MergeTable()
  112. .OrderBy(sSortField, sSortOrder)
  113. .ToPageList(pml.PageIndex, pml.PageSize, ref iPageCount);
  114. pml.Total = iPageCount;
  115. } else
  116. {
  117. pml.DataList = db.Queryable<OTB_WSM_PackingOrder, OTB_OPM_Exhibition, OTB_CRM_ImportCustomers>
  118. ((t1, t2, t3) =>
  119. new object[] {
  120. JoinType.Left, t1.OrgID == t2.OrgID && t1.ExhibitionNO == t2.SN.ToString(),
  121. JoinType.Left, t1.OrgID == t3.OrgID && t1.ExhibitionNO == t3.ExhibitionNO.ToString() && t1.CustomerId == t3.guid
  122. }
  123. )
  124. .Where((t1, t2, t3) => t1.OrgID == i_crm.ORIGID && t1.MuseumMumber.Contains(sMuseumMumber))
  125. .Where((t1, t2, t3) => t1.CompName.Contains(sSearchWords) || t1.AppointNO.Contains(sSearchWords) || t1.AppointUser.Contains(sSearchWords) || t1.AppointTel.Contains(sSearchWords) || t1.AppointEmail.Contains(sSearchWords) || t1.Contactor.Contains(sSearchWords) || t1.ContactTel.Contains(sSearchWords) || t1.PackingInfo.Contains(sSearchWords) || t2.Exhibitioname_TW.Contains(sSearchWords) || t2.Exhibitioname_EN.Contains(sSearchWords))
  126. .WhereIF(!string.IsNullOrEmpty(sAppointDateTimeStart), (t1, t2, t3) => t1.CreateDate >= rAppointDateTimeStart.Date)
  127. .WhereIF(!string.IsNullOrEmpty(sAppointDateTimeEnd), (t1, t2, t3) => t1.CreateDate <= rAppointDateTimeEnd.Date)
  128. .WhereIF(!string.IsNullOrEmpty(sApproachTime), (t1, t2, t3) => t1.ExitTime >= rApproachTime.Date)
  129. .WhereIF(!string.IsNullOrEmpty(sExitTime), (t1, t2, t3) => t1.ApproachTime <= rExitTime.Date)
  130. .Select((t1, t2, t3) => new View_WSM_PackingOrder
  131. {
  132. AppointNO = t1.AppointNO,
  133. OrgID = t1.OrgID,
  134. ExhibitionNO = t1.ExhibitionNO,
  135. CompName = t1.CompName,
  136. MuseumMumber = t1.MuseumMumber,
  137. AppointUser = t1.AppointUser,
  138. AppointTel = t1.AppointTel,
  139. AppointEmail = t1.AppointEmail,
  140. Contactor = t1.Contactor,
  141. ContactTel = t1.ContactTel,
  142. ApproachTime = t1.ApproachTime,
  143. ExitTime = t1.ExitTime,
  144. PackingInfo = t1.PackingInfo,
  145. Total = t1.Total,
  146. Memo = t1.Memo,
  147. CreateUser = t1.CreateUser,
  148. CreateDate = t1.CreateDate,
  149. CustomerId = t1.CustomerId,
  150. OtherId = t1.OtherId,
  151. AppointDateTime = t1.AppointDateTime,
  152. IsKeyMode = t1.IsKeyMode,
  153. OtherIdFrom = t1.OtherIdFrom,
  154. Exhibitioname_TW = t2.Exhibitioname_TW,
  155. Exhibitioname_EN = t2.Exhibitioname_EN,
  156. IsFormal = SqlFunc.IIF(t3.IsFormal == null, false, t3.IsFormal)
  157. })
  158. .MergeTable()
  159. .OrderBy(sSortField, sSortOrder)
  160. .ToPageList(pml.PageIndex, pml.PageSize, ref iPageCount);
  161. pml.Total = iPageCount;
  162. }
  163. rm = new SuccessResponseMessage(null, i_crm);
  164. if (bExcel)
  165. {
  166. string sFileName = "奕達預約記錄";
  167. if (i_crm.ORIGID == "TG")
  168. {
  169. sFileName = "駒驛預約記錄";
  170. }
  171. var oHeader = new Dictionary<string, string>
  172. {
  173. { "Exhibitioname_TW", "展覽名稱" },
  174. { "MuseumMumber", "攤位編號" },
  175. { "CompName", "公司名稱" },
  176. { "Unicode", "統一編號" },
  177. { "Field0", "攤位數" },
  178. { "Contactor", "聯絡人1" },
  179. { "ContactTel", "電話" },
  180. { "Field1", "進場日期" },
  181. { "Field2", "進場時間" },
  182. { "Field3", "退場日期" },
  183. { "Field4", "退場日期" },
  184. { "Field5", "件數" },
  185. { "Field6", "總重" },
  186. { "Field7", "長" },
  187. { "Field8", "寬" },
  188. { "Field9", "高" },
  189. { "Field10", "CBM" },
  190. { "Field11", "包裝" },
  191. { "Field12", "備註" },
  192. };
  193. var dt_new = new DataTable();
  194. dt_new.Columns.Add("Exhibitioname_TW");
  195. dt_new.Columns.Add("MuseumMumber");
  196. dt_new.Columns.Add("CompName");
  197. dt_new.Columns.Add("Unicode");
  198. dt_new.Columns.Add("Field0");
  199. dt_new.Columns.Add("Contactor");
  200. dt_new.Columns.Add("ContactTel");
  201. dt_new.Columns.Add("Field1");
  202. dt_new.Columns.Add("Field2");
  203. dt_new.Columns.Add("Field3");
  204. dt_new.Columns.Add("Field4");
  205. dt_new.Columns.Add("Field5");
  206. dt_new.Columns.Add("Field6");
  207. dt_new.Columns.Add("Field7");
  208. dt_new.Columns.Add("Field8");
  209. dt_new.Columns.Add("Field9");
  210. dt_new.Columns.Add("Field10");
  211. dt_new.Columns.Add("Field11");
  212. dt_new.Columns.Add("Field12");
  213. var listMerge = new List<Dictionary<string, int>>();
  214. var oExpoType_TW = new Map { { "01", "裸機" }, { "02", "木箱" }, { "03", "散貨" }, { "04", "打板" }, { "05", "其他" } };
  215. var iPackingChildIndex = 0;
  216. var saPackingOrder = pml.DataList as List<View_WSM_PackingOrder>;
  217. foreach (var item in saPackingOrder)
  218. {
  219. var iPackingIndex = iPackingChildIndex;
  220. var jaPackingInfo = (JArray)JsonConvert.DeserializeObject(item.PackingInfo);
  221. if (jaPackingInfo.Count > 0)
  222. {
  223. foreach (JObject packinfo in jaPackingInfo)
  224. {
  225. var row_new = dt_new.NewRow();
  226. var sExpoType = packinfo["ExpoType"].ToString();
  227. var sExpoLen = packinfo["ExpoLen"].ToString();
  228. var sExpoWidth = packinfo["ExpoWidth"].ToString();
  229. var sExpoHeight = packinfo["ExpoHeight"].ToString();
  230. var sExpoWeight = packinfo["ExpoWeight"].ToString();
  231. var sExpoNumber = packinfo["ExpoNumber"].ToString();
  232. row_new["Exhibitioname_TW"] = item.Exhibitioname_TW;
  233. row_new["CompName"] = item.CompName;
  234. row_new["Unicode"] = item.Unicode;
  235. row_new["ContactTel"] = item.ContactTel;
  236. row_new["Field12"] = item.Memo;
  237. row_new["MuseumMumber"] = item.MuseumMumber;
  238. row_new["Field0"] = "";
  239. row_new["Contactor"] = item.Contactor;
  240. row_new["Field1"] = Convert.ToDateTime(item.ApproachTime).ToString("yyyy/MM/dd");
  241. row_new["Field2"] = Convert.ToDateTime(item.ApproachTime).ToString("HH:mm");
  242. row_new["Field3"] = Convert.ToDateTime(item.ExitTime).ToString("yyyy/MM/dd");
  243. row_new["Field4"] = Convert.ToDateTime(item.ExitTime).ToString("HH:mm");
  244. row_new["Field5"] = sExpoNumber;
  245. row_new["Field6"] = sExpoWeight;
  246. row_new["Field7"] = sExpoLen;
  247. row_new["Field8"] = sExpoWidth;
  248. row_new["Field9"] = sExpoHeight;
  249. row_new["Field10"] = Math.Round(Convert.ToDecimal(sExpoLen) * Convert.ToDecimal(sExpoWidth) * Convert.ToDecimal(sExpoHeight) / Convert.ToDecimal("1000000"), 2);
  250. row_new["Field11"] = oExpoType_TW[sExpoType].ToString();
  251. dt_new.Rows.Add(row_new);
  252. iPackingChildIndex++;
  253. }
  254. if (jaPackingInfo.Count > 1)
  255. {
  256. for (var i = 0; i < 10; i++)
  257. {
  258. var dicMerge = new Dictionary<string, int>
  259. {
  260. { "FirstRow", iPackingIndex + 3 },
  261. { "FirstCol", i },
  262. { "RowCount", jaPackingInfo.Count },
  263. { "ColCount", 1 }
  264. };
  265. listMerge.Add(dicMerge);
  266. }
  267. }
  268. }
  269. }
  270. var dicAlain = ExcelService.GetExportAlain(oHeader, "MuseumMumber,Contactor,Field0,Field1,Field2,Field3,Field4,Field5,Field6,Field7,Field8,Field9,Field10,Field11");
  271. var bOk = new ExcelService().CreateExcelByTb(dt_new, out string sPath, oHeader, dicAlain, listMerge, sFileName);
  272. rm.DATA.Add(BLWording.REL, sPath);
  273. }
  274. else
  275. {
  276. rm.DATA.Add(BLWording.REL, pml);
  277. }
  278. } while (false);
  279. }
  280. catch (Exception ex)
  281. {
  282. sMsg = Util.GetLastExceptionMsg(ex);
  283. LogAndSendEmail(sMsg + "Params:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, "EasyBL.WEBAPP.WSM.PackingOrder_QryService", "", "QueryPage(預約記錄分頁查詢)", "", "", "");
  284. }
  285. finally
  286. {
  287. if (null != sMsg)
  288. {
  289. rm = new ErrorResponseMessage(sMsg, i_crm);
  290. }
  291. }
  292. return rm;
  293. }
  294. #endregion 預約記錄分頁查詢
  295. }
  296. }