ascend_serializers.py 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  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. if obj.pest:
  89. pests = [int(i) for i in obj.pest.split(",")]
  90. p_query = MongoPestBank.objects.filter(id__in=pests)
  91. p_serializers = PestBankSerializers(p_query, many=True)
  92. pest_data = p_serializers.data
  93. else:
  94. pest_data = []
  95. if obj.pick:
  96. pick = [int(i) for i in obj.pick.split(",")]
  97. pk_query = MongoPestBank.objects.filter(id__in=pick)
  98. pk_serializers = PestBankSerializers(pk_query, many=True)
  99. pk_data = pk_serializers.data
  100. else:
  101. pk_data = []
  102. return {"pest": pest_data, "pick": pk_data}
  103. class Meta:
  104. model = PlanWeekend
  105. fields = [
  106. "id",
  107. "plan_id",
  108. "name",
  109. "start_time",
  110. "end_time",
  111. "pest",
  112. "pick",
  113. "mark",
  114. "is_delete",
  115. "p_obj"
  116. ]
  117. class MongoPlanWeekendSerializers(serializers.ModelSerializer):
  118. cycle_list = serializers.SerializerMethodField()
  119. def get_cycle_list(self, obj):
  120. query = PlanWeekend.objects.filter(plan_id=obj.id, is_delete=1)
  121. serializer = CkPlanWeekendSerializers(query,many=True)
  122. return serializer.data
  123. class Meta:
  124. model = MongoPlantInfo
  125. fields = [
  126. "id",
  127. "batch",
  128. "plantname",
  129. "pickcode",
  130. "planttype",
  131. "uptime",
  132. "cycle_list"
  133. ]
  134. class MongoPlantInfoSerializers(serializers.ModelSerializer):
  135. class Meta:
  136. model = MongoPlantInfo
  137. fields = [
  138. "id",
  139. "batch",
  140. "plantname",
  141. "pickcode",
  142. "planttype",
  143. "uptime"
  144. ]
  145. class MongoAreaJobSerializers(serializers.ModelSerializer):
  146. class Meta:
  147. model = MongoAreaJob
  148. fields = "__all__"
  149. class CountryModelSerializers(serializers.ModelSerializer):
  150. class Meta:
  151. model = CountryModel
  152. fields = "__all__"
  153. class PlanWeekendSerializers(serializers.ModelSerializer):
  154. class Meta:
  155. model = PlanWeekend
  156. fields = "__all__"
  157. class LandPlanInfoSerializers(serializers.ModelSerializer):
  158. plan = serializers.SerializerMethodField()
  159. def get_plan(self, obj):
  160. plan_id = obj.plan_id
  161. if plan_id:
  162. plan = MongoPlantInfo.objects.filter(id=obj.plan_id)
  163. if plan:
  164. return plan.first().plantname +"-"+ plan.first().planttype
  165. else:
  166. return ""
  167. else:
  168. return ""
  169. class Meta:
  170. model = LandPlanInfo
  171. fields = [
  172. "id",
  173. "land_id",
  174. "plan_id",
  175. "recovery_kg",
  176. "recovery_time",
  177. "plan_time",
  178. "addtime",
  179. "status",
  180. "plan"
  181. ]