From 8435b35be6580a9c2b32111dc4fd618221ffd7b1 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 2 Dec 2024 12:27:26 +0800 Subject: [PATCH] feat: get_alldata_with_batch --- apps/inm/models.py | 7 ++ apps/qm/models.py | 7 ++ apps/wpm/services_2.py | 156 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 170 insertions(+) create mode 100644 apps/wpm/services_2.py diff --git a/apps/inm/models.py b/apps/inm/models.py index e0753961..09b2ef11 100644 --- a/apps/inm/models.py +++ b/apps/inm/models.py @@ -143,6 +143,13 @@ class MIOItem(BaseModel): is_testok = models.BooleanField('检验是否合格', default=True) + @property + def count_fields(self): + mioitem_count_fields = [] + for f in MIOItem._meta.fields: + if f.name.startswith("count"): + mioitem_count_fields.append(f.name) + return mioitem_count_fields class MIOItemA(BaseModel): """ diff --git a/apps/qm/models.py b/apps/qm/models.py index e5d0a044..69fa48da 100644 --- a/apps/qm/models.py +++ b/apps/qm/models.py @@ -153,6 +153,13 @@ class FtestWork(CommonBDModel): note = models.TextField('备注', null=True, blank=True) equipment = models.ForeignKey(Equipment, verbose_name='所属检验设备', on_delete=models.SET_NULL, null=True, blank=True) + @property + def count_fields(self): + ftestwork_count_fields = [] + for f in FtestWork._meta.fields: + if f.name.startswith("count"): + ftestwork_count_fields.append(f.name) + return ftestwork_count_fields class Ftest(CommonBDModel): """ diff --git a/apps/wpm/services_2.py b/apps/wpm/services_2.py new file mode 100644 index 00000000..c8f4925e --- /dev/null +++ b/apps/wpm/services_2.py @@ -0,0 +1,156 @@ +from apps.wpm.models import Mlog +from apps.mtm.models import Material, Mgroup +from apps.system.models import Dept +from apps.inm.models import MIOItem +from apps.qm.models import FtestWork + +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) # 对象 + data["棒料成型-出料人"].append(item.handle_user) # 对象 + 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) + data["7车间入库-车间执行人"].append(item.mio.mio_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}'] = getattr(item, field) + else: + data[f'7车间入库-{field}'] += 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}'] = 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车间生产领料-日期"]]) + + # 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: + data[f'6车间-{mgroup_name}-日期'].append(item.handle_date) + 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: + data["成品检验-日期"].append(item.test_date) + 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 + \ No newline at end of file