knowledge.py 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  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, is_delete=1)
  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. is_top = request_data.get("is_top")
  99. page_num = int(request_data.get("pagenum", 1)) if request_data.get("pagenum") else 1
  100. page_size = int(request_data.get("pagesize", 10)) if request_data.get("pagesize") else 10
  101. if category_id and related_plan:
  102. queryset = KnowledgeManage.objects.filter( Q(is_delete=1) & Q(related_plan__icontains=related_plan) & Q(category=category_id)).order_by("-is_top","-addtime")
  103. elif category_id and not related_plan:
  104. queryset = KnowledgeManage.objects.filter(Q(is_delete=1) & Q(category=category_id) ).order_by("-is_top","-addtime")
  105. elif related_plan and not category_id:
  106. queryset = KnowledgeManage.objects.filter( Q(is_delete=1) & Q(related_plan__icontains=related_plan)).order_by("-is_top","-addtime")
  107. else:
  108. queryset = KnowledgeManage.objects.filter(is_delete=1).order_by("-is_top","-addtime")
  109. if is_top:
  110. queryset = queryset.filter(is_top=1).order_by("-is_top","-addtime")
  111. total_obj = queryset.count()
  112. paginator = Paginator(queryset, page_size)
  113. page_obj = paginator.get_page(page_num)
  114. serializers = KnowledgeManageSerializer(page_obj, many=True)
  115. return Response({"code": 0, "msg": "success", "data": serializers.data, "count": total_obj})
  116. class KnowledgeManageAddAPIView(APIView):
  117. def post(self, request):
  118. # 知识信息新增
  119. try:
  120. request_data = request.data
  121. category_id = request_data.get("category_id")
  122. related_plan = request_data.get("related_plan", "")
  123. title = request_data.get("title")
  124. is_top = request_data.get("is_top")
  125. if not is_top:
  126. is_top = 0
  127. img = request_data.get("img", "")
  128. origin = request_data.get("origin", "")
  129. content = request_data.get("content", "")
  130. is_created = KnowledgeManage.objects.create(
  131. category = category_id,
  132. related_plan = related_plan,
  133. title = title,
  134. is_top = is_top,
  135. img = img,
  136. origin = origin,
  137. content = content,
  138. addtime = int(time.time())
  139. )
  140. if is_created:
  141. return Response({"code": 0, "msg": "success"})
  142. else:
  143. return Response({"code": 2, "msg": "创建失败"})
  144. except:
  145. return Response({"code": 2, "msg": "fail"})
  146. class KnowledgeManageUpdateAPIView(APIView):
  147. def post(self, request):
  148. # 知识信息更新
  149. try:
  150. request_data = request.data
  151. update_top = request_data.get("update_top")
  152. is_top = request_data.get("is_top")
  153. manage_id = request_data.get("manage_id")
  154. if update_top:
  155. try:
  156. KnowledgeManage.objects.filter(id=manage_id).update(is_top=is_top)
  157. return Response({"code": 0, "msg": "success"})
  158. except Exception as e:
  159. return Response({"code": 2, "msg": "更新失败"})
  160. category_id = request_data.get("category_id")
  161. related_plan = request_data.get("related_plan", "")
  162. title = request_data.get("title")
  163. img = request_data.get("img", "")
  164. origin = request_data.get("origin", "")
  165. content = request_data.get("content", "")
  166. is_created = KnowledgeManage.objects.filter(id=manage_id).update(
  167. category = category_id,
  168. related_plan = related_plan,
  169. title = title,
  170. is_top = 1 if is_top else 0,
  171. img = img,
  172. origin = origin,
  173. content = content
  174. )
  175. if is_created:
  176. return Response({"code": 0, "msg": "success"})
  177. else:
  178. return Response({"code": 2, "msg": "更新失败"})
  179. except:
  180. return Response({"code": 2, "msg": "fail"})
  181. class KnowledgeManageDeleteAPIView(APIView):
  182. def post(self, request):
  183. # 知识信息删除
  184. request_data = request.data
  185. manage_id = request_data.get("manage_id")
  186. is_update = KnowledgeManage.objects.filter(id=manage_id).update(is_delete=0)
  187. if is_update:
  188. return Response({"code": 0, "msg": "success"})
  189. else:
  190. return Response({"code": 2, "msg": "删除失败"})
  191. class KnowledgeManageDetailAPIView(APIView):
  192. permission_classes = []
  193. authentication_classes = []
  194. def post(self, request):
  195. # 知识信息详情
  196. try:
  197. request_data = request.data
  198. manage_id = request_data.get("manage_id")
  199. queryset = KnowledgeManage.objects.filter(is_delete=1, id=manage_id).order_by("-addtime").first()
  200. serializers = KnowledgeManageSerializer(queryset)
  201. if queryset:
  202. queryset.count += 1
  203. else:
  204. queryset.count = 1
  205. queryset.save()
  206. return Response({"code": 0, "msg": "success", "data": serializers.data})
  207. except:
  208. return Response({"code": 2, "msg": "fail"})
  209. class InformationAPIView(APIView):
  210. permission_classes = []
  211. authentication_classes = []
  212. def post(self, request):
  213. # 研判信息列表
  214. request_data = request.data
  215. title = request_data.get("title")
  216. page_num = int(request_data.get("pagenum", 1)) if request_data.get("pagenum") else 1
  217. page_size = int(request_data.get("pagesize", 10)) if request_data.get("pagesize") else 10
  218. if title:
  219. queryset = Information.objects.filter(is_delete=1, title__icontains=title).order_by("-addtime")
  220. else:
  221. queryset = Information.objects.filter(is_delete=1).order_by("-addtime")
  222. total_obj = queryset.count()
  223. paginator = Paginator(queryset, page_size)
  224. page_obj = paginator.get_page(page_num)
  225. serializers = InformationSerializer(page_obj, many=True)
  226. return Response({"code": 0, "msg": "success", "data": serializers.data, "count": total_obj})
  227. class InformationAddAPIView(APIView):
  228. def post(self, request):
  229. # 研判信息新增
  230. request_data = request.data
  231. myuser = request.myuser
  232. title = request_data.get("title")
  233. content = request_data.get("content")
  234. user = myuser.uid
  235. information = Information.objects.create(
  236. title = title,
  237. content = content,
  238. addtime = int(time.time()),
  239. user = user
  240. )
  241. if information:
  242. return Response({"code": 0, "msg": "success"})
  243. else:
  244. return Response({"code": 2, "msg": "失败"})
  245. class InformationUpdateAPIView(APIView):
  246. def post(self, request):
  247. # 研判信息更新
  248. try:
  249. request_data = request.data
  250. information_id = request_data.get("information_id")
  251. title = request_data.get("title")
  252. content = request_data.get("content")
  253. information = Information.objects.filter(id=information_id).update(
  254. title = title,
  255. content = content
  256. )
  257. if information:
  258. return Response({"code": 0, "msg": "success"})
  259. else:
  260. return Response({"code": 2, "msg": "失败"})
  261. except:
  262. return Response({"code": 2, "msg": "fail"})
  263. class InformationDeleteAPIView(APIView):
  264. def post(self, request):
  265. # 研判信息删除
  266. try:
  267. request_data = request.data
  268. information_id = request_data.get("information_id")
  269. is_delete = Information.objects.filter(id=information_id).update(is_delete=0)
  270. if is_delete:
  271. return Response({"code": 0, "msg": "success"})
  272. else:
  273. return Response({"code": 2, "msg": "失败"})
  274. except:
  275. return Response({"code": 2, "msg": "fail"})
  276. class InformationDetailAPIView(APIView):
  277. def post(self, request):
  278. # 研判信息删除
  279. try:
  280. request_data = request.data
  281. information_id = request_data.get("information_id")
  282. queryset = Information.objects.get(id=information_id)
  283. serializers = InformationSerializer(queryset)
  284. return Response({"code": 0, "msg": "success", "data": serializers.data})
  285. except Exception as e:
  286. return Response({"code": 2, "msg": "fail"})