feat: 获取相关任务的第一道工序日志

This commit is contained in:
caoqianming 2023-10-23 10:30:49 +08:00
parent ebd9c96300
commit 53b38d7cc4
2 changed files with 24 additions and 16 deletions

View File

@ -78,6 +78,10 @@ class WMaterialSerializer(CustomModelSerializer):
class MlogSerializer(CustomModelSerializer): class MlogSerializer(CustomModelSerializer):
mgroup_name = serializers.CharField(
source='mtask.mgroup.name', read_only=True)
mtask_count = serializers.IntegerField(
source='mtask.count', read_only=True)
create_by_name = serializers.CharField( create_by_name = serializers.CharField(
source='create_by.name', read_only=True) source='create_by.name', read_only=True)
update_by_name = serializers.CharField( update_by_name = serializers.CharField(
@ -116,3 +120,8 @@ class MlogSerializer(CustomModelSerializer):
if mtask.state != Mtask.MTASK_ASSGINED: if mtask.state != Mtask.MTASK_ASSGINED:
raise ValidationError(f'{mtask.mgroup.name}_不可提交日志!') raise ValidationError(f'{mtask.mgroup.name}_不可提交日志!')
return attrs return attrs
class MlogRelatedSerializer(serializers.Serializer):
mtask = serializers.PrimaryKeyRelatedField(
label='小任务ID', queryset=Mtask.objects.all())

View File

@ -12,7 +12,7 @@ from apps.utils.mixins import BulkCreateModelMixin
from .filters import SfLogExpFilter, SfLogFilter from .filters import SfLogExpFilter, SfLogFilter
from .models import SfLog, SfLogExp, StLog, WMaterial, Mlog from .models import SfLog, SfLogExp, StLog, WMaterial, Mlog
from .serializers import SflogExpSerializer, SfLogSerializer, StLogSerializer, WMaterialSerializer, MlogSerializer from .serializers import SflogExpSerializer, SfLogSerializer, StLogSerializer, WMaterialSerializer, MlogSerializer, MlogRelatedSerializer
# Create your views here. # Create your views here.
@ -114,29 +114,28 @@ class MlogViewSet(CustomModelViewSet):
raise ParseError('任务已提交日志不可变动') raise ParseError('任务已提交日志不可变动')
return super().perform_destroy(instance) return super().perform_destroy(instance)
@action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=MtaskDaySerializer) @action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=MlogRelatedSerializer)
@transaction.atomic @transaction.atomic
def day(self, request): def related_first(self, request):
"""获取指定车间指定日期的第一道工序日志 """获取相关任务的第一道工序日志
获取指定车间指定日期的第一道工序日志 获取相关任务的第一道工序日志
""" """
sr = MtaskDaySerializer(data=request.data) sr = MlogRelatedSerializer(data=request.data)
sr.is_valid(raise_exception=True) sr.is_valid(raise_exception=True)
vdata = sr.validated_data vdata = sr.validated_data
mtasks = Mtask.objects.filter(mgroup__belong_dept__name=vdata['belong_dept_name'], start_date__lte=vdata['date'], end_date__gte=vdata['date']).order_by( mtask = vdata['mtask']
'utask', 'mgroup__process__sort', 'create_time' if mtask.utask:
) mtasks = mtask.related
data = MtaskSerializer(instance=mtasks, many=True).data mlogs = Mlog.objects.filter(mtask__in=mtasks).order_by(
'mtask__mgroup__process__sort', 'batch', 'create_time')
data = MlogSerializer(instance=mlogs, many=True).data
res_data = [] res_data = []
len_data = len(data)
for ind, val in enumerate(data): for ind, val in enumerate(data):
if val['utask'] is None: if ind == 0:
res_data.append(val) res_data.append(val)
elif ind > 1: else:
before = data[ind-1] before = data[ind-1]
if val['utask'] != before['utask']: if val['batch'] != before['batch']:
res_data.append(before)
elif ind == len_data - 1:
res_data.append(val) res_data.append(val)
return Response(res_data) return Response(res_data)