From 09072f79986f14bcec95e9fb0c7822113ce431bb Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 9 May 2025 16:51:55 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=85=89=E8=8A=AF=E8=B4=A8=E6=A3=80?= =?UTF-8?q?=E8=A1=A8=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wpm/scripts/batch_gxerp.py | 90 ++++++++++++++++++++++++++++++++- 1 file changed, 89 insertions(+), 1 deletion(-) diff --git a/apps/wpm/scripts/batch_gxerp.py b/apps/wpm/scripts/batch_gxerp.py index 7b45e599..eb3116f1 100644 --- a/apps/wpm/scripts/batch_gxerp.py +++ b/apps/wpm/scripts/batch_gxerp.py @@ -1,7 +1,95 @@ +from apps.wpm.models import BatchSt +import logging +from apps.qm.models import Defect +from apps.wpm.models import Mlogb, MlogbDefect +import decimal +from django.db.models import Sum + +myLogger = logging.getLogger("log") + def main(batch: str): - return None, None + try: + batchst = BatchSt.objects.get(batch=batch, version=1) + except BatchSt.DoesNotExist: + myLogger.error(f"Batch {batch} does not exist") + return None, None + + data = {"批次号": batch} + mgroup_names = ["尺寸检验", "外观检验"] + for mgroup_name in mgroup_names: + mlogb1_qs = Mlogb.objects.filter(mlog__submit_time__isnull=False, material_out__isnull=False, mlog__mgroup__name=mgroup_name, batch=batch) + if mlogb1_qs.exists(): + data[f"{mgroup_name}_日期"] = [] + data[f"{mgroup_name}_操作人"] = [] + data[f"{mgroup_name}_count_real"] = 0 + data[f"{mgroup_name}_count_ok"] = 0 + data[f"{mgroup_name}_count_ok_full"] = 0 + for item in mlogb1_qs: + if item.mlog.handle_user: + data[f"{mgroup_name}_操作人"].append(item.mlog.handle_user) + if item.mlog.handle_date: + data[f"{mgroup_name}_日期"].append(item.mlog.handle_date) + data[f"{mgroup_name}_count_real"] += item.count_real + data[f"{mgroup_name}_count_ok"] += item.count_ok + data[f"{mgroup_name}_count_ok_full"] += item.count_ok_full + + try: + data[f"{mgroup_name}_合格率"] = round((data[f"{mgroup_name}-count_ok"] / data[f"{mgroup_name}-count_real"])*100, 2) + except decimal.InvalidOperation: + data[f"{mgroup_name}_合格率"] = 0 + + mlogbd1_qs = MlogbDefect.objects.filter(mlogb__in=mlogb1_qs, count__gt=0).values("defect__name").annotate(total=Sum("count")) + for item in mlogbd1_qs: + data[f"{mgroup_name}_缺陷_{item['defect__name']}"] = item["total"] + data[f"{mgroup_name}_缺陷_{item['defect__name']}-比例"] = round((item["total"] / data[f"{mgroup_name}-count_real"])*100, 2) + + data[f"{mgroup_name}_日期"] = list(set(data[f"{mgroup_name}_日期"])) + data[f"{mgroup_name}_日期"] = ";".join([item.strftime("%Y-%m-%d") for item in data[f"{mgroup_name}_日期"]]) + data[f"{mgroup_name}_操作人"] = list(set(data[f"{mgroup_name}_操作人"])) + data[f"{mgroup_name}_操作人"] = ";".join([item.name for item in data[f"{mgroup_name}_操作人"]]) + + mlogb2_qs = Mlogb.objects.filter(mlog__submit_time__isnull=False, material_out__isnull=False, mlog__mgroup__name="外观检验", mlog__is_fix=True, batch=batch) + if mlogb2_qs.exists(): + data["外观检验_返修_日期"] = [] + data["外观检验_返修_操作人"] = [] + data["外观检验_返修_count_real"] = 0 + data["外观检验_返修_count_ok"] = 0 + data["外观检验_返修_count_ok_full"] = 0 + for item in mlogb2_qs: + if item.mlog.handle_user: + data["外观检验_返修_操作人"].append(item.mlog.handle_user) + if item.mlog.handle_date: + data["外观检验_返修_日期"].append(item.mlog.handle_date) + data["外观检验_返修_count_real"] += item.count_real + data["外观检验_返修_count_ok"] += item.count_ok + data["外观检验_返修_count_ok_full"] += item.count_ok_full + + 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["外观检验_返修_操作人"]]) + + mlogbd2_qs = MlogbDefect.objects.filter(mlogb__in=mlogb2_qs, count__gt=0).values("defect__name").annotate(total=Sum("count")) + + for item in mlogbd2_qs: + data[f"外观检验_返修_缺陷_{item['defect__name']}"] = item["total"] + data[f"外观检验_返修_缺陷_{item['defect__name']}-比例"] = round((item["total"] / data["外观检验_返修-count_real"])*100, 2) + + if "外观检验_count_ok" in data: + data["外观检验_总合格数"] = data["外观检验_count_ok"] + data["外观检验_返修_count_ok"] if "外观检验_返修_count_ok" in data else 0 + try: + data["外观检验_总合格率"] = round((data["外观检验_总合格数"] / data["外观检验_count_real"])*100, 2) + except decimal.InvalidOperation: + data["外观检验_总合格率"] = 0 + + try: + data["外观检验_直通合格率"] = round((data["外观检验_总合格率"]* data["尺寸检验_合格率"])/100, 2) + except decimal.InvalidOperation: + data["外观检验_直通合格率"] = 0 + + return data, {} if __name__ == '__main__': pass \ No newline at end of file