diff --git a/server/apps/supervision/serializers.py b/server/apps/supervision/serializers.py index a96cb31..26ca182 100644 --- a/server/apps/supervision/serializers.py +++ b/server/apps/supervision/serializers.py @@ -3,6 +3,7 @@ from rest_framework import serializers from .models import * from apps.system.serializers import OrganizationSerializer,FileListSerializer,UserSimpleSerializer,OrganizationSimpleSerializer, FileSimpleSerializer from rest_framework.exceptions import ParseError +import datetime class ContentSerializer(serializers.ModelSerializer): @@ -161,14 +162,39 @@ class PgoalDeptSerializer(serializers.ModelSerializer): attrs['year'] = task2do.task2.year attrs['belong_dept'] = task2do.belong_dept return attrs + +class DateField(serializers.Field): + def to_internal_value(self, value): + if isinstance(value, datetime.datetime): + return value + elif isinstance(value, datetime.date): + return value + try: + date_obj = datetime.datetime.strptime(value, '%Y-%m-%d %H:%M:%S').date() + except ValueError: + try: + date_obj = datetime.datetime.strptime(value, '%Y-%m-%d').date() + except ValueError: + raise serializers.ValidationError("日期格式错误") + return date_obj + + def to_representation(self, value): + if isinstance(value, datetime.date): + value = value.strftime('%Y-%m-%d') + return super().to_representation(value) class RcSerializer(ValidateMixin, serializers.ModelSerializer): - + # date_issue = DateField(required=False, allow_null=True) + # date_accept = DateField(required=False, allow_null=True) + # date_expect = DateField(required=False, allow_null=True) class Meta(BaseMeta): model = Rc + class ComplaintSerializer(ValidateMixin, serializers.ModelSerializer): + # date_occurrence = DateField() + # date_feedback = DateField() class Meta(BaseMeta): model = Complaint @@ -183,7 +209,7 @@ class RiskSerializer(ValidateMixin, serializers.ModelSerializer): model = Risk class OinspectSerializer(ValidateMixin, serializers.ModelSerializer): - + # date_inspect = DateField() class Meta(BaseMeta): model = Oinspect diff --git a/server/apps/supervision/views.py b/server/apps/supervision/views.py index b79ca3c..726506a 100644 --- a/server/apps/supervision/views.py +++ b/server/apps/supervision/views.py @@ -12,6 +12,7 @@ from rest_framework.response import Response from rest_framework.viewsets import GenericViewSet, ModelViewSet from utils.pagination import PageOrNot from openpyxl import load_workbook +import datetime from apps.system.mixins import CreateUpdateCustomMixin from apps.system.models import Organization @@ -601,6 +602,21 @@ class PgoalDeptViewSet(Domixin, CreateUpdateCustomMixin, ModelViewSet): self.countup_task2do(instance.task2do) class ImpMixin: + def format_date(self, ind, val): + new_val = val + if isinstance(val, datetime.datetime): + new_val = val.date() + elif isinstance(val, datetime.date): + new_val = val + elif isinstance(val, str): + try: + new_val = datetime.datetime.strptime(val, '%Y-%m-%d').date() + except ValueError: + raise ParseError(f'第{ind}行, 日期时间格式错误') + else: + raise ParseError(f'第{ind}行, 日期时间格式错误') + return new_val + def get_enum(self, val, atuple, ind): for i in atuple: if i[1] == val: @@ -659,12 +675,12 @@ class RcViewSet(ImpMixin, Domixin, CreateUpdateCustomMixin, ModelViewSet): data['number'] = sheet['b'+str(i)].value data['number_correct'] = sheet['c'+str(i)].value data['reason_error'] = sheet['d'+str(i)].value - data['date_issue'] = sheet['e'+str(i)].value + data['date_issue'] = self.format_date(i, sheet['e'+str(i)].value) else: data['number'] = sheet['b'+str(i)].value - data['date_accept'] = sheet['c'+str(i)].value - data['date_expect'] = sheet['d'+str(i)].value - data['date_issue'] = sheet['e'+str(i)].value + data['date_accept'] = self.format_date(i, sheet['c'+str(i)].value) + data['date_expect'] = self.format_date(i, sheet['d'+str(i)].value) + data['date_issue'] = self.format_date(i, sheet['e'+str(i)].value) data['remark'] = sheet['f'+str(i)].value return data @@ -700,9 +716,9 @@ class ComplaintViewSet(ImpMixin, Domixin, CreateUpdateCustomMixin, ModelViewSet) def make_data(self, data, sheet, i, etype): data['complainant'] = sheet['b'+str(i)].value - data['date_occurrence'] = sheet['c'+str(i)].value + data['date_occurrence'] = self.format_date(i, sheet['c'+str(i)].value) data['content'] = sheet['d'+str(i)].value - data['date_feedback'] = sheet['e'+str(i)].value + data['date_feedback'] = self.format_date(i, sheet['e'+str(i)].value) data['is_satisfied'] = True if sheet['f'+str(i)].value == '是' else False return data @@ -780,7 +796,7 @@ class OinspectViewSet(ImpMixin, Domixin, CreateUpdateCustomMixin, ModelViewSet): def make_data(self, data, sheet, i, etype): data['cate'] = self.get_enum(sheet['b'+str(i)].value, Oinspect.oinspect_cate_choices, i) data['checker'] = sheet['c'+str(i)].value - data['date_inspect'] = sheet['d'+str(i)].value + data['date_inspect'] = self.format_date(i, sheet['d'+str(i)].value) data['result'] = sheet['e'+str(i)].value return data