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