feat: 获取first_time, last_time独立出一个方法

This commit is contained in:
caoqianming 2025-06-04 10:05:06 +08:00
parent e1eaa78b11
commit a34514160d
2 changed files with 32 additions and 59 deletions

View File

@ -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

View File

@ -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}
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}