dept_service.py 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. import datetime
  2. from sqlalchemy import or_
  3. from extensions.ext_database import db
  4. from models.account import Account, TenantAccountJoin
  5. from models.dept import Dept
  6. from services.account_service import AccountService
  7. class DeptService:
  8. @staticmethod
  9. def get_dept_account_list(self):
  10. dept_list = []
  11. condition = or_(Dept.parent_dept_id == None, Dept.parent_dept_id == "")
  12. dept_results = db.session.query(Dept).filter(Dept.status == "active", condition).all()
  13. for dept_row in dept_results:
  14. children_dept_list = []
  15. children_depts = (
  16. db.session.query(Dept).filter(Dept.status == "active", Dept.parent_dept_id == dept_row.dept_id).all()
  17. )
  18. for children_dept in children_depts:
  19. if self == 0:
  20. account_list = DeptService.get_dept_account(children_dept.dept_id)
  21. else:
  22. account_list = DeptService.get_dept_edit_account(children_dept.dept_id)
  23. children_dept_list.append(
  24. {
  25. "dept_id": children_dept.dept_id,
  26. "dept_name": children_dept.dept_name,
  27. "parent_dept_id": children_dept.parent_dept_id,
  28. "account_list": account_list,
  29. }
  30. )
  31. if self == 0:
  32. account_list = DeptService.get_dept_account(dept_row.dept_id)
  33. else:
  34. account_list = DeptService.get_dept_edit_account(dept_row.dept_id)
  35. dept_list.append(
  36. {
  37. "parent_dept_id": "",
  38. "dept_id": dept_row.dept_id,
  39. "dept_name": dept_row.dept_name,
  40. "account_list": account_list,
  41. "children": children_dept_list,
  42. }
  43. )
  44. return dept_list
  45. @staticmethod
  46. def get_dept_account(self):
  47. dept_account = []
  48. account_results = (
  49. db.session.query(Account.dept_id, Account.id, Account.email, Account.name)
  50. .filter(Account.status == "active", Account.dept_id == str(self))
  51. .all()
  52. )
  53. for row in account_results:
  54. dept_account.append({"account_id": row.id, "email": row.email, "name": row.name})
  55. return dept_account
  56. @staticmethod
  57. def get_dept_edit_account(self):
  58. dept_account = []
  59. account_results = (
  60. db.session.query(Account.dept_id, Account.id, Account.email, Account.name)
  61. .join(TenantAccountJoin, Account.id == TenantAccountJoin.account_id)
  62. .filter(Account.status == "active", Account.dept_id == str(self), TenantAccountJoin.role != "normal")
  63. .all()
  64. )
  65. for row in account_results:
  66. dept_account.append({"account_id": row.id, "email": row.email, "name": row.name})
  67. return dept_account
  68. @staticmethod
  69. def get_dept_list():
  70. dept_list = []
  71. condition = or_(Dept.parent_dept_id == None, Dept.parent_dept_id == "")
  72. dept_results = db.session.query(Dept).filter(Dept.status == "active", condition).all()
  73. for dept_row in dept_results:
  74. children_dept_list = []
  75. children_depts = (
  76. db.session.query(Dept).filter(Dept.status == "active", Dept.parent_dept_id == dept_row.dept_id).all()
  77. )
  78. for children_dept in children_depts:
  79. children_dept_list.append(
  80. {
  81. "dept_id": children_dept.dept_id,
  82. "dept_name": children_dept.dept_name,
  83. "parent_dept_id": children_dept.parent_dept_id,
  84. }
  85. )
  86. dept_list.append(
  87. {
  88. "parent_dept_id": "",
  89. "dept_id": dept_row.dept_id,
  90. "dept_name": dept_row.dept_name,
  91. "children": children_dept_list,
  92. }
  93. )
  94. return dept_list
  95. @staticmethod
  96. def get_dept_by_name(dept_name):
  97. dept = db.session.query(Dept).filter(Dept.status == "active", Dept.dept_name == dept_name).first()
  98. return dept
  99. @staticmethod
  100. def get_dept_by_id_name(dept_id, dept_name):
  101. dept = (
  102. db.session.query(Dept)
  103. .filter(Dept.status == "active", Dept.dept_name == dept_name, Dept.dept_id == dept_id)
  104. .first()
  105. )
  106. return dept
  107. @staticmethod
  108. def get_dept_by_id(dept_id):
  109. dept = db.session.query(Dept).filter(Dept.status == "active", Dept.dept_id == dept_id).first()
  110. return dept
  111. @staticmethod
  112. def save_dept(dept_name, current_user, parent_dept_id):
  113. dept = Dept(
  114. dept_name=dept_name,
  115. status="active",
  116. created_at=datetime.datetime.now(),
  117. created_by=current_user.id,
  118. parent_dept_id=parent_dept_id,
  119. )
  120. db.session.add(dept)
  121. db.session.flush()
  122. db.session.commit()
  123. @staticmethod
  124. def update_dept(dept_id, dept_name, current_user, parent_dept_id):
  125. sql = (
  126. db.session.query(Dept)
  127. .filter(Dept.dept_id == dept_id)
  128. .update(
  129. {
  130. "updated_by": current_user.id,
  131. "updated_at": datetime.datetime.now(),
  132. "dept_name": dept_name,
  133. "parent_dept_id": parent_dept_id,
  134. }
  135. )
  136. )
  137. db.session.commit()
  138. @staticmethod
  139. def delete_dept(dept):
  140. AccountService.delete_account_dept(dept)
  141. db.session.delete(dept)
  142. db.session.commit()
  143. @staticmethod
  144. def save_dept_account_list(dept_id, dept_account_list):
  145. for dept_account in dept_account_list:
  146. account_id = dept_account.get("account_id")
  147. AccountService.update_account_dept(dept_id, account_id)
  148. @staticmethod
  149. def delete_dept_account_list(dept_id, dept_account_list):
  150. for dept_account in dept_account_list:
  151. account_id = dept_account.get("account_id")
  152. AccountService.update_account_dept("", account_id)
  153. @staticmethod
  154. def get_dept_account_edit_list():
  155. dept_list = []
  156. condition = or_(Dept.parent_dept_id == None, Dept.parent_dept_id == "")
  157. dept_results = db.session.query(Dept).filter(Dept.status == "active", condition).all()
  158. for dept_row in dept_results:
  159. children_dept_list = []
  160. children_depts = (
  161. db.session.query(Dept).filter(Dept.status == "active", Dept.parent_dept_id == dept_row.dept_id).all()
  162. )
  163. for children_dept in children_depts:
  164. account_list = DeptService.get_dept_account(children_dept.dept_id)
  165. children_dept_list.append(
  166. {
  167. "dept_id": children_dept.dept_id,
  168. "dept_name": children_dept.dept_name,
  169. "parent_dept_id": children_dept.parent_dept_id,
  170. "account_list": account_list,
  171. }
  172. )
  173. account_list = DeptService.get_dept_account(dept_row.dept_id.dept_id)
  174. dept_list.append(
  175. {
  176. "parent_dept_id": "",
  177. "dept_id": dept_row.dept_id,
  178. "dept_name": dept_row.dept_name,
  179. "account_list": account_list,
  180. "children": children_dept_list,
  181. }
  182. )
  183. return dept_list
  184. @staticmethod
  185. def get_depts_count():
  186. count = db.session.query(Dept).filter(Dept.status == "active").count()
  187. return count