feat: 202312证书导入功能
This commit is contained in:
parent
6d647ee574
commit
5058c17177
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue