feat: wpr_bxerp优化
This commit is contained in:
parent
43f5f11ca8
commit
feb8bd6770
|
|
@ -1,36 +1,67 @@
|
|||
from apps.wpmw.models import Wpr
|
||||
from apps.wpm.models import Mlogbw
|
||||
from apps.qm.models import Ftest, FtestDefect, FtestItem
|
||||
from apps.wpm.models import Mlogbw, Mlog, MlogUser
|
||||
from apps.qm.models import Ftest, FtestDefect, FtestItem, TestItem
|
||||
from rest_framework.exceptions import ParseError
|
||||
from apps.mtm.models import Mgroup
|
||||
|
||||
def main(wprId, mgroup:Mgroup):
|
||||
def main(wprId, mgroup:Mgroup=None):
|
||||
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 = {}
|
||||
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()
|
||||
if mlogbw:
|
||||
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,
|
||||
for mgroup in mgroups:
|
||||
mgroup_name = mgroup.name
|
||||
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:
|
||||
mlog:Mlog = mlogbw.mlogb.mlog
|
||||
data[f"{mgroup_name}_批次号"] = mlogbw.mlogb.batch
|
||||
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,
|
||||
ftest__mlogbw_ftest__mlogb__mlog__mgroup=mgroup,
|
||||
ftest__mlogbw_ftest__mlogb__mlog__submit_time__isnull=False,
|
||||
ftest__mlogbw_ftest__mlogb__mlog__is_fix=False)
|
||||
for ftestitem in ftestitems:
|
||||
data[f"{mgroup_name}_检测项_{ftestitem.testitem.name}"] = ftestitem.test_val_json
|
||||
|
||||
ftestdefects = FtestDefect.objects.filter(ftest__mlogbw_ftest__wpr=wpr,
|
||||
ftest__mlogbw_ftest__mlogb__mlog__mgroup=mgroup,
|
||||
ftest__mlogbw_ftest__mlogb__mlog__submit_time__isnull=False,
|
||||
ftest__mlogbw_ftest__mlogb__mlog__is_fix=False)
|
||||
for ftestitem in ftestitems:
|
||||
data[f"{mgroup_name}_检测项_{ftestitem.testitem.name}"] = ftestitem.test_val_json
|
||||
|
||||
ftestdefects = FtestDefect.objects.filter(ftest__mlogbw_ftest__wpr=wpr,
|
||||
ftest__mlogbw_ftest__mlogb__mlog__mgroup=mgroup,
|
||||
ftest__mlogbw_ftest__mlogb__mlog__submit_time__isnull=False,
|
||||
ftest__mlogbw_ftest__mlogb__mlog__is_fix=False)
|
||||
for ftestdefect in ftestdefects:
|
||||
data[f"{mgroup_name}_缺陷项_{ftestdefect.defect.name}"] = 1 if ftestdefect.has is True else 0
|
||||
|
||||
old_data:dict = wpr.data
|
||||
if old_data:
|
||||
for item in list(old_data.keys()):
|
||||
if f'{mgroup_name}_' in item:
|
||||
del old_data[item]
|
||||
old_data.update(data)
|
||||
wpr.data = old_data
|
||||
wpr.save(update_fields=["data"])
|
||||
for ftestdefect in ftestdefects:
|
||||
data[f"{mgroup_name}_缺陷项_{ftestdefect.defect.name}"] = 1 if ftestdefect.has is True else 0
|
||||
old_data:dict = wpr.data
|
||||
if old_data:
|
||||
for item in list(old_data.keys()):
|
||||
if f'{mgroup_name}_' in item:
|
||||
del old_data[item]
|
||||
old_data.update(data)
|
||||
wpr.data = old_data
|
||||
wpr.save(update_fields=["data"])
|
||||
|
|
@ -34,6 +34,16 @@ class WprViewSet(CustomListModelMixin, RetrieveModelMixin, ComplexQueryMixin, Cu
|
|||
"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):
|
||||
qs = super().filter_queryset(queryset)
|
||||
if "mb__isnull" in self.request.query_params or "wm__isnull" in self.request.query_params:
|
||||
|
|
|
|||
Loading…
Reference in New Issue