feat: 202312证书导入功能

This commit is contained in:
caoqianming 2024-01-02 17:09:59 +08:00
parent 6d647ee574
commit 5058c17177
1 changed files with 46 additions and 0 deletions

View File

@ -10,6 +10,8 @@ from openpyxl import load_workbook
from rest_framework.serializers import Serializer
from rest_framework.permissions import AllowAny
from apps.edu.services import make_img_x
from django.db import transaction
import datetime
# Create your views here.
@ -82,3 +84,47 @@ class CertificateViewSet(CreateUpdateCustomMixin, ModelViewSet):
obj, created = Certificate.objects.update_or_create(defaults=data, 证书编号=data["证书编号"])
i = i + 1
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()