You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

378 lines
24 KiB

3 years ago
  1. using EasyBL.WebApi.Message;
  2. using Entity.Sugar;
  3. using Entity.ViewModels;
  4. using SqlSugar;
  5. using SqlSugar.Base;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Data;
  9. namespace EasyBL.WEBAPP.OPM
  10. {
  11. public class Exhibition_QryService : ServiceBase
  12. {
  13. #region 展覽管理分頁查詢
  14. /// <summary>
  15. /// 展覽管理分頁查詢
  16. /// </summary>
  17. /// <param name="i_crm"></param>
  18. /// <returns></returns>
  19. public ResponseMessage QueryPage(RequestMessage i_crm)
  20. {
  21. ResponseMessage rm = null;
  22. string sMsg = null;
  23. var db = SugarBase.GetIntance();
  24. try
  25. {
  26. do
  27. {
  28. var pml = new PageModel
  29. {
  30. PageIndex = _fetchInt(i_crm, @"pageIndex"),
  31. PageSize = _fetchInt(i_crm, @"pageSize")
  32. };
  33. var iPageCount = 0;
  34. var sSortField = _fetchString(i_crm, @"sortField");
  35. var sSortOrder = _fetchString(i_crm, @"sortOrder");
  36. var sExhibitionCode = _fetchString(i_crm, @"ExhibitionCode");
  37. var sExhibitioname = _fetchString(i_crm, @"Exhibitioname");
  38. //var sExhibitionDateStart = _fetchString(i_crm, @"ExhibitionDateStart");
  39. //var sExhibitionDateEnd = _fetchString(i_crm, @"ExhibitionDateEnd");
  40. //var sCreateDateStart = _fetchString(i_crm, @"CreateDateStart");
  41. //var sCreateDateEnd = _fetchString(i_crm, @"CreateDateEnd");
  42. //var sModifyDateStart = _fetchString(i_crm, @"ModifyDateStart");
  43. //var sModifyDateEnd = _fetchString(i_crm, @"ModifyDateEnd");
  44. //var sIsShowWebSite = _fetchString(i_crm, @"IsShowWebSite");
  45. var sCreateUser = _fetchString(i_crm, @"CreateUser");
  46. //var sArea = _fetchString(i_crm, @"Area");
  47. var sState = _fetchString(i_crm, @"State");
  48. //var sExhibitionAddress = _fetchString(i_crm, @"ExhibitionAddress");
  49. var sEffective = _fetchString(i_crm, @"Effective");
  50. var sIsTransfer = _fetchString(i_crm, @"IsTransfer");
  51. var sIsDeal = _fetchString(i_crm, @"IsDeal");
  52. var bExcel = _fetchBool(i_crm, @"Excel");
  53. var sExcelType = _fetchString(i_crm, @"ExcelType");
  54. //var rExhibitionDateStart = new DateTime();
  55. //var rExhibitionDateEnd = new DateTime();
  56. //var rCreateDateStart = new DateTime();
  57. //var rCreateDateEnd = new DateTime();
  58. //var rModifyDateStart = new DateTime();
  59. //var rModifyDateEnd = new DateTime();
  60. //if (!string.IsNullOrEmpty(sExhibitionDateStart))
  61. //{
  62. // rExhibitionDateStart = SqlFunc.ToDate(sExhibitionDateStart);
  63. //}
  64. //if (!string.IsNullOrEmpty(sExhibitionDateEnd))
  65. //{
  66. // rExhibitionDateEnd = SqlFunc.ToDate(sExhibitionDateEnd).AddDays(1);
  67. //}
  68. //if (!string.IsNullOrEmpty(sCreateDateStart))
  69. //{
  70. // rCreateDateStart = SqlFunc.ToDate(sCreateDateStart);
  71. //}
  72. //if (!string.IsNullOrEmpty(sCreateDateEnd))
  73. //{
  74. // rCreateDateEnd = SqlFunc.ToDate(sCreateDateEnd).AddDays(1);
  75. //}
  76. //if (!string.IsNullOrEmpty(sModifyDateStart))
  77. //{
  78. // rModifyDateStart = SqlFunc.ToDate(sModifyDateStart);
  79. //}
  80. //if (!string.IsNullOrEmpty(sModifyDateEnd))
  81. //{
  82. // rModifyDateEnd = SqlFunc.ToDate(sModifyDateEnd).AddDays(1);
  83. //}
  84. var sIndustry = _fetchString(i_crm, @"Industry");
  85. var sListSource = _fetchString(i_crm, @"ListSource");
  86. var sResponsiblePerson = _fetchString(i_crm, @"ResponsiblePerson");
  87. var sDateType = _fetchString(i_crm, @"DateType");
  88. var sDateStart = _fetchString(i_crm, @"DateStart");
  89. var sDateEnd = _fetchString(i_crm, @"DateEnd");
  90. var rDateStart = new DateTime();
  91. var rDateEnd = new DateTime();
  92. if (!string.IsNullOrEmpty(sDateStart))
  93. {
  94. rDateStart = SqlFunc.ToDate(sDateStart);
  95. }
  96. if (!string.IsNullOrEmpty(sDateEnd))
  97. {
  98. rDateEnd = SqlFunc.ToDate(sDateEnd).AddDays(1);
  99. }
  100. pml.DataList = db.Queryable<OTB_OPM_Exhibition, OTB_SYS_Members, OTB_SYS_Arguments, OTB_SYS_Arguments, OTB_SYS_Arguments>
  101. ((t1, t2, t3, t4, t5) =>
  102. new object[] {
  103. JoinType.Left, t1.OrgID == t2.OrgID && t1.CreateUser == t2.MemberID,
  104. JoinType.Left, t1.OrgID == t3.OrgID && t1.Area == t3.ArgumentID && t3.ArgumentClassID == "Area",
  105. JoinType.Left, t1.OrgID == t4.OrgID && t1.State == t4.ArgumentID && t4.ArgumentClassID == "Area",
  106. JoinType.Left, t1.OrgID == t5.OrgID && t1.ExhibitionAddress == t5.ArgumentID && t5.ArgumentClassID == "EHalls"
  107. }
  108. )
  109. .Where((t1, t2, t3, t4, t5) => t1.ExhibitionCode.Contains(sExhibitionCode) && sEffective.Contains(t1.Effective) && sIsTransfer.Contains(t1.IsTransfer) && (t1.Exhibitioname_EN.Contains(sExhibitioname) || t1.Exhibitioname_TW.Contains(sExhibitioname) || t1.Exhibitioname_CN.Contains(sExhibitioname) || t1.ExhibitioShotName_TW.Contains(sExhibitioname) || t1.ExhibitioShotName_CN.Contains(sExhibitioname) || t1.ExhibitioShotName_EN.Contains(sExhibitioname)))
  110. //.WhereIF((i_crm.ORIGID == "SG" || i_crm.ORIGID == "SE"), (t1, t2, t3, t4, t5) => t1.OrgID == i_crm.ORIGID)
  111. .WhereIF((i_crm.ORIGID != "TE" && i_crm.ORIGID != "TG"), (t1, t2, t3, t4, t5) => t1.OrgID == i_crm.ORIGID)
  112. .WhereIF((i_crm.ORIGID == "TE" || i_crm.ORIGID == "TG"), (t1, t2, t3, t4, t5) => t1.OrgID == "TE" || t1.OrgID == "TG")
  113. //.WhereIF(!string.IsNullOrEmpty(sExhibitionDateStart), (t1, t2, t3, t4, t5) => t1.ExhibitionDateStart >= rExhibitionDateStart.Date)
  114. //.WhereIF(!string.IsNullOrEmpty(sExhibitionDateEnd), (t1, t2, t3, t4, t5) => t1.ExhibitionDateEnd <= rExhibitionDateEnd.Date)
  115. //.WhereIF(!string.IsNullOrEmpty(sCreateDateStart), (t1, t2, t3, t4, t5) => t1.CreateDate >= rCreateDateStart.Date)
  116. //.WhereIF(!string.IsNullOrEmpty(sCreateDateEnd), (t1, t2, t3, t4, t5) => t1.CreateDate <= rCreateDateEnd.Date)
  117. //.WhereIF(!string.IsNullOrEmpty(sModifyDateStart), (t1, t2, t3, t4, t5) => t1.ModifyDate >= rModifyDateStart.Date)
  118. //.WhereIF(!string.IsNullOrEmpty(sModifyDateEnd), (t1, t2, t3, t4, t5) => t1.ModifyDate <= rModifyDateEnd.Date)
  119. .WhereIF(!string.IsNullOrEmpty(sDateStart) && sDateType == "1", (t1, t2) => t1.ExhibitionDateStart >= rDateStart.Date)
  120. .WhereIF(!string.IsNullOrEmpty(sDateEnd) && sDateType == "1", (t1, t2) => t1.ExhibitionDateEnd <= rDateEnd.Date)
  121. .WhereIF(!string.IsNullOrEmpty(sDateStart) && sDateType == "2", (t1, t2) => t1.CreateDate >= rDateStart.Date)
  122. .WhereIF(!string.IsNullOrEmpty(sDateEnd) && sDateType == "2", (t1, t2) => t1.CreateDate <= rDateEnd.Date)
  123. .WhereIF(!string.IsNullOrEmpty(sDateStart) && sDateType == "3", (t1, t2) => t1.ModifyDate >= rDateStart.Date)
  124. .WhereIF(!string.IsNullOrEmpty(sDateEnd) && sDateType == "3", (t1, t2) => t1.ModifyDate <= rDateEnd.Date)
  125. //.WhereIF(!string.IsNullOrEmpty(sArea), (t1, t2, t3, t4, t5) => t1.Area == sArea)
  126. .WhereIF(!string.IsNullOrEmpty(sIndustry), (t1, t2, t3, t4, t5) => t1.Industry == sIndustry)
  127. .WhereIF(!string.IsNullOrEmpty(sState), (t1, t2, t3, t4, t5) => t1.State == sState)
  128. //.WhereIF(!string.IsNullOrEmpty(sExhibitionAddress), (t1, t2, t3, t4, t5) => t1.ExhibitionAddress == sExhibitionAddress)
  129. .WhereIF(!string.IsNullOrEmpty(sCreateUser), (t1, t2, t3, t4, t5) => t1.CreateUser == sCreateUser)
  130. .WhereIF(!string.IsNullOrEmpty(sResponsiblePerson), (t1, t2, t3, t4, t5) => t1.ResponsiblePerson == sResponsiblePerson)
  131. .WhereIF(sIsDeal == "Y", t1 =>
  132. (SqlFunc.Subqueryable<OTB_OPM_ImportExhibition>().Where(p1 => p1.ExhibitionNO == t1.SN.ToString()).Count() > 0) ||
  133. (SqlFunc.Subqueryable<OTB_OPM_ExportExhibition>().Where(p2 => p2.ExhibitionNO == t1.SN.ToString()).Count() > 0) ||
  134. (SqlFunc.Subqueryable<OTB_OPM_OtherExhibition>().Where(p3 => p3.ExhibitionNO == t1.SN.ToString()).Count() > 0) ||
  135. (SqlFunc.Subqueryable<OTB_OPM_OtherExhibitionTG>().Where(p4 => p4.ExhibitionNO == t1.SN.ToString()).Count() > 0)
  136. )
  137. .WhereIF(sIsDeal == "N", t1 =>
  138. (SqlFunc.Subqueryable<OTB_OPM_ImportExhibition>().Where(p5 => p5.ExhibitionNO == t1.SN.ToString()).Count() == 0) &&
  139. (SqlFunc.Subqueryable<OTB_OPM_ExportExhibition>().Where(p6 => p6.ExhibitionNO == t1.SN.ToString()).Count() == 0) &&
  140. (SqlFunc.Subqueryable<OTB_OPM_OtherExhibition>().Where(p7 => p7.ExhibitionNO == t1.SN.ToString()).Count() == 0) &&
  141. (SqlFunc.Subqueryable<OTB_OPM_OtherExhibitionTG>().Where(p8 => p8.ExhibitionNO == t1.SN.ToString()).Count() == 0)
  142. )
  143. .WhereIF(!string.IsNullOrEmpty(sListSource), t1 =>
  144. (SqlFunc.Subqueryable<OTB_OPM_ExhibitionCustomers>().Where(p9 => p9.ExhibitionNO == t1.SN.ToString() && p9.ListSource == sListSource).Count() > 0)
  145. )
  146. .Select((t1, t2, t3, t4, t5) => new View_OPM_Exhibition
  147. {
  148. SN = SqlFunc.GetSelfAndAutoFill(t1.SN),
  149. CreateUserName = t2.MemberName,
  150. AreaName = t3.ArgumentValue,
  151. Area_CN = t3.ArgumentValue_CN,
  152. Area_EN = t3.ArgumentValue_EN,
  153. StateName = t4.ArgumentValue,
  154. State_CN = t4.ArgumentValue_CN,
  155. State_EN = t4.ArgumentValue_EN,
  156. ExhibitionAddressName = t5.ArgumentValue,
  157. ExhibitionAddress_CN = t5.ArgumentValue_CN,
  158. ExhibitionAddress_EN = t5.ArgumentValue_EN,
  159. ExhibitioFullName = SqlFunc.IIF(SqlFunc.HasValue(t1.ExhibitioShotName_TW), "(" + SqlFunc.IsNull(t1.ExhibitioShotName_TW, "") + ")", "") + t1.Exhibitioname_TW,
  160. Exhibitioname = t1.Exhibitioname_CN + t1.Exhibitioname_EN,
  161. //IsDeal = SqlFunc.IIF(SqlFunc.Subqueryable<OTB_OPM_ImportExhibition>().Where(p1 => p1.ExhibitionNO == t1.SN.ToString()).Count() > 0, "Y", "N")
  162. IsDeal = SqlFunc.MappingColumn(t1.OrgID, "dbo.[OFN_OPM_CheckExhibitionDeal](t1.SN)"),
  163. ResponsiblePersonName = SqlFunc.MappingColumn(t1.OrgID, "dbo.[OFN_SYS_MemberNameByMemberIDwithoutOrgID](t1.ResponsiblePerson)")
  164. //IsDeal = ((SqlFunc.Subqueryable<OTB_OPM_ImportExhibition>().Where(p1 => p1.ExhibitionNO == t1.SN.ToString()).Count() > 0) ||
  165. //(SqlFunc.Subqueryable<OTB_OPM_ExportExhibition>().Where(p2 => p2.ExhibitionNO == t1.SN.ToString()).Count() > 0) ||
  166. //(SqlFunc.Subqueryable<OTB_OPM_OtherExhibition>().Where(p3 => p3.ExhibitionNO == t1.SN.ToString()).Count() > 0) ||
  167. //(SqlFunc.Subqueryable<OTB_OPM_OtherExhibitionTG>().Where(p4 => p4.ExhibitionNO == t1.SN.ToString()).Count() > 0) ? "Y" : "N")
  168. })
  169. .MergeTable()
  170. .OrderBy(sSortField, sSortOrder)
  171. .ToPageList(pml.PageIndex, bExcel ? 100000 : pml.PageSize, ref iPageCount);
  172. pml.Total = iPageCount;
  173. rm = new SuccessResponseMessage(null, i_crm);
  174. if (bExcel)
  175. {
  176. var sFileName = "";
  177. var oHeader = new Dictionary<string, string>();
  178. var listMerge = new List<Dictionary<string, int>>();
  179. var dicAlain = new Dictionary<string, string>();
  180. var dt_new = new DataTable();
  181. var saCustomers1 = pml.DataList;
  182. var saExhibition = pml.DataList as List<View_OPM_Exhibition>;
  183. switch (sExcelType)
  184. {
  185. case "Exhibition_BasicInformation":
  186. {
  187. sFileName = "展覽管理基本資料";
  188. oHeader = new Dictionary<string, string>
  189. {
  190. { "RowIndex", "項次" },
  191. { "ExhibitionCode", "專案代號" },
  192. { "ExhibitioShotName_TW", "活動/展覽簡稱" },
  193. { "Exhibitioname_TW", "活動/展覽名稱" },
  194. { "Exhibitioname_EN", "活動/展覽英文展名" },
  195. { "ExhibitionDateStart", "展覽期間" },
  196. { "CreateUserName", "創建人" },
  197. { "CreateDate", "創建時間" }
  198. };
  199. dt_new.Columns.Add("RowIndex");
  200. dt_new.Columns.Add("ExhibitionCode");
  201. dt_new.Columns.Add("ExhibitioShotName_TW");
  202. dt_new.Columns.Add("Exhibitioname_TW");
  203. dt_new.Columns.Add("Exhibitioname_EN");
  204. dt_new.Columns.Add("ExhibitionDateStart");
  205. dt_new.Columns.Add("CreateUserName");
  206. dt_new.Columns.Add("CreateDate");
  207. foreach (var exhibition in saExhibition)
  208. {
  209. var row_new = dt_new.NewRow();
  210. var sStart = "";
  211. var sEnd = "";
  212. if (exhibition.ExhibitionDateStart != null)
  213. {
  214. sStart = Convert.ToDateTime(exhibition.ExhibitionDateStart).ToString("yyyy/MM/dd");
  215. }
  216. if (exhibition.ExhibitionDateEnd != null)
  217. {
  218. sEnd = Convert.ToDateTime(exhibition.ExhibitionDateEnd).ToString("yyyy/MM/dd");
  219. }
  220. if (exhibition.CreateDate != null)
  221. {
  222. row_new["CreateDate"] = Convert.ToDateTime(exhibition.CreateDate).ToString("yyyy/MM/dd HH:mm");
  223. }
  224. else
  225. {
  226. row_new["CreateDate"] = @"";
  227. }
  228. row_new["RowIndex"] = exhibition.RowIndex;
  229. row_new["ExhibitionCode"] = exhibition.ExhibitionCode;
  230. row_new["ExhibitioShotName_TW"] = exhibition.ExhibitioShotName_TW;
  231. row_new["Exhibitioname_TW"] = exhibition.Exhibitioname_TW;
  232. row_new["Exhibitioname_EN"] = exhibition.Exhibitioname_EN;
  233. row_new["CreateUserName"] = exhibition.CreateUserName;
  234. row_new["ExhibitionDateStart"] = sStart + "~" + sEnd;
  235. dt_new.Rows.Add(row_new);
  236. }
  237. dicAlain = ExcelService.GetExportAlain(oHeader, "ExhibitionCode,ExhibitionDateStart,IsShowWebSite,CreateUserName,CreateDate");
  238. }
  239. break;
  240. case "Exhibition_WenzhongPrjFile":
  241. {
  242. sFileName = "文中專案檔";
  243. oHeader = new Dictionary<string, string>
  244. {
  245. { "RowIndex", "項次" },
  246. { "ExhibitionCode", "專案代號" },
  247. { "ExhibitioShotName_TW", "專案名稱" },
  248. { "CusField1", "專案負責人" },
  249. { "CusField2", "失效日期" }
  250. };
  251. dt_new.Columns.Add("RowIndex");
  252. dt_new.Columns.Add("ExhibitionCode");
  253. dt_new.Columns.Add("ExhibitioShotName_TW");
  254. dt_new.Columns.Add("CusField1");
  255. dt_new.Columns.Add("CusField2");
  256. foreach (var exhibition in saExhibition)
  257. {
  258. var row_new = dt_new.NewRow();
  259. row_new["RowIndex"] = exhibition.RowIndex;
  260. row_new["ExhibitionCode"] = exhibition.ExhibitionCode;
  261. row_new["ExhibitioShotName_TW"] = exhibition.ExhibitioShotName_TW;
  262. row_new["CusField1"] = exhibition.CreateUser.Split('.')[0];
  263. row_new["CusField2"] = "";
  264. dt_new.Rows.Add(row_new);
  265. }
  266. dicAlain = ExcelService.GetExportAlain(oHeader, new string[] { "ExhibitionCode", "CusField1", "CusField2" });
  267. }
  268. break;
  269. default:
  270. {
  271. break;
  272. }
  273. }
  274. var bOk = new ExcelService().CreateExcelByTb(dt_new, out string sPath, oHeader, dicAlain, listMerge, sFileName);
  275. rm.DATA.Add(BLWording.REL, sPath);
  276. }
  277. else
  278. {
  279. rm.DATA.Add(BLWording.REL, pml);
  280. }
  281. } while (false);
  282. }
  283. catch (Exception ex)
  284. {
  285. sMsg = Util.GetLastExceptionMsg(ex);
  286. LogAndSendEmail(sMsg + "Params:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, "EasyBL.WEBAPP.OPM.Exhibition_QryService", "", "QueryPage(展覽管理分頁查詢)", "", "", "");
  287. }
  288. finally
  289. {
  290. if (null != sMsg)
  291. {
  292. rm = new ErrorResponseMessage(sMsg, i_crm);
  293. }
  294. }
  295. return rm;
  296. }
  297. #endregion 展覽管理分頁查詢
  298. #region 展覽管理單筆查詢
  299. /// <summary>
  300. /// 展覽管理單筆查詢
  301. /// </summary>
  302. /// <param name="i_crm"></param>
  303. /// <returns></returns>
  304. public ResponseMessage QueryOne(RequestMessage i_crm)
  305. {
  306. ResponseMessage rm = null;
  307. string sMsg = null;
  308. var db = SugarBase.GetIntance();
  309. try
  310. {
  311. do
  312. {
  313. var iId = _fetchInt(i_crm, @"Guid");
  314. var oExportExhibition = db.Queryable<OTB_OPM_Exhibition, OTB_SYS_Members, OTB_SYS_Arguments, OTB_SYS_Arguments, OTB_SYS_Arguments>
  315. ((t1, t2, t3, t4, t5) =>
  316. new object[] {
  317. JoinType.Left, t1.OrgID == t2.OrgID && t1.CreateUser == t2.MemberID,
  318. JoinType.Left, t1.OrgID == t3.OrgID && t1.Area == t3.ArgumentID && t3.ArgumentClassID == "Area",
  319. JoinType.Left, t1.OrgID == t4.OrgID && t1.State == t4.ArgumentID && t4.ArgumentClassID == "Area",
  320. JoinType.Left, t1.OrgID == t5.OrgID && t1.ExhibitionAddress == t5.ArgumentID && t5.ArgumentClassID == "EHalls"
  321. }
  322. )
  323. .Where((t1, t2, t3) => t1.SN == iId)
  324. .Select((t1, t2, t3, t4, t5) => new View_OPM_Exhibition
  325. {
  326. SN = SqlFunc.GetSelfAndAutoFill(t1.SN),
  327. CreateUserName = t2.MemberName,
  328. AreaName = t3.ArgumentValue,
  329. Area_CN = t3.ArgumentValue_CN,
  330. Area_EN = t3.ArgumentValue_EN,
  331. StateName = t4.ArgumentValue,
  332. State_CN = t4.ArgumentValue_CN,
  333. State_EN = t4.ArgumentValue_EN,
  334. ExhibitionAddressName = t5.ArgumentValue,
  335. ExhibitionAddress_CN = t5.ArgumentValue_CN,
  336. ExhibitionAddress_EN = t5.ArgumentValue_EN,
  337. ExhibitioFullName = SqlFunc.IIF(SqlFunc.HasValue(t1.ExhibitioShotName_TW), "(" + SqlFunc.IsNull(t1.ExhibitioShotName_TW, "") + ")", "") + t1.Exhibitioname_TW,
  338. Exhibitioname = t1.Exhibitioname_CN + t1.Exhibitioname_EN
  339. }).Single();
  340. //,
  341. //ListSource = SqlFunc.MappingColumn(t1.ExhibitionCode, "(select distinct ListSource + ',' from OTB_OPM_ExhibitionCustomers mr where mr.ExhibitionNO = t1.SN for xml path(''))")
  342. rm = new SuccessResponseMessage(null, i_crm);
  343. rm.DATA.Add(BLWording.REL, oExportExhibition);
  344. } while (false);
  345. }
  346. catch (Exception ex)
  347. {
  348. sMsg = Util.GetLastExceptionMsg(ex);
  349. LogAndSendEmail(sMsg + "Params:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, "EasyBL.WEBAPP.OPM.Exhibition_QryService", "", "QueryOne(展覽管理單筆查詢)", "", "", "");
  350. }
  351. finally
  352. {
  353. if (null != sMsg)
  354. {
  355. rm = new ErrorResponseMessage(sMsg, i_crm);
  356. }
  357. }
  358. return rm;
  359. }
  360. #endregion 展覽管理單筆查詢
  361. }
  362. }