ascend_serializers.py 5.6 KB

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