diff --git a/apps/wpm/services.py b/apps/wpm/services.py index 8725c4b5..3b881029 100644 --- a/apps/wpm/services.py +++ b/apps/wpm/services.py @@ -265,6 +265,12 @@ def mlog_submit(mlog: Mlog, user: User, now: Union[datetime.datetime, None]): mlog.stored_mgroup = stored_mgroup mlog.save() + # 更新任务进度 + cal_mtask_progress_from_mlog(mlog) + + # 更新物料数量 + MyThread(target=cal_material_count_from_mlog,args=(mlog,)).start() + # 触发批次统计分析 if mlog.batch: MyThread(target=get_alldata_with_batch_and_store, args=(mlog.batch,)).start() @@ -386,10 +392,32 @@ def mlog_revert(mlog: Mlog, user: User, now: Union[datetime.datetime, None]): if update_mtaskIds: Mtask.objects.filter(id__in=update_mtaskIds, state=Mtask.MTASK_SUBMIT).update(state=Mtask.MTASK_ASSGINED) + # 更新任务进度 + cal_mtask_progress_from_mlog(mlog) + + # 更新物料数量 + MyThread(target=cal_material_count_from_mlog,args=(mlog,)).start() + # 触发批次统计分析 if mlog.batch: MyThread(target=get_alldata_with_batch_and_store, args=(mlog.batch,)).start() +def cal_mtask_progress_from_mlog(mlog): + """ + 更新mlog关联的任务进度(可线程中执行) + """ + if mlog.fill_way in [Mlog.MLOG_2, Mlog.MLOG_12] and mlog.mtask: + update_mtask(mlog.mtask, fill_way=mlog.fill_way) + elif mlog.fill_way == Mlog.MLOG_23: + cal_mlog_count_from_mlogb(mlog) + m_outs_qs = Mlogb.objects.filter(mlog=mlog, material_out__isnull=False) + caled_mtask = [] + for item in m_outs_qs.all(): + mtask = item.mtask + if mtask in caled_mtask: + continue + update_mtask(mtask, fill_way=mlog.fill_way) + caled_mtask.append(mtask) def cal_mlog_count_from_mlogb(mlog: Mlog): """ @@ -422,23 +450,6 @@ def cal_mlog_count_from_mlogb(mlog: Mlog): # 保存更新后的Mlog对象 mlog.save() -def cal_mtask_progress_from_mlog(mlog: Mlog): - """ - 更新mlog关联的任务进度(可线程中执行) - """ - if mlog.fill_way in [Mlog.MLOG_2, Mlog.MLOG_12] and mlog.mtask: - update_mtask(mlog.mtask, fill_way=mlog.fill_way) - elif mlog.fill_way == Mlog.MLOG_23: - cal_mlog_count_from_mlogb(mlog) - m_outs_qs = Mlogb.objects.filter(mlog=mlog, material_out__isnull=False) - caled_mtask = [] - for item in m_outs_qs.all(): - mtask = item.mtask - if mtask in caled_mtask: - continue - update_mtask(mtask, fill_way=mlog.fill_way) - caled_mtask.append(mtask) - def cal_material_count_from_mlog(mlog: Mlog): """ 更新mlog关联的物料数量(可单独执行) @@ -458,6 +469,7 @@ def cal_material_count_from_mlog(mlog: Mlog): def update_mtask(mtask: Mtask, fill_way: int = 10): + mtask = Mtask.objects.get(id=mtask.id) # 防止并发修改获取最新的mtask from apps.pm.models import Utask if fill_way == Mlog.MLOG_2: res = Mlog.objects.filter(mtask=mtask).exclude(submit_time=None).aggregate(sum_count_real=Sum( @@ -656,5 +668,4 @@ def mlog_audit_end(ticket: Ticket): now = timezone.now() ins = Mlog.objects.get(id=ticket.ticket_data['t_id']) mlog_submit(ins, ticket.create_by, now) - MyThread(target=cal_mtask_progress_from_mlog,args=(ins,)).start() - MyThread(target=cal_material_count_from_mlog,args=(ins,)).start() + diff --git a/apps/wpm/views.py b/apps/wpm/views.py index ea3006d6..e12945fa 100644 --- a/apps/wpm/views.py +++ b/apps/wpm/views.py @@ -1,6 +1,4 @@ from django.db import transaction -from django.db.models import Prefetch -from django.shortcuts import render from rest_framework.decorators import action from rest_framework.exceptions import ParseError from rest_framework.mixins import DestroyModelMixin, ListModelMixin, UpdateModelMixin, CreateModelMixin @@ -11,7 +9,6 @@ from django.utils import timezone from apps.system.models import User from apps.mtm.models import Material, Process -from apps.pm.models import Mtask from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet from .filters import StLogFilter, SfLogFilter, WMaterialFilter, MlogFilter, HandoverFilter, MlogbFilter, BatchStFilter @@ -22,9 +19,7 @@ from .serializers import (SflogExpSerializer, SfLogSerializer, StLogSerializer, AttLogSerializer, OtherLogSerializer, MlogInitSerializer, MlogChangeSerializer, MlogbDetailSerializer, MlogbInSerializer, MlogbInUpdateSerializer, MlogbOutUpdateSerializer, FmlogSerializer, FmlogUpdateSerializer, BatchStSerializer) -from .services import mlog_submit, update_mtask, handover_submit, mlog_revert, cal_material_count_from_mlog, cal_mtask_progress_from_mlog -from apps.utils.thread import MyThread -from apps.monitor.services import create_auditlog, delete_auditlog +from .services import mlog_submit, handover_submit, mlog_revert from apps.wpm.services import mlog_submit_validate, generate_new_batch # Create your views here. @@ -225,8 +220,6 @@ class MlogViewSet(CustomModelViewSet): vdata_new = MlogSerializer(ins).data # create_auditlog('submit', ins, vdata_new, # vdata_old, now, self.request.user) - MyThread(target=cal_mtask_progress_from_mlog,args=(ins,)).start() - MyThread(target=cal_material_count_from_mlog,args=(ins,)).start() return Response(vdata_new) @action(methods=['post'], detail=True, perms_map={'post': 'mlog.submit'}, serializer_class=MlogRevertSerializer) @@ -246,8 +239,6 @@ class MlogViewSet(CustomModelViewSet): mlog_revert(ins, user, now) # create_auditlog('revert', ins, {}, {}, now, user, # request.data.get('change_reason', '')) - MyThread(target=cal_mtask_progress_from_mlog,args=(ins,)).start() - MyThread(target=cal_material_count_from_mlog,args=(ins,)).start() return Response(MlogSerializer(instance=ins).data) @action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=MlogRelatedSerializer)