From 88db4fbcd458d96f45c0f3d68f094f49571ebc9b Mon Sep 17 00:00:00 2001 From: caoqianming Date: Thu, 2 Mar 2023 18:04:00 +0800 Subject: [PATCH 1/6] =?UTF-8?q?hrm=E5=A2=9E=E5=8A=A0=E9=80=80=E4=BC=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0007_alter_employee_job_state.py | 18 ++++++++++++++++++ apps/hrm/models.py | 2 ++ apps/hrm/serializers.py | 6 +++--- 3 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 apps/hrm/migrations/0007_alter_employee_job_state.py 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..9f853d27 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, From e7af79a51a99ed977dc1e55b386ddf8e02cd5718 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Thu, 2 Mar 2023 22:29:04 +0800 Subject: [PATCH 2/6] =?UTF-8?q?employee=20detail=20=E5=8F=96=E6=B6=88door?= =?UTF-8?q?=5Frange=20=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/hrm/serializers.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/apps/hrm/serializers.py b/apps/hrm/serializers.py index 9f853d27..99ceb044 100755 --- a/apps/hrm/serializers.py +++ b/apps/hrm/serializers.py @@ -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) From 3c3bb556db2d7a50f234f5272de9056d0fb93c34 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Thu, 2 Mar 2023 23:30:51 +0800 Subject: [PATCH 3/6] =?UTF-8?q?monitor=20drflog=20view=5Fmethod=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E5=A2=9E=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0003_alter_drfrequestlog_view_method.py | 18 ++++++++++++++++++ apps/monitor/models.py | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 apps/monitor/migrations/0003_alter_drfrequestlog_view_method.py 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, From f5432d38843ce5f2ebd59d69f61bbff533cae20f Mon Sep 17 00:00:00 2001 From: caoqianming Date: Thu, 2 Mar 2023 23:31:19 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E5=88=B7=E8=84=B8?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=20correct=5Fenter=5For=5Fexit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/hrm/views.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) 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): """ 离岗说明 From 6cdf79142961290defc49b370bbf4e64bf12b1fc Mon Sep 17 00:00:00 2001 From: caoqianming Date: Sat, 4 Mar 2023 23:15:28 +0800 Subject: [PATCH 5/6] am ready cache_area_info --- apps/am/apps.py | 5 +++++ apps/am/urls.py | 3 +-- 2 files changed, 6 insertions(+), 2 deletions(-) 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') From f184ddc094df8bbda76d1b5f245bfd16877b1fa3 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Sat, 4 Mar 2023 23:15:54 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E5=87=86=E5=A4=87=E5=86=99=E5=AE=9E?= =?UTF-8?q?=E6=97=B6=E7=9B=91=E6=8E=A7rtsp=E8=BF=9B=E8=A1=8C=E7=AE=97?= =?UTF-8?q?=E6=B3=95=E8=AF=86=E5=88=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/ecm/service.py | 4 ++-- apps/third/tapis.py | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) 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/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"