ascend_serializers.py 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. from rest_framework import serializers
  2. from smartfarming.models.ascend import MongoBase, MongoLandInfo, MongoPlantInfo,MongoAreaJob, CountryModel, PlanWeekend, LandPlanInfo
  3. from smartfarming.models.user import DeviceUser
  4. import os
  5. import json
  6. from smartfarming.serializers.pests_serializers import PestBankSerializers
  7. from smartfarming.models.pests_bank import MongoPestBank
  8. def count_base_area():
  9. BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
  10. try:
  11. with open(os.path.join(BASE_DIR, "gcj02.json"), 'r', encoding="utf-8") as f:
  12. base = json.load(f)
  13. features = base.get("features")
  14. base_size = 0
  15. base_lng_lat = []
  16. for f in features:
  17. attributes = f.get("attributes", {})
  18. base_size += float(attributes.get("亩"))
  19. base_lng_lat.append(f.get("geometry", {}).get("rings", [])[0])
  20. return base_size, base_lng_lat
  21. except Exception as e:
  22. print(e)
  23. return 0, []
  24. class BaseSerializers(serializers.ModelSerializer):
  25. base_area = serializers.SerializerMethodField()
  26. base_lng_lat = serializers.SerializerMethodField()
  27. def base_info(self):
  28. return count_base_area()
  29. def get_base_area(self, obj):
  30. base_size, _ = self.base_info()
  31. return str("{:.2f}".format(base_size))
  32. def get_base_lng_lat(self, obj):
  33. _, base_lng_lat = self.base_info()
  34. return base_lng_lat
  35. class Meta:
  36. model = MongoBase
  37. fields = [
  38. "base_name",
  39. "base_charge",
  40. "base_phone",
  41. "base_img",
  42. "base_area",
  43. "base_lng_lat"
  44. ]
  45. class LandPlanInfoSerializers(serializers.ModelSerializer):
  46. class Meta:
  47. model = LandPlanInfo
  48. fields = "__all__"
  49. class MongoLandInfoSerializers(serializers.ModelSerializer):
  50. # 地块列表
  51. plan = serializers.SerializerMethodField()
  52. def get_plan(self, obj):
  53. land_id = obj.id
  54. queryset = LandPlanInfo.objects.filter(land_id=land_id).order_by("-addtime").first()
  55. status = queryset.status
  56. plan_id = queryset.plan_id
  57. plan_time = queryset.plan_time
  58. plan_obj = MongoPlantInfo.objects.filter(id=plan_id)
  59. if plan_obj:
  60. plan_obj = plan_obj.first()
  61. plan_name = plan_obj.plantname
  62. pickcode = plan_obj.pickcode
  63. else:
  64. plan_id = ""
  65. plan_name = ""
  66. pickcode = ""
  67. if queryset:
  68. return {"pl_id": queryset.id, "plan_id": plan_id, "plan_name": plan_name,"plan_time": plan_time, "pickcode": pickcode, "status": status}
  69. else:
  70. return {}
  71. class Meta:
  72. model = MongoLandInfo
  73. fields = [
  74. "id",
  75. "farm",
  76. "landname",
  77. "landaddr",
  78. "landarea",
  79. "user",
  80. "tel",
  81. "is_delete",
  82. "uptime",
  83. "plan",
  84. ]
  85. class CkPlanWeekendSerializers(serializers.ModelSerializer):
  86. p_obj = serializers.SerializerMethodField()
  87. def get_p_obj(self, obj):
  88. pests = [int(i) for i in obj.pest.split(",")]
  89. p_query = MongoPestBank.objects.filter(id__in=pests)
  90. p_serializers = PestBankSerializers(p_query, many=True)
  91. pick = [int(i) for i in obj.pick.split(",")]
  92. pk_query = MongoPestBank.objects.filter(id__in=pick)
  93. pk_serializers = PestBankSerializers(pk_query, many=True)
  94. return {"pest": p_serializers.data, "pick": pk_serializers.data}
  95. class Meta:
  96. model = PlanWeekend
  97. fields = [
  98. "id",
  99. "plan_id",
  100. "name",
  101. "start_time",
  102. "end_time",
  103. "pest",
  104. "pick",
  105. "mark",
  106. "is_delete",
  107. "p_obj"
  108. ]
  109. class MongoPlanWeekendSerializers(serializers.ModelSerializer):
  110. cycle_list = serializers.SerializerMethodField()
  111. def get_cycle_list(self, obj):
  112. query = PlanWeekend.objects.filter(plan_id=obj.id, is_delete=1)
  113. serializer = CkPlanWeekendSerializers(query,many=True)
  114. return serializer.data
  115. class Meta:
  116. model = MongoPlantInfo
  117. fields = [
  118. "id",
  119. "batch",
  120. "plantname",
  121. "pickcode",
  122. "planttype",
  123. "uptime",
  124. "cycle_list"
  125. ]
  126. class MongoPlantInfoSerializers(serializers.ModelSerializer):
  127. class Meta:
  128. model = MongoPlantInfo
  129. fields = [
  130. "id",
  131. "batch",
  132. "plantname",
  133. "pickcode",
  134. "planttype",
  135. "uptime"
  136. ]
  137. class MongoAreaJobSerializers(serializers.ModelSerializer):
  138. class Meta:
  139. model = MongoAreaJob
  140. fields = "__all__"
  141. class CountryModelSerializers(serializers.ModelSerializer):
  142. class Meta:
  143. model = CountryModel
  144. fields = "__all__"
  145. class PlanWeekendSerializers(serializers.ModelSerializer):
  146. class Meta:
  147. model = PlanWeekend
  148. fields = "__all__"
  149. class LandPlanInfoSerializers(serializers.ModelSerializer):
  150. plan = serializers.SerializerMethodField()
  151. def get_plan(self, obj):
  152. plan_id = obj.plan_id
  153. if plan_id:
  154. plan = MongoPlantInfo.objects.filter(id=obj.plan_id)
  155. if plan:
  156. return plan.first().plantname +"-"+ plan.first().planttype
  157. else:
  158. return ""
  159. else:
  160. return ""
  161. class Meta:
  162. model = LandPlanInfo
  163. fields = [
  164. "id",
  165. "land_id",
  166. "plan_id",
  167. "recovery_kg",
  168. "recovery_time",
  169. "plan_time",
  170. "addtime",
  171. "status",
  172. "plan"
  173. ]