diff --git a/apps/wpm/services_2.py b/apps/wpm/services_2.py index 66bfea14..1865ccf8 100644 --- a/apps/wpm/services_2.py +++ b/apps/wpm/services_2.py @@ -12,7 +12,7 @@ import decimal import logging myLogger = logging.getLogger('log') -def get_alldata_with_batch_and_store(batch: str): +def get_alldata_with_batch_and_store(batch: str, need_update_time=True): """ 获取某个批次的整体生产数据并保存 """ @@ -29,7 +29,8 @@ def get_alldata_with_batch_and_store(batch: str): bobj, _ = BatchSt.objects.get_or_create(batch=batch, defaults={ "last_time": last_time }) - bobj.last_time = last_time + if need_update_time: + bobj.last_time = last_time bobj.data = json.loads(json.dumps(data, cls=MyJSONEncoder)) bobj.save() @@ -278,23 +279,6 @@ def get_alldata_with_batch(batch: str): myLogger.error(f"六车间_{mgroup_name}_合格率decimal.InvalidOperation-{data}") data[f'六车间_{mgroup_name}_合格率'] = 0 - # 六车间入库/检验数据 - # 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["六车间生产入库_日期"] = [] - # for item in mioitem6_qs: - # data["六车间生产入库_日期"].append(item.mio.inout_date) - # for field in mioitem_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.strftime("%Y-%m-%d") for item in data["六车间生产入库_日期"]]) - ftestwork_count_fields = FtestWork.count_fields() # 六车间中检数据 ftestwork_qs = FtestWork.objects.filter(batch=batch, type="process") @@ -325,6 +309,35 @@ def get_alldata_with_batch(batch: str): data['六车间中检_检验人'] = list(set(data['六车间中检_检验人'])) data['六车间中检_检验人'] = ";".join([item.name for item in data['六车间中检_检验人']]) + # 六车间入库/检验数据 + 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["六车间生产入库_日期"] = [] + data["六车间生产入库_检验日期"] = [] + data["六车间生产入库_检验人"] = [] + for item in mioitem6_qs: + data["六车间生产入库_日期"].append(item.mio.inout_date) + if item.test_date: + data["六车间生产入库_检验日期"].append(item.test_date) + + for field in mioitem_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.strftime("%Y-%m-%d") for item in data["六车间生产入库_日期"]]) + data["六车间生产入库_检验日期"] = list(set(data["六车间生产入库_检验日期"])) + data["六车间生产入库_检验日期"] = ";".join([item.strftime("%Y-%m-%d") for item in data["六车间生产入库_检验日期"]]) + try: + data['六车间生产入库_合格率'] = round((data['六车间生产入库_count']-data['六车间生产入库_count_notok ']) * 100/ data['六车间生产入库_count'], 1) + except decimal.InvalidOperation: + myLogger.error("六车间生产入库_合格率decimal.InvalidOperation-{data}") + data['六车间生产入库_合格率'] = 0 + # 成品检验数据 ftestwork_qs = FtestWork.objects.filter(batch=batch, type="prod") if ftestwork_qs.exists(): @@ -354,9 +367,27 @@ def get_alldata_with_batch(batch: str): 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"]: + data["六车间_批次生产合格率"] = round(data["成品检验_count_ok"] * 100/ data["六车间领料_count"], 1) if data["棒料成型_count_real"]: data["七车间_批次应出合格率"] = round(data["成品检验_count_ok"] * 100/ data["棒料成型_count_real"], 1) + # 销售发货数据 + mioitem_qs = MIOItem.objects.filter(batch=batch, mio__type="sale_out", mio__submit_time__isnull=False) + if mioitem_qs.exists(): + data["销售发货_日期"] = [] + data['销售发货_执行人'] = [] + data['销售发货_count'] = 0 + for item in mioitem_qs: + last_time = item.mio.update_time if item.mio.update_time > last_time else last_time + if item.mio.inout_date: + data["销售发货_日期"].append(item.mio.inout_date) + data['销售发货_执行人'].append(item.mio.user) + data['销售发货_count']+= item.count + if data["棒料成型_count_real"]: + data["七车间_批次发货合格率"] = round(data["销售发货_count"] * 100/ data["棒料成型_count_real"], 1) + if data["六车间领料_count"]: + data["六车间_批次发货合格率"] = round(data["销售发货_count"] * 100/ data["六车间领料_count"], 1) + return last_time, data \ No newline at end of file