diff --git a/apps/wpm/scripts/batch_gxerp.py b/apps/wpm/scripts/batch_gxerp.py index 8758d880..11d04d69 100644 --- a/apps/wpm/scripts/batch_gxerp.py +++ b/apps/wpm/scripts/batch_gxerp.py @@ -1,6 +1,6 @@ from apps.wpm.models import BatchSt import logging -from apps.qm.models import Defect +from apps.qm.models import Defect, FtestWork, FtestworkDefect from apps.wpm.models import Mlogb, MlogbDefect from apps.mtm.models import Mgroup import decimal @@ -117,24 +117,53 @@ def main(batch: str, mgroup_obj): data[f"外观检验_返修_缺陷_{item['defect__name']}"] = item["total"] data[f"外观检验_返修_缺陷_{item['defect__name']}_比例"] = round((item["total"] / data["外观检验_返修_count_real"])*100, 2) + # 车间库存抽检 + ft_qs = FtestWork.objects.filter(type2=FtestWork.TYPE2_SOME, wm__mgroup__name="外观检验", batch=batch, submit_time__isnull=False) + if ft_qs.exists(): + data["外观检验_车间库存抽检_日期"] = [] + data["外观检验_车间库存抽检_操作人"] = [] + data["外观检验_车间库存抽检_count_notok"] = 0 + for item in ft_qs: + if item.test_user: + data["外观检验_车间库存抽检_操作人"].append(item.test_user) + if item.test_date: + data["外观检验_车间库存抽检_日期"].append(item.test_date) + data["外观检验_车间库存抽检_count_notok"] += item.count_notok if item.count_notok else 0 + + data["外观检验_车间库存抽检_日期"] = list(set(data["外观检验_车间库存抽检_日期"])) + data["外观检验_车间库存抽检_日期"] = ";".join([item.strftime("%Y-%m-%d") for item in data["外观检验_车间库存抽检_日期"]]) + data["外观检验_车间库存抽检_操作人"] = list(set(data["外观检验_车间库存抽检_操作人"])) + data["外观检验_车间库存抽检_操作人"] = ";".join([item.name for item in data["外观检验_车间库存抽检_操作人"]]) + + # 车间库存抽检缺陷 + ftd_qs = FtestworkDefect.objects.filter(ftestwork__in=ft_qs, count__gt=0).values("defect__name").annotate(total=Sum("count")) + for item in ftd_qs: + data[f"外观检验_车间库存抽检_缺陷_{item['defect__name']}"] = item["total"] + if "外观检验_count_ok" in data: - data["外观检验_总合格数"] = data["外观检验_count_ok"] + data["外观检验_返修_count_ok"] if "外观检验_返修_count_ok" in data else 0 + data["外观检验_总合格数"] = data["外观检验_count_ok"] + data.get("外观检验_返修_count_ok", 0) try: data["外观检验_总合格率"] = round((data["外观检验_总合格数"] / data["外观检验_count_real"])*100, 2) except decimal.InvalidOperation: data["外观检验_总合格率"] = 0 - data["外观检验_完全总合格数"] = data["外观检验_count_ok_full"] + data["外观检验_返修_count_ok_full"] if "外观检验_返修_count_ok_full" in data else 0 + data["外观检验_完全总合格数"] = data["外观检验_count_ok_full"] + data.get("外观检验_返修_count_ok_full", 0) try: data["外观检验_完全总合格率"] = round((data["外观检验_完全总合格数"] / data["外观检验_count_real"])*100, 2) except decimal.InvalidOperation: data["外观检验_完全总合格率"] = 0 + data["外观检验_直通合格数"] = data["外观检验_总合格数"] - data.get("外观检验_车间库存抽检_count_notok", 0) if "尺寸检验_合格率" in data: try: data["外观检验_直通合格率"] = round((data["外观检验_总合格率"]* data["尺寸检验_合格率"])/100, 2) except decimal.InvalidOperation: data["外观检验_直通合格率"] = 0 + + try: + data["外观检验_直通合格率2"] = round((data["外观检验_直通合格数"]/data["尺寸检验_count_use"])*100, 2) + except decimal.InvalidOperation: + data["外观检验_直通合格率2"] = 0 if "尺寸检验_完全合格率" in data: try: