feat: utask mtask增加状态以及相关逻辑

This commit is contained in:
caoqianming 2023-10-26 16:25:04 +08:00
parent 6b53b68e0c
commit 4cea056955
5 changed files with 63 additions and 9 deletions

View File

@ -0,0 +1,23 @@
# Generated by Django 3.2.12 on 2023-10-26 08:24
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('pm', '0011_alter_utask_state'),
]
operations = [
migrations.AlterField(
model_name='mtask',
name='state',
field=models.PositiveIntegerField(choices=[(10, '创建中'), (20, '已下达'), (34, '已停止'), (40, '已提交')], default=10, help_text="((10, '创建中'), (20, '已下达'), (34, '已停止'), (40, '已提交'))", verbose_name='状态'),
),
migrations.AlterField(
model_name='utask',
name='state',
field=models.PositiveIntegerField(choices=[(10, '创建中'), (14, '已分解'), (20, '已下达'), (30, '生产中'), (34, '已停止'), (40, '已提交')], default=10, help_text="((10, '创建中'), (14, '已分解'), (20, '已下达'), (30, '生产中'), (34, '已停止'), (40, '已提交'))", verbose_name='状态'),
),
]

View File

@ -13,12 +13,14 @@ class Utask(CommonBDModel):
UTASK_DECOMPOSE = 14
UTASK_ASSGINED = 20
UTASK_WORKING = 30
UTASK_STOP = 34
UTASK_DONE = 40
UTASK_STATES = (
(UTASK_CREATED, '创建中'),
(UTASK_DECOMPOSE, '已分解'),
(UTASK_ASSGINED, '已下达'),
(UTASK_WORKING, '生产中'),
(UTASK_STOP, '已停止'),
(UTASK_DONE, '已提交')
)
state = models.PositiveIntegerField(
@ -44,12 +46,12 @@ class Mtask(CommonADModel):
"""
MTASK_CREATED = 10
MTASK_ASSGINED = 20
MTASK_WORKING = 30
MTASK_STOP = 34
MTASK_DONE = 40
MTASK_STATES = (
(MTASK_CREATED, '创建中'),
(MTASK_ASSGINED, '已下达'),
(MTASK_WORKING, '生产中'),
(MTASK_STOP, '已停止'),
(MTASK_DONE, '已提交')
)
state = models.PositiveIntegerField(
@ -68,7 +70,7 @@ class Mtask(CommonADModel):
start_date = models.DateField('计划开工日期')
end_date = models.DateField('计划完工日期')
utask = models.ForeignKey(
Utask, verbose_name='关联大任务', on_delete=models.CASCADE, null=True, blank=True, related_name='mtask_utask')
Utask, verbose_name='关联大任务', on_delete=models.CASCADE, related_name='mtask_utask', null=True, blank=True)
@property
def related(self):

View File

@ -11,6 +11,7 @@ from .filters import MtaskFilter, UtaskFilter
from .models import Mtask, Utask
from .serializers import MtaskSerializer, SchedueSerializer, UtaskSerializer, MtaskDaySerializer
from .services import PmService
from django.utils import timezone
# Create your views here.
@ -27,6 +28,33 @@ class UtaskViewSet(CustomModelViewSet):
select_related_fields = ['material']
ordering = ['-start_date']
def perform_destroy(self, instance):
if instance.state >= Utask.UTASK_WORKING:
raise ParseError('该任务状态不可删除')
return super().perform_destroy(instance)
@action(methods=['post'], detail=True, perms_map={'post': 'utask.stop'}, serializer_class=Serializer)
@transaction.atomic
def stop(self, request, *args, ):
"""停止任务
停止任务
"""
obj = self.get_object()
user = request.user
now = timezone.now()
if obj.state == Utask.UTASK_WORKING:
obj.state = Utask.UTASK_STOP
obj.update_by = user
obj.update_time = now
obj.save()
# 停止所有小任务
Mtask.objects.filter(
utask=obj, state=Mtask.MTASK_ASSGINED).update(state=Mtask.MTASK_STOP, update_by=user, update_time=now)
else:
raise ParseError('该状态下不可停止')
return Response()
@action(methods=['post'], detail=False, perms_map={'post': 'utask.schedue'}, serializer_class=SchedueSerializer)
@transaction.atomic
def schedue_utasks(self, request, *args, **kwargs):
@ -59,18 +87,20 @@ class UtaskViewSet(CustomModelViewSet):
@action(methods=['post'], detail=False, perms_map={'post': 'utask.assgin'}, serializer_class=PkSerializer)
@transaction.atomic
def assgin(self, request):
def assgin(self, request, *args, **kwargs):
"""下达任务
下达任务
"""
ids = request.data.get('ids', [])
user = request.user
now = timezone.now()
utasks = Utask.objects.filter(
id__in=ids, state=Utask.UTASK_DECOMPOSE) # 已分解的任务
Mtask.objects.filter(utask__in=utasks, state=Mtask.MTASK_CREATED).update(
state=Mtask.MTASK_ASSGINED)
state=Mtask.MTASK_ASSGINED, update_by=user, update_time=now)
utasks.update(
state=Utask.UTASK_ASSGINED)
state=Utask.UTASK_ASSGINED, update_by=user, update_time=now)
# 此处要更新订单状态
from apps.sam.models import OrderItem, Order
orderIds = OrderItem.objects.filter(

View File

@ -100,7 +100,7 @@ class MlogSerializer(CustomModelSerializer):
if not WMaterial.objects.filter(batch=batch).exists():
raise ValidationError('批次号不存在')
if Mlog.objects.filter(mtask=mtask, batch=batch, handle_date=handle_date, handle_user=handle_user).exists():
raise ValidationError('存在相同的日志记录')
raise ValidationError('存在相同的日志记录')
return super().create(validated_data)
def update(self, instance, validated_data):

View File

@ -165,7 +165,6 @@ def update_mtask(mtask: Mtask):
utask.count_notok = res2['sum_count_notok'] if res2['sum_count_notok'] else 0
if utask.count_ok > 0 and utask.state == Utask.UTASK_ASSGINED:
utask.state = Utask.UTASK_WORKING
utask.save()
if Mtask.objects.filter(utask=utask).exclude(state=Mtask.MTASK_DONE).count() == 0:
utask.state = Mtask.MTASK_DONE
utask.save()
utask.save()