home_land.py 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448
  1. import time
  2. from rest_framework.views import APIView
  3. from rest_framework.response import Response
  4. from django.core.paginator import Paginator
  5. from smartfarming.models.ascend import MongoBase, MongoLandInfo, MongoPlantInfo, MongoAreaJob, LandPlanInfo, CountryModel, PlanWeekend
  6. from smartfarming.serializers.ascend_serializers import (
  7. BaseSerializers,
  8. MongoLandInfoSerializers,
  9. MongoPlantInfoSerializers,
  10. MongoAreaJobSerializers,
  11. CountryModelSerializers,
  12. PlanWeekendSerializers,
  13. MongoPlanWeekendSerializers
  14. )
  15. class BaseAPIView(APIView):
  16. def post(self, request):
  17. # 基地列表
  18. query = MongoBase.objects.all().first()
  19. serializers = BaseSerializers(query)
  20. return Response({"code": 0, "msg": "success", "data": serializers.data})
  21. class BaseUpdateAPIView(APIView):
  22. def post(self, request):
  23. # 基地更新
  24. request_data = request.data
  25. base_phone = request_data.get("base_phone")
  26. base_name = request_data.get("base_name")
  27. base_img = request_data.get("base_img")
  28. base_charge = request_data.get("base_charge")
  29. try:
  30. MongoBase.objects.all().update(
  31. base_name=base_name,
  32. base_charge=base_charge,
  33. base_phone=base_phone,
  34. base_img=base_img
  35. )
  36. return Response({"code": 0, "msg": "success"})
  37. except Exception as e:
  38. return Response({"code": 0, "msg": "更新信息失败"})
  39. class MongoLandInfoAPIView(APIView):
  40. def post(self, request):
  41. # 地块列表
  42. request_data = request.data
  43. page_num = int(request_data.get("pagenum")) if request_data.get("pagenum") else 1
  44. page_size = int(request_data.get("pagesize")) if request_data.get("pagesize") else 10
  45. queryset = MongoLandInfo.objects.filter(is_delete=1).order_by("-uptime")
  46. total_obj = queryset.count()
  47. paginator = Paginator(queryset, page_size)
  48. page_obj = paginator.get_page(page_num)
  49. serializers = MongoLandInfoSerializers(page_obj, many=True)
  50. return Response({"code": 0, "msg": "success", "data": serializers.data, "count": total_obj})
  51. class MongoAreaJobDetailAPIView(APIView):
  52. def post(self, request):
  53. # 农事详情
  54. request_data = request.data
  55. land_id = request_data.get("land_id")
  56. query_date = request_data.get("query_date")
  57. page_num = int(request_data.get("pagenum")) if request_data.get("pagenum") else 1
  58. page_size = int(request_data.get("pagesize")) if request_data.get("pagesize") else 10
  59. if query_date:
  60. start = int(query_date[0]/1000)
  61. end = int(query_date[1]/1000)
  62. queryset = MongoAreaJob.objects.filter(land=land_id).filter(uptime__gte=start, uptime__lte=end).order_by("-uptime")
  63. else:
  64. queryset = MongoAreaJob.objects.filter(land=land_id).order_by("-uptime")
  65. total_obj = queryset.count()
  66. paginator = Paginator(queryset, page_size)
  67. page_obj = paginator.get_page(page_num)
  68. serializers = MongoAreaJobSerializers(page_obj, many=True)
  69. return Response({"code": 0, "msg": "success", "data": serializers.data, "count": total_obj})
  70. class MongoAreaJobAddAPIView(APIView):
  71. def post(self, request):
  72. # 农事新增
  73. request_data = request.data
  74. land_id = request_data.get("land_id")
  75. batch = request_data.get("batch")
  76. jobname = request_data.get("jobname")
  77. uptime = int(request_data.get("uptime"))
  78. MongoAreaJob.objects.create(
  79. land=land_id,
  80. batch=batch,
  81. jobname=jobname,
  82. uptime=uptime
  83. )
  84. return Response({"code": 0, "msg": "新增农事成功"})
  85. class MongoLandInfoAddAPIView(APIView):
  86. def post(self, request):
  87. # 地块新增
  88. request_data = request.data
  89. farm = request_data.get("farm")
  90. landname = request_data.get("landname")
  91. user = request_data.get("user")
  92. landaddr = request_data.get("landaddr")
  93. landarea = request_data.get("landarea")
  94. tel = request_data.get("tel")
  95. try:
  96. land = MongoLandInfo.objects.filter(farm=farm, is_delete=1)
  97. if land:
  98. return Response({"code": 2, "msg": "该地块编号已存在,请修改"})
  99. land = MongoLandInfo.objects.create(
  100. farm = farm,
  101. landname = landname,
  102. user = user,
  103. landaddr=landaddr,
  104. landarea=landarea,
  105. tel = tel,
  106. uptime = int(time.time())
  107. )
  108. # 新增地块后初始化一个农事
  109. if land:
  110. LandPlanInfo.objects.create(
  111. land_id=land.id,
  112. addtime=int(time.time())
  113. )
  114. return Response({"code": 0, "msg": "新增地块成功"})
  115. except Exception as e:
  116. print(e)
  117. return Response({"code": 2, "msg": "新增地块失败"})
  118. class MongoLandInfoUpdateAPIView(APIView):
  119. def post(self, request):
  120. # 地块更新
  121. request_data = request.data
  122. land_id = request_data.get("land_id")
  123. landname = request_data.get("landname")
  124. user = request_data.get("user")
  125. tel = request_data.get("tel")
  126. MongoLandInfo.objects.filter(id=land_id).update(
  127. landname = landname,
  128. user = user,
  129. tel = tel,
  130. uptime = int(time.time())
  131. )
  132. return Response({"code": 0, "msg": "更新地块成功"})
  133. class MongoLandInfoDeleteAPIView(APIView):
  134. def post(self, request):
  135. # 地块删除
  136. request_data = request.data
  137. land_id = request_data.get("land_id")
  138. try:
  139. # 核对是否在该地块存在未完成的种植
  140. land_plan = LandPlanInfo.objects.filter(land_id=land_id, recovery_time=0).exclude(plan_id=0)
  141. if land_plan.count():
  142. return Response({"code": 2, "msg": "该地块存在未完成的种植任务,请核对"})
  143. MongoLandInfo.objects.filter(id=land_id).update(is_delete=0)
  144. return Response({"code": 0, "msg": "删除地块成功"})
  145. except Exception as e:
  146. return Response({"code": 2, "msg": "删除地块失败"})
  147. class MongoPlantInfoAPIView(APIView):
  148. def post(self, request):
  149. # 作物列表
  150. request_data = request.data
  151. plantname = request_data.get("plantname")
  152. page_num = int(request_data.get("pagenum")) if request_data.get("pagenum") else 1
  153. page_size = int(request_data.get("pagesize")) if request_data.get("pagesize") else 10
  154. if plantname:
  155. queryset = MongoPlantInfo.objects.filter(is_delete=1, plantname__icontains=plantname).order_by("-uptime")
  156. else:
  157. queryset = MongoPlantInfo.objects.filter(is_delete=1).order_by("-uptime")
  158. total_obj = queryset.count()
  159. paginator = Paginator(queryset, page_size)
  160. page_obj = paginator.get_page(page_num)
  161. serializers = MongoPlantInfoSerializers(page_obj, many=True)
  162. return Response({"code": 0, "msg": "success", "data": serializers.data, "count": total_obj})
  163. class PlanDetailAPIView(APIView):
  164. def post(self, request):
  165. # 作物详情
  166. request_data = request.data
  167. plan_id = request_data.get("plan_id")
  168. queryset = MongoPlantInfo.objects.get(id=plan_id)
  169. serializers = MongoPlanWeekendSerializers(queryset)
  170. return Response({"code": 0, "msg": "success", "data": serializers.data})
  171. class MongoPlantInfoAddAPIView(APIView):
  172. def post(self, request):
  173. # 作物新增
  174. request_data = request.data
  175. batch = request_data.get("batch")
  176. plantname = request_data.get("plantname")
  177. pickcode = request_data.get("pickcode")
  178. planttype = request_data.get("planttype")
  179. plan = MongoPlantInfo.objects.filter(plantname=plantname, planttype=planttype)
  180. if plan:
  181. return Response({"code": 2, "msg": "该作物种类已存在,请核查"})
  182. plan_id = MongoPlantInfo.objects.create(
  183. batch = batch,
  184. plantname = plantname,
  185. pickcode = pickcode,
  186. planttype = planttype,
  187. uptime = int(time.time())
  188. )
  189. if plan_id:
  190. cycle_list = request_data.get("cycle_list")
  191. for c in cycle_list:
  192. PlanWeekend.objects.create(
  193. plan_id=plan_id.id,
  194. name=c.get("name"),
  195. start_time=c.get("time")[0],
  196. end_time=c.get("time")[1],
  197. pest=",".join([str(i) for i in c.get("pest")]),
  198. pick=",".join([str(i) for i in c.get("pick")]),
  199. mark=c.get("mark")
  200. )
  201. return Response({"code": 0, "msg": "新增作物及周期成功"})
  202. class MongoPlantInfoUpdateAPIView(APIView):
  203. def post(self, request):
  204. # 作物更新
  205. request_data = request.data
  206. plan_id = request_data.get("crop_id")
  207. batch = request_data.get("batch")
  208. plantname = request_data.get("plantname")
  209. pickcode = request_data.get("pickcode")
  210. planttype = request_data.get("planttype")
  211. plan = MongoPlantInfo.objects.filter(plantname=plantname, planttype=planttype)
  212. if plan:
  213. return Response({"code": 2, "msg": "该作物种类已存在,请核查"})
  214. MongoPlantInfo.objects.filter(id=plan_id).update(
  215. batch = batch,
  216. plantname = plantname,
  217. pickcode = pickcode,
  218. planttype = planttype,
  219. uptime = int(time.time())
  220. )
  221. cycle_list = request_data.get("cycle_list")
  222. for c in cycle_list:
  223. id = c.get("id", "")
  224. name = c.get("name")
  225. start_time = (c.get("time"))[0]
  226. end_time = (c.get("time"))[1]
  227. pest_lst = [str(i) for i in c.get("pest")]
  228. pest = ",".join(pest_lst)
  229. pick_lst = [str(i) for i in c.get("pick")]
  230. pick = ",".join(pick_lst)
  231. mark = c.get("mark")
  232. if id:
  233. PlanWeekend.objects.filter(id=id, plan_id=plan_id).update(
  234. name=name,
  235. start_time=start_time,
  236. end_time=end_time,
  237. pest=pest,
  238. pick=pick,
  239. mark=mark
  240. )
  241. else:
  242. PlanWeekend.objects.create(
  243. name=name,
  244. plan_id=plan_id,
  245. start_time=start_time,
  246. end_time=end_time,
  247. pest=pest,
  248. pick=pick,
  249. mark=mark
  250. )
  251. return Response({"code": 0, "msg": "success"})
  252. class MongoPlantInfoDeleteAPIView(APIView):
  253. def post(self, request):
  254. # 作物删除
  255. request_data = request.data
  256. plan_id = request_data.get("plan_id")
  257. # 查看此作物有没有被种植
  258. land_plan = LandPlanInfo.objects.filter(plan_id=plan_id)
  259. for k in land_plan:
  260. print(k.id)
  261. if land_plan:
  262. return Response({"code": 2, "msg": "此作物已种植,不能被删除"})
  263. else:
  264. try:
  265. MongoPlantInfo.objects.filter(id=plan_id).update(is_delete=0)
  266. PlanWeekend.objects.filter(plan_id=plan_id).update(is_delete=0)
  267. return Response({"code": 0, "msg": "作物删除成功"})
  268. except Exception as e:
  269. return Response({"code": 0, "msg": "作物删除失败"})
  270. class MongoGrowOperateAPIView(APIView):
  271. def post(self, request):
  272. # 种植新增
  273. request_data = request.data
  274. try:
  275. pl_id = request_data.get("pl_id")
  276. plan_id = request_data.get("plan_id")
  277. plan_time = request_data.get("plan_time")
  278. LandPlanInfo.objects.filter(id=pl_id).update(
  279. plan_id=plan_id,
  280. plan_time=plan_time,
  281. status="采收"
  282. )
  283. return Response({"code": 0, "msg": "地块操作成功"})
  284. except Exception as e:
  285. return Response({"code": 2, "msg": "请检查参数"})
  286. class MongoGrowOperateRecoveryAPIView(APIView):
  287. def post(self, request):
  288. # 种植采收
  289. request_data = request.data
  290. try:
  291. pl_id = request_data.get("pl_id")
  292. recovery_time = request_data.get("recovery_time")
  293. recovery_kg = request_data.get("recovery_kg")
  294. land_plan = LandPlanInfo.objects.filter(id=pl_id, status="采收").order_by("-addtime").first()
  295. land_plan.recovery_kg = recovery_kg
  296. land_plan.recovery_time = recovery_time
  297. land_plan.save()
  298. LandPlanInfo.objects.create(
  299. land_id=land_plan.land_id,
  300. addtime=int(time.time()),
  301. status="种植"
  302. )
  303. return Response({"code": 0, "msg": "地块操作成功"})
  304. except Exception as e:
  305. return Response({"code": 2, "msg": "请检查参数"})
  306. class PlanWeekendAPIView(APIView):
  307. def post(self, request):
  308. # 生成周期列表
  309. queryset = PlanWeekend.objects.filter(is_delete=1)
  310. serializers = PlanWeekendSerializers(queryset, many=True)
  311. return Response({"code": 0, "msg": "success", "data": serializers.data})
  312. class PlanWeekendDelete(APIView):
  313. def post(self, request):
  314. request_data = request.data
  315. try:
  316. PlanWeekend.objects.filter(id=request_data.get("id")).update(is_delete=0)
  317. return Response({"code": 0, "msg": "删除成功"})
  318. except Exception as e:
  319. return Response({"code": 2, "msg": "删除失败"})
  320. class PlanWeekendAddAPIView(APIView):
  321. def post(self, request):
  322. request_data = request.data
  323. try:
  324. PlanWeekend.objects.create(
  325. plan_id=request_data.get("plan_id"),
  326. name=request_data.get("name"),
  327. start_time=request_data.get("start_time"),
  328. end_time=request_data.get("end_time"),
  329. pest=request_data.get("pest"),
  330. pick=request_data.get("pick"),
  331. mark=request_data.get("mark")
  332. )
  333. return Response({"code": 0, "msg": "success"})
  334. except Exception as e:
  335. return Response({"code": 2, "msg": "添加失败"})
  336. class CountryModelAPIView(APIView):
  337. permission_classes = []
  338. authentication_classes = []
  339. def post(self, request):
  340. # 乡村列表
  341. request_data = request.data
  342. page_num = int(request_data.get("pagenum")) if request_data.get("pagenum") else 1
  343. page_size = int(request_data.get("pagesize")) if request_data.get("pagesize") else 10
  344. title = request_data.get("title")
  345. if title:
  346. queryset = CountryModel.objects.filter(is_delete=1, title__icontains=title).order_by("-uptime")
  347. else:
  348. queryset = CountryModel.objects.filter(is_delete=1).order_by("-uptime")
  349. total_obj = queryset.count()
  350. paginator = Paginator(queryset, page_size)
  351. page_obj = paginator.get_page(page_num)
  352. serializers = CountryModelSerializers(page_obj, many=True)
  353. return Response({"code": 0, "msg": "success", "data": serializers.data, "count": total_obj})
  354. class CountryModelAddAPIView(APIView):
  355. def post(self, request):
  356. # 乡村增加
  357. request_data = request.data
  358. CountryModel.objects.create(
  359. title=request_data.get("title"),
  360. cover_img=request_data.get("cover_img"),
  361. introduce=request_data.get("introduce"),
  362. content=request_data.get("content"),
  363. uptime=int(time.time())
  364. )
  365. return Response({"code": 0, "msg": "success"})
  366. class CountryModelUpdateAPIView(APIView):
  367. def post(self, request):
  368. # 乡村增加
  369. request_data = request.data
  370. CountryModel.objects.filter(id=request_data.get("country_id")).update(
  371. title=request_data.get("title"),
  372. cover_img=request_data.get("cover_img"),
  373. introduce=request_data.get("introduce"),
  374. content=request_data.get("content")
  375. )
  376. return Response({"code": 0, "msg": "success"})
  377. class CountryModelDeleteAPIView(APIView):
  378. def post(self, request):
  379. # 乡村删除
  380. request_data = request.data
  381. try:
  382. CountryModel.objects.filter(id=request_data.get("country_id")).update(is_delete=0)
  383. return Response({"code": 0, "msg": "删除成功"})
  384. except Exception as e:
  385. return Response({"code": 2, "msg": "删除失败"})