This commit is contained in:
shijing 2024-01-02 17:33:57 +08:00
commit c3afb22541
2 changed files with 85 additions and 40 deletions

View File

@ -1,11 +1,10 @@
from django.urls import path, include from django.urls import path, include
from rest_framework import routers from rest_framework import routers
from apps.edu.views import CertificateViewSet from apps.edu.views import CertificateViewSet, CourseViewSet
API_BASE_URL = 'api/edu/' API_BASE_URL = "api/edu/"
HTML_BASE_URL = 'edu/' HTML_BASE_URL = "edu/"
router = routers.DefaultRouter() router = routers.DefaultRouter()
router.register('certificate', CertificateViewSet, basename="certificate") router.register("certificate", CertificateViewSet, basename="certificate")
urlpatterns = [ router.register("course", CourseViewSet, basename="course")
path(API_BASE_URL, include(router.urls)) urlpatterns = [path(API_BASE_URL, include(router.urls))]
]

View File

@ -10,75 +10,121 @@ from openpyxl import load_workbook
from rest_framework.serializers import Serializer from rest_framework.serializers import Serializer
from rest_framework.permissions import AllowAny from rest_framework.permissions import AllowAny
from apps.edu.services import make_img_x from apps.edu.services import make_img_x
from django.db import transaction
import datetime
# Create your views here. # Create your views here.
class CourseViewSet(CreateUpdateCustomMixin, ModelViewSet): class CourseViewSet(CreateUpdateCustomMixin, ModelViewSet):
perms_map = {'get': '*', 'post': 'course', perms_map = {"get": "*", "post": "course", "put": "course", "delete": "course"}
'put': 'course', 'delete': 'course'}
queryset = Course.objects.all() queryset = Course.objects.all()
serializer_class = CourseSerializer serializer_class = CourseSerializer
search_fields = ['name'] search_fields = ["name"]
ordering = ['create_time'] ordering = ["create_time"]
class CertificateViewSet(CreateUpdateCustomMixin, ModelViewSet): class CertificateViewSet(CreateUpdateCustomMixin, ModelViewSet):
perms_map = {'get': '*', 'post': 'certificate', perms_map = {"get": "*", "post": "certificate", "put": "certificate", "delete": "certificate"}
'put': 'certificate', 'delete': 'certificate'}
queryset = Certificate.objects.all() queryset = Certificate.objects.all()
serializer_class = CertificateSerializer serializer_class = CertificateSerializer
search_fields = ['姓名', '证书编号', '所属单位'] search_fields = ["姓名", "证书编号", "所属单位"]
filterset_fields = ['是否内审员','是否授权签字人', '是否质量负责人', '是否最高管理者', '姓名', '证书编号', '所属单位', '单位名称', '课程列表'] filterset_fields = ["是否内审员", "是否授权签字人", "是否质量负责人", "是否最高管理者", "姓名", "证书编号", "所属单位", "单位名称", "课程列表", "证书方案"]
ordering = ['-create_time', '证书编号'] ordering = ["-create_time", "证书编号"]
def get_authenticators(self): def get_authenticators(self):
if self.request.method == 'GET': if self.request.method == "GET":
return [] return []
return super().get_authenticators() return super().get_authenticators()
def get_permissions(self): def get_permissions(self):
if self.request.method == 'GET': if self.request.method == "GET":
return [AllowAny()] return [AllowAny()]
return super().get_permissions() return super().get_permissions()
def retrieve(self, request, *args, **kwargs): def retrieve(self, request, *args, **kwargs):
regen_img = request.query_params.get('regen_img', False) regen_img = request.query_params.get("regen_img", False)
instance = self.get_object() instance = self.get_object()
if not instance.证书地址 or regen_img: if not instance.证书地址 or regen_img:
make_img_x(instance) make_img_x(instance)
serializer = self.get_serializer(instance) serializer = self.get_serializer(instance)
return Response(serializer.data) return Response(serializer.data)
def make_data(self, data, sheet, i): def make_data(self, data, sheet, i):
data['证书编号'] = sheet['b'+str(i)].value data["证书编号"] = sheet["b" + str(i)].value
data['所属单位'] = sheet['c'+str(i)].value data["所属单位"] = sheet["c" + str(i)].value
data['单位名称'] = sheet['d'+str(i)].value data["单位名称"] = sheet["d" + str(i)].value
data['姓名'] = sheet['e'+str(i)].value data["姓名"] = sheet["e" + str(i)].value
data['性别'] = sheet['f'+str(i)].value data["性别"] = sheet["f" + str(i)].value
data['职务'] = sheet['g'+str(i)].value data["职务"] = sheet["g" + str(i)].value
data['手机号'] = sheet['h'+str(i)].value data["手机号"] = sheet["h" + str(i)].value
data['是否内审员'] = True if sheet['i'+str(i)].value else False data["是否内审员"] = True if sheet["i" + str(i)].value else False
data['是否授权签字人'] = True if sheet['j'+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["k" + str(i)].value else False
data['是否最高管理者'] = True if sheet['l'+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["m" + str(i)].value else False
data['是否需要北京标研培训合格'] = True if sheet['n'+str(i)].value else False data["是否需要北京标研培训合格"] = True if sheet["n" + str(i)].value else False
return data return data
@action(methods=['post'], detail=False, perms_map = {'post':'certificate'}, serializer_class=Serializer) @action(methods=["post"], detail=False, perms_map={"post": "certificate"}, serializer_class=Serializer)
def imp(self, request, *args, **kwargs): def imp(self, request, *args, **kwargs):
"""导入表格 """导入表格
导入表格 导入表格
""" """
path = request.data.get('path', '') path = request.data.get("path", "")
full_path = settings.BASE_DIR + path full_path = settings.BASE_DIR + path
if not path.endswith('.xlsx'): if not path.endswith(".xlsx"):
raise ParseError('请提供xlsx格式文件') raise ParseError("请提供xlsx格式文件")
wb = load_workbook(full_path, data_only=True) wb = load_workbook(full_path, data_only=True)
sheet = wb.worksheets[0] sheet = wb.worksheets[0]
i = 3 i = 3
while sheet['b'+str(i)].value: while sheet["b" + str(i)].value:
data = {} data = {}
data = self.make_data(data, sheet, i) data = self.make_data(data, sheet, i)
obj, created = Certificate.objects.update_or_create(defaults=data, 证书编号=data['证书编号']) obj, created = Certificate.objects.update_or_create(defaults=data, 证书编号=data["证书编号"])
i = i + 1 i = i + 1
return Response() return Response()
@action(methods=["post"], detail=False, perms_map={"post": "certificate"}, serializer_class=Serializer)
@transaction.atomic
def imp_202312(self, request, *args, **kwargs):
"""导入202312版本表格
导入表格
"""
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]
courses_str = sheet["b1"].value
courses = courses_str.split("")
courses_list = []
for course in courses:
try:
course_obj = Course.objects.get(name=course)
courses_list.append(course_obj.id)
except Course.DoesNotExist:
raise ParseError("课程不存在")
att_date = sheet["b2"].value
att_date2 = sheet["b3"].value
issue_date = sheet["b4"].value
i = 6
while sheet[f"a{i}"].value:
number = sheet[f"a{i}"].value.replace("\n", "").replace(" ", "")
name = sheet[f"b{i}"].value.replace("\n", "").replace(" ", "")
print(number)
obj, created = Certificate.objects.update_or_create(
defaults={
"证书编号": number,
"姓名": name,
"培训日期": att_date,
"培训结束日期": att_date2,
"发证日期": issue_date,
},
证书编号=number,
)
obj.课程列表.set(Course.objects.filter(id__in=courses_list))
i += 1
return Response()