feat: 单个统计优化

This commit is contained in:
caoqianming 2025-07-17 09:01:49 +08:00
parent 69c7da883f
commit 17996a0b86
4 changed files with 23 additions and 22 deletions

View File

@ -82,10 +82,10 @@ def main(batch: str, mgroup_obj:Mgroup=None):
res = get_f_l_date(data) res = get_f_l_date(data)
old_data = batchst.data old_data:dict = batchst.data
if old_data: if old_data:
if mgroup_obj is not None: if mgroup_obj is not None:
for item in old_data.keys(): for item in list(old_data.keys()):
if f'{mgroup_obj.name}_' in item: if f'{mgroup_obj.name}_' in item:
del old_data[item] del old_data[item]
else: else:

View File

@ -4,20 +4,20 @@ from apps.qm.models import Ftest, FtestDefect, FtestItem
from rest_framework.exceptions import ParseError from rest_framework.exceptions import ParseError
from apps.mtm.models import Mgroup from apps.mtm.models import Mgroup
def main(number, mgroup:Mgroup): def main(wprId, mgroup:Mgroup):
wpr = Wpr.objects.filter(number=number).first() wpr = Wpr.objects.get(id=wprId)
if not wpr:
raise ParseError(f"未找到该单个产品_{number}")
data = {} data = {}
mgroup_name = mgroup.name mgroup_name = mgroup.name
data[f"{mgroup_name}_批次号"] = Mlogbw.objects.filter(number=number).order_by("-update_time").first().mlogb.batch mlogbw = Mlogbw.objects.filter(wpr=wpr).order_by("-update_time").first()
ftestitems = FtestItem.objects.filter(ftest__mlogbw_ftest__number=number, data[f"{mgroup_name}_批次号"] = mlogbw.mlogb.batch
data[f"{mgroup_name}_日期"] = mlogbw.mlogb.mlog.handle_date.strftime("%Y-%m-%d")
ftestitems = FtestItem.objects.filter(ftest__mlogbw_ftest__wpr=wpr,
ftest__mlogbw_ftest__mlogb__mlog__mgroup=mgroup, ftest__mlogbw_ftest__mlogb__mlog__mgroup=mgroup,
ftest__mlogbw_ftest__mlogb__mlog__submit_time__isnull=False) ftest__mlogbw_ftest__mlogb__mlog__submit_time__isnull=False)
for ftestitem in ftestitems: for ftestitem in ftestitems:
data[f"{mgroup_name}_检测项_{ftestitem.testitem.name}"] = ftestitem.test_val_json data[f"{mgroup_name}_检测项_{ftestitem.testitem.name}"] = ftestitem.test_val_json
ftestdefects = FtestDefect.objects.filter(ftest__mlogbw_ftest__number=number, ftestdefects = FtestDefect.objects.filter(ftest__mlogbw_ftest__wpr=wpr,
ftest__mlogbw_ftest__mlogb__mlog__mgroup=mgroup, ftest__mlogbw_ftest__mlogb__mlog__mgroup=mgroup,
ftest__mlogbw_ftest__mlogb__mlog__submit_time__isnull=False) ftest__mlogbw_ftest__mlogb__mlog__submit_time__isnull=False)
for ftestdefect in ftestdefects: for ftestdefect in ftestdefects:
@ -29,4 +29,5 @@ def main(number, mgroup:Mgroup):
if f'{mgroup_name}_' in item: if f'{mgroup_name}_' in item:
del old_data[item] del old_data[item]
old_data.update(data) old_data.update(data)
Wpr.objects.filter(number=number).update(data=old_data) wpr.data = old_data
wpr.save(update_fields=["data"])

View File

@ -392,9 +392,9 @@ def mlog_submit(mlog: Mlog, user: User, now: Union[datetime.datetime, None]):
ana_batch_thread(xbatches) ana_batch_thread(xbatches)
# 触发单个统计 # 触发单个统计
xnumbers = list(Mlogbw.objects.filter(mlogb__mlog=mlog, ftest__isnull=False, number__isnull=False).values_list('number', flat=True)) wprIds = list(Mlogbw.objects.filter(mlogb__mlog=mlog, ftest__isnull=False, wpr__isnull=False).values_list('wpr__id', flat=True))
if xnumbers: if wprIds:
ana_wpr_thread(xnumbers, mlog.mgroup) ana_wpr_thread(wprIds, mlog.mgroup)
def mlog_revert(mlog: Mlog, user: User, now: Union[datetime.datetime, None]): def mlog_revert(mlog: Mlog, user: User, now: Union[datetime.datetime, None]):
@ -610,9 +610,9 @@ def mlog_revert(mlog: Mlog, user: User, now: Union[datetime.datetime, None]):
ana_batch_thread(xbatches) ana_batch_thread(xbatches)
# 触发单个统计 # 触发单个统计
xnumbers = list(Mlogbw.objects.filter(mlogb__mlog=mlog, ftest__isnull=False, number__isnull=False).values_list('number', flat=True)) wprIds = list(Mlogbw.objects.filter(mlogb__mlog=mlog, ftest__isnull=False, wpr__isnull=False).values_list('wpr__id', flat=True))
if xnumbers: if wprIds:
ana_wpr_thread(xnumbers, mlog.mgroup) ana_wpr_thread(wprIds, mlog.mgroup)
def cal_mtask_progress_from_mlog(mlog:Mlog): def cal_mtask_progress_from_mlog(mlog:Mlog):
""" """

View File

@ -22,8 +22,8 @@ tz_shanghai = ZoneInfo("Asia/Shanghai")
def ana_batch_thread(xbatchs: list, mgroup=None): def ana_batch_thread(xbatchs: list, mgroup=None):
MyThread(target=ana_batch, args=(xbatchs, mgroup)).start() MyThread(target=ana_batch, args=(xbatchs, mgroup)).start()
def ana_wpr_thread(numbers: list, mgroup): def ana_wpr_thread(wprIds: list, mgroup):
MyThread(target=ana_wpr, args=(numbers, mgroup)).start() MyThread(target=ana_wpr, args=(wprIds, mgroup)).start()
def ana_batch(xbatchs: list, mgroup): def ana_batch(xbatchs: list, mgroup):
""" """
@ -41,20 +41,20 @@ def ana_batch(xbatchs: list, mgroup):
for xbatch in xbatchs: for xbatch in xbatchs:
f(xbatch, mgroup) f(xbatch, mgroup)
def ana_wpr(numbers: list, mgroup): def ana_wpr(wprIds: list, mgroup):
""" """
单个统计分析 单个统计分析
""" """
time.sleep(10) time.sleep(10)
numbers = list(set(numbers)) wprIds = list(set(wprIds))
BASE_PROJECT_CODE = getattr(settings, "BASE_PROJECT_CODE", None) BASE_PROJECT_CODE = getattr(settings, "BASE_PROJECT_CODE", None)
try: try:
m = importlib.import_module(f"apps.wpm.scripts.wpr_{BASE_PROJECT_CODE}") m = importlib.import_module(f"apps.wpm.scripts.wpr_{BASE_PROJECT_CODE}")
except ModuleNotFoundError: except ModuleNotFoundError:
return return
f = getattr(m, "main") f = getattr(m, "main")
for number in numbers: for wprId in wprIds:
f(number, mgroup) f(wprId, mgroup)
def get_f_l_date(data): def get_f_l_date(data):