factory/apps/wpm/services_2.py

173 lines
9.7 KiB
Python

from apps.wpm.models import Mlog, BatchSt
from apps.mtm.models import Mgroup
from apps.system.models import Dept
from apps.inm.models import MIOItem
from apps.qm.models import FtestWork
def get_alldata_with_batch_and_store(batch: str):
"""
获取某个批次某个仓库的整体生产数据并保存
"""
data = get_alldata_with_batch(batch)
bobj, _ = BatchSt.objects.get_or_create(batch=batch)
bobj.data = data
bobj.save()
def get_alldata_with_batch(batch: str):
"""
获取某个批次的整体生产数据
"""
data = {"产品批次编号": batch}
dept7 = Dept.objects.get(name='7车间')
dept6 = Dept.objects.get(name='6车间')
mgroup_blcx = Mgroup.objects.get(name="棒料成型")
mlogs_blcx_qs = Mlog.objects.filter(submit_time__isnull=False, mgroup=mgroup_blcx, batch=batch)
mlog_count_fields = Mlog.count_fields()
if mlogs_blcx_qs.exists():
data["产品规格"] = []
data["棒料成型-出料人"] = []
data["棒料成型-切料人"] = []
data["棒料成型-备注"] = ""
for item in mlogs_blcx_qs:
data["产品规格"].append(item.material_out) # 对象
if item.handle_user:
data["棒料成型-出料人"].append(item.handle_user) # 对象
if item.handle_user_2:
data["棒料成型-切料人"].append(item.handle_user_2) # 对象
if item.note:
data["棒料成型-备注"] = ";".join([data["棒料成型-备注"], item.note])
for field in mlog_count_fields:
if getattr(item, field) > 0:
if f'棒料成型-{field}' not in data:
data[f'棒料成型-{field}'] = getattr(item, field)
else:
data[f'棒料成型-{field}'] += getattr(item, field)
# 整理棒料成型数据
data["产品规格"] = list(set(data["产品规格"]))
data["产品规格"] = ";".join([item.specification for item in data["产品规格"]])
data["棒料成型-出料人"] = list(set(data["棒料成型-出料人"]))
data["棒料成型-出料人"] = ";".join([item.name for item in data["棒料成型-出料人"]])
data["棒料成型-切料人"] = list(set(data["棒料成型-切料人"]))
data["棒料成型-切料人"] = ";".join([item.name for item in data["棒料成型-切料人"]])
data["棒料成型-合格率"] = round((data["棒料成型-count_ok"] * 100/ data["棒料成型-count_real"]), 1)
# 7车间生产入库数据/ 8车间中检数据
mioitem_count_fields = MIOItem.count_fields()
mioitem_qs = MIOItem.objects.filter(mio__belong_dept=dept7, mio__type="do_in", batch=batch, mio__submit_time__isnull=False)
if mioitem_qs.exists():
data["7车间入库-日期"] = []
data["7车间入库-车间执行人"] = []
data["7车间入库-仓库执行人"] = []
for item in mioitem_qs:
data["7车间入库-日期"].append(item.mio.inout_date)
if item.mio.mio_user:
data["7车间入库-车间执行人"].append(item.mio.mio_user)
if item.mio.do_user:
data["7车间入库-仓库执行人"].append(item.mio.do_user)
for field in mioitem_count_fields:
if getattr(item, field) > 0:
if f'7车间入库-{field}' not in data:
data[f'7车间入库-{field}'] = int(getattr(item, field))
else:
data[f'7车间入库-{field}'] += int(getattr(item, field))
data["7车间入库-合格率"] = round((data["7车间入库-count"] - data["7车间入库-count_notok"]) * 100/ data["7车间入库-count"], 1)
data["7车间入库-日期"] = list(set(data["7车间入库-日期"]))
data["7车间入库-日期"] = ";".join([item.strftime("%Y-%m-%d") for item in data["7车间入库-日期"]])
data["7车间入库-车间执行人"] = list(set(data["7车间入库-车间执行人"]))
data["7车间入库-车间执行人"] = ";".join([item.name for item in data["7车间入库-车间执行人"]])
data["7车间入库-仓库执行人"] = list(set(data["7车间入库-仓库执行人"]))
data["7车间入库-仓库执行人"] = ";".join([item.name for item in data["7车间入库-仓库执行人"]])
# 6车间生产领料数据
mioitem6_qs = MIOItem.objects.filter(mio__belong_dept=dept6, mio__type="do_out",
batch=batch,
mio__submit_time__isnull=False)
if mioitem6_qs.exists():
data["6车间生产领料-日期"] = []
for item in mioitem6_qs:
data["6车间生产领料-日期"].append(item.mio.inout_date)
for field in mioitem_count_fields:
if getattr(item, field) > 0:
if f'6车间生产领料-{field}' not in data:
data[f'6车间生产领料-{field}'] = int(getattr(item, field))
else:
data[f'6车间生产领料-{field}'] += int(getattr(item, field))
data["6车间生产领料-日期"] = list(set(data["6车间生产领料-日期"]))
data["6车间生产领料-日期"] = ";".join([item.strftime("%Y-%m-%d") for item in data["6车间生产领料-日期"]])
# 6车间工段生产数据
mgroup_list = ["平头", "粘铁头", "粗中细磨", "抛光", "开槽"]
for mgroup_name in mgroup_list:
mgroup = Mgroup.objects.get(name=mgroup_name)
mlogs_qs = Mlog.objects.filter(submit_time__isnull=False, mgroup=mgroup, batch=batch)
if mlogs_qs.exists():
data[f'6车间-{mgroup_name}-日期'] = []
data[f'6车间-{mgroup_name}-操作人'] = []
for item in mlogs_qs:
if item.handle_date:
data[f'6车间-{mgroup_name}-日期'].append(item.handle_date)
if item.handle_user:
data[f'6车间-{mgroup_name}-操作人'].append(item.handle_user)
for field in mlog_count_fields:
if getattr(item, field) > 0:
if f'6车间-{mgroup_name}-{field}' not in data:
data[f'6车间-{mgroup_name}-{field}'] = getattr(item, field)
else:
data[f'6车间-{mgroup_name}-{field}'] += getattr(item, field)
data[f'6车间-{mgroup_name}-日期'] = list(set(data[f'6车间-{mgroup_name}-日期']))
data[f'6车间-{mgroup_name}-日期'] = ";".join([item.strftime("%Y-%m-%d") for item in data[f'6车间-{mgroup_name}-日期']])
data[f'6车间-{mgroup_name}-操作人'] = list(set(data[f'6车间-{mgroup_name}-操作人']))
data[f'6车间-{mgroup_name}-操作人'] = ";".join([item.name for item in data[f'6车间-{mgroup_name}-操作人']])
data[f'6车间-{mgroup_name}-合格率'] = round(data[f'6车间-{mgroup_name}-count_ok'] * 100/ data[f'6车间-{mgroup_name}-count_real'], 1)
# 6车间入库/检验数据
# mioitem6_qs2 = MIOItem.objects.filter(mio__belong_dept=dept6, mio__type="do_in",
# batch=batch,
# mio__submit_time__isnull=False)
# if mioitem6_qs2.exists():
# data["6车间生产入库-日期"] = []
# for item in mioitem6_qs:
# data["6车间生产入库-日期"].append(item.mio.inout_date)
# for field in mioitem_count_fields:
# if getattr(item, field) > 0:
# if f'6车间生产入库-{field}' not in data:
# data[f'6车间生产入库-{field}'] = getattr(item, field)
# else:
# data[f'6车间生产入库-{field}'] += getattr(item, field)
# data["6车间生产入库-日期"] = list(set(data["6车间生产入库-日期"]))
# data["6车间生产入库-日期"] = ";".join([item.strftime("%Y-%m-%d") for item in data["6车间生产入库-日期"]])
# 成品检验数据
ftestwork_count_fields = FtestWork.count_fields()
ftestwork_qs = FtestWork.objects.filter(batch=batch)
if ftestwork_qs.exists():
data["成品检验-日期"] = []
data['成品检验-检验人'] = []
for item in ftestwork_qs:
if item.test_date:
data["成品检验-日期"].append(item.test_date)
if item.test_user:
data['成品检验-检验人'].append(item.test_user)
for field in ftestwork_count_fields:
if field == 'count_notok_json':
for k, v in getattr(item, field).items():
if f'成品检验-{k}' not in data:
data[f'成品检验-{k}'] = v
else:
data[f'成品检验-{k}'] += v
else:
if getattr(item, field) > 0:
if f'成品检验-{field}' not in data:
data[f'成品检验-{field}'] = getattr(item, field)
else:
data[f'成品检验-{field}'] += getattr(item, field)
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['成品检验-检验人']])
data['成品检验-合格率'] = round(data['成品检验-count_ok'] * 100/ data['成品检验-count'], 1)
return data