283 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			283 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Python
		
	
	
	
| from apps.hrm.models import Certificate
 | |
| from apps.opm.models import GasCheck, Operation, Opl, OplCate, OplCert, OplWorker
 | |
| from apps.system.models import Dictionary
 | |
| from apps.system.serializers import DeptSimpleSerializer, DictSimpleSerializer, UserSimpleSerializer
 | |
| from apps.utils.fields import MyFilePathField
 | |
| from apps.utils.serializers import CustomModelSerializer
 | |
| from apps.utils.constants import EXCLUDE_FIELDS
 | |
| from rest_framework import serializers
 | |
| from django.db import transaction
 | |
| from rest_framework.exceptions import ParseError, ValidationError
 | |
| from apps.am.serializers import AreaSimpleSerializer
 | |
| from apps.wf.serializers import TicketSerializer
 | |
| from apps.system.serializers import FileSerializer
 | |
| from apps.third.serializers import TDeviceSimpleSerializer
 | |
| from django.core.cache import cache
 | |
| from apps.wf.models import Ticket
 | |
| 
 | |
| 
 | |
| class OplCateCreateUpdateSerializer(CustomModelSerializer):
 | |
|     class Meta:
 | |
|         model = OplCate
 | |
|         exclude = EXCLUDE_FIELDS
 | |
| 
 | |
| 
 | |
| class OplCateSerializer(CustomModelSerializer):
 | |
| 
 | |
|     class Meta:
 | |
|         model = OplCate
 | |
|         fields = '__all__'
 | |
| 
 | |
| 
 | |
| class OplCateSimpleSerializer(CustomModelSerializer):
 | |
|     class Meta:
 | |
|         model = OplCate
 | |
|         fields = ['id', 'name', 'code', 'sort']
 | |
| 
 | |
| 
 | |
| class OplCateDetailSerializer(CustomModelSerializer):
 | |
|     measure_options_ = DictSimpleSerializer(source='measure_options', read_only=True, many=True)
 | |
|     risk_options_ = DictSimpleSerializer(source='risk_options', read_only=True, many=True)
 | |
|     close_options_ = DictSimpleSerializer(source='close_options', read_only=True, many=True)
 | |
| 
 | |
|     class Meta:
 | |
|         model = OplCate
 | |
|         fields = '__all__'
 | |
| 
 | |
| 
 | |
| class OperationCreateUpdateSerializer(CustomModelSerializer):
 | |
|     class Meta:
 | |
|         model = Operation
 | |
|         exclude = EXCLUDE_FIELDS + ['number']
 | |
|     
 | |
|     def validate(self, attrs):
 | |
|         dept_ter = attrs['dept_ter']
 | |
|         dept_bus = attrs['dept_bus']
 | |
|         if dept_ter.type != 'dept' or dept_bus.type != 'dept':
 | |
|             raise ValidationError('属地和业务部门需为本部')
 | |
|         return super().validate(attrs)
 | |
| 
 | |
| 
 | |
| class OperationPartialUpdateSerializer(CustomModelSerializer):
 | |
|     class Meta:
 | |
|         model = Operation
 | |
|         fields = ['vchannels', 'dept_ter', 'dept_bus']
 | |
| 
 | |
| 
 | |
| class OperationSerializer(CustomModelSerializer):
 | |
|     class Meta:
 | |
|         model = Operation
 | |
|         fields = "__all__"
 | |
| 
 | |
| 
 | |
| class OperationDetailSerializer(CustomModelSerializer):
 | |
|     area_ = AreaSimpleSerializer(source='area', read_only=True)
 | |
|     dept_ter_ = DeptSimpleSerializer(source='dept_ter', read_only=True)
 | |
|     dept_bus_ = DeptSimpleSerializer(source='dept_bus', read_only=True)
 | |
|     coordinator_ = UserSimpleSerializer(source='coordinator', read_only=True)
 | |
|     coordinator_name = serializers.CharField(source='coordinator.name', read_only=True)
 | |
|     create_by_ = UserSimpleSerializer(source='create_by', read_only=True)
 | |
|     cates_ = OplCateSimpleSerializer(source='cates', read_only=True, many=True)
 | |
|     vchannels_ = TDeviceSimpleSerializer(source='vchannels', read_only=True, many=True)
 | |
| 
 | |
|     class Meta:
 | |
|         model = Operation
 | |
|         fields = "__all__"
 | |
| 
 | |
| 
 | |
| class OplWorkerCreateSerializer(CustomModelSerializer):
 | |
|     certificates = serializers.PrimaryKeyRelatedField(label='证书ID', many=True, queryset=Certificate.objects.all())
 | |
| 
 | |
|     class Meta:
 | |
|         model = OplWorker
 | |
|         fields = ['id', 'worker', 'duty', 'certificates', 'opl']
 | |
| 
 | |
|     def create(self, validated_data):
 | |
|         opl = validated_data['opl']
 | |
|         ticket = opl.ticket
 | |
|         if ticket and ticket.state.type != 1:
 | |
|             raise ParseError('许可证已处理不可新增')
 | |
|         certificates = validated_data.pop('certificates')
 | |
|         if certificates:
 | |
|             pass
 | |
|         else:
 | |
|             certificates = list(Certificate.objects.filter(employee__user=validated_data['worker']))
 | |
|         if OplWorker.objects.filter(worker=validated_data['worker'], opl=validated_data['opl']).exists():
 | |
|             raise ParseError('该成员已加入')
 | |
|         with transaction.atomic():
 | |
|             oplw = super().create(validated_data)
 | |
|             for x in certificates:
 | |
|                 oplc = OplCert.objects.filter(opl_worker=oplw, certificate=x).first()
 | |
|                 if oplc:
 | |
|                     pass
 | |
|                 else:
 | |
|                     oplc = OplCert()
 | |
|                     oplc.opl_worker = oplw
 | |
|                     oplc.certificate = x
 | |
|                 for f in Certificate._meta.fields:
 | |
|                     if f.name not in ['id']:
 | |
|                         setattr(oplc, f.name, getattr(x, f.name, None))
 | |
|                 oplc.save()
 | |
|         return oplw
 | |
| 
 | |
| 
 | |
| class OplWorkerUpdateSerializer(CustomModelSerializer):
 | |
|     certificates = serializers.PrimaryKeyRelatedField(label='证书ID', many=True, queryset=Certificate.objects.all())
 | |
| 
 | |
|     class Meta:
 | |
|         model = OplWorker
 | |
|         fields = ['id', 'duty', 'certificates']
 | |
| 
 | |
|     def update(self, instance, validated_data):
 | |
|         certificates = validated_data.pop('certificates')
 | |
|         with transaction.atomic():
 | |
|             oplw = super().update(instance, validated_data)
 | |
|             for x in certificates:
 | |
|                 oplc = OplCert.objects.filter(opl_worker=oplw, certificate=x).first()
 | |
|                 if oplc:
 | |
|                     pass
 | |
|                 else:
 | |
|                     oplc = OplCert()
 | |
|                     oplc.opl_worker = oplw
 | |
|                     oplc.certificate = x
 | |
|                 for f in Certificate._meta.fields:
 | |
|                     if f.name not in ['id']:
 | |
|                         setattr(oplc, f.name, getattr(x, f.name, None))
 | |
|                 oplc.save()
 | |
|         return oplw
 | |
| 
 | |
| 
 | |
| class OplCertSerializer(CustomModelSerializer):
 | |
|     file_f = MyFilePathField(source='file', read_only=True)
 | |
| 
 | |
|     class Meta:
 | |
|         model = OplCert
 | |
|         fields = ['certificate', 'name', 'type', 'number', 'issue_date',
 | |
|                   'expiration_date', 'review_date', 'file', 'file_f']
 | |
| 
 | |
| 
 | |
| class OplWorkerSerializer(CustomModelSerializer):
 | |
|     worker_ = UserSimpleSerializer(source='worker', read_only=True)
 | |
|     worker_name = serializers.CharField(source='worker.name', read_only=True)
 | |
|     certificates_ = serializers.SerializerMethodField()
 | |
| 
 | |
|     class Meta:
 | |
|         model = OplWorker
 | |
|         fields = '__all__'
 | |
| 
 | |
|     def get_certificates_(self, obj):
 | |
|         cs = OplCert.objects.filter(opl_worker=obj)
 | |
|         return OplCertSerializer(instance=cs, many=True).data
 | |
| 
 | |
| 
 | |
| class GasCheckCreateUpdateSerializer(CustomModelSerializer):
 | |
|     class Meta:
 | |
|         model = GasCheck
 | |
|         exclude = EXCLUDE_FIELDS
 | |
| 
 | |
| 
 | |
| class GasCheckSerializer(CustomModelSerializer):
 | |
|     checker_ = UserSimpleSerializer(source='checker', read_only=True)
 | |
| 
 | |
|     class Meta:
 | |
|         model = GasCheck
 | |
|         fields = '__all__'
 | |
| 
 | |
| 
 | |
| class OplCreateUpdateSerializer(CustomModelSerializer):
 | |
|     id = serializers.CharField(read_only=True)
 | |
|     cate_name = serializers.CharField(source='cate.name', read_only=True)
 | |
|     cate_code = serializers.CharField(source='cate.code', read_only=True)
 | |
|     operation_name = serializers.CharField(source='operation.name', read_only=True)
 | |
| 
 | |
|     class Meta:
 | |
|         model = Opl
 | |
|         fields = ['id', 'operation', 'level', 'cate', 'start_time', 'end_time',
 | |
|                   'dept_do', 'charger', 'monitor', 'work_time', 'work_type',
 | |
|                   'accept_time', 'power', 'power_to', 'power_from',
 | |
|                   'power_end_time', 'power_start_time', 'power_days',
 | |
|                   'other_risk', 'other_emr', 'escape_route',
 | |
|                   'risks_checked', 'measures_checked', 'create_imgs', 'cate_name', 'cate_code', 'operation_name']
 | |
| 
 | |
|     def create(self, validated_data):
 | |
|         operation = validated_data['operation']
 | |
|         if operation.state == Operation.OP_DONE:
 | |
|             raise ParseError('作业已关闭不可创建许可')
 | |
|         cate = validated_data['cate']
 | |
|         if Opl.objects.filter(operation=operation, cate=cate).exclude(ticket__act_state=5).exists():
 | |
|             raise ParseError('该类有效许可证已存在,不可重复申请')
 | |
|         return super().create(validated_data)
 | |
| 
 | |
| 
 | |
| class OplSerializer(CustomModelSerializer):
 | |
|     cate_name = serializers.CharField(source='cate.name', read_only=True)
 | |
|     cate_ = OplCateSimpleSerializer(source='cate', read_only=True)
 | |
| 
 | |
|     class Meta:
 | |
|         model = Opl
 | |
|         fields = '__all__'
 | |
| 
 | |
| 
 | |
| class OplListSerializer(CustomModelSerializer):
 | |
|     cate_name = serializers.CharField(source='cate.name', read_only=True)
 | |
|     cate_code = serializers.CharField(source='cate.code', read_only=True)
 | |
|     operation_name = serializers.CharField(source='operation.name', read_only=True)
 | |
|     cate_ = OplCateSimpleSerializer(source='cate', read_only=True)
 | |
|     dept_do_ = DeptSimpleSerializer(source='dept_do', read_only=True)
 | |
|     charger_ = UserSimpleSerializer(source='charger', read_only=True)
 | |
|     monitor_ = UserSimpleSerializer(source='monitor', read_only=True)
 | |
|     ticket_ = TicketSerializer(source='ticket', read_only=True)
 | |
|     mtask_uid = serializers.SerializerMethodField()
 | |
|     
 | |
|     class Meta:
 | |
|         model = Opl
 | |
|         fields = '__all__'
 | |
|     
 | |
|     def get_mtask_uid(self, obj):
 | |
|         return cache.get('opl_' + obj.id, None)
 | |
| 
 | |
| 
 | |
| class OplDetailSerializer(CustomModelSerializer):
 | |
|     cate_name = serializers.CharField(source='cate.name', read_only=True)
 | |
|     cate_code = serializers.CharField(source='cate.code', read_only=True)
 | |
|     operation_name = serializers.CharField(source='operation.name', read_only=True)
 | |
|     operation_ = OperationDetailSerializer(source='operation', read_only=True)
 | |
|     dept_do_ = DeptSimpleSerializer(source='dept_do', read_only=True)
 | |
|     charger_ = UserSimpleSerializer(source='charger', read_only=True)
 | |
|     charger_name = serializers.CharField(source='charger.name', read_only=True)
 | |
|     monitor_name = serializers.CharField(source='monitor.name', read_only=True)
 | |
|     monitor_ = UserSimpleSerializer(source='monitor', read_only=True)
 | |
|     ticket_ = TicketSerializer(source='ticket', read_only=True)
 | |
|     risks_checked_ = serializers.SerializerMethodField()
 | |
|     measures_checked_ = serializers.SerializerMethodField()
 | |
|     close_dos_ = serializers.SerializerMethodField()
 | |
|     create_imgs_ = FileSerializer(source='create_imgs', many=True)
 | |
|     audit_imgs_ = FileSerializer(source='audit_imgs', many=True)
 | |
|     work_imgs_ = FileSerializer(source='work_imgs', many=True)
 | |
|     close_imgs_ = FileSerializer(source='close_imgs', many=True)
 | |
|     mtask_uid = serializers.SerializerMethodField()
 | |
| 
 | |
|     class Meta:
 | |
|         model = Opl
 | |
|         fields = '__all__'
 | |
| 
 | |
|     def get_risks_checked_(self, obj):
 | |
|         qs = Dictionary.objects.filter(id__in=obj.risks_checked).values('id', 'name')
 | |
|         return list(qs)
 | |
| 
 | |
|     def get_measures_checked_(self, obj):
 | |
|         qs = Dictionary.objects.filter(id__in=obj.measures_checked).values('id', 'name')
 | |
|         return list(qs)
 | |
| 
 | |
|     def get_close_dos_(self, obj):
 | |
|         qs = Dictionary.objects.filter(id__in=obj.close_dos).values('id', 'name')
 | |
|         return list(qs)
 | |
| 
 | |
|     def get_mtask_uid(self, obj):
 | |
|         return cache.get('opl_' + obj.id, None)
 | |
| 
 | |
| class OplCloseSerializer(CustomModelSerializer):
 | |
|     class Meta:
 | |
|         model = Opl
 | |
|         fields = ['close_imgs', 'close_note', 'close_dos', 'close_desc']
 |