AdminRoleService.py 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. import json
  2. from enum import Enum
  3. from django.core.paginator import Paginator
  4. from django.db import transaction
  5. from django.forms import model_to_dict
  6. from oss2.exceptions import status
  7. from DCbackend.utils.common import success, fail, pageData
  8. from backend.Form.AdminRoleForm import AdminRoleForm
  9. from backend.Service.AuthMenuService import AuthMenuService
  10. from backend.models import AdminRole, AuthUserMenu, TemplateCateGoryUser, Admin, DocumentCategoryUser, DocumentCategory, \
  11. SourceDataCategoryUser, SourceCategory, UserOperation, Operation
  12. from django.db.models import F, Case, When, IntegerField, Exists, OuterRef
  13. class AdminRoleService:
  14. @staticmethod
  15. def Create(request):
  16. name = request.POST.get("name")
  17. adminRola = AdminRole.objects.filter(name=name).exclude(status=4).exists()
  18. if adminRola:
  19. return fail("已存在同名,请修改后重试。")
  20. form = AdminRoleForm(request.POST)
  21. authList = request.POST.get("authList")
  22. template_cate_auth = request.POST.get("template_cate_auth")
  23. doc_cate_auth = request.POST.get("doc_cate_auth")
  24. source_cate_auth = request.POST.get("source_cate_auth")
  25. if form.is_valid():
  26. admin_role = form.save()
  27. # 获取保存后生成的 ID
  28. generated_id = admin_role.id
  29. if generated_id is None:
  30. return fail("保存失败:无法获取生成的ID")
  31. # 保存菜单信息
  32. if authList:
  33. auth_list = json.loads(authList)
  34. for menu in auth_list:
  35. AuthUserMenu.objects.create(
  36. rola_id=generated_id,
  37. menu_id=menu.get("value")
  38. )
  39. if template_cate_auth:
  40. template_cate_auth_list = json.loads(template_cate_auth)
  41. for auth in template_cate_auth_list:
  42. UserOperation.objects.create(
  43. role_id=generated_id,
  44. operation_id=auth.get("operation_id")
  45. )
  46. if doc_cate_auth:
  47. doc_cate_auth_list = json.loads(doc_cate_auth)
  48. for auth in doc_cate_auth_list:
  49. UserOperation.objects.create(
  50. role_id=generated_id,
  51. operation_id=auth.get("operation_id")
  52. )
  53. if source_cate_auth:
  54. source_cate_auth_list = json.loads(source_cate_auth)
  55. for auth in source_cate_auth_list:
  56. UserOperation.objects.create(
  57. role_id=generated_id,
  58. operation_id=auth.get("operation_id")
  59. )
  60. return success({"id": generated_id})
  61. return fail(form.errors)
  62. @staticmethod
  63. @transaction.atomic
  64. def Update(request):
  65. try:
  66. data = AdminRole.objects.filter(id=request.POST.get("id")).first()
  67. authList = request.POST.get("authList")
  68. template_cate_auth = request.POST.get("template_cate_auth")
  69. doc_cate_auth = request.POST.get("doc_cate_auth")
  70. source_cate_auth = request.POST.get("source_cate_auth")
  71. if data is not None:
  72. data.name = request.POST.get("name")
  73. data.intro = request.POST.get("intro")
  74. data.status = request.POST.get("status")
  75. data.is_admin = request.POST.get("is_admin")
  76. data.save()
  77. generated_id = request.POST.get("id")
  78. # 删除旧的菜单信息
  79. AuthUserMenu.objects.filter(rola_id=generated_id).delete()
  80. UserOperation.objects.filter(role_id=generated_id).delete()
  81. # 保存菜单信息
  82. if authList:
  83. auth_list = json.loads(authList)
  84. for menu in auth_list:
  85. AuthUserMenu.objects.create(
  86. rola_id=generated_id,
  87. menu_id=menu.get("value")
  88. )
  89. if template_cate_auth:
  90. template_cate_auth_list = json.loads(template_cate_auth)
  91. for auth in template_cate_auth_list:
  92. UserOperation.objects.create(
  93. role_id=generated_id,
  94. operation_id=auth.get("operation_id")
  95. )
  96. if doc_cate_auth:
  97. doc_cate_auth_list = json.loads(doc_cate_auth)
  98. for auth in doc_cate_auth_list:
  99. UserOperation.objects.create(
  100. role_id=generated_id,
  101. operation_id=auth.get("operation_id")
  102. )
  103. if source_cate_auth:
  104. source_cate_auth_list = json.loads(source_cate_auth)
  105. for auth in source_cate_auth_list:
  106. UserOperation.objects.create(
  107. role_id=generated_id,
  108. operation_id=auth.get("operation_id")
  109. )
  110. return success("成功")
  111. else:
  112. return fail("更新参数信息失败")
  113. except Exception as e:
  114. return fail(str(e))
  115. @staticmethod
  116. def Info(request):
  117. info = AdminRole.objects.filter(id=request.POST.get("id")).first()
  118. return success(AdminRoleService.getDetail(info))
  119. @staticmethod
  120. def Delete(request):
  121. AdminRole.objects.filter(id=request.POST.get("id")).update(status=4)
  122. return success("成功")
  123. @staticmethod
  124. def getDetail(item: AdminRole):
  125. return {
  126. "id": item.id,
  127. 'name': item.name,
  128. 'intro': item.intro,
  129. 'is_admin': item.is_admin,
  130. 'createTime': item.create_time,
  131. 'status': item.status
  132. }
  133. @staticmethod
  134. def Search(request):
  135. page = request.POST.get("page")
  136. pageSize = request.POST.get("pageSize")
  137. if page is None:
  138. page = 1
  139. if pageSize is None:
  140. pageSize = 1
  141. where = {}
  142. name = request.POST.get("name", '')
  143. if name:
  144. where["name__icontains"] = name
  145. isAdmin = request.POST.get("is_admin")
  146. if isAdmin:
  147. where['is_admin'] = isAdmin
  148. status = request.POST.get("status")
  149. if status:
  150. where['status'] = status
  151. paginator = Paginator(AdminRole.objects.filter(**where).exclude(status=4).order_by("-id"),
  152. pageSize) # 每页显示10条数据
  153. page_obj = paginator.get_page(page)
  154. dataList = []
  155. for item in page_obj:
  156. info = AdminRoleService.getDetail(item)
  157. dataList.append(info)
  158. return success(pageData(page, pageSize, paginator.num_pages, paginator.count, dataList))
  159. @staticmethod
  160. def selectInfo(request):
  161. id = request.POST.get("id")
  162. if id is None:
  163. return fail("id为空")
  164. #查询角色信息
  165. info = AdminRole.objects.filter(id=id).first()
  166. info_dist = model_to_dict(info) if info else None
  167. #查询菜单
  168. menuList = AuthMenuService.menuInfo(id) or []
  169. role_id = id
  170. # 使用通用函数获取不同 content_type_id 的操作列表
  171. # 1模板分类
  172. template_category_users_list = get_operations_with_type(1, role_id)
  173. # 2文档分类
  174. doc_cate_auth = get_operations_with_type(2, role_id)
  175. # 3原始数据分类
  176. source_cate_auth = get_operations_with_type(3, role_id)
  177. data = {
  178. "info": info_dist,
  179. "menuList": menuList,
  180. "templateCategoryUsers": template_category_users_list,
  181. "doc_cate_auth": doc_cate_auth,
  182. "source_cate_auth": source_cate_auth
  183. }
  184. return success(data)
  185. def get_operations_with_type(content_type_id, role_id):
  186. operations = Operation.objects.filter(content_type_id=content_type_id)
  187. user_operation_exists = UserOperation.objects.filter(
  188. role_id=role_id,
  189. operation_id=OuterRef('pk')
  190. )
  191. operations = operations.annotate(
  192. type=Case(
  193. When(Exists(user_operation_exists), then=1),
  194. default=0,
  195. output_field=IntegerField()
  196. )
  197. ).values('id', 'content_type_id', 'name', 'type', 'codename')
  198. # 执行查询并获取结果
  199. result = list(operations)
  200. return result