knowledge.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. from rest_framework.views import APIView
  2. from rest_framework.response import Response
  3. from django.core.paginator import Paginator
  4. import time
  5. from smartfarming.models.agriculture import KnowledgeManage, KnowledgeCategory, Information
  6. from smartfarming.serializers.knowledge_serializer import KnowledgeCategorySerializer, KnowledgeManageSerializer, InformationSerializer
  7. from django.db.models import Q
  8. class KnowledgeCategoryAPIView(APIView):
  9. permission_classes = []
  10. authentication_classes = []
  11. def post(self, request):
  12. # 知识分类列表
  13. request_data = request.data
  14. if (not request_data.get("pagenum")) and (not request_data.get("pagesize")):
  15. queryset = KnowledgeCategory.objects.filter(is_delete=1).order_by("-uptime","-addtime")
  16. serializers = KnowledgeCategorySerializer(queryset, many=True)
  17. return Response({"code": 0, "msg": "success", "data": serializers.data})
  18. page_num = int(request_data.get("pagenum", 1)) if request_data.get("pagenum") else 1
  19. page_size = int(request_data.get("pagesize", 10)) if request_data.get("pagesize") else 10
  20. title = request_data.get("title")
  21. if title:
  22. queryset = KnowledgeCategory.objects.filter(is_delete=1, title=title).order_by("-uptime","-addtime")
  23. else:
  24. queryset = KnowledgeCategory.objects.filter(is_delete=1).order_by("-uptime","-addtime")
  25. total_obj = queryset.count()
  26. paginator = Paginator(queryset, page_size)
  27. page_obj = paginator.get_page(page_num)
  28. serializers = KnowledgeCategorySerializer(page_obj, many=True)
  29. return Response({"code": 0, "msg": "success", "data": serializers.data, "count": total_obj})
  30. class KnowledgeCategoryAddAPIView(APIView):
  31. def post(self, request):
  32. # 新增知识分类
  33. try:
  34. request_data = request.data
  35. title = request_data.get("title")
  36. knowledge_category, is_created= KnowledgeCategory.objects.get_or_create(
  37. title = title,
  38. is_delete=1,
  39. defaults={
  40. "title": title,
  41. "uptime": int(time.time()),
  42. "is_use": 1,
  43. "addtime": int(time.time())
  44. }
  45. )
  46. if not is_created:
  47. return Response({"code": 2, "msg": "该知识分类已存在,请检查"})
  48. else:
  49. return Response({"code": 0, "msg": "success"})
  50. except Exception as e:
  51. print(e)
  52. return Response({"code": 2, "msg": "fail"})
  53. class KnowledgeCategoryUpdateAPIView(APIView):
  54. def post(self, request):
  55. # 知识分类修改
  56. try:
  57. request_data = request.data
  58. category_id = request_data.get("category_id")
  59. title = request_data.get("title")
  60. order = request_data.get("order")
  61. is_use = request_data.get("is_use")
  62. category = KnowledgeCategory.objects.get(id=category_id)
  63. if title:
  64. try:
  65. kg = KnowledgeCategory.objects.get(title=title)
  66. if kg.id != category_id:
  67. return Response({"code": 0, "msg": "该知识分类已存在,请检查"})
  68. except Exception as e:
  69. pass
  70. category.title = title
  71. category.uptime = int(time.time())
  72. if order:
  73. category.order = order
  74. if is_use:
  75. category.is_use = is_use
  76. category.save()
  77. return Response({"code": 0, "msg": "success"})
  78. except:
  79. return Response({"code": 2, "msg": "fail"})
  80. class KnowledgeCategoryDeleteAPIView(APIView):
  81. def post(self, request):
  82. # 知识分类删除
  83. request_data = request.data
  84. category_id = request_data.get("category_id")
  85. manage = KnowledgeManage.objects.filter(category=category_id)
  86. if manage:
  87. return Response({"code": 2, "msg": "该知识分类已被知识信息引用,请检查"})
  88. KnowledgeCategory.objects.filter(id=category_id).update(is_delete=0)
  89. return Response({"code": 0, "msg": "success"})
  90. class KnowledgeManageAPIView(APIView):
  91. permission_classes = []
  92. authentication_classes = []
  93. def post(self, request):
  94. # 知识信息列表
  95. request_data = request.data
  96. category_id = request_data.get("category_id")
  97. related_plan = request_data.get("related_plan")
  98. page_num = int(request_data.get("pagenum", 1)) if request_data.get("pagenum") else 1
  99. page_size = int(request_data.get("pagesize", 10)) if request_data.get("pagesize") else 10
  100. if category_id and related_plan:
  101. queryset = KnowledgeManage.objects.filter( Q(is_delete=1) & Q(related_plan__icontains=related_plan) & Q(category=category_id)).order_by("-is_top","-addtime")
  102. elif category_id and not related_plan:
  103. queryset = KnowledgeManage.objects.filter(Q(is_delete=1) & Q(category=category_id) ).order_by("-is_top","-addtime")
  104. elif related_plan and not category_id:
  105. queryset = KnowledgeManage.objects.filter( Q(is_delete=1) & Q(related_plan__icontains=related_plan)).order_by("-is_top","-addtime")
  106. else:
  107. queryset = KnowledgeManage.objects.filter(is_delete=1).order_by("-is_top","-addtime")
  108. total_obj = queryset.count()
  109. paginator = Paginator(queryset, page_size)
  110. page_obj = paginator.get_page(page_num)
  111. serializers = KnowledgeManageSerializer(page_obj, many=True)
  112. return Response({"code": 0, "msg": "success", "data": serializers.data, "count": total_obj})
  113. class KnowledgeManageAddAPIView(APIView):
  114. def post(self, request):
  115. # 知识信息新增
  116. try:
  117. request_data = request.data
  118. category_id = request_data.get("category_id")
  119. related_plan = request_data.get("related_plan", "")
  120. title = request_data.get("title")
  121. is_top = request_data.get("is_top")
  122. if not is_top:
  123. is_top = 0
  124. img = request_data.get("img", "")
  125. origin = request_data.get("origin", "")
  126. content = request_data.get("content", "")
  127. is_created = KnowledgeManage.objects.create(
  128. category = category_id,
  129. related_plan = related_plan,
  130. title = title,
  131. is_top = is_top,
  132. img = img,
  133. origin = origin,
  134. content = content,
  135. addtime = int(time.time())
  136. )
  137. if is_created:
  138. return Response({"code": 0, "msg": "success"})
  139. else:
  140. return Response({"code": 2, "msg": "创建失败"})
  141. except:
  142. return Response({"code": 2, "msg": "fail"})
  143. class KnowledgeManageUpdateAPIView(APIView):
  144. def post(self, request):
  145. # 知识信息更新
  146. try:
  147. request_data = request.data
  148. update_top = request_data.get("update_top")
  149. is_top = request_data.get("is_top")
  150. manage_id = request_data.get("manage_id")
  151. if update_top:
  152. try:
  153. KnowledgeManage.objects.filter(id=manage_id).update(is_top=is_top)
  154. return Response({"code": 0, "msg": "success"})
  155. except Exception as e:
  156. return Response({"code": 2, "msg": "更新失败"})
  157. category_id = request_data.get("category_id")
  158. related_plan = request_data.get("related_plan", "")
  159. title = request_data.get("title")
  160. img = request_data.get("img", "")
  161. origin = request_data.get("origin", "")
  162. content = request_data.get("content", "")
  163. is_created = KnowledgeManage.objects.filter(id=manage_id).update(
  164. category = category_id,
  165. related_plan = related_plan,
  166. title = title,
  167. is_top = 1 if is_top else 0,
  168. img = img,
  169. origin = origin,
  170. content = content
  171. )
  172. if is_created:
  173. return Response({"code": 0, "msg": "success"})
  174. else:
  175. return Response({"code": 2, "msg": "更新失败"})
  176. except:
  177. return Response({"code": 2, "msg": "fail"})
  178. class KnowledgeManageDeleteAPIView(APIView):
  179. def post(self, request):
  180. # 知识信息删除
  181. request_data = request.data
  182. manage_id = request_data.get("manage_id")
  183. is_update = KnowledgeManage.objects.filter(id=manage_id).update(is_delete=0)
  184. if is_update:
  185. return Response({"code": 0, "msg": "success"})
  186. else:
  187. return Response({"code": 2, "msg": "删除失败"})
  188. class KnowledgeManageDetailAPIView(APIView):
  189. permission_classes = []
  190. authentication_classes = []
  191. def post(self, request):
  192. # 知识信息详情
  193. try:
  194. request_data = request.data
  195. manage_id = request_data.get("manage_id")
  196. queryset = KnowledgeManage.objects.filter(is_delete=1, id=manage_id).order_by("-addtime").first()
  197. serializers = KnowledgeManageSerializer(queryset)
  198. return Response({"code": 0, "msg": "success", "data": serializers.data})
  199. except:
  200. return Response({"code": 2, "msg": "fail"})
  201. class InformationAPIView(APIView):
  202. permission_classes = []
  203. authentication_classes = []
  204. def post(self, request):
  205. # 研判信息列表
  206. request_data = request.data
  207. title = request_data.get("title")
  208. page_num = int(request_data.get("pagenum", 1)) if request_data.get("pagenum") else 1
  209. page_size = int(request_data.get("pagesize", 10)) if request_data.get("pagesize") else 10
  210. if title:
  211. queryset = Information.objects.filter(is_delete=1, title__icontains=title).order_by("-addtime")
  212. else:
  213. queryset = Information.objects.filter(is_delete=1).order_by("-addtime")
  214. total_obj = queryset.count()
  215. paginator = Paginator(queryset, page_size)
  216. page_obj = paginator.get_page(page_num)
  217. serializers = InformationSerializer(page_obj, many=True)
  218. return Response({"code": 0, "msg": "success", "data": serializers.data, "count": total_obj})
  219. class InformationAddAPIView(APIView):
  220. def post(self, request):
  221. # 研判信息新增
  222. request_data = request.data
  223. myuser = request.myuser
  224. title = request_data.get("title")
  225. content = request_data.get("content")
  226. user = myuser.uid
  227. information = Information.objects.create(
  228. title = title,
  229. content = content,
  230. addtime = int(time.time()),
  231. user = user
  232. )
  233. if information:
  234. return Response({"code": 0, "msg": "success"})
  235. else:
  236. return Response({"code": 2, "msg": "失败"})
  237. class InformationUpdateAPIView(APIView):
  238. def post(self, request):
  239. # 研判信息更新
  240. try:
  241. request_data = request.data
  242. information_id = request_data.get("information_id")
  243. title = request_data.get("title")
  244. content = request_data.get("content")
  245. information = Information.objects.filter(id=information_id).update(
  246. title = title,
  247. content = content
  248. )
  249. if information:
  250. return Response({"code": 0, "msg": "success"})
  251. else:
  252. return Response({"code": 2, "msg": "失败"})
  253. except:
  254. return Response({"code": 2, "msg": "fail"})
  255. class InformationDeleteAPIView(APIView):
  256. def post(self, request):
  257. # 研判信息删除
  258. try:
  259. request_data = request.data
  260. information_id = request_data.get("information_id")
  261. is_delete = Information.objects.filter(id=information_id).update(is_delete=0)
  262. if is_delete:
  263. return Response({"code": 0, "msg": "success"})
  264. else:
  265. return Response({"code": 2, "msg": "失败"})
  266. except:
  267. return Response({"code": 2, "msg": "fail"})