fix:禅道413
This commit is contained in:
parent
99e2909514
commit
7d91682e8a
|
|
@ -1,7 +1,7 @@
|
||||||
from apps.wpm.models import BatchSt
|
from apps.wpm.models import BatchSt
|
||||||
import logging
|
import logging
|
||||||
from apps.qm.models import Defect, FtestWork, FtestworkDefect
|
from apps.qm.models import Defect, FtestWork, FtestworkDefect
|
||||||
from apps.wpm.models import Mlogb, MlogbDefect
|
from apps.wpm.models import Mlogb, MlogbDefect, Mlog
|
||||||
from apps.mtm.models import Mgroup
|
from apps.mtm.models import Mgroup
|
||||||
import decimal
|
import decimal
|
||||||
from django.db.models import Sum
|
from django.db.models import Sum
|
||||||
|
|
@ -87,35 +87,44 @@ def main(batch: str, mgroup_obj):
|
||||||
data[f"{mgroup_name}_班次"] = ";".join([item for item in data[f"{mgroup_name}_班次"]])
|
data[f"{mgroup_name}_班次"] = ";".join([item for item in data[f"{mgroup_name}_班次"]])
|
||||||
|
|
||||||
|
|
||||||
mlogb2_qs = Mlogb.objects.filter(mlog__submit_time__isnull=False,
|
# 按 mlog__submit_time, id 排序,每条 Mlogb 记录独立为一次返修
|
||||||
material_out__isnull=False,
|
# (同一 Mlog 下有多条同批次 Mlogb 时也能正确拆分为多次返修)
|
||||||
mlog__mgroup__name="外观检验",
|
_all_fix_qs = Mlogb.objects.filter(
|
||||||
mlog__is_fix=True, batch=batch, need_inout=True)
|
mlog__submit_time__isnull=False,
|
||||||
if mlogb2_qs.exists():
|
material_out__isnull=False,
|
||||||
data["外观检验_返修_日期"] = []
|
mlog__mgroup__name="外观检验",
|
||||||
data["外观检验_返修_操作人"] = []
|
mlog__is_fix=True,
|
||||||
data["外观检验_返修_count_real"] = 0
|
batch=batch,
|
||||||
data["外观检验_返修_count_ok"] = 0
|
need_inout=True,
|
||||||
data["外观检验_返修_count_ok_full"] = 0
|
).order_by("mlog__submit_time", "id")
|
||||||
for item in mlogb2_qs:
|
_fix_prefixes = []
|
||||||
if item.mlog.handle_user:
|
for fix_idx, fix_mlogb in enumerate(_all_fix_qs):
|
||||||
data["外观检验_返修_操作人"].append(item.mlog.handle_user)
|
suffix = "" if fix_idx == 0 else str(fix_idx + 1)
|
||||||
if item.mlog.handle_date:
|
prefix = f"外观检验_返修{suffix}_"
|
||||||
data["外观检验_返修_日期"].append(item.mlog.handle_date)
|
_fix_prefixes.append(prefix)
|
||||||
data["外观检验_返修_count_real"] += item.count_real
|
mlog = fix_mlogb.mlog
|
||||||
data["外观检验_返修_count_ok"] += item.count_ok
|
handle_date = mlog.handle_date
|
||||||
data["外观检验_返修_count_ok_full"] += item.count_ok_full if item.count_ok_full else 0
|
data[f"{prefix}count_real"] = fix_mlogb.count_real
|
||||||
|
data[f"{prefix}count_ok"] = fix_mlogb.count_ok
|
||||||
data["外观检验_返修_日期"] = list(set(data["外观检验_返修_日期"]))
|
data[f"{prefix}count_ok_full"] = fix_mlogb.count_ok_full or 0
|
||||||
data["外观检验_返修_日期"] = ";".join([item.strftime("%Y-%m-%d") for item in data["外观检验_返修_日期"]])
|
data[f"{prefix}count_notok"] = fix_mlogb.count_notok or 0
|
||||||
data["外观检验_返修_操作人"] = list(set(data["外观检验_返修_操作人"]))
|
try:
|
||||||
data["外观检验_返修_操作人"] = ";".join([item.name for item in data["外观检验_返修_操作人"]])
|
data[f"{prefix}合格率"] = round((fix_mlogb.count_ok / fix_mlogb.count_real) * 100, 2)
|
||||||
|
except (decimal.InvalidOperation, ZeroDivisionError):
|
||||||
mlogbd2_qs = MlogbDefect.objects.filter(mlogb__in=mlogb2_qs, count__gt=0).values("defect__name").annotate(total=Sum("count"))
|
data[f"{prefix}合格率"] = 0
|
||||||
|
try:
|
||||||
for item in mlogbd2_qs:
|
data[f"{prefix}完全合格率"] = round(((fix_mlogb.count_ok_full or 0) / fix_mlogb.count_real) * 100, 2)
|
||||||
data[f"外观检验_返修_缺陷_{item['defect__name']}"] = item["total"]
|
except (decimal.InvalidOperation, ZeroDivisionError):
|
||||||
data[f"外观检验_返修_缺陷_{item['defect__name']}_比例"] = round((item["total"] / data["外观检验_返修_count_real"])*100, 2)
|
data[f"{prefix}完全合格率"] = 0
|
||||||
|
data[f"{prefix}日期"] = handle_date.strftime("%Y-%m-%d") if handle_date else ""
|
||||||
|
data[f"{prefix}小日期"] = handle_date.strftime("%Y-%m-%d") if handle_date else ""
|
||||||
|
data[f"{prefix}大日期"] = handle_date.strftime("%Y-%m-%d") if handle_date else ""
|
||||||
|
data[f"{prefix}操作人"] = mlog.handle_user.name if mlog.handle_user else ""
|
||||||
|
data[f"{prefix}班次"] = mlog.shift.name if mlog.shift else ""
|
||||||
|
fix_defect_qs = MlogbDefect.objects.filter(mlogb=fix_mlogb, count__gt=0).values("defect__name").annotate(total=Sum("count"))
|
||||||
|
for item in fix_defect_qs:
|
||||||
|
data[f"{prefix}缺陷_{item['defect__name']}"] = item["total"]
|
||||||
|
data[f"{prefix}缺陷_{item['defect__name']}_比例"] = round((item["total"] / fix_mlogb.count_real) * 100, 2)
|
||||||
|
|
||||||
# 车间库存抽检
|
# 车间库存抽检
|
||||||
ft_qs = FtestWork.objects.filter(type2=FtestWork.TYPE2_SOME, wm__mgroup__name="外观检验", batch=batch, submit_time__isnull=False)
|
ft_qs = FtestWork.objects.filter(type2=FtestWork.TYPE2_SOME, wm__mgroup__name="外观检验", batch=batch, submit_time__isnull=False)
|
||||||
|
|
@ -141,13 +150,13 @@ def main(batch: str, mgroup_obj):
|
||||||
data[f"外观检验_车间库存抽检_缺陷_{item['defect__name']}"] = item["total"]
|
data[f"外观检验_车间库存抽检_缺陷_{item['defect__name']}"] = item["total"]
|
||||||
|
|
||||||
if "外观检验_count_ok" in data:
|
if "外观检验_count_ok" in data:
|
||||||
data["外观检验_总合格数"] = data["外观检验_count_ok"] + data.get("外观检验_返修_count_ok", 0)
|
data["外观检验_总合格数"] = data["外观检验_count_ok"] + sum(data.get(f"{p}count_ok", 0) for p in _fix_prefixes)
|
||||||
try:
|
try:
|
||||||
data["外观检验_总合格率"] = round((data["外观检验_总合格数"] / data["外观检验_count_real"])*100, 2)
|
data["外观检验_总合格率"] = round((data["外观检验_总合格数"] / data["外观检验_count_real"])*100, 2)
|
||||||
except (decimal.InvalidOperation, ZeroDivisionError):
|
except (decimal.InvalidOperation, ZeroDivisionError):
|
||||||
data["外观检验_总合格率"] = 0
|
data["外观检验_总合格率"] = 0
|
||||||
|
|
||||||
data["外观检验_完全总合格数"] = data["外观检验_count_ok_full"] + data.get("外观检验_返修_count_ok_full", 0)
|
data["外观检验_完全总合格数"] = data["外观检验_count_ok_full"] + sum(data.get(f"{p}count_ok_full", 0) for p in _fix_prefixes)
|
||||||
try:
|
try:
|
||||||
data["外观检验_完全总合格率"] = round((data["外观检验_完全总合格数"] / data["外观检验_count_real"])*100, 2)
|
data["外观检验_完全总合格率"] = round((data["外观检验_完全总合格数"] / data["外观检验_count_real"])*100, 2)
|
||||||
except (decimal.InvalidOperation, ZeroDivisionError):
|
except (decimal.InvalidOperation, ZeroDivisionError):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue