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.

438 lines
18 KiB

3 years ago
  1. using EasyBL.WebApi.Message;
  2. using EasyNet;
  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.Linq;
  12. namespace EasyBL.WEBAPP.WSM
  13. {
  14. public class MembersMaintain_UpdService : ServiceBase
  15. {
  16. #region 帳號管理(單筆查詢)
  17. /// <summary>
  18. /// 帳號管理(單筆查詢)
  19. /// </summary>
  20. /// <param name="i_crm"></param>
  21. /// <returns></returns>
  22. public ResponseMessage QueryOne(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 sMemberID = _fetchString(i_crm, @"MemberID");
  32. var oEntity = db.Queryable<OTB_SYS_Members, OTB_SYS_Members, OTB_SYS_Members>
  33. ((t1, t2, t3) =>
  34. new object[] {
  35. JoinType.Left, t1.OrgID == t2.OrgID && t1.CreateUser == t2.MemberID,
  36. JoinType.Left, t1.OrgID == t3.OrgID && t1.ModifyUser == t3.MemberID
  37. }
  38. )
  39. .Where((t1, t2, t3) => t1.OrgID == i_crm.ORIGID && t1.MemberID == sMemberID)
  40. .Select((t1, t2, t3) => new View_SYS_Members
  41. {
  42. MemberID = SqlFunc.GetSelfAndAutoFill(t1.MemberID),
  43. CreateUserName = t2.MemberName,
  44. ModifyUserName = t3.MemberName,
  45. RuleIDs = SqlFunc.MappingColumn(t1.MemberID, "(select RuleID+',' from OTB_SYS_MembersToRule mr where mr.OrgID=t1.OrgID and mr.MemberID=t1.MemberID for xml path(''))")
  46. })
  47. .Single();
  48. rm = new SuccessResponseMessage(null, i_crm);
  49. rm.DATA.Add(BLWording.REL, oEntity);
  50. } while (false);
  51. }
  52. catch (Exception ex)
  53. {
  54. sMsg = Util.GetLastExceptionMsg(ex);
  55. LogAndSendEmail(sMsg + "Params:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(MembersMaintain_UpdService), "", "QueryOne(帳號管理(單筆查詢))", "", "", "");
  56. }
  57. finally
  58. {
  59. if (null != sMsg)
  60. {
  61. rm = new ErrorResponseMessage(sMsg, i_crm);
  62. }
  63. }
  64. return rm;
  65. }
  66. #endregion 帳號管理(單筆查詢)
  67. #region 帳號管理(新增)
  68. /// <summary>
  69. /// 帳號管理(新增)
  70. /// </summary>
  71. /// <param name="i_crm">todo: describe i_crm parameter on UpdImportCustomers</param>
  72. /// <returns></returns>
  73. public ResponseMessage Insert(RequestMessage i_crm)
  74. {
  75. ResponseMessage rm = null;
  76. string sMsg = null;
  77. try
  78. {
  79. rm = SugarBase.ExecTran(db =>
  80. {
  81. do
  82. {
  83. var oEntity = _fetchEntity<OTB_SYS_Members>(i_crm);
  84. _setEntityBase(oEntity, i_crm);
  85. //Yang 2019/01/25 判斷Password是否為空值,是直接給預序密碼加密;否取得密碼加密
  86. if (!string.IsNullOrEmpty(oEntity.Password))
  87. {
  88. oEntity.Password = SecurityUtil.Encrypt(oEntity.Password); //Yang 2019/01/25 取得密碼後加密
  89. }
  90. else
  91. {
  92. oEntity.Password = SecurityUtil.Encrypt("123456"); //Yang 2019/01/25 新增帳號預設密碼加密,建議預設值放到web.config
  93. }
  94. oEntity.SysShowMode = "M";
  95. var iRel = db.Insertable(oEntity).ExecuteCommand();
  96. var saRuleInsert = new List<OTB_SYS_MembersToRule>();
  97. //更新角色
  98. if (i_crm.DATA["roles"] is JArray saRoles && saRoles.Count > 0)
  99. {
  100. foreach (var roleid in saRoles)
  101. {
  102. var oMembersToRule = new OTB_SYS_MembersToRule
  103. {
  104. RuleID = roleid.ToString(),
  105. MemberID = oEntity.MemberID
  106. };
  107. _setEntityBase(oMembersToRule, i_crm);
  108. saRuleInsert.Add(oMembersToRule);
  109. }
  110. iRel += db.Insertable(saRuleInsert).ExecuteCommand();
  111. }
  112. rm = new SuccessResponseMessage(null, i_crm);
  113. rm.DATA.Add(BLWording.REL, iRel);
  114. } while (false);
  115. return rm;
  116. });
  117. }
  118. catch (Exception ex)
  119. {
  120. sMsg = Util.GetLastExceptionMsg(ex);
  121. LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(MembersMaintain_UpdService), @"帳號管理", @"Add(帳號管理(新增))", @"", @"", @"");
  122. }
  123. finally
  124. {
  125. if (null != sMsg)
  126. {
  127. rm = new ErrorResponseMessage(sMsg, i_crm);
  128. }
  129. }
  130. return rm;
  131. }
  132. #endregion 帳號管理(新增)
  133. #region 帳號管理(修改)
  134. /// <summary>
  135. /// 帳號管理(修改)
  136. /// </summary>
  137. /// <param name="i_crm">todo: describe i_crm parameter on UpdImportCustomers</param>
  138. /// <returns></returns>
  139. public ResponseMessage Update(RequestMessage i_crm)
  140. {
  141. ResponseMessage rm = null;
  142. string sMsg = null;
  143. try
  144. {
  145. rm = SugarBase.ExecTran(db =>
  146. {
  147. do
  148. {
  149. var oNewEntity = _fetchEntity<OTB_SYS_Members>(i_crm);
  150. var NewDpt = _fetchString(i_crm, @"DepartmentID");
  151. var JobTitle = _fetchString(i_crm, @"JobTitle");
  152. var MemberID = _fetchString(i_crm, @"MemberID");
  153. _setEntityBase(oNewEntity, i_crm);
  154. UpdateCheckFlows(db, MemberID, i_crm.ORIGID, NewDpt, JobTitle, i_crm.USERID);
  155. var iRel = db.Deleteable<OTB_SYS_MembersToRule>().Where(x => x.OrgID == i_crm.ORIGID && x.MemberID == oNewEntity.MemberID).ExecuteCommand();
  156. var saRuleInsert = new List<OTB_SYS_MembersToRule>();
  157. if (i_crm.DATA["roles"] is JArray saRoles && saRoles.Count > 0)
  158. {
  159. //更新角色
  160. foreach (var roleid in saRoles)
  161. {
  162. var oMembersToRule = new OTB_SYS_MembersToRule
  163. {
  164. RuleID = roleid.ToString(),
  165. MemberID = oNewEntity.MemberID
  166. };
  167. _setEntityBase(oMembersToRule, i_crm);
  168. saRuleInsert.Add(oMembersToRule);
  169. }
  170. iRel += db.Insertable(saRuleInsert).ExecuteCommand();
  171. }
  172. iRel += db.Updateable(oNewEntity)
  173. .IgnoreColumns(x => new
  174. {
  175. x.Password,
  176. x.SysShowMode,
  177. x.CreateUser,
  178. x.CreateDate
  179. }).ExecuteCommand();
  180. rm = new SuccessResponseMessage(null, i_crm);
  181. rm.DATA.Add(BLWording.REL, iRel);
  182. } while (false);
  183. return rm;
  184. });
  185. }
  186. catch (Exception ex)
  187. {
  188. sMsg = Util.GetLastExceptionMsg(ex);
  189. LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(MembersMaintain_UpdService), @"帳號管理", @"Update(帳號管理(修改))", @"", @"", @"");
  190. }
  191. finally
  192. {
  193. if (null != sMsg)
  194. {
  195. rm = new ErrorResponseMessage(sMsg, i_crm);
  196. }
  197. }
  198. return rm;
  199. }
  200. #endregion 帳號管理(修改)
  201. #region 帳號管理,更新CheckFlows資料
  202. public void UpdateCheckFlows(SqlSugarClient db, string MemberID, string OrgID, string NewDepID, string JobTitle, string UserID)
  203. {
  204. var User = db.Queryable<OTB_SYS_Members>().Where(m => m.MemberID == MemberID && m.OrgID == OrgID).First();
  205. var Dept = db.Queryable<OTB_SYS_Departments>().Where(d => d.DepartmentID == NewDepID && d.OrgID == OrgID).First();
  206. var Job = db.Queryable<OTB_SYS_Jobtitle>().Where(d => d.JobtitleID == JobTitle && d.OrgID == OrgID).First();
  207. if (User != null)
  208. {
  209. var UpdateCheckFlow = new List<OTB_EIP_CheckFlow>();
  210. var MatchedCheckFlows = db.Queryable<OTB_EIP_CheckFlow>().Where(cf => cf.Flows.Contains(MemberID)).ToList();
  211. if (MatchedCheckFlows.Any())
  212. {
  213. foreach (var cf in MatchedCheckFlows)
  214. {
  215. var Flows = JsonConvert.DeserializeObject<List<CheckFlow>>(cf.Flows).OrderBy(c => c.Order).ToList();
  216. foreach (var f in Flows)
  217. {
  218. foreach (var M in f.SignedMember)
  219. {
  220. if (M.id == MemberID)
  221. {
  222. M.deptname = Dept.DepartmentShortName;
  223. M.jobname = Job.JobtitleName;
  224. }
  225. }
  226. }
  227. UpdateCheckFlow.Add(new OTB_EIP_CheckFlow() { OrgID = cf.OrgID, Guid = cf.Guid, Flows = JsonConvert.SerializeObject(Flows), ModifyDate = DateTime.Now, ModifyUser = UserID });
  228. }
  229. if (UpdateCheckFlow.Count > 0)
  230. {
  231. db.Updateable(UpdateCheckFlow)
  232. .UpdateColumns(it => new { it.Flows, it.ModifyDate, it.ModifyUser }).ExecuteCommand();
  233. }
  234. }
  235. }
  236. //比對部門。
  237. //取得所有相關Flows
  238. //更新裡面資料//JArray
  239. }
  240. #endregion
  241. #region 帳號管理(刪除)
  242. /// <summary>
  243. /// 帳號管理(刪除)
  244. /// </summary>
  245. /// <param name="i_crm">todo: describe i_crm parameter on UpdImportCustomers</param>
  246. /// <returns></returns>
  247. public ResponseMessage Delete(RequestMessage i_crm)
  248. {
  249. ResponseMessage rm = null;
  250. string sMsg = null;
  251. try
  252. {
  253. rm = SugarBase.ExecTran(db =>
  254. {
  255. do
  256. {
  257. var sMemberID = _fetchString(i_crm, @"MemberID");
  258. var oMembers = db.Queryable<OTB_SYS_Members>().Single(x => x.MemberID == sMemberID);
  259. var iRel = db.Deleteable<OTB_SYS_Members>().Where(x => x.OrgID == i_crm.ORIGID && x.MemberID == sMemberID).ExecuteCommand();
  260. iRel += db.Deleteable<OTB_SYS_MembersToRule>().Where(x => x.OrgID == i_crm.ORIGID && x.MemberID == sMemberID).ExecuteCommand();
  261. i_crm.DATA.Add("FileID", oMembers.MemberPic);
  262. i_crm.DATA.Add("IDType", "parent");
  263. new CommonService().DelFile(i_crm);
  264. rm = new SuccessResponseMessage(null, i_crm);
  265. rm.DATA.Add(BLWording.REL, iRel);
  266. } while (false);
  267. return rm;
  268. });
  269. }
  270. catch (Exception ex)
  271. {
  272. sMsg = Util.GetLastExceptionMsg(ex);
  273. LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(MembersMaintain_UpdService), @"帳號管理", @"Delete(帳號管理(刪除))", @"", @"", @"");
  274. }
  275. finally
  276. {
  277. if (null != sMsg)
  278. {
  279. rm = new ErrorResponseMessage(sMsg, i_crm);
  280. }
  281. }
  282. return rm;
  283. }
  284. #endregion 帳號管理(刪除)
  285. #region 帳號管理(職稱下拉查詢)
  286. /// <summary>
  287. /// 帳號管理(職稱下拉查詢)
  288. /// </summary>
  289. /// <param name="i_crm"></param>
  290. /// <returns></returns>
  291. public ResponseMessage GetJobTitleDrop(RequestMessage i_crm)
  292. {
  293. ResponseMessage rm = null;
  294. string sMsg = null;
  295. var db = SugarBase.GetIntance();
  296. try
  297. {
  298. do
  299. {
  300. var sEffective = _fetchString(i_crm, @"Effective");
  301. var saJobtitle = db.Queryable<OTB_SYS_Jobtitle>()
  302. .Where(x => x.OrgID == i_crm.ORIGID)
  303. .WhereIF(!string.IsNullOrEmpty(sEffective), x => x.Effective == sEffective)
  304. .ToList();
  305. rm = new SuccessResponseMessage(null, i_crm);
  306. rm.DATA.Add(BLWording.REL, saJobtitle);
  307. } while (false);
  308. }
  309. catch (Exception ex)
  310. {
  311. sMsg = Util.GetLastExceptionMsg(ex);
  312. LogAndSendEmail(sMsg + "Params:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(MembersMaintain_UpdService), "", "GetJobTitleDrop(帳號管理(職稱下拉查詢))", "", "", "");
  313. }
  314. finally
  315. {
  316. if (null != sMsg)
  317. {
  318. rm = new ErrorResponseMessage(sMsg, i_crm);
  319. }
  320. }
  321. return rm;
  322. }
  323. #endregion 帳號管理(職稱下拉查詢)
  324. #region 帳號管理(角色下拉查詢)
  325. /// <summary>
  326. /// 帳號管理(角色下拉查詢)
  327. /// </summary>
  328. /// <param name="i_crm"></param>
  329. /// <returns></returns>
  330. public ResponseMessage GetRolesDrop(RequestMessage i_crm)
  331. {
  332. ResponseMessage rm = null;
  333. string sMsg = null;
  334. var db = SugarBase.GetIntance();
  335. try
  336. {
  337. do
  338. {
  339. var sEffective = _fetchString(i_crm, @"Effective");
  340. var oEntity = db.Queryable<OTB_SYS_Rules>()
  341. .Where(x => x.OrgID == i_crm.ORIGID && x.DelStatus == "N")
  342. .ToList();
  343. rm = new SuccessResponseMessage(null, i_crm);
  344. rm.DATA.Add(BLWording.REL, oEntity);
  345. } while (false);
  346. }
  347. catch (Exception ex)
  348. {
  349. sMsg = Util.GetLastExceptionMsg(ex);
  350. LogAndSendEmail(sMsg + "Params:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(MembersMaintain_UpdService), "", "GetRolesDrop(帳號管理(角色下拉查詢))", "", "", "");
  351. }
  352. finally
  353. {
  354. if (null != sMsg)
  355. {
  356. rm = new ErrorResponseMessage(sMsg, i_crm);
  357. }
  358. }
  359. return rm;
  360. }
  361. #endregion 帳號管理(角色下拉查詢)
  362. #region 帳號管理(查詢筆數)
  363. /// <summary>
  364. /// 帳號管理(查詢筆數)
  365. /// </summary>
  366. /// <param name="i_crm"></param>
  367. /// <returns></returns>
  368. public ResponseMessage QueryCout(RequestMessage i_crm)
  369. {
  370. ResponseMessage rm = null;
  371. string sMsg = null;
  372. var db = SugarBase.GetIntance();
  373. try
  374. {
  375. do
  376. {
  377. var sMemberID = _fetchString(i_crm, @"MemberID");
  378. var s_MemberID = _fetchString(i_crm, @"_MemberID");
  379. var sEmail = _fetchString(i_crm, @"Email");
  380. var sOutlookAccount = _fetchString(i_crm, @"OutlookAccount");
  381. var iCout = db.Queryable<OTB_SYS_Members>()
  382. .Where(x => x.OrgID == i_crm.ORIGID)
  383. .WhereIF(!string.IsNullOrEmpty(sMemberID), x => x.MemberID == sMemberID)
  384. .WhereIF(!string.IsNullOrEmpty(s_MemberID), x => x.MemberID != s_MemberID)
  385. .WhereIF(!string.IsNullOrEmpty(sEmail), x => x.Email == sEmail)
  386. .WhereIF(!string.IsNullOrEmpty(sOutlookAccount), x => x.OutlookAccount == sOutlookAccount)
  387. .Count();
  388. rm = new SuccessResponseMessage(null, i_crm);
  389. rm.DATA.Add(BLWording.REL, iCout);
  390. } while (false);
  391. }
  392. catch (Exception ex)
  393. {
  394. sMsg = Util.GetLastExceptionMsg(ex);
  395. LogAndSendEmail(sMsg + "Params:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(ArgumentClassMaintain_UpdService), "", "QueryCout(帳號管理(查詢筆數))", "", "", "");
  396. }
  397. finally
  398. {
  399. if (null != sMsg)
  400. {
  401. rm = new ErrorResponseMessage(sMsg, i_crm);
  402. }
  403. }
  404. return rm;
  405. }
  406. #endregion 帳號管理(查詢筆數)
  407. }
  408. }