diff --git a/apps/am/tasks.py b/apps/am/tasks.py index e69de29b..dbb4c849 100644 --- a/apps/am/tasks.py +++ b/apps/am/tasks.py @@ -0,0 +1,28 @@ +from __future__ import absolute_import, unicode_literals +from apps.utils.task import CustomTask +from apps.am.models import Area +from celery import shared_task +from django.core.cache import cache +import shapely.geometry + + +@shared_task(base=CustomTask) +def cache_area_info(): + """ + 缓存区域信息 + """ + area_list = [] + for i in Area.objects.filter(type=Area.AREA_TYPE_FIX).exclude(third_info__xx_rail=None): + polygon = [] + for item in i.third_info['xx_rail']['detail']['polygon']['points']: + polygon.append([item.x, item.y]) + poly_context = {'type': 'MULTIPOLYGON', + 'coordinates': [[area_list]]} + area_dict = { + 'id': i.id, + 'floor_no': i.third_info['xx_rail']['detail']['floorNo'], + 'poly_shape': shapely.geometry.asShape(poly_context) + } + area_list.append(area_dict) + cache.set('area_list', area_list, timeout=None) + return area_list diff --git a/apps/ecm/service.py b/apps/ecm/service.py index 74413a4f..3ea5a326 100644 --- a/apps/ecm/service.py +++ b/apps/ecm/service.py @@ -11,7 +11,7 @@ from django.core.cache import cache import time ep_loc_dict = { - "area": None, # 当前所在区域 + "area_id": None, # 当前所在区域ID "time1": None, # 首次在该区域时间戳 "time2": None, # 当前在该区域时间戳 } @@ -142,6 +142,7 @@ class EcmService: def loc_change(cls, data): blts = TDevice.objects.filter(code=data['userId']).first() if blts.employee: + # 查询当前所在区域 time2 = int(time.time()) key_str = f'ep_{blts.employee.id}' ep_default_dict = { diff --git a/apps/ecm/urls.py b/apps/ecm/urls.py index 6c72b27e..a43544ab 100644 --- a/apps/ecm/urls.py +++ b/apps/ecm/urls.py @@ -1,3 +1,4 @@ +from apps.am.tasks import cache_area_info from apps.ecm.views import EventCateViewSet, NotifySettingViewSet, EventViewSet, RemindViewSet from django.urls import path, include from rest_framework.routers import DefaultRouter @@ -5,6 +6,7 @@ from rest_framework.routers import DefaultRouter API_BASE_URL = 'api/ecm/' HTML_BASE_URL = 'ecm/' +cache_area_info() # 首先缓存区域信息 router = DefaultRouter() router.register('event_cate', EventCateViewSet, basename='event_cate') router.register('event', EventViewSet, basename='event') diff --git a/apps/rpm/serializers.py b/apps/rpm/serializers.py index 4ef54c98..af294917 100644 --- a/apps/rpm/serializers.py +++ b/apps/rpm/serializers.py @@ -73,6 +73,9 @@ class RpjCreateUpdateSerializer(CustomModelSerializer): class RpjListSerializer(CustomModelSerializer): + rparty_name = serializers.CharField(source='rparty.name', read_only=True) + belong_dept_name = serializers.CharField(source='belong_dept.name', read_only=True) + class Meta: model = Rpj fields = '__all__' diff --git a/apps/rpm/views.py b/apps/rpm/views.py index 41133361..fec86216 100644 --- a/apps/rpm/views.py +++ b/apps/rpm/views.py @@ -110,6 +110,8 @@ class RpjViewSet(CustomModelViewSet): create_serializer_class = RpjCreateUpdateSerializer update_serializer_class = RpjCreateUpdateSerializer serializer_class = RpjListSerializer + select_related_fields = ['rparty', 'belong_dept'] + filterset_fields = ['rparty', 'belong_dept'] def get_queryset(self): queryset = super().get_queryset()