feat: 单个统计的触发

This commit is contained in:
caoqianming 2025-06-30 15:07:00 +08:00
parent fdf717aecb
commit a3b0455fb4
3 changed files with 49 additions and 1 deletions

View File

@ -0,0 +1,23 @@
from apps.wpmw.models import Wpr
from apps.wpm.models import Mlogbw
from apps.qm.models import Ftest, FtestDefect, FtestItem
from rest_framework.exceptions import ParseError
def main(number):
if not Wpr.objects.filter(number=number).exists():
raise ParseError(f"未找到该单个产品_{number}")
data = {}
mgroup_name = "毛坯检测"
ftestitems = FtestItem.objects.filter(ftest__mlogbw_ftest__number=number,
ftest__mlogbw_ftest__mlogb__mlog__mgroup__name=mgroup_name,
ftest__mlogbw_ftest__mlogb__mlog__submit_time__isnull=False)
for ftestitem in ftestitems:
data[f"{mgroup_name}_检测项_{ftestitem.testitem.name}"] = ftestitem.test_val_json
ftestdefects = FtestDefect.objects.filter(ftest__mlogbw_ftest__number=number,
ftest__mlogbw_ftest__mlogb__mlog__mgroup__name=mgroup_name,
ftest__mlogbw_ftest__mlogb__mlog__submit_time__isnull=False)
for ftestdefect in ftestdefects:
data[f"{mgroup_name}_缺陷项_{ftestdefect.defect.name}"] = 0 if ftestdefect.has is True else 1
Wpr.objects.filter(number=number).update(data=data)

View File

@ -15,7 +15,7 @@ from .models import SfLog, WMaterial, Mlog, Mlogb, Mlogbw, Handover, Handoverb,
from apps.mtm.services_2 import cal_material_count
from apps.wf.models import Ticket
import logging
from apps.wpm.services_2 import ana_batch_thread
from apps.wpm.services_2 import ana_batch_thread, ana_wpr_thread
from datetime import timedelta
from apps.wpmw.models import Wpr, WprDefect
from ..qm.models import Defect, Ftest
@ -386,6 +386,10 @@ def mlog_submit(mlog: Mlog, user: User, now: Union[datetime.datetime, None]):
xbatches = list(Mlogb.objects.filter(mlog=mlog).values_list('batch', flat=True))
ana_batch_thread(xbatches)
# 触发单个统计
xnumbers = list(Mlogbw.objects.filter(mlogb__mlog=mlog, ftest__isnull=False).values_list('number', flat=True))
ana_wpr_thread(xnumbers)
def mlog_revert(mlog: Mlog, user: User, now: Union[datetime.datetime, None]):
"""日志撤回
@ -597,6 +601,10 @@ def mlog_revert(mlog: Mlog, user: User, now: Union[datetime.datetime, None]):
xbatches = list(Mlogb.objects.filter(mlog=mlog).values_list('batch', flat=True))
ana_batch_thread(xbatches)
# 触发单个统计
xnumbers = list(Mlogbw.objects.filter(mlogb__mlog=mlog, ftest__isnull=False).values_list('number', flat=True))
ana_wpr_thread(xnumbers)
def cal_mtask_progress_from_mlog(mlog:Mlog):
"""
更新mlog关联的任务进度(可线程中执行)

View File

@ -12,6 +12,7 @@ from apps.utils.thread import MyThread
import logging
import time
from zoneinfo import ZoneInfo
import importlib
myLogger = logging.getLogger('log')
tz_shanghai = ZoneInfo("Asia/Shanghai")
@ -21,6 +22,9 @@ tz_shanghai = ZoneInfo("Asia/Shanghai")
def ana_batch_thread(xbatchs: list):
MyThread(target=ana_batch, args=(xbatchs,)).start()
def ana_wpr_thread(numbers: list):
MyThread(target=ana_wpr, args=(numbers,)).start()
def ana_batch(xbatchs: list):
"""
批次统计分析
@ -30,6 +34,19 @@ def ana_batch(xbatchs: list):
for xbatch in xbatchs:
get_alldata_with_batch_and_store(xbatch)
def ana_wpr(numbers: list):
"""
单个统计分析
"""
time.sleep(10)
numbers = list(set(numbers))
BASE_PROJECT_CODE = getattr(settings, "BASE_PROJECT_CODE", None)
m = importlib.import_module(f"apps.wpm.scripts.wpr_{BASE_PROJECT_CODE}")
f = getattr(m, "main")
for number in numbers:
f(number)
def get_alldata_with_batch_and_store(batch: str):
"""
获取某个批次的整体生产数据并保存