From a34514160d9f1c320dd2c4b9b343297938ce4da9 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 4 Jun 2025 10:05:06 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=8E=B7=E5=8F=96first=5Ftime,=20last?= =?UTF-8?q?=5Ftime=E7=8B=AC=E7=AB=8B=E5=87=BA=E4=B8=80=E4=B8=AA=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wpm/scripts/batch_gxerp.py | 20 ++-------- apps/wpm/services_2.py | 71 ++++++++++++++------------------- 2 files changed, 32 insertions(+), 59 deletions(-) diff --git a/apps/wpm/scripts/batch_gxerp.py b/apps/wpm/scripts/batch_gxerp.py index c888bb75..91912f8c 100644 --- a/apps/wpm/scripts/batch_gxerp.py +++ b/apps/wpm/scripts/batch_gxerp.py @@ -5,7 +5,7 @@ from apps.wpm.models import Mlogb, MlogbDefect import decimal from django.db.models import Sum from datetime import datetime - +from apps.wpm.services_2 import get_f_l_date myLogger = logging.getLogger("log") def main(batch: str): @@ -109,24 +109,10 @@ def main(batch: str): except decimal.InvalidOperation: data["外观检验_完全直通合格率"] = 0 - first_time = None - last_time = None - for k, v in data.items(): - if k.endswith("_日期"): - if v: - v = v.split(";") - if first_time is None: - first_time = min(v) - else: - first_time = min(first_time, min(v)) - if last_time is None: - last_time = max(v) - else: - last_time = max(last_time, max(v)) + res = get_f_l_date(data) - return data, {"first_time": datetime.strptime(f"{first_time} 00:00:00", "%Y-%m-%d %H:%M:%S").replace(tzinfo=tz_shanghai) if first_time else None, - "last_time": datetime.strptime(f"{last_time} 23:59:59", "%Y-%m-%d %H:%M:%S").replace(tzinfo=tz_shanghai) if last_time else None} + return data, res if __name__ == '__main__': pass \ No newline at end of file diff --git a/apps/wpm/services_2.py b/apps/wpm/services_2.py index 830ccc0d..85a1c9f4 100644 --- a/apps/wpm/services_2.py +++ b/apps/wpm/services_2.py @@ -3,7 +3,6 @@ from apps.mtm.models import Mgroup from apps.system.models import Dept from apps.inm.models import MIOItem from apps.qm.models import FtestWork -from django.utils import timezone from datetime import datetime from django.conf import settings import json @@ -12,7 +11,10 @@ import decimal from apps.utils.thread import MyThread import logging import time +from zoneinfo import ZoneInfo + myLogger = logging.getLogger('log') +tz_shanghai = ZoneInfo("Asia/Shanghai") # 批次统计分析 @@ -58,7 +60,6 @@ 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车间') @@ -68,7 +69,6 @@ def get_alldata_with_batch(batch: str): mlog_count_fields = Mlog.count_fields() - first_time = None material_start = None if mlogs_blcx_qs.exists(): data["产品规格"] = [] @@ -76,9 +76,6 @@ def get_alldata_with_batch(batch: str): data["棒料成型_切料人"] = [] data["棒料成型_备注"] = "" for item in mlogs_blcx_qs: - utime = item.submit_time - last_time = utime if utime > last_time else last_time - first_time = utime if first_time is None else (utime if utime < first_time else first_time) if material_start is None: material_start = item.material_out data["产品规格"].append(item.material_out) # 对象 @@ -116,9 +113,6 @@ def get_alldata_with_batch(batch: str): data["产品规格"] = [] data["管料成型_备注"] = "" for item in mlogs_glcx_qs: - utime = item.submit_time - last_time = utime if utime > last_time else last_time - first_time = utime if first_time is None else (utime if utime < first_time else first_time) if material_start is None: material_start = item.material_out data["产品规格"].append(item.material_out) # 对象 @@ -143,9 +137,6 @@ def get_alldata_with_batch(batch: str): data["七车间入库_仓库执行人"] = [] data["七车间入库_检验备注"] = "" for item in mioitem_qs: - utime = item.mio.submit_time - last_time = utime if utime > last_time else last_time - first_time = utime if first_time is None else (utime if utime < first_time else first_time) if material_start is None: material_start = item.material data["七车间入库_日期"].append(item.mio.inout_date) @@ -181,9 +172,6 @@ def get_alldata_with_batch(batch: str): data["十车间入库_日期"] = [] data["十车间入库_检验备注"] = "" for item in mioitem10_qs: - utime = item.mio.submit_time - last_time = utime if utime > last_time else last_time - first_time = utime if first_time is None else (utime if utime < first_time else first_time) if material_start is None: material_start = item.material if item.test_note: @@ -220,13 +208,6 @@ def get_alldata_with_batch(batch: str): data["产品规格"] = [] for item in mlogs_glth_qs: data["产品规格"].append(item.material_out) - utime = item.submit_time - last_time = utime if utime > last_time else last_time - first_time = utime if first_time is None else (utime if utime < first_time else first_time) - if first_time is None: - first_time = item.update_time - else: - first_time = item.update_time if item.update_time < first_time else first_time if material_start is None: material_start = item.material_out if item.note: @@ -260,9 +241,6 @@ def get_alldata_with_batch(batch: str): data["产品规格"] = [] for item in mioitem6_qs: data["产品规格"].append(item.material) - utime = item.mio.submit_time - last_time = utime if utime > last_time else last_time - first_time = utime if first_time is None else (utime if utime < first_time else first_time) if material_start is None: material_start = item.material data["六车间领料_日期"].append(item.mio.inout_date) @@ -300,9 +278,6 @@ def get_alldata_with_batch(batch: str): data[f'六车间_{mgroup_name}_操作人'] = [] data[f'六车间_{mgroup_name}_备注'] = "" for item in mlogs_qs: - utime = item.submit_time - last_time = utime if utime > last_time else last_time - first_time = utime if first_time is None else (utime if utime < first_time else first_time) if material_start is None: material_start = item.material_out if item.note: @@ -334,9 +309,6 @@ def get_alldata_with_batch(batch: str): data["六车间中检_日期"] = [] data['六车间中检_检验人'] = [] for item in ftestwork_qs: - utime = item.update_time - last_time = utime if utime > last_time else last_time - first_time = utime if first_time is None else (utime if utime < first_time else first_time) if material_start is None: material_start = item.material if item.test_date: @@ -370,9 +342,6 @@ def get_alldata_with_batch(batch: str): data["六车间生产入库_检验日期"] = [] data["六车间生产入库_检验人"] = [] for item in mioitem6_qs2: - utime = item.mio.submit_time - last_time = utime if utime > last_time else last_time - first_time = utime if first_time is None else (utime if utime < first_time else first_time) if material_start is None: material_start = item.material data["六车间生产入库_日期"].append(item.mio.inout_date) @@ -400,9 +369,6 @@ def get_alldata_with_batch(batch: str): data["成品检验_日期"] = [] data['成品检验_检验人'] = [] for item in ftestwork_qs: - utime = item.update_time - last_time = utime if utime > last_time else last_time - first_time = utime if first_time is None else (utime if utime < first_time else first_time) if material_start is None: material_start = item.material if item.test_date: @@ -439,9 +405,6 @@ def get_alldata_with_batch(batch: str): data['销售发货_仓库执行人'] = [] data['销售发货_count'] = 0 for item in mioitem_qs: - utime = item.mio.submit_time - last_time = utime if utime > last_time else last_time - first_time = utime if first_time is None else (utime if utime < first_time else first_time) if material_start is None: material_start = item.material if item.mio.inout_date: @@ -453,7 +416,31 @@ def get_alldata_with_batch(batch: str): data["七车间_批次发货合格率"] = round(data["销售发货_count"] * 100/ data["棒料成型_count_real"], 1) if getattr(data, "六车间领料_count", 0) > 0: data["六车间_批次发货合格率"] = round(data["销售发货_count"] * 100/ data["六车间领料_count"], 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["销售发货_日期"]]) - return data, {"material_start": material_start, "last_time": last_time, "first_time": first_time} - \ No newline at end of file + res = get_f_l_date(data) + return data, {"material_start": material_start, **res} + + +def get_f_l_date(data): + first_date = None + last_date = None + for k, v in data.items(): + if k.endswith("_日期"): + if v: + v = v.split(";") + if first_date is None: + first_date = min(v) + else: + first_date = min(first_date, min(v)) + if last_date is None: + last_date = max(v) + else: + last_date = max(last_date, max(v)) + return {"first_date": first_date, + "last_date": last_date, + "first_time": datetime.strptime(f"{first_date} 00:00:00", "%Y-%m-%d %H:%M:%S").replace(tzinfo=tz_shanghai) if first_date else None, + "last_time": datetime.strptime(f"{last_date} 23:59:59", "%Y-%m-%d %H:%M:%S").replace(tzinfo=tz_shanghai) if last_date else None}