home_land.py 17 KB

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