diff --git a/apps/wpm/scripts/wpr_bxerp.py b/apps/wpm/scripts/wpr_bxerp.py new file mode 100644 index 00000000..806a3de3 --- /dev/null +++ b/apps/wpm/scripts/wpr_bxerp.py @@ -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) \ No newline at end of file diff --git a/apps/wpm/services.py b/apps/wpm/services.py index 6462aa2d..35181ff9 100644 --- a/apps/wpm/services.py +++ b/apps/wpm/services.py @@ -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关联的任务进度(可线程中执行) diff --git a/apps/wpm/services_2.py b/apps/wpm/services_2.py index 693d8a75..7daa8960 100644 --- a/apps/wpm/services_2.py +++ b/apps/wpm/services_2.py @@ -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): """ 获取某个批次的整体生产数据并保存