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.

471 lines
22 KiB

3 years ago
  1. using EasyBL.WebApi.Message;
  2. using EasyNet;
  3. using Entity;
  4. using Entity.Sugar;
  5. using Entity.ViewModels;
  6. using JumpKick.HttpLib;
  7. using SqlSugar;
  8. using SqlSugar.Base;
  9. using System;
  10. using System.Collections.Generic;
  11. using System.Linq;
  12. using System.Net;
  13. using System.Text.RegularExpressions;
  14. using Aspose.Cells;
  15. using Newtonsoft.Json;
  16. using Newtonsoft.Json.Linq;
  17. using System.Data;
  18. using System.IO;
  19. using EasyBL;
  20. namespace EasyBL.WEBAPP.CRM
  21. {
  22. public class Complaint_QryService : ServiceBase
  23. {
  24. #region 取得組團單位
  25. /// <summary>
  26. /// 取得組團單位
  27. /// </summary>
  28. /// <param name="i_crm">todo: describe i_crm parameter on GetGroupUnit</param>
  29. /// <returns></returns>
  30. public ResponseMessage GetGroupUnit(RequestMessage i_crm)
  31. {
  32. ResponseMessage rm = null;
  33. string sMsg = null;
  34. try
  35. {
  36. rm = SugarBase.ExecTran(db =>
  37. {
  38. do
  39. {
  40. var QueryData = db.Queryable<OTB_CRM_Customers>().Where(x => x.IsGroupUnit == "Y").ToList();
  41. rm = new SuccessResponseMessage(null, i_crm);
  42. rm.DATA.Add(BLWording.REL, QueryData);
  43. } while (false);
  44. return rm;
  45. });
  46. }
  47. catch (Exception ex)
  48. {
  49. sMsg = Util.GetLastExceptionMsg(ex);
  50. LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(Complaint_QryService), @"取得組團單位", @"GetGroupUnit(取得組團單位)", @"", @"", @"");
  51. }
  52. finally
  53. {
  54. if (null != sMsg)
  55. {
  56. rm = new ErrorResponseMessage(sMsg, i_crm);
  57. }
  58. }
  59. return rm;
  60. }
  61. #endregion
  62. #region 取得配合代理
  63. /// <summary>
  64. /// 取得配合代理
  65. /// </summary>
  66. /// <param name="i_crm">todo: describe i_crm parameter on GetCoopAgent</param>
  67. /// <returns></returns>
  68. public ResponseMessage GetCoopAgent(RequestMessage i_crm)
  69. {
  70. ResponseMessage rm = null;
  71. string sMsg = null;
  72. try
  73. {
  74. rm = SugarBase.ExecTran(db =>
  75. {
  76. do
  77. {
  78. var QueryData = db.Queryable<OTB_CRM_Customers>().Where(x => x.TransactionType == "C" || x.TransactionType == "D").ToList();
  79. rm = new SuccessResponseMessage(null, i_crm);
  80. rm.DATA.Add(BLWording.REL, QueryData);
  81. } while (false);
  82. return rm;
  83. });
  84. }
  85. catch (Exception ex)
  86. {
  87. sMsg = Util.GetLastExceptionMsg(ex);
  88. LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(Complaint_QryService), @"取得配合代理", @"GetCoopAgent(取得配合代理)", @"", @"", @"");
  89. }
  90. finally
  91. {
  92. if (null != sMsg)
  93. {
  94. rm = new ErrorResponseMessage(sMsg, i_crm);
  95. }
  96. }
  97. return rm;
  98. }
  99. #endregion
  100. #region 取得客戶名稱
  101. /// <summary>
  102. /// 取得客戶名稱
  103. /// </summary>
  104. /// <param name="i_crm">todo: describe i_crm parameter on GetCustomers</param>
  105. /// <returns></returns>
  106. public ResponseMessage GetCustomers(RequestMessage i_crm)
  107. {
  108. ResponseMessage rm = null;
  109. string sMsg = null;
  110. try
  111. {
  112. rm = SugarBase.ExecTran(db =>
  113. {
  114. do
  115. {
  116. var QueryData = db.Queryable<OTB_CRM_Customers>().ToList();
  117. rm = new SuccessResponseMessage(null, i_crm);
  118. rm.DATA.Add(BLWording.REL, QueryData);
  119. } while (false);
  120. return rm;
  121. });
  122. }
  123. catch (Exception ex)
  124. {
  125. sMsg = Util.GetLastExceptionMsg(ex);
  126. LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(Complaint_QryService), @"取得客戶名稱", @"GetCustomers(取得客戶名稱)", @"", @"", @"");
  127. }
  128. finally
  129. {
  130. if (null != sMsg)
  131. {
  132. rm = new ErrorResponseMessage(sMsg, i_crm);
  133. }
  134. }
  135. return rm;
  136. }
  137. #endregion
  138. #region 客訴人頁面查詢
  139. /// <summary>
  140. /// 客訴人頁面查詢
  141. /// </summary>
  142. /// <param name="i_crm">todo: describe i_crm parameter on QueryPage</param>
  143. /// <returns></returns>
  144. public ResponseMessage QueryPage(RequestMessage i_crm)
  145. {
  146. ResponseMessage rm = null;
  147. string sMsg = null;
  148. var db = SugarBase.GetIntance();
  149. try
  150. {
  151. do
  152. {
  153. var pm1 = new PageModel
  154. {
  155. PageIndex = _fetchInt(i_crm, @"pageIndex"),
  156. PageSize = _fetchInt(i_crm, @"pageSize")
  157. };
  158. var sSortField = _fetchString(i_crm, @"sortField");
  159. var sSortOrder = _fetchString(i_crm, @"sortOrder");
  160. var iPageCount = 0;
  161. var sComplaintNumber = _fetchString(i_crm, @"ComplaintNumber");
  162. var sComplaintTitle = _fetchString(i_crm, @"ComplaintTitle");
  163. var sExhibitionName_TW = _fetchString(i_crm, @"ExhibitionName_TW");
  164. var sCustomerCName = _fetchString(i_crm, @"CustomerCName");
  165. var sComplainant = _fetchString(i_crm, @"Complainant");
  166. var sCreateUser = _fetchString(i_crm, @"CreateUser");
  167. var sDateStart = _fetchString(i_crm, @"CreateDateStart");
  168. var sDateEnd = _fetchString(i_crm, @"CreateDateEnd");
  169. var sComplaintSource = _fetchString(i_crm, @"ComplaintSource");
  170. var sGroupUnit = _fetchString(i_crm, @"GroupUnit");
  171. var sCoopAgent = _fetchString(i_crm, @"CoopAgent");
  172. var sImportant = _fetchString(i_crm, @"Important");
  173. var sComplaintType = _fetchString(i_crm, @"ComplaintType");
  174. var sDataType = _fetchString(i_crm, @"DataType");
  175. var bExcel = _fetchBool(i_crm, @"Excel");
  176. var sExcelType = _fetchString(i_crm, @"ExcelType");
  177. /*
  178. OTB_CRM_Customers CustomerID
  179. */
  180. //var sCustomerId = db.Queryable<OTB_CRM_Customers>()
  181. // .Where(x => (x.CustomerCName == sCustomerCName || x.CustomerEName == sCustomerCName || x.CustomerShotCName == sCustomerCName || x.CustomerShotEName == sCustomerCName))
  182. // .Select(x=> new {
  183. // x.guid
  184. // })
  185. // .ToList();
  186. /*
  187. OTB_OPM_Exhibition ExhibitionCode
  188. */
  189. //var sExhibitionNO = db.Queryable<OTB_OPM_Exhibition>()
  190. // .Where(x => x.Exhibitioname_TW == sExhibitionName_TW || x.Exhibitioname_EN == sExhibitionName_TW || x.Exhibitioname_CN == sExhibitionName_TW || x.ExhibitioShotName_TW == sExhibitionName_TW || x.ExhibitioShotName_EN == sExhibitionName_TW || x.ExhibitioShotName_CN == sExhibitionName_TW)
  191. // .Select(x => new
  192. // {
  193. // x.ExhibitionCode
  194. // })
  195. // .ToList();
  196. //var saCustomerId = "";
  197. //var saExhibitionNO = "";
  198. //if (sCustomerCName != "")
  199. //{
  200. // saCustomerId = sCustomerId[0].guid;
  201. //}
  202. //if (sExhibitionName_TW != "")
  203. //{
  204. // saExhibitionNO = sExhibitionNO[0].ExhibitionCode;
  205. //}
  206. var rDateStart = new DateTime();
  207. var rDateEnd = new DateTime();
  208. if (!string.IsNullOrEmpty(sDateStart))
  209. {
  210. rDateStart = SqlFunc.ToDate(sDateStart);
  211. }
  212. if (!string.IsNullOrEmpty(sDateEnd))
  213. {
  214. rDateEnd = SqlFunc.ToDate(sDateEnd).AddDays(1);
  215. }
  216. pm1.DataList = db.Queryable<OTB_CRM_Complaint, OTB_CRM_Customers, OTB_OPM_Exhibition>
  217. (
  218. (t1, t2, t3) => new object[] {
  219. JoinType.Left, t1.CustomerId == t2.guid,
  220. JoinType.Left, t1.ExhibitionNO == t3.SN.ToString()
  221. }
  222. )
  223. .Where((t1, t2, t3) => t1.ComplaintNumber.Contains(sComplaintNumber) && t1.ComplaintTitle.Contains(sComplaintTitle) && t3.Exhibitioname_TW.Contains(sExhibitionName_TW) && t1.Complainant.Contains(sComplainant))
  224. .WhereIF(!string.IsNullOrEmpty(sCustomerCName), (t1, t2, t3) => t2.CustomerCName.Contains(sCustomerCName))
  225. .WhereIF(!string.IsNullOrEmpty(sDateStart), (t1, t2, t3) => t1.CreateDate >= rDateStart.Date)
  226. .WhereIF(!string.IsNullOrEmpty(sDateEnd), (t1, t2, t3) => t1.CreateDate <= rDateEnd.Date)
  227. .WhereIF(!string.IsNullOrEmpty(sCreateUser), (t1, t2, t3) => t1.CreateUser == sCreateUser)
  228. .WhereIF(!string.IsNullOrEmpty(sComplaintSource), (t1, t2, t3) => t1.ComplaintSource == sComplaintSource)
  229. .WhereIF(!string.IsNullOrEmpty(sGroupUnit), (t1, t2, t3) => t1.GroupUnit == sGroupUnit)
  230. .WhereIF(!string.IsNullOrEmpty(sCoopAgent), (t1, t2, t3) => t1.CoopAgent == sCoopAgent)
  231. .WhereIF(!string.IsNullOrEmpty(sImportant), (t1,t2,t3) => t1.Important == sImportant)
  232. .WhereIF(!string.IsNullOrEmpty(sDataType), (t1,t2,t3) => sDataType.Contains(t1.DataType))
  233. .WhereIF(!string.IsNullOrEmpty(sComplaintType), (t1,t2,t3) => sComplaintType.Contains(t1.ComplaintType))
  234. .Select((t1, t2, t3) => new View_CRM_Complaint {
  235. Guid = t1.Guid,
  236. ComplaintNumber = t1.ComplaintNumber,
  237. ComplaintTitle = t1.ComplaintTitle,
  238. ComplaintType = t1.ComplaintType,
  239. ExhibitioShotName_TW = t3.ExhibitioShotName_TW,
  240. CustomerCName = t2.CustomerCName,
  241. Complainant = t1.Complainant,
  242. CreateUser = t1.CreateUser,
  243. CreateDate = t1.CreateDate,
  244. ModifyDate = t1.ModifyDate,
  245. DataType = t1.DataType,
  246. Handle_Person = t1.Handle_Person,
  247. Handle_DeptID = t1.Handle_DeptID
  248. })
  249. .MergeTable()
  250. .OrderBy(sSortField, sSortOrder)
  251. .ToPageList(pm1.PageIndex, bExcel ? 100000 : pm1.PageSize, ref iPageCount);
  252. pm1.Total = iPageCount;
  253. rm = new SuccessResponseMessage(null, i_crm);
  254. if (bExcel)
  255. {
  256. var sFileName = "";
  257. var oHeader = new Dictionary<string, string>();
  258. var listMerge = new List<Dictionary<string, int>>();
  259. var dicAlain = new Dictionary<string, string>();
  260. var dt_new = new DataTable();
  261. var saCustomers1 = pm1.DataList;
  262. var saExhibition = pm1.DataList as List<View_CRM_Complaint>;
  263. switch (sExcelType)
  264. {
  265. case "Complaint_BasicInformation":
  266. {
  267. sFileName = "客訴管理基本資料";
  268. oHeader = new Dictionary<string, string>
  269. {
  270. { "RowIndex", "項次" },
  271. { "ComplaintNumber", "客訴編號" },
  272. { "ComplaintTitle", "客訴主旨" },
  273. { "ComplaintType", "客訴類型" },
  274. { "ExhibitioShotName_TW", "活動/展覽簡稱" },
  275. { "CustomerCName", "客戶名稱" },
  276. { "Complainant", "客訴人" },
  277. { "CreateUser", "創建人" },
  278. { "CreateDate", "創建時間" }
  279. };
  280. dt_new.Columns.Add("RowIndex");
  281. dt_new.Columns.Add("ComplaintNumber");
  282. dt_new.Columns.Add("ComplaintTitle");
  283. dt_new.Columns.Add("ComplaintType");
  284. dt_new.Columns.Add("ExhibitioShotName_TW");
  285. dt_new.Columns.Add("CustomerCName");
  286. dt_new.Columns.Add("Complainant");
  287. dt_new.Columns.Add("CreateUser");
  288. dt_new.Columns.Add("CreateDate");
  289. foreach (var exhibition in saExhibition)
  290. {
  291. var row_new = dt_new.NewRow();
  292. if (exhibition.CreateDate != null)
  293. {
  294. row_new["CreateDate"] = Convert.ToDateTime(exhibition.CreateDate).ToString("yyyy/MM/dd HH:mm");
  295. }
  296. else
  297. {
  298. row_new["CreateDate"] = @"";
  299. }
  300. row_new["RowIndex"] = exhibition.RowIndex;
  301. row_new["ComplaintNumber"] = exhibition.ComplaintNumber;
  302. row_new["ComplaintTitle"] = exhibition.ComplaintTitle;
  303. row_new["ComplaintType"] = exhibition.ComplaintType;
  304. row_new["ExhibitioShotName_TW"] = exhibition.ExhibitioShotName_TW;
  305. row_new["CustomerCName"] = exhibition.CustomerCName;
  306. row_new["Complainant"] = exhibition.Complainant;
  307. row_new["CreateUser"] = exhibition.CreateUser;
  308. row_new["CreateDate"] = exhibition.CreateDate;
  309. dt_new.Rows.Add(row_new);
  310. }
  311. dicAlain = ExcelService.GetExportAlain(oHeader, "ExhibitionCode,ExhibitionDateStart,IsShowWebSite,CreateUserName,CreateDate");
  312. }
  313. break;
  314. default:
  315. {
  316. break;
  317. }
  318. }
  319. var bOk = new ExcelService().CreateExcelByTb(dt_new, out string sPath, oHeader, dicAlain, listMerge, sFileName);
  320. rm.DATA.Add(BLWording.REL, sPath);
  321. }
  322. else
  323. {
  324. rm.DATA.Add(BLWording.REL, pm1);
  325. }
  326. //rm.DATA.Add(BLWording.REL, pm1);
  327. } while (false);
  328. }
  329. catch (Exception ex)
  330. {
  331. sMsg = Util.GetLastExceptionMsg(ex);
  332. LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(BusinessOpportunity_QryService), @"客訴人頁面查詢", @"QueryPage(客訴人頁面查詢)", @"", @"", @"");
  333. }
  334. finally
  335. {
  336. if (null != sMsg)
  337. {
  338. rm = new ErrorResponseMessage(sMsg, i_crm);
  339. }
  340. }
  341. return rm;
  342. }
  343. #endregion
  344. #region 客訴頁面單筆查詢
  345. /// <summary>
  346. /// 客訴頁面單筆查詢
  347. /// </summary>
  348. /// <param name="i_crm"></param>
  349. /// <returns></returns>
  350. public ResponseMessage QueryOne(RequestMessage i_crm)
  351. {
  352. ResponseMessage rm = null;
  353. string sMsg = null;
  354. var db = SugarBase.GetIntance();
  355. try
  356. {
  357. do
  358. {
  359. var iId = _fetchString(i_crm, @"Guid");
  360. var sCreateUser = db.Queryable<OTB_CRM_Complaint>()
  361. .Where((t1) => t1.Guid == iId)
  362. .Select(t1 => new
  363. {
  364. CreateUser = t1.CreateUser
  365. }).Single();
  366. var sDepartmentID = db.Queryable<OTB_SYS_Members>()
  367. .Where(t1 => t1.MemberID == sCreateUser.CreateUser )
  368. .Select(t1 => new
  369. {
  370. DepartmentID = t1.DepartmentID,
  371. ModifyDate = t1.ModifyDate
  372. }).ToList().OrderByDescending(x=> x.ModifyDate).First();
  373. var sDepartmentName = db.Queryable<OTB_SYS_Departments>()
  374. .Where(t1 => t1.DepartmentID == sDepartmentID.DepartmentID)
  375. .Select(t1 => new
  376. {
  377. DepartmentName = t1.DepartmentName,
  378. ModifyDate = t1.ModifyDate
  379. }).ToList().OrderByDescending(x => x.ModifyDate).First();
  380. var oExportExhibition = db.Queryable<OTB_CRM_Complaint>()
  381. .Where((t1) => t1.Guid == iId)
  382. .Select((t1) => new View_CRM_Complaint
  383. {
  384. Guid = t1.Guid,
  385. ComplaintNumber = t1.ComplaintNumber,
  386. ComplaintTitle = t1.ComplaintTitle,
  387. ComplaintType = t1.ComplaintType,
  388. Important = t1.Important,
  389. ExhibitionName = t1.ExhibitionNO,
  390. ComplaintSource = t1.ComplaintSource,
  391. CoopAgent = t1.CoopAgent,
  392. GroupUnit = t1.GroupUnit,
  393. Description = t1.Description,
  394. CustomerCName = t1.CustomerId,
  395. Complainant = t1.Complainant,
  396. Department = t1.Department,
  397. JobTitle = t1.JobTitle,
  398. Email1 = t1.Email1,
  399. Email2 = t1.Email2,
  400. Telephone1 = t1.Telephone1,
  401. Telephone2 = t1.Telephone2,
  402. FlowId = t1.FlowId,
  403. CheckOrder = t1.CheckOrder,
  404. DataType = t1.DataType,
  405. IsHandled = t1.IsHandled,
  406. CheckFlows = t1.CheckFlows,
  407. HandleFlows = t1.HandleFlows,
  408. VoidReason = t1.VoidReason,
  409. Flows_Lock = t1.Flows_Lock,
  410. Handle_Lock = t1.Handle_Lock,
  411. Memo = t1.Memo,
  412. CreateUser = t1.CreateUser,
  413. CreateDate = t1.CreateDate,
  414. ModifyUser = t1.ModifyUser,
  415. ModifyDate = t1.ModifyDate,
  416. Handle_Person = t1.Handle_Person,
  417. Handle_DeptID = t1.Handle_DeptID,
  418. CreateUserName = SqlFunc.MappingColumn(t1.Guid, "dbo.[OFN_SYS_MemberNameByMemberIDwithoutOrgID](CreateUser)"),
  419. DepartmentName = sDepartmentName.DepartmentName,
  420. }).Single();
  421. rm = new SuccessResponseMessage(null, i_crm);
  422. rm.DATA.Add(BLWording.REL, oExportExhibition);
  423. } while (false);
  424. }
  425. catch (Exception ex)
  426. {
  427. sMsg = Util.GetLastExceptionMsg(ex);
  428. LogAndSendEmail(sMsg + "Params:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, "EasyBL.WEBAPP.CRM.Complaint_QryService", "", "QueryOne(客訴頁面單筆查詢)", "", "", "");
  429. }
  430. finally
  431. {
  432. if (null != sMsg)
  433. {
  434. rm = new ErrorResponseMessage(sMsg, i_crm);
  435. }
  436. }
  437. return rm;
  438. }
  439. #endregion 客訴頁面單筆查詢
  440. }
  441. }