feat: wpr_bxerp优化

This commit is contained in:
caoqianming 2026-01-13 10:29:41 +08:00
parent 43f5f11ca8
commit feb8bd6770
2 changed files with 68 additions and 27 deletions

View File

@ -1,17 +1,49 @@
from apps.wpmw.models import Wpr from apps.wpmw.models import Wpr
from apps.wpm.models import Mlogbw from apps.wpm.models import Mlogbw, Mlog, MlogUser
from apps.qm.models import Ftest, FtestDefect, FtestItem from apps.qm.models import Ftest, FtestDefect, FtestItem, TestItem
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(wprId, mgroup:Mgroup): def main(wprId, mgroup:Mgroup=None):
wpr = Wpr.objects.get(id=wprId) wpr = Wpr.objects.get(id=wprId)
if mgroup is None:
mgroup_ids = Mlogbw.objects.filter(
wpr=wpr,
mlogb__mlog__submit_time__isnull=False,
mlogb__mlog__is_fix=False
).values_list(
'mlogb__mlog__mgroup',
flat=True
).distinct()
mgroups = Mgroup.objects.filter(id__in=mgroup_ids)
else:
mgroups = [mgroup]
data = {} data = {}
for mgroup in mgroups:
mgroup_name = mgroup.name mgroup_name = mgroup.name
mlogbw = Mlogbw.objects.filter(wpr=wpr, mlogb__mlog__mgroup=mgroup, mlogb__mlog__submit_time__isnull=False).order_by("-update_time").first() mlogbw = Mlogbw.objects.filter(wpr=wpr,
mlogb__mlog__mgroup=mgroup,
mlogb__mlog__submit_time__isnull=False, mlogb__mlog__is_fix=False).order_by("-update_time").first()
if mlogbw: if mlogbw:
mlog:Mlog = mlogbw.mlogb.mlog
data[f"{mgroup_name}_批次号"] = mlogbw.mlogb.batch data[f"{mgroup_name}_批次号"] = mlogbw.mlogb.batch
data[f"{mgroup_name}_日期"] = mlogbw.mlogb.mlog.handle_date.strftime("%Y-%m-%d") data[f"{mgroup_name}_设备编号"] = mlog.equipment.number if mlog.equipment else None
data[f"{mgroup_name}_操作人"] = mlog.handle_user.name if mlog.handle_user else None
data[f"{mgroup_name}_日期"] = mlog.handle_date.strftime("%Y-%m-%d")
# 日志操作数据
if mlog.oinfo_json:
oinfo_keys = list(mlog.oinfo_json.keys())
oinfo_keys_qs = TestItem.objects.filter(id__in=oinfo_keys)
for item in oinfo_keys_qs:
data[f"{mgroup_name}_操作项_{item.name}"] = mlog.oinfo_json[item.id]
# 子工序操作人和日期
mlogusers = MlogUser.objects.filter(mlog=mlog)
if mlogusers.exists():
datab = mlogusers.values("handle_user__name", "process__name", "handle_date")
for ind, item in enumerate(datab):
data[f"{mgroup_name}_{item['process__name']}_操作人"] = item["handle_user__name"]
data[f"{mgroup_name}_{item['process__name']}_日期"] = item["handle_date"].strftime("%Y-%m-%d")
# 检测数据
ftestitems = FtestItem.objects.filter(ftest__mlogbw_ftest__wpr=wpr, 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,
@ -25,7 +57,6 @@ def main(wprId, mgroup:Mgroup):
ftest__mlogbw_ftest__mlogb__mlog__is_fix=False) ftest__mlogbw_ftest__mlogb__mlog__is_fix=False)
for ftestdefect in ftestdefects: for ftestdefect in ftestdefects:
data[f"{mgroup_name}_缺陷项_{ftestdefect.defect.name}"] = 1 if ftestdefect.has is True else 0 data[f"{mgroup_name}_缺陷项_{ftestdefect.defect.name}"] = 1 if ftestdefect.has is True else 0
old_data:dict = wpr.data old_data:dict = wpr.data
if old_data: if old_data:
for item in list(old_data.keys()): for item in list(old_data.keys()):

View File

@ -34,6 +34,16 @@ class WprViewSet(CustomListModelMixin, RetrieveModelMixin, ComplexQueryMixin, Cu
"number_suffix": RawSQL("COALESCE(NULLIF(regexp_replace(wpmw_wpr.number, '.*?(\\d+)$', '\\1'), ''), '0')::bigint", []), "number_suffix": RawSQL("COALESCE(NULLIF(regexp_replace(wpmw_wpr.number, '.*?(\\d+)$', '\\1'), ''), '0')::bigint", []),
} }
def add_info_for_list(self, data):
parent_ids = [item["wpr_from"] for item in data if item["wpr_from"]]
if parent_ids:
parent_data = Wpr.objects.filter(id__in=parent_ids).values("id", "number", "data")
parent_map = {item["id"]: item for item in parent_data}
for item in data:
if item["wpr_from"]:
item["parent"] = parent_map[item["wpr_from"]]
return data
def filter_queryset(self, queryset): def filter_queryset(self, queryset):
qs = super().filter_queryset(queryset) qs = super().filter_queryset(queryset)
if "mb__isnull" in self.request.query_params or "wm__isnull" in self.request.query_params: if "mb__isnull" in self.request.query_params or "wm__isnull" in self.request.query_params: