diff --git a/apps/pm/migrations/0016_auto_20231130_1628.py b/apps/pm/migrations/0016_auto_20231130_1628.py new file mode 100644 index 00000000..fa8412a4 --- /dev/null +++ b/apps/pm/migrations/0016_auto_20231130_1628.py @@ -0,0 +1,26 @@ +# Generated by Django 3.2.12 on 2023-11-30 08:28 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('pm', '0015_utask_count_day'), + ] + + operations = [ + migrations.AddField( + model_name='mtask', + name='submit_time', + field=models.DateTimeField(blank=True, null=True, verbose_name='提交时间'), + ), + migrations.AddField( + model_name='mtask', + name='submit_user', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='mtask_submit_user', to=settings.AUTH_USER_MODEL, verbose_name='提交人'), + ), + ] diff --git a/apps/pm/models.py b/apps/pm/models.py index 770ffca2..b3022d7c 100644 --- a/apps/pm/models.py +++ b/apps/pm/models.py @@ -75,6 +75,10 @@ class Mtask(CommonADModel): Utask, verbose_name='关联大任务', on_delete=models.CASCADE, related_name='mtask_utask', null=True, blank=True) peifen_kg = models.FloatField('配粉料数', default=0) + submit_time = models.DateTimeField('提交时间', null=True, blank=True) + submit_user = models.ForeignKey( + 'system.user', verbose_name='提交人', on_delete=models.CASCADE, null=True, blank=True, related_name='mtask_submit_user') + @property def related(self): """ diff --git a/apps/pm/services.py b/apps/pm/services.py index e96e9512..fce4ff6a 100644 --- a/apps/pm/services.py +++ b/apps/pm/services.py @@ -251,14 +251,14 @@ class PmService: change_order_state_when_schedue(orderitemIds) @classmethod - def mtasks_submit(cls, mtasks: QuerySet[Mtask], user: User): + def mtask_submit(cls, mtask: Mtask, user: User): """ 锁定生产任务 """ from apps.wpm.models import Mlog from apps.wpm.services import mlog_submit, update_mtask now = timezone.now() - for mtask in mtasks: + if mtask.state == Mtask.MTASK_ASSGINED: mlogs = Mlog.objects.filter(mtask=mtask) if mlogs.count() == 0: raise ParseError(f'{mtask.mgroup.name}_未填写日志') @@ -266,4 +266,8 @@ class PmService: mlog_submit(mlog, user, now) update_mtask(mtask) mtask.state = Mtask.MTASK_DONE + mtask.submit_time = now + mtask.submit_user = user mtask.save() + else: + raise ParseError('该任务状态不可提交') diff --git a/apps/pm/views.py b/apps/pm/views.py index 565e26a3..0725254f 100644 --- a/apps/pm/views.py +++ b/apps/pm/views.py @@ -167,10 +167,7 @@ class MtaskViewSet(CustomModelViewSet): """ mtask: Mtask = self.get_object() user = request.user - if mtask.state == Mtask.MTASK_ASSGINED: - PmService.mtasks_submit(Mtask.objects.filter(id=mtask.id), user) - else: - raise ParseError('该任务状态不可提交') + PmService.mtask_submit(mtask, user) return Response() @action(methods=['post'], detail=True, perms_map={'post': 'mtask.submit'}, serializer_class=Serializer) @@ -182,5 +179,6 @@ class MtaskViewSet(CustomModelViewSet): """ mtask = self.get_object() mtasks = mtask.related - PmService.mtasks_submit(mtasks) + for mtask in mtasks: + PmService.mtask_submit(mtask, self.request.user) return Response() diff --git a/apps/wpm/services.py b/apps/wpm/services.py index b066a1a2..5c561f4d 100644 --- a/apps/wpm/services.py +++ b/apps/wpm/services.py @@ -187,7 +187,7 @@ def mlog_submit(mlog: Mlog, user: User, now: Union[datetime.datetime, None]): def update_mtask(mtask: Mtask): from apps.pm.models import Utask - res = Mlog.objects.filter(mtask=mtask).aggregate(sum_count_real=Sum( + res = Mlog.objects.filter(mtask=mtask).exclude(submit_time=None).aggregate(sum_count_real=Sum( 'count_real'), sum_count_ok=Sum('count_ok'), sum_count_notok=Sum('count_notok')) mtask.count_real = res['sum_count_real'] if res['sum_count_real'] else 0 mtask.count_ok = res['sum_count_ok'] if res['sum_count_ok'] else 0 @@ -203,7 +203,7 @@ def update_mtask(mtask: Mtask): if utask.count_ok > 0 and utask.state == Utask.UTASK_ASSGINED: utask.state = Utask.UTASK_WORKING if Mtask.objects.filter(utask=utask).exclude(state=Mtask.MTASK_DONE).count() == 0: - utask.state = Mtask.MTASK_DONE + utask.state = Utask.UTASK_DONE utask.save()