From 903dbf98ca29d487830aeaa5c3f1b6f1c7e674a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E5=89=8D=E6=98=8E?= <909355014@qq.com> Date: Fri, 24 Jun 2022 10:27:03 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0certificate=20url?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/develop/tasks.py | 2 +- apps/develop/views.py | 2 +- apps/hrm/services.py | 13 ++++++++++--- apps/hrm/urls.py | 3 ++- apps/opm/serializers.py | 15 +++++++++++++++ apps/opm/views.py | 18 ------------------ apps/third/migrations/0002_tdevice_is_clock.py | 18 ++++++++++++++++++ apps/third/models.py | 1 + apps/third/tee.py | 9 +++++++-- apps/third/views.py | 2 ++ 10 files changed, 57 insertions(+), 26 deletions(-) create mode 100644 apps/third/migrations/0002_tdevice_is_clock.py diff --git a/apps/develop/tasks.py b/apps/develop/tasks.py index 211e4bbf..c559e307 100755 --- a/apps/develop/tasks.py +++ b/apps/develop/tasks.py @@ -38,7 +38,7 @@ def reload_web_git(): @shared_task def reload_server_only(): - command = 'echo "{}" | sudo supervisorctl reload'.format(SD_PWD) + command = 'echo "{}" | sudo -S supervisorctl reload'.format(SD_PWD) completed = subprocess.run(command, shell=True, capture_output=True, text=True) return completed diff --git a/apps/develop/views.py b/apps/develop/views.py index b7d09efd..17d7b2bd 100755 --- a/apps/develop/views.py +++ b/apps/develop/views.py @@ -22,7 +22,7 @@ class ReloadServerGit(APIView): else: from server.settings import myLogger myLogger.error(completed) - raise ParseError(completed.stdout) + raise ParseError(completed.stderr) class ReloadClientGit(APIView): diff --git a/apps/hrm/services.py b/apps/hrm/services.py index 92bbde94..99cb361f 100755 --- a/apps/hrm/services.py +++ b/apps/hrm/services.py @@ -1,4 +1,5 @@ from apps.hrm.models import Employee +from apps.third.models import TDevice from apps.third.tapis import dhapis from apps.third.clients import dhClient from apps.utils.tools import rannum @@ -134,8 +135,14 @@ class HrmService: dh_face_card = res['id'] return {'dh_id': dh_id, 'dh_photo': dh_photo, 'dh_face_card': dh_face_card} - def swipe(cls, data:dict): + @classmethod + def swipe(cls, data: dict): """ - 刷卡事件 + 刷卡事件/用于记录考勤 """ - pass \ No newline at end of file + deviceCode = data['infoArray']['deviceCode'] + device = TDevice.objects.filter(code=deviceCode).first() + if not device: + device = TDevice.objects.create(type=TDevice.DEVICE_DCHANNEL, code=deviceCode) + if device.is_clock: + pass diff --git a/apps/hrm/urls.py b/apps/hrm/urls.py index dabe4d1f..667efa39 100755 --- a/apps/hrm/urls.py +++ b/apps/hrm/urls.py @@ -1,4 +1,4 @@ -from apps.hrm.views import ClockRecordViewSet, EmployeeViewSet, NotWorkRemarkViewSet +from apps.hrm.views import CertificateViewSet, ClockRecordViewSet, EmployeeViewSet, NotWorkRemarkViewSet from django.urls import path, include from rest_framework.routers import DefaultRouter @@ -9,6 +9,7 @@ router = DefaultRouter() router.register('employee', EmployeeViewSet, basename='employee') router.register('clock_record', ClockRecordViewSet, basename='clock_record') router.register('not_work_remark', NotWorkRemarkViewSet, basename='not_work_reamrk') +router.register('certificate', CertificateViewSet, basename='certificate') urlpatterns = [ path(API_BASE_URL, include(router.urls)), ] diff --git a/apps/opm/serializers.py b/apps/opm/serializers.py index ef92acad..8040f825 100644 --- a/apps/opm/serializers.py +++ b/apps/opm/serializers.py @@ -51,6 +51,9 @@ class OplWorkerCreateSerializer(CustomModelSerializer): fields = ['worker', 'duty', 'certificates', 'opl'] def create(self, validated_data): + opl = validated_data['opl'] + if opl.ticket: + raise ParseError('许可证已处理不可新增') certificates = validated_data.pop('certificates') if OplWorker.objects.filter(worker=validated_data['worker'], opl=validated_data['opl']).exists(): raise ParseError('该成员已加入') @@ -98,6 +101,12 @@ class GasCheckCreateUpdateSerializer(CustomModelSerializer): model = GasCheck exclude = EXCLUDE_FIELDS + def create(self, validated_data): + opl = validated_data['opl'] + if opl.ticket: + raise ParseError('许可证已处理不可新增') + return super().create(validated_data) + class GasCheckSerializer(CustomModelSerializer): class Meta: @@ -115,6 +124,12 @@ class OplCreateUpdateSerializer(CustomModelSerializer): 'power_end_time', 'power_start_time', 'power_days', 'other_risk', 'other_emr', 'escape_route', 'risks_checked', 'measures_checked', 'create_imgs'] + + def create(self, validated_data): + operation = validated_data['operation'] + if operation.state == Operation.OP_CLOSE: + raise ParseError('作业已关闭不可创建许可') + return super().create(validated_data) class OplSerializer(CustomModelSerializer): diff --git a/apps/opm/views.py b/apps/opm/views.py index 25fc453a..39287ee9 100644 --- a/apps/opm/views.py +++ b/apps/opm/views.py @@ -51,12 +51,6 @@ class OplViewSet(CustomModelViewSet): raise ParseError('许可证已处理不可删除') return super().destroy(request, *args, **kwargs) - def create(self, request, *args, **kwargs): - obj = self.get_object() - if obj.operation.state == Operation.OP_CLOSE: - raise ParseError('作业已关闭不可创建许可') - return super().create(request, *args, **kwargs) - def update(self, request, *args, **kwargs): obj = self.get_object() if obj.ticket: @@ -71,12 +65,6 @@ class OplWorkerViewSet(CustomModelViewSet): update_serializer_class = OplWorkerUpdateSerializer serializer_class = OplSerializer - def create(self, request, *args, **kwargs): - obj = self.get_object() - if obj.opl.ticket: - raise ParseError('许可证已处理不可新增') - return super().create(request, *args, **kwargs) - def destroy(self, request, *args, **kwargs): obj = self.get_object() if obj.opl.ticket: @@ -96,12 +84,6 @@ class GasCheckViewSet(CreateModelMixin, ListModelMixin, DestroyModelMixin, Custo create_serializer_class = GasCheckCreateUpdateSerializer serializer_class = GasCheckSerializer - def create(self, request, *args, **kwargs): - obj = self.get_object() - if obj.opl.ticket: - raise ParseError('许可证已处理不可新增') - return super().create(request, *args, **kwargs) - def destroy(self, request, *args, **kwargs): obj = self.get_object() if obj.opl.ticket: diff --git a/apps/third/migrations/0002_tdevice_is_clock.py b/apps/third/migrations/0002_tdevice_is_clock.py new file mode 100644 index 00000000..cfb7f0eb --- /dev/null +++ b/apps/third/migrations/0002_tdevice_is_clock.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.12 on 2022-06-24 01:12 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('third', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='tdevice', + name='is_clock', + field=models.BooleanField(default=False, verbose_name='是否打卡设备'), + ), + ] diff --git a/apps/third/models.py b/apps/third/models.py index 9c6d31b0..d8fac4f8 100755 --- a/apps/third/models.py +++ b/apps/third/models.py @@ -37,5 +37,6 @@ class TDevice(BaseModel): verbose_name='所在区', null=True, blank=True) areas = models.ManyToManyField(Area, verbose_name='覆盖区', related_name='tareas') + is_clock = models.BooleanField('是否打卡设备', default=False) third_info = models.JSONField('三方信息', default=dict, null=False, blank=True) diff --git a/apps/third/tee.py b/apps/third/tee.py index 6c463f6d..d6e0f0da 100644 --- a/apps/third/tee.py +++ b/apps/third/tee.py @@ -1,3 +1,8 @@ {'id': None, 'category': 'alarm', 'method': 'alarm.msg', -'info': {'orgName': '根节点', 'alarmPictureSize': '82496', 'nodeCode': '1000038$1$0$0', 'deviceCode': '1000038', 'alarmCode': '{00A84F4B-7E88-0B4F-910C-CCDA923D9900}', 'alarmPicture': '6ad010cf-ce45-11ec-9715-e4246c7d1635/20220622/1/dsf_453810dc-f202-11ec-bd2d-e4246c7d1635_953328_1035824.jpg', 'nodeType': 2, 'deviceName': '10.0.11.23', - 'alarmDate': '1655893102', 'alarmGrade': 2, 'isSave': True, 'unitType': 1, 'unitSeq': 0, 'extend': {'params': {'ObjectType': 'Human', 'GroupId': 0.0, 'ObjectSubType': ''}, 'objectSubType': ''}, 'alarmType': 964, 'channelSeq': 0, 'orgCode': '001', 'channelName': '测试摄像头1', 'alarmStat': 1, 'isEvent': True}, 'subsystem': 'admin', 'userIds': None, 'sid': None, 'domainId': None, 'infoArray': None, 'protocol': None} +'info': {'orgName': '根节点', 'alarmPictureSize': '82496', +'nodeCode': '1000038$1$0$0', 'deviceCode': '1000038', +'alarmCode': '{00A84F4B-7E88-0B4F-910C-CCDA923D9900}', +'alarmPicture': '6ad010cf-ce45-11ec-9715-e4246c7d1635/20220622/1/dsf_453810dc-f202-11ec-bd2d-e4246c7d1635_953328_1035824.jpg', +'nodeType': 2, +'deviceName': '10.0.11.23', +'alarmDate': '1655893102', 'alarmGrade': 2, 'isSave': True, 'unitType': 1, 'unitSeq': 0, 'extend': {'params': {'ObjectType': 'Human', 'GroupId': 0.0, 'ObjectSubType': ''}, 'objectSubType': ''}, 'alarmType': 964, 'channelSeq': 0, 'orgCode': '001', 'channelName': '测试摄像头1', 'alarmStat': 1, 'isEvent': True}, 'subsystem': 'admin', 'userIds': None, 'sid': None, 'domainId': None, 'infoArray': None, 'protocol': None} diff --git a/apps/third/views.py b/apps/third/views.py index 3a6f076c..19e75ac0 100755 --- a/apps/third/views.py +++ b/apps/third/views.py @@ -1,6 +1,7 @@ import json from rest_framework.exceptions import ParseError, APIException from apps.ecm.service import EcmService +from apps.hrm.services import HrmService from apps.third.tapis import dhapis, xxapis, spapis from apps.third.erros import TAPI_CODE_WRONG from apps.third.clients import dhClient, spClient, xxClient @@ -226,6 +227,7 @@ class DhCommonViewSet(CreateModelMixin, CustomGenericViewSet): """ 刷卡事件 """ + HrmService.swipe(data=data) elif category == 'alarm' and subsystem == 'admin': """ 视频报警