depts.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. from flask import jsonify, request
  2. from flask_login import current_user
  3. from flask_restful import Resource # type: ignore
  4. from werkzeug.exceptions import NotFound
  5. from controllers.console import api
  6. from controllers.console.wraps import (
  7. account_initialization_required,
  8. setup_required,
  9. )
  10. from libs.login import login_required
  11. from services.dept_service import DeptService
  12. class DeptAccountListApi(Resource):
  13. @setup_required
  14. @login_required
  15. @account_initialization_required
  16. def get(self):
  17. dept_account_list = DeptService.get_dept_account_list()
  18. response = {
  19. "result": "success",
  20. "data": dept_account_list,
  21. }
  22. return response, 200
  23. @setup_required
  24. @login_required
  25. @account_initialization_required
  26. def post(self):
  27. data = request.get_json()
  28. if not data:
  29. raise NotFound("Invalid JSON")
  30. dept_account_list = data.get("account_ids")
  31. dept_id = data.get("dept_id")
  32. DeptService.save_dept_account_list(dept_id, dept_account_list)
  33. response = {
  34. "result": "success",
  35. }
  36. return response, 200
  37. @setup_required
  38. @login_required
  39. @account_initialization_required
  40. def delete(self):
  41. data = request.get_json()
  42. if not data:
  43. raise NotFound("Invalid JSON")
  44. dept_account_list = data.get("account_ids")
  45. dept_id = data.get("dept_id")
  46. DeptService.delete_dept_account_list(dept_id, dept_account_list)
  47. response = {
  48. "result": "success",
  49. }
  50. return response, 200
  51. class DeptAccountApi(Resource):
  52. @setup_required
  53. @login_required
  54. @account_initialization_required
  55. def get(self, dept_id):
  56. dept_account = DeptService.get_dept_account(dept_id)
  57. response = {
  58. "result": "success",
  59. "data": dept_account,
  60. }
  61. return response, 200
  62. class DeptListApi(Resource):
  63. @setup_required
  64. @login_required
  65. @account_initialization_required
  66. def get(self):
  67. dept_list = DeptService.get_dept_list()
  68. response = {
  69. "result": "success",
  70. "data": dept_list,
  71. }
  72. return response, 200
  73. @setup_required
  74. @login_required
  75. @account_initialization_required
  76. def post(self):
  77. data = request.get_json()
  78. if not data:
  79. return jsonify({"error": "Invalid JSON"}), 400
  80. if not data:
  81. raise NotFound("Invalid JSON")
  82. dept_name = data.get("dept_name")
  83. dept_id = data.get("dept_id")
  84. parent_dept_id = data.get("parent_dept_id")
  85. dept_by_name = DeptService.get_dept_by_name(dept_name)
  86. if dept_id not in {None, ""}:
  87. dept_by_id = DeptService.get_dept_by_id(dept_id)
  88. if dept_by_id != None:
  89. if dept_by_id.dept_name != dept_name or dept_by_id.parent_dept_id != parent_dept_id:
  90. # 修改
  91. if dept_by_name != None:
  92. if dept_by_name.dept_id == dept_by_id.dept_id and dept_by_id.parent_dept_id != parent_dept_id:
  93. DeptService.update_dept(dept_id, dept_name, current_user, parent_dept_id)
  94. else:
  95. DeptService.update_dept(dept_id, dept_name, current_user, parent_dept_id)
  96. else:
  97. raise NotFound("Dept not found.")
  98. else:
  99. if dept_by_name != None:
  100. raise ValueError("dept_name cannot repeat.")
  101. else:
  102. DeptService.save_dept(dept_name, current_user, parent_dept_id)
  103. return {"result": "success"}, 204
  104. class DeptApi(Resource):
  105. @setup_required
  106. @login_required
  107. @account_initialization_required
  108. def get(self, dept_id):
  109. dept_id = str(dept_id)
  110. dept = DeptService.get_dept_by_id(dept_id)
  111. response = {
  112. "result": "success",
  113. "data": dept,
  114. }
  115. return response, 200
  116. @setup_required
  117. @login_required
  118. @account_initialization_required
  119. def delete(self, dept_id):
  120. dept_id = str(dept_id)
  121. dept = DeptService.get_dept_by_id(dept_id)
  122. if dept is None:
  123. raise NotFound("Dept not found.")
  124. DeptService.delete_dept(dept)
  125. return {"result": "success"}, 204
  126. api.add_resource(DeptAccountListApi, "/dept/dept-accounts")
  127. api.add_resource(DeptAccountApi, "/dept/dept-accounts/<uuid:dept_id>")
  128. api.add_resource(DeptListApi, "/depts")
  129. api.add_resource(DeptApi, "/depts/<uuid:dept_id>")