feat: batchst添加字段并更新光子的统计
This commit is contained in:
parent
20384ca33c
commit
c29d1e99d8
|
@ -178,9 +178,11 @@ class BatchStFilter(filters.FilterSet):
|
|||
model = BatchSt
|
||||
fields = {
|
||||
"batch": ["exact", "contains", "startswith"],
|
||||
"first_time": ["exact", "gte", "lte"],
|
||||
"last_time": ["exact", "gte", "lte"],
|
||||
"update_time": ["exact", "gte", "lte"],
|
||||
"material_start": ["exact"],
|
||||
"material_start__cate": ["exact"],
|
||||
"material_start__type": ["exact"],
|
||||
"material_start__process": ["exact"]
|
||||
}
|
||||
|
|
|
@ -609,6 +609,7 @@ class BatchSt(BaseModel):
|
|||
"""
|
||||
batch = models.TextField("批次号", db_index=True)
|
||||
version = models.IntegerField("版本号", default=1, db_index=True)
|
||||
first_time = models.DateTimeField("首次操作时间", null=True, blank=True)
|
||||
last_time = models.DateTimeField("最后操作时间", null=True, blank=True)
|
||||
data = models.JSONField("数据", default=list, blank=True)
|
||||
material_start = models.ForeignKey(Material, verbose_name="起始物料", on_delete=models.SET_NULL, null=True, blank=True)
|
||||
|
|
|
@ -12,27 +12,29 @@ import decimal
|
|||
import logging
|
||||
myLogger = logging.getLogger('log')
|
||||
|
||||
def get_alldata_with_batch_and_store(batch: str, need_update_time=True):
|
||||
def get_alldata_with_batch_and_store(batch: str):
|
||||
"""
|
||||
获取某个批次的整体生产数据并保存
|
||||
"""
|
||||
need_update = False
|
||||
data = None
|
||||
action = "get"
|
||||
BASE_PROJECT_CODE = getattr(settings, "BASE_PROJECT_CODE", None)
|
||||
if BASE_PROJECT_CODE == "gzerp":
|
||||
need_update = True
|
||||
last_time, data = get_alldata_with_batch(batch)
|
||||
action = "get_or_create"
|
||||
data, extra = get_alldata_with_batch(batch)
|
||||
elif BASE_PROJECT_CODE == "gxerp":
|
||||
need_update = True
|
||||
from apps.wpm.scripts.batch_gxerp import main
|
||||
last_time, data = main(batch)
|
||||
data, extra = main(batch)
|
||||
|
||||
if need_update and last_time and data:
|
||||
bobj, _ = BatchSt.objects.get_or_create(batch=batch, defaults={
|
||||
"last_time": last_time
|
||||
})
|
||||
if need_update_time:
|
||||
bobj.last_time = last_time
|
||||
if data:
|
||||
if action == "get_or_create":
|
||||
bobj, _ = BatchSt.objects.get_or_create(batch=batch)
|
||||
elif action == "get":
|
||||
bobj = BatchSt.objects.get(batch=batch, version=1)
|
||||
bobj.data = json.loads(json.dumps(data, cls=MyJSONEncoder))
|
||||
for k, v in extra.items():
|
||||
if hasattr(bobj, k):
|
||||
setattr(bobj, k, v)
|
||||
bobj.save()
|
||||
|
||||
|
||||
|
@ -50,13 +52,19 @@ 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["产品规格"] = []
|
||||
data["棒料成型_出料人"] = []
|
||||
data["棒料成型_切料人"] = []
|
||||
data["棒料成型_备注"] = ""
|
||||
for item in mlogs_blcx_qs:
|
||||
last_time = item.update_time if item.update_time > last_time else last_time
|
||||
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) # 对象
|
||||
if item.handle_user:
|
||||
data["棒料成型_出料人"].append(item.handle_user) # 对象
|
||||
|
@ -82,7 +90,7 @@ def get_alldata_with_batch(batch: str):
|
|||
except ZeroDivisionError:
|
||||
data["棒料成型_合格率"] = 0
|
||||
except decimal.InvalidOperation:
|
||||
myLogger.error(f"棒料成型_合格率计算错误decimal.InvalidOperation-{data}")
|
||||
# myLogger.error(f"棒料成型_合格率计算错误decimal.InvalidOperation-{data}")
|
||||
data["棒料成型_合格率"] = 0
|
||||
|
||||
# 管料成型数据
|
||||
|
@ -92,7 +100,11 @@ def get_alldata_with_batch(batch: str):
|
|||
data["产品规格"] = []
|
||||
data["管料成型_备注"] = ""
|
||||
for item in mlogs_glcx_qs:
|
||||
last_time = item.update_time if item.update_time > last_time else last_time
|
||||
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) # 对象
|
||||
if item.note:
|
||||
data["管料成型_备注"] = ";".join([data["管料成型_备注"], item.note])
|
||||
|
@ -115,7 +127,11 @@ def get_alldata_with_batch(batch: str):
|
|||
data["七车间入库_仓库执行人"] = []
|
||||
data["七车间入库_检验备注"] = ""
|
||||
for item in mioitem_qs:
|
||||
last_time = item.update_time if item.update_time > last_time else last_time
|
||||
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)
|
||||
if item.test_note:
|
||||
data["七车间入库_检验备注"] = ";".join([data["七车间入库_检验备注"], item.test_note])
|
||||
|
@ -149,7 +165,11 @@ def get_alldata_with_batch(batch: str):
|
|||
data["十车间入库_日期"] = []
|
||||
data["十车间入库_检验备注"] = ""
|
||||
for item in mioitem10_qs:
|
||||
last_time = item.update_time if item.update_time > last_time else last_time
|
||||
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:
|
||||
data["十车间入库_检验备注"] = ";".join([data["十车间入库_检验备注"], item.test_note])
|
||||
if item.mio.do_user:
|
||||
|
@ -184,7 +204,15 @@ def get_alldata_with_batch(batch: str):
|
|||
data["产品规格"] = []
|
||||
for item in mlogs_glth_qs:
|
||||
data["产品规格"].append(item.material_out)
|
||||
last_time = item.update_time if item.update_time > last_time else last_time
|
||||
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:
|
||||
data["管料退火_备注"] = ";".join([data["管料退火_备注"], item.note])
|
||||
if item.handle_date:
|
||||
|
@ -216,7 +244,11 @@ def get_alldata_with_batch(batch: str):
|
|||
data["产品规格"] = []
|
||||
for item in mioitem6_qs:
|
||||
data["产品规格"].append(item.material)
|
||||
last_time = item.update_time if item.update_time > last_time else last_time
|
||||
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)
|
||||
if item.mio.do_user:
|
||||
data["六车间领料_仓库执行人"].append(item.mio.do_user)
|
||||
|
@ -248,11 +280,15 @@ def get_alldata_with_batch(batch: str):
|
|||
mgroups = Mgroup.objects.filter(name=mgroup_name)
|
||||
mlogs_qs = Mlog.objects.filter(submit_time__isnull=False, mgroup__in=mgroups, batch=batch)
|
||||
if mlogs_qs.exists():
|
||||
last_time = item.update_time if item.update_time > last_time else last_time
|
||||
data[f'六车间_{mgroup_name}_日期'] = []
|
||||
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:
|
||||
data[f'六车间_{mgroup_name}_备注'] = ";".join([data[f'六车间_{mgroup_name}_备注'], item.note])
|
||||
if item.handle_date:
|
||||
|
@ -272,7 +308,7 @@ def get_alldata_with_batch(batch: str):
|
|||
try:
|
||||
data[f'六车间_{mgroup_name}_合格率'] = round(data[f'六车间_{mgroup_name}_count_ok'] * 100/ data[f'六车间_{mgroup_name}_count_real'], 1)
|
||||
except decimal.InvalidOperation:
|
||||
myLogger.error(f"六车间_{mgroup_name}_合格率decimal.InvalidOperation-{data}")
|
||||
# myLogger.error(f"六车间_{mgroup_name}_合格率decimal.InvalidOperation-{data}")
|
||||
data[f'六车间_{mgroup_name}_合格率'] = 0
|
||||
|
||||
ftestwork_count_fields = FtestWork.count_fields()
|
||||
|
@ -282,7 +318,11 @@ def get_alldata_with_batch(batch: str):
|
|||
data["六车间中检_日期"] = []
|
||||
data['六车间中检_检验人'] = []
|
||||
for item in ftestwork_qs:
|
||||
last_time = item.update_time if item.update_time > last_time else last_time
|
||||
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:
|
||||
data["六车间中检_日期"].append(item.test_date)
|
||||
if item.test_user:
|
||||
|
@ -314,6 +354,11 @@ 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)
|
||||
if item.test_date:
|
||||
data["六车间生产入库_检验日期"].append(item.test_date)
|
||||
|
@ -330,7 +375,7 @@ def get_alldata_with_batch(batch: str):
|
|||
try:
|
||||
data['六车间生产入库_合格率'] = round((data['六车间生产入库_count'] - data['六车间生产入库_count_notok']) * 100/ data['六车间生产入库_count'], 1)
|
||||
except decimal.InvalidOperation:
|
||||
myLogger.error("六车间生产入库_合格率decimal.InvalidOperation-{data}")
|
||||
# myLogger.error("六车间生产入库_合格率decimal.InvalidOperation-{data}")
|
||||
data['六车间生产入库_合格率'] = 0
|
||||
|
||||
# 成品检验数据
|
||||
|
@ -339,7 +384,11 @@ def get_alldata_with_batch(batch: str):
|
|||
data["成品检验_日期"] = []
|
||||
data['成品检验_检验人'] = []
|
||||
for item in ftestwork_qs:
|
||||
last_time = item.update_time if item.update_time > last_time else last_time
|
||||
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:
|
||||
data["成品检验_日期"].append(item.test_date)
|
||||
if item.test_user:
|
||||
|
@ -374,7 +423,11 @@ def get_alldata_with_batch(batch: str):
|
|||
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
|
||||
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:
|
||||
data["销售发货_日期"].append(item.mio.inout_date)
|
||||
if item.mio.do_user:
|
||||
|
@ -386,5 +439,5 @@ def get_alldata_with_batch(batch: str):
|
|||
data["六车间_批次发货合格率"] = round(data["销售发货_count"] * 100/ data["六车间领料_count"], 1)
|
||||
data['销售发货_仓库执行人'] = ";".join([item.name for item in data['销售发货_仓库执行人']])
|
||||
|
||||
return last_time, data
|
||||
return data, {"material_start": material_start, "last_time": last_time, "first_time": first_time}
|
||||
|
Loading…
Reference in New Issue