diff --git a/server/apps/edu/views.py b/server/apps/edu/views.py index d352246..95881fd 100644 --- a/server/apps/edu/views.py +++ b/server/apps/edu/views.py @@ -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()