diff --git a/apps/pm/models.py b/apps/pm/models.py index 82f1d699..975597b4 100644 --- a/apps/pm/models.py +++ b/apps/pm/models.py @@ -1,6 +1,8 @@ from django.db import models from apps.utils.models import CommonADModel, CommonBDModel, BaseModel from apps.mtm.models import Material, Mgroup, RoutePack, Route +from datetime import datetime +from django.db.models import Max # Create your models here. @@ -52,6 +54,18 @@ class Utask(CommonBDModel): start_date = models.DateField('计划开工日期') end_date = models.DateField('计划完工日期') + @classmethod + def get_a_number(cls): + today_str = datetime.now().strftime('%Y%m%d') + prefix = "RW" + last_record = Utask.objects.filter(number__startswith=f"{prefix}-{today_str}") \ + .aggregate(Max('number'))['number__max'] + if last_record: + last_number = int(last_record.split('-')[-1]) + 1 + else: + last_number = 1 + return f"{prefix}-{today_str}-{last_number:02d}" + class Mtask(CommonADModel): """ diff --git a/apps/pm/serializers.py b/apps/pm/serializers.py index 5bea0059..0eb28dfa 100644 --- a/apps/pm/serializers.py +++ b/apps/pm/serializers.py @@ -24,7 +24,12 @@ class UtaskSerializer(CustomModelSerializer): class Meta: model = Utask fields = '__all__' + read_only_fields = ["number"] + def create(self, validated_data): + validated_data["number"] = Utask.get_a_number() + return super().create(validated_data) + def validate(self, attrs): end_date = attrs['end_date'] start_date = attrs['start_date'] @@ -42,8 +47,7 @@ class UtaskSerializer(CustomModelSerializer): def update(self, instance, validated_data): if instance.state != Utask.UTASK_CREATED: raise ValidationError('任务非创建中不可编辑') - new_data = {key: validated_data[key] for key in [ - 'number', 'count', 'start_date', 'end_date']} + new_data = {key: validated_data[key] for key in ['count', 'start_date', 'end_date']} return super().update(instance, new_data)