94 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Python
		
	
	
	
from django.shortcuts import render
 | 
						|
from rest_framework.viewsets import GenericViewSet, ModelViewSet
 | 
						|
from apps.system.mixins import CreateUpdateCustomMixin
 | 
						|
from apps.edu.serializers import CertificateSerializer
 | 
						|
from apps.edu.models import Certificate
 | 
						|
from rest_framework.decorators import action
 | 
						|
from django.db import transaction
 | 
						|
from django.conf import settings
 | 
						|
from rest_framework.exceptions import ParseError
 | 
						|
from rest_framework.response import Response
 | 
						|
from openpyxl import load_workbook
 | 
						|
from apps.edu.services import make_img
 | 
						|
from rest_framework.serializers import Serializer
 | 
						|
from django.db import transaction
 | 
						|
from rest_framework.permissions import AllowAny
 | 
						|
# Create your views here.
 | 
						|
 | 
						|
class CertificateViewSet(CreateUpdateCustomMixin, ModelViewSet):
 | 
						|
    perms_map = {'get': '*', 'post': 'certificate',
 | 
						|
                 'put': 'certificate', 'delete': 'certificate'}
 | 
						|
    queryset = Certificate.objects.all()
 | 
						|
    serializer_class = CertificateSerializer
 | 
						|
    pagination_class = None
 | 
						|
    search_fields = ['姓名', '证书编号', '所属单位']
 | 
						|
    filterset_fields = ['是否内审员','是否授权签字人', '是否质量负责人', '是否最高管理者', '姓名', '证书编号', '所属单位']
 | 
						|
    ordering = ['-create_time']
 | 
						|
 | 
						|
    def get_authenticators(self):
 | 
						|
        if self.request.method == 'GET':
 | 
						|
            return []
 | 
						|
        return super().get_authenticators()
 | 
						|
    
 | 
						|
    def get_permissions(self):
 | 
						|
        if self.request.method == 'GET':
 | 
						|
            return [AllowAny()]
 | 
						|
        return super().get_permissions()
 | 
						|
 | 
						|
    def retrieve(self, request, *args, **kwargs):
 | 
						|
        regen_img = request.query_params.get('regen_img', False)
 | 
						|
        instance = self.get_object()
 | 
						|
        if not instance.证书地址 or regen_img:
 | 
						|
            titles = []
 | 
						|
            if instance.是否内审员:
 | 
						|
                titles.append('内审员')
 | 
						|
            if instance.是否授权签字人:
 | 
						|
                titles.append('授权签字人')
 | 
						|
            if instance.是否质量负责人:
 | 
						|
                titles.append('质量负责人')
 | 
						|
            if instance.是否最高管理者:
 | 
						|
                titles.append('最高管理者')
 | 
						|
            instance.证书地址 = make_img(instance.证书编号, instance.姓名, '、'.join(titles))
 | 
						|
            instance.save()
 | 
						|
        serializer = self.get_serializer(instance)
 | 
						|
        return Response(serializer.data)
 | 
						|
    
 | 
						|
    def make_data(self, data, sheet, i):
 | 
						|
        data['证书编号'] = sheet['b'+str(i)].value
 | 
						|
        data['所属单位'] = sheet['c'+str(i)].value
 | 
						|
        data['单位名称'] = sheet['d'+str(i)].value
 | 
						|
        data['姓名'] = sheet['e'+str(i)].value
 | 
						|
        data['性别'] = sheet['f'+str(i)].value
 | 
						|
        data['职务'] = sheet['g'+str(i)].value
 | 
						|
        data['手机号'] = sheet['h'+str(i)].value
 | 
						|
        data['是否内审员'] = True if sheet['i'+str(i)].value else False
 | 
						|
        data['是否授权签字人'] = True if sheet['j'+str(i)].value else False
 | 
						|
        data['是否质量负责人'] = True if sheet['k'+str(i)].value else False
 | 
						|
        data['是否最高管理者'] = True if sheet['l'+str(i)].value else False
 | 
						|
        data['是否需要集团证书'] = True if sheet['m'+str(i)].value else False
 | 
						|
        data['是否需要北京标研培训合格'] = True if sheet['n'+str(i)].value else False
 | 
						|
        return data
 | 
						|
 | 
						|
    @action(methods=['post'], detail=False, perms_map = {'post':'certificate'}, serializer_class=Serializer)
 | 
						|
    def imp(self, request, *args, **kwargs):
 | 
						|
        """导入表格
 | 
						|
 | 
						|
        导入表格
 | 
						|
        """
 | 
						|
        path = request.data.get('path', '')
 | 
						|
        full_path = settings.BASE_DIR + path
 | 
						|
        if not path.endswith('.xlsx'):
 | 
						|
            raise ParseError('请提供xlsx格式文件')
 | 
						|
        wb = load_workbook(full_path, data_only=True)
 | 
						|
        sheet = wb.worksheets[0]
 | 
						|
        i = 3
 | 
						|
        while sheet['b'+str(i)].value:
 | 
						|
            data = {}
 | 
						|
            data = self.make_data(data, sheet, i)
 | 
						|
            obj, created = Certificate.objects.update_or_create(defaults=data, 证书编号=data['证书编号'])
 | 
						|
            # if created:
 | 
						|
            #     print(f'已创建证书-{data["姓名"]}-{data["证书编号"]}')
 | 
						|
            # else:
 | 
						|
            #     print(f'已更新证书-{data["姓名"]}-{data["证书编号"]}')
 | 
						|
            i = i + 1
 | 
						|
        return Response() |