feat: 光芯质检表格
This commit is contained in:
parent
ad1bbaa32e
commit
09072f7998
|
@ -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
|
Loading…
Reference in New Issue