feat: utask mtask增加状态以及相关逻辑
This commit is contained in:
parent
6b53b68e0c
commit
4cea056955
|
@ -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='状态'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -13,12 +13,14 @@ class Utask(CommonBDModel):
|
||||||
UTASK_DECOMPOSE = 14
|
UTASK_DECOMPOSE = 14
|
||||||
UTASK_ASSGINED = 20
|
UTASK_ASSGINED = 20
|
||||||
UTASK_WORKING = 30
|
UTASK_WORKING = 30
|
||||||
|
UTASK_STOP = 34
|
||||||
UTASK_DONE = 40
|
UTASK_DONE = 40
|
||||||
UTASK_STATES = (
|
UTASK_STATES = (
|
||||||
(UTASK_CREATED, '创建中'),
|
(UTASK_CREATED, '创建中'),
|
||||||
(UTASK_DECOMPOSE, '已分解'),
|
(UTASK_DECOMPOSE, '已分解'),
|
||||||
(UTASK_ASSGINED, '已下达'),
|
(UTASK_ASSGINED, '已下达'),
|
||||||
(UTASK_WORKING, '生产中'),
|
(UTASK_WORKING, '生产中'),
|
||||||
|
(UTASK_STOP, '已停止'),
|
||||||
(UTASK_DONE, '已提交')
|
(UTASK_DONE, '已提交')
|
||||||
)
|
)
|
||||||
state = models.PositiveIntegerField(
|
state = models.PositiveIntegerField(
|
||||||
|
@ -44,12 +46,12 @@ class Mtask(CommonADModel):
|
||||||
"""
|
"""
|
||||||
MTASK_CREATED = 10
|
MTASK_CREATED = 10
|
||||||
MTASK_ASSGINED = 20
|
MTASK_ASSGINED = 20
|
||||||
MTASK_WORKING = 30
|
MTASK_STOP = 34
|
||||||
MTASK_DONE = 40
|
MTASK_DONE = 40
|
||||||
MTASK_STATES = (
|
MTASK_STATES = (
|
||||||
(MTASK_CREATED, '创建中'),
|
(MTASK_CREATED, '创建中'),
|
||||||
(MTASK_ASSGINED, '已下达'),
|
(MTASK_ASSGINED, '已下达'),
|
||||||
(MTASK_WORKING, '生产中'),
|
(MTASK_STOP, '已停止'),
|
||||||
(MTASK_DONE, '已提交')
|
(MTASK_DONE, '已提交')
|
||||||
)
|
)
|
||||||
state = models.PositiveIntegerField(
|
state = models.PositiveIntegerField(
|
||||||
|
@ -68,7 +70,7 @@ class Mtask(CommonADModel):
|
||||||
start_date = models.DateField('计划开工日期')
|
start_date = models.DateField('计划开工日期')
|
||||||
end_date = models.DateField('计划完工日期')
|
end_date = models.DateField('计划完工日期')
|
||||||
utask = models.ForeignKey(
|
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
|
@property
|
||||||
def related(self):
|
def related(self):
|
||||||
|
|
|
@ -11,6 +11,7 @@ from .filters import MtaskFilter, UtaskFilter
|
||||||
from .models import Mtask, Utask
|
from .models import Mtask, Utask
|
||||||
from .serializers import MtaskSerializer, SchedueSerializer, UtaskSerializer, MtaskDaySerializer
|
from .serializers import MtaskSerializer, SchedueSerializer, UtaskSerializer, MtaskDaySerializer
|
||||||
from .services import PmService
|
from .services import PmService
|
||||||
|
from django.utils import timezone
|
||||||
|
|
||||||
# Create your views here.
|
# Create your views here.
|
||||||
|
|
||||||
|
@ -27,6 +28,33 @@ class UtaskViewSet(CustomModelViewSet):
|
||||||
select_related_fields = ['material']
|
select_related_fields = ['material']
|
||||||
ordering = ['-start_date']
|
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)
|
@action(methods=['post'], detail=False, perms_map={'post': 'utask.schedue'}, serializer_class=SchedueSerializer)
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
def schedue_utasks(self, request, *args, **kwargs):
|
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)
|
@action(methods=['post'], detail=False, perms_map={'post': 'utask.assgin'}, serializer_class=PkSerializer)
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
def assgin(self, request):
|
def assgin(self, request, *args, **kwargs):
|
||||||
"""下达任务
|
"""下达任务
|
||||||
|
|
||||||
下达任务
|
下达任务
|
||||||
"""
|
"""
|
||||||
ids = request.data.get('ids', [])
|
ids = request.data.get('ids', [])
|
||||||
|
user = request.user
|
||||||
|
now = timezone.now()
|
||||||
utasks = Utask.objects.filter(
|
utasks = Utask.objects.filter(
|
||||||
id__in=ids, state=Utask.UTASK_DECOMPOSE) # 已分解的任务
|
id__in=ids, state=Utask.UTASK_DECOMPOSE) # 已分解的任务
|
||||||
Mtask.objects.filter(utask__in=utasks, state=Mtask.MTASK_CREATED).update(
|
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(
|
utasks.update(
|
||||||
state=Utask.UTASK_ASSGINED)
|
state=Utask.UTASK_ASSGINED, update_by=user, update_time=now)
|
||||||
# 此处要更新订单状态
|
# 此处要更新订单状态
|
||||||
from apps.sam.models import OrderItem, Order
|
from apps.sam.models import OrderItem, Order
|
||||||
orderIds = OrderItem.objects.filter(
|
orderIds = OrderItem.objects.filter(
|
||||||
|
|
|
@ -100,7 +100,7 @@ class MlogSerializer(CustomModelSerializer):
|
||||||
if not WMaterial.objects.filter(batch=batch).exists():
|
if not WMaterial.objects.filter(batch=batch).exists():
|
||||||
raise ValidationError('批次号不存在')
|
raise ValidationError('批次号不存在')
|
||||||
if Mlog.objects.filter(mtask=mtask, batch=batch, handle_date=handle_date, handle_user=handle_user).exists():
|
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)
|
return super().create(validated_data)
|
||||||
|
|
||||||
def update(self, instance, validated_data):
|
def update(self, instance, validated_data):
|
||||||
|
|
|
@ -165,7 +165,6 @@ def update_mtask(mtask: Mtask):
|
||||||
utask.count_notok = res2['sum_count_notok'] if res2['sum_count_notok'] else 0
|
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:
|
if utask.count_ok > 0 and utask.state == Utask.UTASK_ASSGINED:
|
||||||
utask.state = Utask.UTASK_WORKING
|
utask.state = Utask.UTASK_WORKING
|
||||||
utask.save()
|
|
||||||
if Mtask.objects.filter(utask=utask).exclude(state=Mtask.MTASK_DONE).count() == 0:
|
if Mtask.objects.filter(utask=utask).exclude(state=Mtask.MTASK_DONE).count() == 0:
|
||||||
utask.state = Mtask.MTASK_DONE
|
utask.state = Mtask.MTASK_DONE
|
||||||
utask.save()
|
utask.save()
|
||||||
|
|
Loading…
Reference in New Issue