This commit is contained in:
zty 2025-05-14 13:58:03 +08:00
commit 01539a32da
6 changed files with 45 additions and 42 deletions

View File

@ -4,10 +4,9 @@ from apps.inm.models import (MIO, MIOItem,
from rest_framework.exceptions import ParseError from rest_framework.exceptions import ParseError
from apps.mtm.models import Material, Process from apps.mtm.models import Material, Process
from apps.utils.tools import ranstr from apps.utils.tools import ranstr
from apps.utils.thread import MyThread
from apps.mtm.services_2 import cal_material_count from apps.mtm.services_2 import cal_material_count
from apps.wpm.models import WMaterial, BatchSt, BatchLog from apps.wpm.models import WMaterial, BatchSt, BatchLog
from apps.wpm.services_2 import get_alldata_with_batch_and_store from apps.wpm.services_2 import ana_batch_thread
from apps.wpmw.models import Wpr from apps.wpmw.models import Wpr
from apps.qm.models import Ftest, Defect from apps.qm.models import Ftest, Defect
from django.db.models import Count, Q from django.db.models import Count, Q
@ -123,10 +122,7 @@ def do_out(item: MIOItem):
Wpr.change_or_new(wpr=mioitemw.wpr, wm=wm, old_mb=mb) Wpr.change_or_new(wpr=mioitemw.wpr, wm=wm, old_mb=mb)
# 触发批次统计分析 # 触发批次统计分析
xbatches = list(set(xbatches)) ana_batch_thread(xbatches)
if xbatches:
for xbatch in xbatches:
MyThread(target=get_alldata_with_batch_and_store, args=(xbatch,)).start()
def do_in(item: MIOItem): def do_in(item: MIOItem):
@ -257,9 +253,7 @@ def do_in(item: MIOItem):
MaterialBatchA.objects.create(mb=mb, material=mia.material, batch=mia.batch, rate=mia.rate) MaterialBatchA.objects.create(mb=mb, material=mia.material, batch=mia.batch, rate=mia.rate)
# 批次统计分析 # 批次统计分析
xbatchs = list(set(xbatchs)) ana_batch_thread(xbatchs)
for xbatch in xbatchs:
MyThread(target=get_alldata_with_batch_and_store, args=(xbatch,)).start()
class InmService: class InmService:
@ -442,9 +436,7 @@ class InmService:
raise ParseError("不支持的操作") raise ParseError("不支持的操作")
# 批次统计分析 # 批次统计分析
xbatchs = list(set(xbatchs)) ana_batch_thread(xbatchs)
for xbatch in xbatchs:
MyThread(target=get_alldata_with_batch_and_store, args=(xbatch,)).start()
def daoru_mb(path: str): def daoru_mb(path: str):
""" """

View File

@ -172,12 +172,12 @@ class Qct(CommonAModel):
return QctMat.objects.filter(qct=self) return QctMat.objects.filter(qct=self)
@classmethod @classmethod
def get(cls, material:Material, tag:str): def get(cls, materialId:str, tag:str):
try: try:
qct = Qct.objects.get(qctmat__material=material, tags__contains=tag) qct = Qct.objects.get(qctmat__material__id=materialId, tags__contains=tag)
except Qct.DoesNotExist: except Qct.DoesNotExist:
try: try:
qct = Qct.objects.ge(name="通用检验表") qct = Qct.objects.get(name="默认检验表")
except Qct.DoesNotExist: except Qct.DoesNotExist:
qct = None qct = None
except Qct.MultipleObjectsReturned: except Qct.MultipleObjectsReturned:
@ -198,7 +198,7 @@ class Qct(CommonAModel):
def get_qs(cls, materialId:str, tag:str): def get_qs(cls, materialId:str, tag:str):
qct_qs = Qct.objects.filter(qctmat__material__id=materialId, tags__contains=tag) qct_qs = Qct.objects.filter(qctmat__material__id=materialId, tags__contains=tag)
if not qct_qs.exists(): if not qct_qs.exists():
qct_qs = Qct.objects.filter(tags__contains="default") qct_qs = Qct.objects.filter(name="默认检验表")
return qct_qs return qct_qs
class QctTestItem(BaseModel): class QctTestItem(BaseModel):

View File

@ -5,8 +5,7 @@ from rest_framework.exceptions import ParseError
from django.utils import timezone from django.utils import timezone
from apps.wf.models import Ticket from apps.wf.models import Ticket
from apps.qm.models import NotOkOption, Defect from apps.qm.models import NotOkOption, Defect
from apps.utils.thread import MyThread from apps.wpm.services_2 import ana_batch_thread
from apps.wpm.services_2 import get_alldata_with_batch_and_store
def ftestwork_submit_validate(ins: FtestWork): def ftestwork_submit_validate(ins: FtestWork):
wm:WMaterial = ins.wm wm:WMaterial = ins.wm
@ -149,5 +148,4 @@ def bind_ftestwork(ticket: Ticket, transition, new_ticket_data: dict):
def ftestwork_audit_end(ticket: Ticket): def ftestwork_audit_end(ticket: Ticket):
ins = FtestWork.objects.get(id=ticket.ticket_data['t_id']) ins = FtestWork.objects.get(id=ticket.ticket_data['t_id'])
ftestwork_submit(ins, ticket.create_by) ftestwork_submit(ins, ticket.create_by)
if ins.batch: ana_batch_thread(xbatchs=[ins.batch])
MyThread(target=get_alldata_with_batch_and_store, args=(ins.batch,)).start()

View File

@ -18,8 +18,7 @@ from apps.wpm.models import SfLog
from apps.qm.filters import QuaStatFilter, TestItemFilter, FtestWorkFilter, QctFilter, FtestFilter from apps.qm.filters import QuaStatFilter, TestItemFilter, FtestWorkFilter, QctFilter, FtestFilter
from django.db import transaction from django.db import transaction
from apps.qm.services import ftestwork_submit from apps.qm.services import ftestwork_submit
from apps.utils.thread import MyThread from apps.wpm.services_2 import ana_batch_thread
from apps.wpm.services_2 import get_alldata_with_batch_and_store
from apps.wf.models import State from apps.wf.models import State
# Create your views here. # Create your views here.
@ -53,10 +52,15 @@ class QctViewSet(CustomModelViewSet):
@action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=QctGetSerializer) @action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=QctGetSerializer)
@transaction.atomic @transaction.atomic
def get_qs(self, request, *args, **kwargs): def get_qct(self, request, *args, **kwargs):
"""
获取检验模板
获取检验模板
"""
data = request.data data = request.data
qct_qs = Qct.get_qs(data["material"], data["tag"]) qct = Qct.get(data["material"], data["tag"])
return QctSerializer(instance=qct_qs, many=True).data return Response(QctDetailSerializer(instance=qct).data)
class QctTestItemViewSet(CustomModelViewSet): class QctTestItemViewSet(CustomModelViewSet):
@ -282,8 +286,7 @@ class FtestWorkViewSet(CustomModelViewSet):
raise ParseError('审批单已进行,无法修改') raise ParseError('审批单已进行,无法修改')
x = super().update(request, *args, **kwargs) x = super().update(request, *args, **kwargs)
# 触发批次统计分析 # 触发批次统计分析
if ins.batch: ana_batch_thread(xbatchs=[ins.batch])
MyThread(target=get_alldata_with_batch_and_store, args=(ins.batch,)).start()
return x return x
def destroy(self, request, *args, **kwargs): def destroy(self, request, *args, **kwargs):
@ -294,15 +297,13 @@ class FtestWorkViewSet(CustomModelViewSet):
raise ParseError('存在审批, 无法删除') raise ParseError('存在审批, 无法删除')
x = super().destroy(request, *args, **kwargs) x = super().destroy(request, *args, **kwargs)
# 触发批次统计分析 # 触发批次统计分析
if ins.batch: ana_batch_thread(xbatchs=[ins.batch])
MyThread(target=get_alldata_with_batch_and_store, args=(ins.batch,)).start()
return x return x
def perform_create(self, serializer): def perform_create(self, serializer):
ins = serializer.save() ins = serializer.save()
# 触发批次统计分析 # 触发批次统计分析
if ins.batch: ana_batch_thread(xbatchs=[ins.batch])
MyThread(target=get_alldata_with_batch_and_store, args=(ins.batch,)).start()
@action(methods=['post'], detail=True, perms_map={'post': 'ftestwork.submit'}, serializer_class=Serializer) @action(methods=['post'], detail=True, perms_map={'post': 'ftestwork.submit'}, serializer_class=Serializer)

View File

@ -14,9 +14,8 @@ from apps.mtm.models import Mgroup, Shift, Material, Route, RoutePack, Team, Sru
from .models import SfLog, WMaterial, Mlog, Mlogb, Mlogbw, Handover, Handoverb, Handoverbw, MlogbDefect, BatchLog, BatchSt from .models import SfLog, WMaterial, Mlog, Mlogb, Mlogbw, Handover, Handoverb, Handoverbw, MlogbDefect, BatchLog, BatchSt
from apps.mtm.services_2 import cal_material_count from apps.mtm.services_2 import cal_material_count
from apps.wf.models import Ticket from apps.wf.models import Ticket
from apps.utils.thread import MyThread
import logging import logging
from apps.wpm.services_2 import get_alldata_with_batch_and_store from apps.wpm.services_2 import ana_batch_thread
from datetime import timedelta from datetime import timedelta
from apps.wpmw.models import Wpr, WprDefect from apps.wpmw.models import Wpr, WprDefect
from ..qm.models import Defect, Ftest from ..qm.models import Defect, Ftest
@ -379,8 +378,8 @@ def mlog_submit(mlog: Mlog, user: User, now: Union[datetime.datetime, None]):
cal_material_count_from_mlog(mlog) cal_material_count_from_mlog(mlog)
# 触发批次统计分析 # 触发批次统计分析
if mlog.batch: xbatches = list(Mlogb.objects.filter(mlog=mlog).values_list('batch', flat=True))
MyThread(target=get_alldata_with_batch_and_store, args=(mlog.batch,)).start() ana_batch_thread(xbatches)
def mlog_revert(mlog: Mlog, user: User, now: Union[datetime.datetime, None]): def mlog_revert(mlog: Mlog, user: User, now: Union[datetime.datetime, None]):
@ -590,8 +589,8 @@ def mlog_revert(mlog: Mlog, user: User, now: Union[datetime.datetime, None]):
BatchLog.clear(mlog=mlog) BatchLog.clear(mlog=mlog)
# 触发批次统计分析 # 触发批次统计分析
if mlog.batch: xbatches = list(Mlogb.objects.filter(mlog=mlog).values_list('batch', flat=True))
MyThread(target=get_alldata_with_batch_and_store, args=(mlog.batch,)).start() ana_batch_thread(xbatches)
def cal_mtask_progress_from_mlog(mlog): def cal_mtask_progress_from_mlog(mlog):
""" """
@ -924,15 +923,12 @@ def handover_submit(handover:Handover, user: User, now: Union[datetime.datetime,
handover.recive_user = user handover.recive_user = user
handover.save() handover.save()
batches = list(set(batches))
if batches:
for batch in batches:
MyThread(target=get_alldata_with_batch_and_store, args=(batch,)).start()
# 如果是改版交接需要触发统计数量 # 如果是改版交接需要触发统计数量
if handover.type == Handover.H_CHANGE: if handover.type == Handover.H_CHANGE:
mids.append(handover.material_changed.id) mids.append(handover.material_changed.id)
cal_material_count(mids) cal_material_count(mids)
ana_batch_thread(xbatchs=batches)
def handover_revert(handover:Handover): def handover_revert(handover:Handover):

View File

@ -9,9 +9,25 @@ from django.conf import settings
import json import json
from apps.utils.tools import MyJSONEncoder from apps.utils.tools import MyJSONEncoder
import decimal import decimal
from apps.utils.thread import MyThread
import logging import logging
import time
myLogger = logging.getLogger('log') myLogger = logging.getLogger('log')
# 批次统计分析
def ana_batch_thread(xbatchs: list):
MyThread(target=ana_batch, args=(xbatchs,)).start()
def ana_batch(xbatchs: list):
"""
批次统计分析
"""
time.sleep(3)
xbatchs = list(set(xbatchs))
for xbatch in xbatchs:
get_alldata_with_batch_and_store(xbatch)
def get_alldata_with_batch_and_store(batch: str): def get_alldata_with_batch_and_store(batch: str):
""" """
获取某个批次的整体生产数据并保存 获取某个批次的整体生产数据并保存