| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- from rest_framework import serializers
- from smartfarming.models.ascend import MongoBase, MongoLandInfo, MongoPlantInfo,MongoAreaJob, CountryModel, PlanWeekend, LandPlanInfo
- from smartfarming.models.user import DeviceUser
- import os
- import json
- from smartfarming.serializers.pests_serializers import PestBankSerializers
- from smartfarming.models.pests_bank import MongoPestBank
- def count_base_area():
- BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
- try:
- with open(os.path.join(BASE_DIR, "gcj02.json"), 'r', encoding="utf-8") as f:
- base = json.load(f)
- features = base.get("features")
- base_size = 0
- base_lng_lat = []
- for f in features:
- attributes = f.get("attributes", {})
- base_size += float(attributes.get("亩"))
- base_lng_lat.append(f.get("geometry", {}).get("rings", [])[0])
- return base_size, base_lng_lat
- except Exception as e:
- print(e)
- return 0, []
- class BaseSerializers(serializers.ModelSerializer):
- base_area = serializers.SerializerMethodField()
- base_lng_lat = serializers.SerializerMethodField()
- def base_info(self):
- return count_base_area()
-
- def get_base_area(self, obj):
- base_size, _ = self.base_info()
- return str("{:.2f}".format(base_size))
- def get_base_lng_lat(self, obj):
- _, base_lng_lat = self.base_info()
- return base_lng_lat
- class Meta:
- model = MongoBase
- fields = [
- "base_name",
- "base_charge",
- "base_phone",
- "base_img",
- "base_area",
- "base_lng_lat"
- ]
- class LandPlanInfoSerializers(serializers.ModelSerializer):
- class Meta:
- model = LandPlanInfo
- fields = "__all__"
- class MongoLandInfoSerializers(serializers.ModelSerializer):
- # 地块列表
- plan = serializers.SerializerMethodField()
- def get_plan(self, obj):
- land_id = obj.id
- queryset = LandPlanInfo.objects.filter(land_id=land_id).order_by("-addtime").first()
- status = queryset.status
- plan_id = queryset.plan_id
- plan_time = queryset.plan_time
- plan_obj = MongoPlantInfo.objects.filter(id=plan_id)
- if plan_obj:
- plan_obj = plan_obj.first()
- plan_name = plan_obj.plantname
- pickcode = plan_obj.pickcode
- else:
- plan_id = ""
- plan_name = ""
- pickcode = ""
- if queryset:
- return {"pl_id": queryset.id, "plan_id": plan_id, "plan_name": plan_name,"plan_time": plan_time, "pickcode": pickcode, "status": status}
- else:
- return {}
- class Meta:
- model = MongoLandInfo
- fields = [
- "id",
- "farm",
- "landname",
- "landaddr",
- "landarea",
- "user",
- "tel",
- "is_delete",
- "uptime",
- "plan",
- ]
- class CkPlanWeekendSerializers(serializers.ModelSerializer):
- p_obj = serializers.SerializerMethodField()
- def get_p_obj(self, obj):
- pests = [int(i) for i in obj.pest.split(",")]
- p_query = MongoPestBank.objects.filter(id__in=pests)
- p_serializers = PestBankSerializers(p_query, many=True)
- pick = [int(i) for i in obj.pick.split(",")]
- pk_query = MongoPestBank.objects.filter(id__in=pick)
- pk_serializers = PestBankSerializers(pk_query, many=True)
- return {"pest": p_serializers.data, "pick": pk_serializers.data}
- class Meta:
- model = PlanWeekend
- fields = [
- "id",
- "plan_id",
- "name",
- "start_time",
- "end_time",
- "pest",
- "pick",
- "mark",
- "is_delete",
- "p_obj"
- ]
- class MongoPlanWeekendSerializers(serializers.ModelSerializer):
- cycle_list = serializers.SerializerMethodField()
- def get_cycle_list(self, obj):
- query = PlanWeekend.objects.filter(plan_id=obj.id, is_delete=1)
- serializer = CkPlanWeekendSerializers(query,many=True)
- return serializer.data
-
- class Meta:
- model = MongoPlantInfo
- fields = [
- "id",
- "batch",
- "plantname",
- "pickcode",
- "planttype",
- "uptime",
- "cycle_list"
- ]
- class MongoPlantInfoSerializers(serializers.ModelSerializer):
- class Meta:
- model = MongoPlantInfo
- fields = [
- "id",
- "batch",
- "plantname",
- "pickcode",
- "planttype",
- "uptime"
- ]
- class MongoAreaJobSerializers(serializers.ModelSerializer):
- class Meta:
- model = MongoAreaJob
- fields = "__all__"
-
- class CountryModelSerializers(serializers.ModelSerializer):
- class Meta:
- model = CountryModel
- fields = "__all__"
- class PlanWeekendSerializers(serializers.ModelSerializer):
- class Meta:
- model = PlanWeekend
- fields = "__all__"
- class LandPlanInfoSerializers(serializers.ModelSerializer):
- plan = serializers.SerializerMethodField()
- def get_plan(self, obj):
- plan_id = obj.plan_id
- if plan_id:
- plan = MongoPlantInfo.objects.filter(id=obj.plan_id)
- if plan:
- return plan.first().plantname +"-"+ plan.first().planttype
- else:
- return ""
- else:
- return ""
- class Meta:
- model = LandPlanInfo
- fields = [
- "id",
- "land_id",
- "plan_id",
- "recovery_kg",
- "recovery_time",
- "plan_time",
- "addtime",
- "status",
- "plan"
- ]
|