home_land.py 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462
  1. from rest_framework.views import APIView
  2. from rest_framework.response import Response
  3. from smartfarming.models.ascend import MongoBase, MongoLandInfo, MongoPlantInfo, MongoAreaJob, LandPlanInfo, CountryModel, PlanWeekend
  4. from smartfarming.models.user import DeviceUser
  5. from smartfarming.serializers.ascend_serializers import (
  6. BaseSerializers,
  7. MongoLandInfoSerializers,
  8. MongoPlantInfoSerializers,
  9. MongoAreaJobSerializers,
  10. CountryModelSerializers,
  11. PlanWeekendSerializers,
  12. MongoPlanWeekendSerializers,
  13. LandPlanInfoSerializers
  14. )
  15. from django.core.paginator import Paginator
  16. import time
  17. from django.db.models import Q
  18. class BaseAPIView(APIView):
  19. def post(self, request):
  20. # 基地列表
  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_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. MongoPlantInfo.objects.filter(id=plan_id).update(
  212. batch = batch,
  213. plantname = plantname,
  214. pickcode = pickcode,
  215. planttype = planttype,
  216. uptime = int(time.time())
  217. )
  218. cycle_list = request_data.get("cycle_list")
  219. for c in cycle_list:
  220. id = c.get("id", "")
  221. name = c.get("name")
  222. start_time = (c.get("time"))[0]
  223. end_time = (c.get("time"))[1]
  224. pest_lst = [str(i) for i in c.get("pest")]
  225. pest = ",".join(pest_lst)
  226. pick_lst = [str(i) for i in c.get("pick")]
  227. pick = ",".join(pick_lst)
  228. mark = c.get("mark")
  229. print(id, name, start_time, end_time, pest_lst, pest, pick, pick_lst, mark)
  230. if id:
  231. PlanWeekend.objects.filter(id=id, plan_id=plan_id).update(
  232. name=name,
  233. start_time=start_time,
  234. end_time=end_time,
  235. pest=pest,
  236. pick=pick,
  237. mark=mark
  238. )
  239. else:
  240. PlanWeekend.objects.create(
  241. name=name,
  242. plan_id=plan_id,
  243. start_time=start_time,
  244. end_time=end_time,
  245. pest=pest,
  246. pick=pick,
  247. mark=mark
  248. )
  249. return Response({"code": 0, "msg": "success"})
  250. class MongoPlantInfoDeleteAPIView(APIView):
  251. def post(self, request):
  252. # 作物删除
  253. request_data = request.data
  254. plan_id = request_data.get("plan_id")
  255. # 查看此作物有没有被种植
  256. land_plan = LandPlanInfo.objects.filter(plan_id=plan_id)
  257. for k in land_plan:
  258. print(k.id)
  259. if land_plan:
  260. return Response({"code": 2, "msg": "此作物已种植,不能被删除"})
  261. else:
  262. try:
  263. MongoPlantInfo.objects.filter(id=plan_id).update(is_delete=0)
  264. PlanWeekend.objects.filter(plan_id=plan_id).update(is_delete=0)
  265. return Response({"code": 0, "msg": "作物删除成功"})
  266. except Exception as e:
  267. return Response({"code": 0, "msg": "作物删除失败"})
  268. class MongoGrowOperateAPIView(APIView):
  269. def post(self, request):
  270. # 种植新增
  271. request_data = request.data
  272. try:
  273. pl_id = request_data.get("pl_id")
  274. plan_id = request_data.get("plan_id")
  275. plan_time = request_data.get("plan_time")
  276. LandPlanInfo.objects.filter(id=pl_id).update(
  277. plan_id=plan_id,
  278. plan_time=plan_time,
  279. status="采收"
  280. )
  281. return Response({"code": 0, "msg": "地块操作成功"})
  282. except Exception as e:
  283. return Response({"code": 2, "msg": "请检查参数"})
  284. class MongoGrowOperateRecoveryAPIView(APIView):
  285. def post(self, request):
  286. # 种植采收
  287. request_data = request.data
  288. try:
  289. pl_id = request_data.get("pl_id")
  290. recovery_time = request_data.get("recovery_time")
  291. recovery_kg = request_data.get("recovery_kg")
  292. land_plan = LandPlanInfo.objects.filter(id=pl_id, status="采收").order_by("-addtime").first()
  293. land_plan.recovery_kg = recovery_kg
  294. land_plan.recovery_time = recovery_time
  295. land_plan.save()
  296. LandPlanInfo.objects.create(
  297. land_id=land_plan.land_id,
  298. addtime=int(time.time()),
  299. status="种植"
  300. )
  301. return Response({"code": 0, "msg": "地块操作成功"})
  302. except Exception as e:
  303. return Response({"code": 2, "msg": "请检查参数"})
  304. class PlanWeekendAPIView(APIView):
  305. def post(self, request):
  306. # 生成周期列表
  307. queryset = PlanWeekend.objects.filter(is_delete=1)
  308. serializers = PlanWeekendSerializers(queryset, many=True)
  309. return Response({"code": 0, "msg": "success", "data": serializers.data})
  310. class PlanWeekendDelete(APIView):
  311. def post(self, request):
  312. request_data = request.data
  313. try:
  314. PlanWeekend.objects.filter(id=request_data.get("id")).update(is_delete=0)
  315. return Response({"code": 0, "msg": "删除成功"})
  316. except Exception as e:
  317. return Response({"code": 2, "msg": "删除失败"})
  318. class PlanWeekendAddAPIView(APIView):
  319. def post(self, request):
  320. request_data = request.data
  321. try:
  322. PlanWeekend.objects.create(
  323. plan_id=request_data.get("plan_id"),
  324. name=request_data.get("name"),
  325. start_time=request_data.get("start_time"),
  326. end_time=request_data.get("end_time"),
  327. pest=request_data.get("pest"),
  328. pick=request_data.get("pick"),
  329. mark=request_data.get("mark")
  330. )
  331. return Response({"code": 0, "msg": "success"})
  332. except Exception as e:
  333. return Response({"code": 2, "msg": "添加失败"})
  334. class CountryModelAPIView(APIView):
  335. def post(self, request):
  336. # 乡村列表
  337. request_data = request.data
  338. page_num = int(request_data.get("pagenum")) if request_data.get("pagenum") else 1
  339. page_size = int(request_data.get("pagesize")) if request_data.get("pagesize") else 10
  340. title = request_data.get("title")
  341. if title:
  342. queryset = CountryModel.objects.filter(is_delete=1, title__icontains=title).order_by("-uptime")
  343. else:
  344. queryset = CountryModel.objects.filter(is_delete=1).order_by("-uptime")
  345. total_obj = queryset.count()
  346. paginator = Paginator(queryset, page_size)
  347. page_obj = paginator.get_page(page_num)
  348. serializers = CountryModelSerializers(page_obj, many=True)
  349. return Response({"code": 0, "msg": "success", "data": serializers.data, "count": total_obj})
  350. class CountryModelAddAPIView(APIView):
  351. def post(self, request):
  352. # 乡村增加
  353. request_data = request.data
  354. CountryModel.objects.create(
  355. title=request_data.get("title"),
  356. cover_img=request_data.get("cover_img"),
  357. introduce=request_data.get("introduce"),
  358. content=request_data.get("content"),
  359. uptime=int(time.time())
  360. )
  361. return Response({"code": 0, "msg": "success"})
  362. class CountryModelUpdateAPIView(APIView):
  363. def post(self, request):
  364. # 乡村增加
  365. request_data = request.data
  366. CountryModel.objects.filter(id=request_data.get("country_id")).update(
  367. title=request_data.get("title"),
  368. cover_img=request_data.get("cover_img"),
  369. introduce=request_data.get("introduce"),
  370. content=request_data.get("content")
  371. )
  372. return Response({"code": 0, "msg": "success"})
  373. class CountryModelDeleteAPIView(APIView):
  374. def post(self, request):
  375. # 乡村删除
  376. request_data = request.data
  377. try:
  378. CountryModel.objects.filter(id=request_data.get("country_id")).update(is_delete=0)
  379. return Response({"code": 0, "msg": "删除成功"})
  380. except Exception as e:
  381. return Response({"code": 2, "msg": "删除失败"})
  382. class LandPlanInfoAPIView(APIView):
  383. def post(self, request):
  384. # 种植采收
  385. request_data = request.data
  386. plan = request_data.get("plan")
  387. year = request_data.get("year")
  388. page_num = int(request_data.get("pagenum")) if request_data.get("pagenum") else 1
  389. page_size = int(request_data.get("pagesize")) if request_data.get("pagesize") else 10
  390. queryset = LandPlanInfo.objects.filter(Q(plan__icontains=plan))
  391. total_obj = queryset.count()
  392. paginator = Paginator(queryset, page_size)
  393. page_obj = paginator.get_page(page_num)
  394. serializers = LandPlanInfoSerializers(page_obj, many=True)