DocumentService.py 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. import json
  2. from django.core.paginator import Paginator
  3. from DCbackend.utils.common import success, fail, pageData, saveDocFile
  4. from backend.Form.DocumentForm import DocumentForm
  5. from backend.Service.AdminService import AdminService
  6. from backend.Service.DocumentCategoryService import DocumentCategoryService
  7. from backend.models import Supplier, Document, DocumentCategory, ProductDocument, ProjectDocument, Admin, AdminRole
  8. #
  9. # from docx import Document
  10. # from bs4 import BeautifulSoup
  11. class DocumentService:
  12. @staticmethod
  13. def Create(request):
  14. try:
  15. form = DocumentForm(request.POST)
  16. if form.is_valid():
  17. is_template = request.POST.get("is_template")
  18. category_id = request.POST.get("category_id")
  19. if int(is_template) == 0 and category_id == None:
  20. return fail("保存文档时,分类不能为空")
  21. form.save()
  22. document_id = form.instance.id
  23. links = json.loads(request.POST.get("links"))
  24. for link in links:
  25. pd = ProductDocument()
  26. pd.document_id = document_id
  27. pd.product_id = link
  28. pd.status = 5
  29. pd.save()
  30. projects = json.loads(request.POST.get("projects"))
  31. for p in projects:
  32. pr = ProjectDocument()
  33. pr.project_id = p
  34. pr.doc_id = document_id
  35. pr.status = 5
  36. pr.save()
  37. return success(document_id)
  38. else:
  39. return fail(form.errors)
  40. except Exception as ex:
  41. return fail(str(ex))
  42. @staticmethod
  43. def Update(request):
  44. data = Document.objects.filter(id=request.POST.get("id")).first()
  45. if data is not None:
  46. data.title = request.POST.get("title")
  47. data.data = request.POST.get("data")
  48. data.status = request.POST.get("status")
  49. data.save()
  50. links = json.loads(request.POST.get("links"))
  51. ProductDocument.objects.filter(document_id=data.id).update(status=4)
  52. for link in links:
  53. pd = ProductDocument()
  54. pd.document_id = data.id
  55. pd.product_id = link
  56. pd.status = 5
  57. pd.save()
  58. projects = json.loads(request.POST.get("projects"))
  59. ProjectDocument.objects.filter(doc_id=data.id).update(status=4)
  60. for p in projects:
  61. pr = ProjectDocument()
  62. pr.project_id = p
  63. pr.doc_id = data.id
  64. pr.status = 5
  65. pr.save()
  66. return success(data.id)
  67. else:
  68. return fail("更新文档信息失败")
  69. @staticmethod
  70. def Info(request):
  71. info = Document.objects.filter(id=request.POST.get("id")).first()
  72. return success(DocumentService.getDetail(info))
  73. @staticmethod
  74. def Delete(request):
  75. Document.objects.filter(id=request.POST.get("id")).update(status=4)
  76. return success("成功")
  77. @staticmethod
  78. def getDetail(item: Document):
  79. where = {}
  80. where["document_id"] = item.id
  81. dpList = ProductDocument.objects.filter(**where).exclude(status=4).all()
  82. linkProduct = []
  83. for it in dpList:
  84. # temp = {
  85. # 'id': it.id,
  86. # 'product_id': it.product_id,
  87. # 'document_id': it.document_id,
  88. # }
  89. linkProduct.append(it.product_id)
  90. prList = ProjectDocument.objects.filter(doc_id=item.id).exclude(status=4).all()
  91. linkProject = []
  92. for it in prList:
  93. # temp = {
  94. # 'id': it.id,
  95. # 'project_id': it.project_id,
  96. # 'doc_id': it.doc_id,
  97. # }
  98. linkProject.append(it.project_id)
  99. isTemplate = item.is_template
  100. username = ''
  101. if item.is_template is False:
  102. adminInfo = Admin.objects.filter(id=item.user_id).first()
  103. username = adminInfo.username
  104. return {
  105. "id": item.id,
  106. 'title': item.title,
  107. 'data': item.data,
  108. 'user_id': item.user_id,
  109. 'linkProduct': linkProduct,
  110. 'links': '',
  111. 'linkProject': linkProject,
  112. 'projects': '',
  113. 'category_id': item.category_id,
  114. 'createTime': item.create_time,
  115. 'status': item.status,
  116. 'is_template': item.is_template,
  117. 'user_name': username
  118. }
  119. @staticmethod
  120. def Search(request):
  121. page = request.POST.get("page")
  122. pageSize = request.POST.get("pageSize")
  123. if page is None:
  124. page = 1
  125. if pageSize is None:
  126. pageSize = 1
  127. where = {}
  128. admin = AdminService.verify_token(request.POST.get("token"))
  129. if admin:
  130. role_id = admin.role_id
  131. role = AdminRole.objects.filter(id=role_id).first()
  132. if role.is_admin != 1:
  133. where["user_id"] = admin.id
  134. else:
  135. return fail("token信息异常")
  136. categoryId = request.POST.get("category_id")
  137. if categoryId:
  138. where["category_id"] = categoryId
  139. title = request.POST.get("title", '')
  140. if title:
  141. where["title__icontains"] = title
  142. status = request.POST.get("status")
  143. if status:
  144. where['status'] = status
  145. paginator = Paginator(Document.objects.filter(**where).exclude(status=4).order_by("-id"),
  146. pageSize) # 每页显示10条数据
  147. page_obj = paginator.get_page(page)
  148. dataList = []
  149. for item in page_obj:
  150. info = DocumentService.getDetail(item)
  151. category = DocumentCategory.objects.filter(id=item.category_id).first()
  152. info['category'] = DocumentCategoryService.getDetail(category)
  153. dataList.append(info)
  154. return success(pageData(page, pageSize, paginator.num_pages, paginator.count, dataList))
  155. @staticmethod
  156. def pageDocument(request):
  157. where = {}
  158. admin = AdminService.verify_token(request.POST.get("token"))
  159. if admin:
  160. role_id = admin.role_id
  161. role = AdminRole.objects.filter(id=role_id).first()
  162. if role.is_admin != 1:
  163. where["user_id"] = admin.id
  164. else:
  165. return fail("token过期请重新登录")
  166. page = request.POST.get("page")
  167. pageSize = request.POST.get("pageSize")
  168. if page is None:
  169. page = 1
  170. if pageSize is None:
  171. pageSize = 10
  172. categoryId = request.POST.get("category_id")
  173. if categoryId:
  174. where["category_id"] = categoryId
  175. title = request.POST.get("title", '')
  176. if title:
  177. where["title__icontains"] = title
  178. status = request.POST.get("status")
  179. if status:
  180. where['status'] = status
  181. paginator = Paginator(Document.objects.filter(**where).exclude(status=4).order_by("-id").values('id', 'title', 'category_id','create_time', 'status','is_template','user_id'),pageSize)
  182. page_obj = paginator.get_page(page)
  183. # 获取所有需要的 category_id
  184. category_ids = set(info['category_id'] for info in page_obj if info['category_id'] is not None)
  185. # 一次性查询所有需要的 DocumentCategory
  186. categories = {
  187. cat['id']: cat['name']
  188. for cat in DocumentCategory.objects.filter(id__in=category_ids).exclude(status=4).values('id', 'name')
  189. }
  190. # 获取所有需要的 user_id
  191. user_ids = set(info['user_id'] for info in page_obj if info['user_id'] is not None)
  192. # 一次性查询所有需要的 Admin
  193. admin_info = {
  194. admin['id']: admin['username']
  195. for admin in Admin.objects.filter(id__in=user_ids).values('id', 'username')
  196. }
  197. dataList = []
  198. for info in page_obj:
  199. info_dict = dict(info) # 转换为可变的字典
  200. category_id = info_dict['category_id']
  201. user_id = info_dict['user_id']
  202. info_dict['type_name'] = categories.get(category_id, '')
  203. info_dict['user_name'] = admin_info.get(user_id, '')
  204. dataList.append(info_dict)
  205. return success(pageData(page, pageSize, paginator.num_pages, paginator.count, dataList))