diff --git a/apps/wpm/services_2.py b/apps/wpm/services_2.py index f5ea304a..99a0d932 100644 --- a/apps/wpm/services_2.py +++ b/apps/wpm/services_2.py @@ -25,7 +25,8 @@ def get_alldata_with_batch(batch: str): last_time = timezone.make_aware(datetime(1990, 4, 4, 0, 0, 0)) data = {"产品批次编号": batch} dept7 = Dept.objects.get(name='7车间') - dept6 = Dept.objects.get(name='6车间') + dept6 = Dept.objects.get(name='六车间') + dept10 = Dept.objects.get(name='10车间') mgroup_blcx = Mgroup.objects.get(name="棒料成型") mlogs_blcx_qs = Mlog.objects.filter(submit_time__isnull=False, mgroup=mgroup_blcx, batch=batch) @@ -33,152 +34,235 @@ def get_alldata_with_batch(batch: str): if mlogs_blcx_qs.exists(): data["产品规格"] = [] - data["棒料成型-出料人"] = [] - data["棒料成型-切料人"] = [] - data["棒料成型-备注"] = "" + data["棒料成型_出料人"] = [] + data["棒料成型_切料人"] = [] + data["棒料成型_备注"] = "" for item in mlogs_blcx_qs: last_time = item.update_time if item.update_time > last_time else last_time data["产品规格"].append(item.material_out) # 对象 if item.handle_user: - data["棒料成型-出料人"].append(item.handle_user) # 对象 + data["棒料成型_出料人"].append(item.handle_user) # 对象 if item.handle_user_2: - data["棒料成型-切料人"].append(item.handle_user_2) # 对象 + data["棒料成型_切料人"].append(item.handle_user_2) # 对象 if item.note: - data["棒料成型-备注"] = ";".join([data["棒料成型-备注"], item.note]) + data["棒料成型_备注"] = ";".join([data["棒料成型_备注"], item.note]) for field in mlog_count_fields: if getattr(item, field) > 0 or field in ["count_real", "count_ok"]: - if f'棒料成型-{field}' not in data: - data[f'棒料成型-{field}'] = getattr(item, field) + if f'棒料成型_{field}' not in data: + data[f'棒料成型_{field}'] = getattr(item, field) else: - data[f'棒料成型-{field}'] += getattr(item, field) + 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) + 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) + # 管料成型数据 + mgroup_glcx = Mgroup.objects.get(name="管料成型") + mlogs_glcx_qs = Mlog.objects.filter(submit_time__isnull=False, mgroup=mgroup_glcx, batch=batch) + if mlogs_glcx_qs.exists(): + data["产品规格"] = [] + for item in mlogs_glcx_qs: + last_time = item.update_time if item.update_time > last_time else last_time + data["产品规格"].append(item.material_out) # 对象 + for field in mlog_count_fields: + if getattr(item, field) > 0 or field in ["count_real", "count_ok"]: + 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["管料成型_合格率"] = 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(): - last_time = item.update_time if item.update_time > last_time else last_time - data["7车间入库-日期"] = [] - data["7车间入库-车间执行人"] = [] - data["7车间入库-仓库执行人"] = [] + data["七车间入库_日期"] = [] + data["七车间入库_车间执行人"] = [] + data["七车间入库_仓库执行人"] = [] for item in mioitem_qs: - data["7车间入库-日期"].append(item.mio.inout_date) + last_time = item.update_time if item.update_time > last_time else last_time + data["七车间入库_日期"].append(item.mio.inout_date) if item.mio.mio_user: - data["7车间入库-车间执行人"].append(item.mio.mio_user) + data["七车间入库_车间执行人"].append(item.mio.mio_user) if item.mio.do_user: - data["7车间入库-仓库执行人"].append(item.mio.do_user) + data["七车间入库_仓库执行人"].append(item.mio.do_user) for field in mioitem_count_fields: if getattr(item, field) > 0 or field in ["count", "count_notok"]: - if f'7车间入库-{field}' not in data: - data[f'7车间入库-{field}'] = int(getattr(item, field)) + if f'七车间入库_{field}' not in data: + data[f'七车间入库_{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车间入库-仓库执行人"]]) + data[f'七车间入库_{field}'] += int(getattr(item, field)) + data["七车间入库_合格率"] = round((data["七车间入库_count"] - data["七车间入库_count_notok"]) * 100/ data["七车间入库_count"], 1) + 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["七车间入库_仓库执行人"] = list(set(data["七车间入库_仓库执行人"])) + data["七车间入库_仓库执行人"] = ";".join([item.name for item in data["七车间入库_仓库执行人"]]) - # 6车间生产领料数据 + # 十车间入库检验 + mioitem10_qs = MIOItem.objects.filter(mio__belong_dept=dept10, mio__type="do_in", batch=batch, mio__submit_time__isnull=False) + if mioitem10_qs.exists(): + + data["十车间入库_抽检人"] = [] + data["十车间入库_仓库执行人"] = [] + data["十车间入库_日期"] = [] + for item in mioitem10_qs: + if item.mio.do_user: + data["十车间入库_仓库执行人"].append(item.mio.do_user) + if item.test_user: + data["十车间入库_抽检人"].append(item.test_user) + for field in mioitem_count_fields: + if getattr(item, field) > 0 or field in ["count", "count_notok", "count_sampling"]: + if f'十车间入库_{field}' not in data: + data[f'十车间入库_{field}'] = int(getattr(item, field)) + else: + data[f'十车间入库_{field}'] += int(getattr(item, field)) + data["十车间入库_抽检人"] = list(set(data["十车间入库_抽检人"])) + data["十车间入库_抽检人"] = ";".join([item.name for item in data["十车间入库_抽检人"]]) + data["十车间入库_抽检合格数"] = data["十车间入库_count_sampling"] - data["十车间入库_count_notok"] + data["十车间入库_抽检合格率"] = round(data["十车间入库_抽检合格数"] * 100/ data["十车间入库_count_sampling"], 1) + data["十车间入库_仓库执行人"] = list(set(data["十车间入库_仓库执行人"])) + data["十车间入库_仓库执行人"] = ";".join([item.name for item in data["十车间入库_仓库执行人"]]) + data["十车间入库_日期"] = list(set(data["十车间入库_日期"])) + data["十车间入库_日期"] = ";".join([item.strftime("%Y-%m-%d") for item in data["十车间入库_日期"]]) + data["十车间入库_合格数"] = data["十车间入库_count"] - data["十车间入库_count_notok"] + data["十车间入库_合格率"] = round((data["十车间入库_count"] - data["十车间入库_count_notok"]) * 100/ data["十车间入库_count"], 1) + + # 管料退火生产数据 + mgroup_gltx = Mgroup.objects.get(name="管料退火") + mlogs_glth_qs = Mlog.objects.filter(submit_time__isnull=False, mgroup=mgroup_gltx, batch=batch) + if mlogs_glth_qs.exists(): + data["管料退火_日期"] = [] + data["管料退火_操作人"] = [] + for item in mlogs_glth_qs: + if item.handle_date: + data["管料退火_日期"].append(item.handle_date) + if item.mlog_user: + data["管料退火_操作人"].append(item.mlog_user) + for field in mlog_count_fields: + if getattr(item, field) > 0 or field in ["count", "count_notok"]: + if f'管料退火_{field}' not in data: + data[f'管料退火_{field}'] = int(getattr(item, field)) + else: + data[f'管料退火_{field}'] += int(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["管料退火_操作人"]]) + + + # 六车间领料数据 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车间生产领料-日期"] = [] + data["六车间领料_日期"] = [] + data["六车间领料-车间执行人"] = [] + data["六车间领料-仓库执行人"] = [] for item in mioitem6_qs: last_time = item.update_time if item.update_time > last_time else last_time - data["6车间生产领料-日期"].append(item.mio.inout_date) + data["六车间领料_日期"].append(item.mio.inout_date) + if item.mio.do_user: + data["六车间领料_仓库执行人"].append(item.mio.do_user) + if item.mio.mio_user: + data["六车间领料_车间执行人"].append(item.mio.mio_user) 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)) + if f'六车间领料_{field}' not in data: + data[f'六车间领料_{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车间生产领料-日期"]]) + data[f'六车间领料_{field}'] += int(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["六车间领料_车间执行人"] = list(set(data["六车间领料_车间执行人"])) + data["六车间领料_车间执行人"] = ";".join([item.name for item in data["六车间领料_车间执行人"]]) - # 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(): last_time = item.update_time if item.update_time > last_time else last_time - data[f'6车间-{mgroup_name}-日期'] = [] - data[f'6车间-{mgroup_name}-操作人'] = [] + data[f'六车间_{mgroup_name}-日期'] = [] + data[f'六车间_{mgroup_name}-操作人'] = [] for item in mlogs_qs: if item.handle_date: - data[f'6车间-{mgroup_name}-日期'].append(item.handle_date) + data[f'六车间_{mgroup_name}-日期'].append(item.handle_date) if item.handle_user: - data[f'6车间-{mgroup_name}-操作人'].append(item.handle_user) + data[f'六车间_{mgroup_name}-操作人'].append(item.handle_user) for field in mlog_count_fields: if getattr(item, field) > 0 or field in ["count_ok", "count_real"]: - if f'6车间-{mgroup_name}-{field}' not in data: - data[f'6车间-{mgroup_name}-{field}'] = getattr(item, field) + if f'六车间_{mgroup_name}-{field}' not in data: + data[f'六车间_{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) + data[f'六车间_{mgroup_name}-{field}'] += getattr(item, field) + 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}-操作人']]) + data[f'六车间_{mgroup_name}-合格率'] = round(data[f'六车间_{mgroup_name}-count_ok'] * 100/ data[f'六车间_{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车间生产入库-日期"] = [] + # data["六车间生产入库_日期"] = [] # for item in mioitem6_qs: - # data["6车间生产入库-日期"].append(item.mio.inout_date) + # data["六车间生产入库_日期"].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) + # if f'六车间生产入库_{field}' not in data: + # data[f'六车间生产入库_{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车间生产入库-日期"]]) + # data[f'六车间生产入库_{field}'] += getattr(item, field) + # data["六车间生产入库_日期"] = list(set(data["六车间生产入库_日期"])) + # data["六车间生产入库_日期"] = ";".join([item.strftime("%Y-%m-%d") for item in data["六车间生产入库_日期"]]) # 成品检验数据 ftestwork_count_fields = FtestWork.count_fields() ftestwork_qs = FtestWork.objects.filter(batch=batch) if ftestwork_qs.exists(): - data["成品检验-日期"] = [] - data['成品检验-检验人'] = [] + data["成品检验_日期"] = [] + data['成品检验_检验人'] = [] for item in ftestwork_qs: last_time = item.update_time if item.update_time > last_time else last_time if item.test_date: - data["成品检验-日期"].append(item.test_date) + data["成品检验_日期"].append(item.test_date) if item.test_user: - data['成品检验-检验人'].append(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 + if f'成品检验_{k}' not in data: + data[f'成品检验_{k}'] = v else: - data[f'成品检验-{k}'] += v + data[f'成品检验_{k}'] += v else: if getattr(item, field) > 0 or field in ["count", "count_ok"]: - if f'成品检验-{field}' not in data: - data[f'成品检验-{field}'] = getattr(item, field) + 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) + 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) + data["六车间_批次生产合格率"] = round(data["成品检验_count_ok"] * 100/ data["六车间领料_count"], 1) + if data["棒料成型_count_real"]: + data["七车间_批次应出合格率"] = round(data["成品检验_count_ok"] * 100/ data["棒料成型_count_real"], 1) return last_time, data \ No newline at end of file diff --git a/apps/wpm/views.py b/apps/wpm/views.py index 291e2e76..614bf941 100644 --- a/apps/wpm/views.py +++ b/apps/wpm/views.py @@ -524,7 +524,7 @@ class BatchStViewSet(ListModelMixin, CustomGenericViewSet): ordering_fields = ["batch", "last_time", "update_time"] ordering = ["batch"] filterset_fields = { - "batch": ["exact", "contains"], + "batch": ["exact", "contains", "startswith"], "last_time": ["exact", "gte", "lte"], "update_time": ["exact", "gte", "lte"] }