ascend_serializers.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  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_obj = MongoPlantInfo.objects.filter(id=plan_id)
  58. if plan_obj:
  59. plan_obj = plan_obj.first()
  60. plan_name = plan_obj.plantname
  61. pickcode = plan_obj.pickcode
  62. else:
  63. plan_id = ""
  64. plan_name = ""
  65. pickcode = ""
  66. if queryset:
  67. return {"pl_id": queryset.id, "plan_id": plan_id, "plan_name": plan_name,"pickcode": pickcode, "status": status}
  68. else:
  69. return {}
  70. class Meta:
  71. model = MongoLandInfo
  72. fields = [
  73. "id",
  74. "farm",
  75. "landname",
  76. "landaddr",
  77. "landarea",
  78. "user",
  79. "tel",
  80. "is_delete",
  81. "uptime",
  82. "plan",
  83. ]
  84. class CkPlanWeekendSerializers(serializers.ModelSerializer):
  85. p_obj = serializers.SerializerMethodField()
  86. def get_p_obj(self, obj):
  87. pests = [int(i) for i in obj.pest.split(",")]
  88. p_query = MongoPestBank.objects.filter(id__in=pests)
  89. p_serializers = PestBankSerializers(p_query, many=True)
  90. pick = [int(i) for i in obj.pick.split(",")]
  91. pk_query = MongoPestBank.objects.filter(id__in=pick)
  92. pk_serializers = PestBankSerializers(pk_query, many=True)
  93. return {"pest": p_serializers.data, "pick": pk_serializers.data}
  94. class Meta:
  95. model = PlanWeekend
  96. fields = [
  97. "id",
  98. "plan_id",
  99. "name",
  100. "start_time",
  101. "end_time",
  102. "pest",
  103. "pick",
  104. "mark",
  105. "is_delete",
  106. "p_obj"
  107. ]
  108. class MongoPlanWeekendSerializers(serializers.ModelSerializer):
  109. cycle_list = serializers.SerializerMethodField()
  110. def get_cycle_list(self, obj):
  111. query = PlanWeekend.objects.filter(plan_id=obj.id, is_delete=1)
  112. serializer = CkPlanWeekendSerializers(query,many=True)
  113. return serializer.data
  114. class Meta:
  115. model = MongoPlantInfo
  116. fields = [
  117. "id",
  118. "batch",
  119. "plantname",
  120. "pickcode",
  121. "planttype",
  122. "uptime",
  123. "cycle_list"
  124. ]
  125. class MongoPlantInfoSerializers(serializers.ModelSerializer):
  126. class Meta:
  127. model = MongoPlantInfo
  128. fields = [
  129. "id",
  130. "batch",
  131. "plantname",
  132. "pickcode",
  133. "planttype",
  134. "uptime"
  135. ]
  136. class MongoAreaJobSerializers(serializers.ModelSerializer):
  137. class Meta:
  138. model = MongoAreaJob
  139. fields = "__all__"
  140. class CountryModelSerializers(serializers.ModelSerializer):
  141. class Meta:
  142. model = CountryModel
  143. fields = "__all__"
  144. class PlanWeekendSerializers(serializers.ModelSerializer):
  145. class Meta:
  146. model = PlanWeekend
  147. fields = "__all__"
  148. class LandPlanInfoSerializers(serializers.ModelSerializer):
  149. plan = serializers.SerializerMethodField()
  150. def get_plan(self, obj):
  151. plan_id = obj.plan_id
  152. if plan_id:
  153. plan = MongoPlantInfo.objects.filter(id=obj.plan_id)
  154. if plan:
  155. return plan.first().plantname +"-"+ plan.first().planttype
  156. else:
  157. return ""
  158. else:
  159. return ""
  160. class Meta:
  161. model = LandPlanInfo
  162. fields = [
  163. "id",
  164. "land_id",
  165. "plan_id",
  166. "recovery_kg",
  167. "recovery_time",
  168. "plan_time",
  169. "addtime",
  170. "status",
  171. "plan"
  172. ]