diff --git a/apps/am/apps.py b/apps/am/apps.py index 189a558b..17de6472 100755 --- a/apps/am/apps.py +++ b/apps/am/apps.py @@ -4,3 +4,8 @@ from django.apps import AppConfig class AemConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'apps.am' + + def ready(self) -> None: + from apps.am.tasks import cache_areas_info + cache_areas_info.delay() + return super().ready() diff --git a/apps/am/urls.py b/apps/am/urls.py index ad94ac73..8085a149 100644 --- a/apps/am/urls.py +++ b/apps/am/urls.py @@ -1,11 +1,10 @@ -from apps.am.tasks import cache_areas_info from apps.am.views import AreaViewSet, AccessViewSet from django.urls import path, include from rest_framework.routers import DefaultRouter API_BASE_URL = 'api/am/' HTML_BASE_URL = 'am/' -# cache_areas_info() + router = DefaultRouter() router.register('area', AreaViewSet, basename='area') router.register('access', AccessViewSet, basename='access') diff --git a/apps/ecm/service.py b/apps/ecm/service.py index 7c1e0326..559d0e49 100644 --- a/apps/ecm/service.py +++ b/apps/ecm/service.py @@ -637,8 +637,8 @@ def snap_and_analyse(vchannel: TDevice, algo_codes: list, opl: Opl = None): notify_event(event) -def loop_task(): - # 轮询拍照进行算法识别 +def loop_and_analyse(vchannel: TDevice, algo_codes: list, opl: Opl = None): + # 启动rtsp轮询进行算法识别 pass # cates = EventCate.objects.filter(loop_on=True, self_algo=True) # AlgoChannel.objects.filter(algo__loop_on=True, algo__self_algo=True).values('algo__code', 'vchannel') diff --git a/apps/hrm/migrations/0007_alter_employee_job_state.py b/apps/hrm/migrations/0007_alter_employee_job_state.py new file mode 100644 index 00000000..8131112f --- /dev/null +++ b/apps/hrm/migrations/0007_alter_employee_job_state.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.12 on 2023-03-02 09:28 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('hrm', '0006_alter_employee_user'), + ] + + operations = [ + migrations.AlterField( + model_name='employee', + name='job_state', + field=models.IntegerField(choices=[(10, '在职'), (20, '离职'), (30, '退休')], default=10, verbose_name='在职状态'), + ), + ] diff --git a/apps/hrm/models.py b/apps/hrm/models.py index 2bc0f7f9..0b5e3e05 100755 --- a/apps/hrm/models.py +++ b/apps/hrm/models.py @@ -10,9 +10,11 @@ class Employee(CommonBModel): """ JOB_ON = 10 JOB_OFF = 20 + JOB_RETIRE = 30 jobstate_choices = ( (JOB_ON, '在职'), (JOB_OFF, '离职'), + (JOB_RETIRE, '退休') ) PEOPLE_TYPE_CHOICES = ( ('employee', '内部员工'), diff --git a/apps/hrm/serializers.py b/apps/hrm/serializers.py index 4b867100..99ceb044 100755 --- a/apps/hrm/serializers.py +++ b/apps/hrm/serializers.py @@ -79,7 +79,7 @@ class EmployeeCreateUpdateSerializer(CustomModelSerializer): elif instance.type in ['visitor', 'driver']: # 如果是访客或司机 from apps.vm.services import sync_to_visitor sync_to_visitor(instance) - if instance.job_state == 20 and instance.user: # 如果离职了关闭账户 + if instance.job_state in [20, 30] and instance.user: # 如果离职了关闭账户 instance.user.is_active = False instance.user.save() # 同时去除门禁授权 @@ -92,10 +92,10 @@ class EmployeeCreateUpdateSerializer(CustomModelSerializer): if instance.third_info.get('dh_face_card', None) is None and instance.type == 'employee': # 如果是正式员工,给长时间期限 start_time = now end_time = now + timedelta(days=7300) - if instance.job_state == 20 and old_job_state == 10: # 离职 + if instance.job_state in [20, 30] and old_job_state == 10: # 离职或退休 start_time = now end_time = now + timedelta(minutes=60) - elif instance.job_state == 10 and old_job_state == 20 and instance.type == 'employee': # 正式员工重新在职 + elif instance.job_state == 10 and old_job_state in [20, 30] and instance.type == 'employee': # 正式员工重新在职 start_time = now end_time = now + timedelta(days=7300) HrmService.sync_dahua_employee(ep=instance, old_photo=old_photo, @@ -151,15 +151,15 @@ class EmployeeSerializer(CustomModelSerializer): class EmployeeDetailSerializer(EmployeeSerializer): - door_range = serializers.SerializerMethodField() + # door_range = serializers.SerializerMethodField() location = serializers.SerializerMethodField() - def get_door_range(self, obj): - third_info = obj.third_info - dh_face_card = third_info.get('dh_face_card', None) - if dh_face_card: - _, res = dhClient.request(**dhapis['card_detail'], params={'cardNumber': dh_face_card}) - return [res['startDate'], res['endDate']] + # def get_door_range(self, obj): + # third_info = obj.third_info + # dh_face_card = third_info.get('dh_face_card', None) + # if dh_face_card: + # _, res = dhClient.request(**dhapis['card_detail'], params={'cardNumber': dh_face_card}) + # return [res['startDate'], res['endDate']] def get_location(self, obj): key_str = 'ep_{}'.format(obj.id) diff --git a/apps/hrm/views.py b/apps/hrm/views.py index 7f0e2849..aec3c178 100755 --- a/apps/hrm/views.py +++ b/apps/hrm/views.py @@ -269,6 +269,26 @@ class ClockRecordViewSet(ListModelMixin, CustomGenericViewSet): correct_swip_task.delay(vdata['start_time'], vdata['end_time']) return Response() + @action(methods=['post'], detail=False, perms_map={'post': '*'}, + serializer_class=CorrectSerializer) + def correct_enter_or_exit(self, request, pk=None): + """ + 变更一段时间日志刷脸类型 + + 变更一段时间日志刷脸类型 + """ + from apps.monitor.models import DrfRequestLog + sr = CorrectSerializer(data=request.data) + sr.is_valid(raise_exception=True) + vdata = sr.validated_data + for i in DrfRequestLog.objects.filter(path='/api/third/dahua/c_swip/', data__contains='办公楼考勤面板' + , create_time__gte=vdata['start_time'] + , create_time__lte=vdata['end_time']).filter(data__contains = "'enterOrExit': 1" ): + data = i.data + i.data = data.replace("'enterOrExit': 1", "'enterOrExit': 3") + i.save() + return Response() + class NotWorkRemarkViewSet(ListModelMixin, CustomGenericViewSet): """ 离岗说明 diff --git a/apps/monitor/migrations/0003_alter_drfrequestlog_view_method.py b/apps/monitor/migrations/0003_alter_drfrequestlog_view_method.py new file mode 100644 index 00000000..b39f8aa5 --- /dev/null +++ b/apps/monitor/migrations/0003_alter_drfrequestlog_view_method.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.12 on 2023-03-02 15:27 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('monitor', '0002_drfrequestlog_user'), + ] + + operations = [ + migrations.AlterField( + model_name='drfrequestlog', + name='view_method', + field=models.CharField(blank=True, db_index=True, max_length=50, null=True), + ), + ] diff --git a/apps/monitor/models.py b/apps/monitor/models.py index a3d8c30e..d20c77dc 100755 --- a/apps/monitor/models.py +++ b/apps/monitor/models.py @@ -29,7 +29,7 @@ class DrfRequestLog(BaseModel): help_text="执行视图", ) view_method = models.CharField( - max_length=20, + max_length=50, null=True, blank=True, db_index=True, diff --git a/apps/third/tapis.py b/apps/third/tapis.py index 84ac807d..ab779e52 100755 --- a/apps/third/tapis.py +++ b/apps/third/tapis.py @@ -100,6 +100,10 @@ dhapis = { "url": "/evo-apigw/admin/API/video/stream/realtime", "method": "post" }, + "video_rtsp": { + "url": "/evo-apigw/admin/API/MTS/Video/StartVideo", + "method": "post" + }, "alarm_detail": { "url": "/evo-apigw/evo-event/1.2.0/alarm-record/detail?alarmCode={alarmCode}&dbType={dbType}&alarmDate={alarmDate}", "method": "get"