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.

265 lines
12 KiB

  1. using MonumentDefine;
  2. using OT.COM.ArsenalDB;
  3. using OT.COM.SignalerMessage;
  4. using SoldierData.EnterprizeV4;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. namespace CounsellorBL.Helper
  9. {
  10. public class ProjectHelper : DBService
  11. {
  12. public override string MainTable => null;
  13. #region 使用者資訊
  14. /// <summary>
  15. /// 取得使用者資訊
  16. /// </summary>
  17. /// <param name="i_crmInput"></param>
  18. /// <returns></returns>
  19. public static tb_hr_employee GetLoginUser(CRequestMessage i_crmInput)
  20. {
  21. tb_hr_employee loginUser = null;
  22. if (i_crmInput == null)
  23. {
  24. throw new ArgumentNullException(nameof(i_crmInput));
  25. }
  26. var token = i_crmInput.token;
  27. if (!string.IsNullOrEmpty(token))
  28. {
  29. QueryJsonElementCollection lBlocks = new QueryJsonElementCollection();
  30. QueryJsonElement qjeSession = lBlocks.GetInst();
  31. qjeSession.table = tb_sys_session.TABLENAME;
  32. qjeSession.wherecols = new WhereNode(tb_sys_session.CN_UID, WhereNode.EColumnOperation.EOT_EQ, typeof(tb_sys_session), token);
  33. // 人員資訊
  34. QueryJsonElement qjeEmployee = lBlocks.GetInst();
  35. qjeEmployee.table = tb_hr_employee.TABLENAME;
  36. qjeEmployee.jointype = QueryJsonElement.JOIN;
  37. qjeEmployee.joincols = new Dictionary<string, string>() { { tb_hr_employee.CN_UID, tb_sys_session.CN_CREATE_USER_UID } };
  38. qjeEmployee.jointable = qjeSession;
  39. qjeEmployee.displaycols = new List<string>() {
  40. tb_hr_employee.CN_UID,
  41. tb_hr_employee.CN_RECEIVE_BRANCH_UID
  42. };
  43. lBlocks.Add(qjeSession);
  44. lBlocks.Add(qjeEmployee);
  45. var sMsg = MakeSelectJoinByBlocks(lBlocks, out Command cRes);
  46. if (sMsg != null)
  47. {
  48. return loginUser;
  49. }
  50. cRes.ReadLevel = Command.EReadLevel.ERL_DIRTY;
  51. ArsenalInterface ai = ArsenalDBMgr.GetInst(cRes);
  52. loginUser = ai.RunQuerySingleORM<tb_hr_employee>(cRes);
  53. }
  54. return loginUser;
  55. }
  56. /// <summary>
  57. /// 判斷是否為admin角色
  58. /// </summary>
  59. /// <param name="i_sUserUID"></param>
  60. /// <returns></returns>
  61. private static bool CheckIsAdmin(string i_sUserUID)
  62. {
  63. bool isAdmin = false;
  64. tb_sys_user2role cRole = new tb_sys_user2role();
  65. QueryJsonElementCollection lBlocks = new QueryJsonElementCollection();
  66. QueryJsonElement qjUser2eRole = lBlocks.GetInst();
  67. qjUser2eRole.table = tb_sys_user2role.TABLENAME;
  68. qjUser2eRole.wherecols = new WhereNode(tb_sys_user2role.CN_USER_UID, WhereNode.EColumnOperation.EOT_EQ, typeof(tb_sys_user2role), i_sUserUID);
  69. lBlocks.Add(qjUser2eRole);
  70. QueryJsonElement qjeRole = lBlocks.GetInst();
  71. qjeRole.table = tb_sys_role.TABLENAME;
  72. qjeRole.jointype = QueryJsonElement.LEFT_JOIN;
  73. qjeRole.joincols = new Dictionary<string, string>() { { tb_sys_role.CN_UID, tb_sys_user2role.CN_ROLE_UID } };
  74. qjeRole.jointable = qjUser2eRole;
  75. qjeRole.displaycols = new List<string>() { tb_sys_role.CN_NAME };
  76. lBlocks.Add(qjeRole);
  77. // 查詢資料
  78. MakeSelectJoinByBlocks(lBlocks, out Command cSelect);
  79. ArsenalInterface ai = ArsenalDBMgr.GetInst(cSelect);
  80. List<tb_sys_role> lRes = ai.RunQueryList<tb_sys_role>(cSelect, null);
  81. var lsRoleName = lRes.Select(x => x.name).ToList();
  82. if (CustomizeDBMgr.SettingData.ContainsKey(BLWording.ADMIN_NAME))
  83. {
  84. if (lsRoleName.Contains(CustomizeDBMgr.SettingData[BLWording.ADMIN_NAME]))
  85. {
  86. isAdmin = true;
  87. }
  88. }
  89. return isAdmin;
  90. }
  91. /// <summary>
  92. /// 取得登入者所屬社團
  93. /// </summary>
  94. /// <param name="i_crmInput"></param>
  95. /// <returns></returns>
  96. public static List<string> GetUserGroup(CRequestMessage i_crmInput)
  97. {
  98. var userUID = GetLoginUser(i_crmInput)?.uid;
  99. if (!string.IsNullOrEmpty(userUID))
  100. {
  101. ArsenalInterface ai = null;
  102. bool isAdmin = CheckIsAdmin(userUID); // 判斷admin
  103. var lsGroup = new List<string>();
  104. if (isAdmin)
  105. {
  106. // 取得所有社團
  107. tb_grp_group cGroup = new tb_grp_group();
  108. cGroup.SetDirty(tb_grp_group.CN_UID);
  109. tb_grp_group cGroupCon = new tb_grp_group() { status_flag = (int)Enums.Flag.Enable };
  110. Command cGroupSelect = Command.SetupSelectCmd(cGroup, cGroupCon);
  111. ai = ArsenalDBMgr.GetInst(cGroupSelect);
  112. List<tb_grp_group> qdsGroup = ai.RunQueryList<tb_grp_group>(cGroupSelect);
  113. lsGroup = qdsGroup.Select(x => x.uid).ToList();
  114. }
  115. else
  116. {
  117. // 所屬社團
  118. QueryJsonElementCollection lBlocks = new QueryJsonElementCollection();
  119. QueryJsonElement qjeEmp2Branch = lBlocks.GetInst();
  120. qjeEmp2Branch.table = tb_hr_employee2branch.TABLENAME;
  121. qjeEmp2Branch.wherecols = new WhereNode(tb_hr_employee2branch.CN_UID, WhereNode.EColumnOperation.EOT_EQ, typeof(tb_hr_employee2branch), userUID);
  122. lBlocks.Add(qjeEmp2Branch);
  123. QueryJsonElement qjeBranch = lBlocks.GetInst();
  124. qjeBranch.table = tb_grp_branch.TABLENAME;
  125. qjeBranch.jointype = QueryJsonElement.LEFT_JOIN;
  126. qjeBranch.joincols = new Dictionary<string, string>() { { tb_grp_branch.CN_UID, tb_hr_employee2branch.CN_BRANCH_UID } };
  127. qjeBranch.jointable = qjeEmp2Branch;
  128. qjeBranch.wherecols = new WhereNode(tb_grp_branch.CN_STATUS_FLAG, WhereNode.EColumnOperation.EOT_EQ, typeof(tb_grp_branch), (int)Enums.Flag.Enable);
  129. lBlocks.Add(qjeBranch);
  130. QueryJsonElement qjeGroup = lBlocks.GetInst();
  131. qjeGroup.table = tb_grp_group.TABLENAME;
  132. qjeGroup.jointype = QueryJsonElement.LEFT_JOIN;
  133. qjeGroup.joincols = new Dictionary<string, string>() { { tb_grp_group.CN_UID, tb_grp_branch.CN_GROUP_UID } };
  134. qjeGroup.jointable = qjeBranch;
  135. qjeGroup.displaycols = new List<string>() { tb_grp_group.CN_UID };
  136. qjeGroup.wherecols = new WhereNode(tb_grp_group.CN_STATUS_FLAG, WhereNode.EColumnOperation.EOT_EQ, typeof(tb_grp_group), (int)Enums.Flag.Enable);
  137. lBlocks.Add(qjeGroup);
  138. // 查詢資料
  139. MakeSelectJoinByBlocks(lBlocks, out Command cBranchSelect);
  140. ai = ArsenalDBMgr.GetInst(cBranchSelect);
  141. List<tb_grp_group> lResGroup = ai.RunQueryList<tb_grp_group>(cBranchSelect, null);
  142. // 自行建立的社團
  143. tb_grp_group cGroup = new tb_grp_group();
  144. cGroup.SetDirty(tb_grp_group.CN_UID);
  145. tb_grp_group cGroupCon = new tb_grp_group()
  146. {
  147. create_user_uid = userUID,
  148. status_flag = (int)Enums.Flag.Enable
  149. };
  150. Command cGroupSelect = Command.SetupSelectCmd(cGroup, cGroupCon);
  151. ai = ArsenalDBMgr.GetInst(cGroupSelect);
  152. List<tb_grp_group> qdsGroup = ai.RunQueryList<tb_grp_group>(cGroupSelect);
  153. lsGroup = lResGroup.Union(qdsGroup).Select(x => x.uid).ToList();
  154. }
  155. return lsGroup;
  156. }
  157. else
  158. {
  159. return new List<string>();
  160. }
  161. }
  162. /// <summary>
  163. /// 取得登入者人員管理所設定之所屬分店
  164. /// </summary>
  165. /// <param name="i_crmInput"></param>
  166. /// <returns></returns>
  167. public static List<string> GetUserBranch(CRequestMessage i_crmInput)
  168. {
  169. var userUID = GetLoginUser(i_crmInput)?.uid;
  170. if (!string.IsNullOrEmpty(userUID))
  171. {
  172. ArsenalInterface ai = null;
  173. bool isAdmin = CheckIsAdmin(userUID); // 判斷admin
  174. var lsBranch = new List<string>();
  175. if (isAdmin)
  176. {
  177. // 取得所有分店
  178. tb_grp_branch cBranch = new tb_grp_branch();
  179. cBranch.SetDirty(tb_grp_branch.CN_UID);
  180. tb_grp_branch cBranchCon = new tb_grp_branch() { status_flag = (int)Enums.Flag.Enable };
  181. Command cSelect = Command.SetupSelectCmd(cBranch, cBranchCon);
  182. ai = ArsenalDBMgr.GetInst(cSelect);
  183. List<tb_grp_branch> qdsBranch = ai.RunQueryList<tb_grp_branch>(cSelect);
  184. lsBranch = qdsBranch.Select(x => x.uid).ToList();
  185. }
  186. else
  187. {
  188. QueryJsonElementCollection lBlocks = new QueryJsonElementCollection();
  189. QueryJsonElement qjeEmp2Branch = lBlocks.GetInst();
  190. qjeEmp2Branch.table = tb_hr_employee2branch.TABLENAME;
  191. qjeEmp2Branch.wherecols = new WhereNode(tb_hr_employee2branch.CN_UID, WhereNode.EColumnOperation.EOT_EQ, typeof(tb_hr_employee2branch), userUID);
  192. qjeEmp2Branch.displaycols = new List<string>() { tb_hr_employee2branch.CN_BRANCH_UID };
  193. lBlocks.Add(qjeEmp2Branch);
  194. // 查詢資料
  195. MakeSelectJoinByBlocks(lBlocks, out Command cBranchSelect);
  196. ai = ArsenalDBMgr.GetInst(cBranchSelect);
  197. List<tb_hr_employee2branch> lRes = ai.RunQueryList<tb_hr_employee2branch>(cBranchSelect, null);
  198. lsBranch = lRes.Select(x => x.branch_uid).ToList();
  199. }
  200. return lsBranch;
  201. }
  202. else
  203. {
  204. return new List<string>();
  205. }
  206. }
  207. /// <summary>
  208. /// 取得登入者人員管理所設定之所屬分店Key與分店名稱, 權限綁定
  209. /// </summary>
  210. /// <param name="i_crmInput"></param>
  211. /// <returns></returns>
  212. public static List<(string Uid, string BranchName)> GetUserBranchAndName(CRequestMessage i_crmInput)
  213. {
  214. var branch = GetUserBranch(i_crmInput);
  215. var branchAndName = new List<(string, string)>();
  216. QueryJsonElementCollection lBlocks = new QueryJsonElementCollection();
  217. QueryJsonElement qjeMain = lBlocks.GetInst();
  218. qjeMain.table = tb_grp_branch.TABLENAME;
  219. qjeMain.displaycols = new List<string>() {
  220. tb_grp_branch.CN_UID,
  221. tb_grp_branch.CN_BRANCH_NAME
  222. };
  223. qjeMain.wherecols = new WhereNode(tb_grp_branch.CN_UID, WhereNode.EColumnOperation.EOT_IN, typeof(tb_grp_branch), branch.ToArray());
  224. lBlocks.Add(qjeMain);
  225. var sMsg = MakeSelectJoinByBlocks(lBlocks, out Command cSelect);
  226. var ai = ArsenalDBMgr.GetInst(cSelect);
  227. List<tb_grp_branch> qdsBranch = ai.RunQueryList<tb_grp_branch>(cSelect);
  228. branchAndName = qdsBranch.Select(x => (x.uid, x.branch_name)).ToList();
  229. return branchAndName;
  230. }
  231. #endregion
  232. }
  233. }