Files
Feeding_control_system/busisness/blls.py
2026-04-07 09:51:38 +08:00

259 lines
11 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# import os
# import sys
# # 添加项目根目录到Python路径
# sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))
from dataclasses import fields
from typing import List, Optional, Dict, Any
from datetime import datetime,timedelta
from busisness.models import ArtifactInfoModel, PDRecordModel,FreqRecordModel
from busisness.dals import ArtifactDal, PDRecordDal,FreqRecordDal
class ArtifactBll:
def __init__(self):
"""初始化数据访问层,创建数据库连接"""
# 假设数据库文件在db目录下
self.dal = ArtifactDal()
pass
def get_artifact_task(self) -> List[ArtifactInfoModel]:
"""获取官片任务数据"""
return self.dal.get_top_artifact(5, "ID desc")
def update_artifact_task(self, artifact_id: str, status: int) -> bool:
"""更新管片任务状态"""
return self.dal.update_artifact(artifact_id, {"Status": status})
def start_produce(self, code: str) -> bool:
"""开始管片生产"""
return self.dal.update_by_modulecode(code, {'Status': 2,'BeginTime':datetime.now()})
def finish_produce(self, code: str,weight:float) -> bool:
"""完成管片生产"""
return self.dal.update_by_modulecode(code, {'Status': 3,'EndTime':datetime.now(),'FBetonVolume':weight})
def finish_artifact_task(self, artifact_id: str,beton_volume:float) -> bool:
"""完成管片任务"""
return self.dal.update_artifact(artifact_id, {"Status": 3,"BetonVolume":beton_volume,"EndTime":datetime.now()})
def insert_artifact_task(self,model:ArtifactInfoModel) -> bool:
"""插入管片任务"""
if self.dal.get_artifactid(model.MouldCode):
return False
return self.dal.insert_artifact(model)
def save_artifact_task(self,model:ArtifactInfoModel) -> int:
"""保存管片任务(存在ModuleCode更新不存在插入存在ArtifactID不处理)"""
_artifactid=self.dal.get_artifactid(model.MouldCode)
if _artifactid is None:
return self.dal.insert_artifact(model)
else:
if model.ArtifactID:
if not _artifactid:
#不存在ArtifactID更新
update_dict={
'ArtifactID':model.ArtifactID,
'ArtifactActionID':model.ArtifactActionID,
'ArtifactIDVice1':model.ArtifactIDVice1,
'ProduceRingNumber':model.ProduceRingNumber,
'SkeletonID':model.SkeletonID,
'RingTypeCode':model.RingTypeCode,
'SizeSpecification':model.SizeSpecification,
'BuriedDepth':model.BuriedDepth,
'BlockNumber':model.BlockNumber,
'HoleRingMarking':model.HoleRingMarking,
'GroutingPipeMarking':model.GroutingPipeMarking,
'PolypropyleneFiberMarking':model.PolypropyleneFiberMarking,
'BetonVolume':model.BetonVolume,
'BetonTaskID':model.BetonTaskID,
}
return self.dal.update_by_modulecode(model.MouldCode, update_dict)
else:
#已经存在了ArtifactID不处理
return 1
return 1
def insert_artifact_bycode(self,model: dict) -> bool:
"""根据模具编号插入管片任务"""
if self.dal.exists_by_module_code(model["MouldCode"]):
return False
return self.dal.insert_artifact({
"MouldCode": model["MouldCode"],
"SizeSpecification": model["SizeSpecification"],
"BlockNumber": model["BlockNumber"],
"BetonVolume": model["BetonVolume"],
"PStatus":1,
"Status": 1,
"Source": 2,
"OptTime": datetime.now(),
})
def get_artifacting_task(self) -> ArtifactInfoModel:
"""获取正在进行的管片任务数据"""
loc_item= self.dal.get_top_artifact(1,"ID desc","Status=2")
if loc_item:
return loc_item[0]
else:
return None
class PDRecordBll:
def __init__(self):
"""初始化数据访问层,创建数据库连接"""
# 假设数据库文件在db目录下
self.dal = PDRecordDal()
pass
def get_PD_record(self) -> List[PDRecordModel]:
"""获取PD官片任务数据"""
return self.dal.get_top_pd(5, "ID desc")
def get_last_pds(self,mould_code:str,top=1) -> List[PDRecordModel]:
"""获取当前浇筑的后三片的派据(有可能其中一项为空,但需要保证第一条有记录)"""
return self.dal.get_last_pds(top,mould_code)
def get_near_pd_scan(self,size:str) -> PDRecordModel:
"""获取最近的派单信息"""
_target_time = datetime.now() - timedelta(hours=4)
where=f"SizeSpecification='{size}' and CreateTime>='{_target_time}'"
_pdrecords=self.dal.get_top_pd(1,"ID desc",where)
if _pdrecords:
return _pdrecords[0]
else:
return None
def insert_PD_record(self,model:PDRecordModel) -> bool:
"""保存PD官片任务(存在更新,不存在插入)"""
if self.dal.exists_artifactid(model.ArtifactActionID):
return False
# return self.update_PD_record(model.ArtifactActionID,{"Status": model.Status,"OptTime": datetime.now()})
else:
return self.dal.insert_PD_record(model)
def finish_pd(self, code: str,status:int) -> bool:
"""完成管片生产"""
return self.dal.update_by_modulecode(code, {'Status': status,'EndTime':datetime.now()})
def start_pd(self, status:int,code: str,volumn:float) -> bool:
"""开始管片生产,-1不更方量"""
if volumn==-1:
return self.dal.update_by_modulecode(code, {'Status': status,'GStatus':1,'OptTime':datetime.now()})
else:
return self.dal.update_by_modulecode(code, {'Status': status,'GStatus':1,'OptTime':datetime.now(),'FBetonVolume':volumn})
def update_PD_record(self,artifact_action_id: int, update_fields: dict) -> bool:
"""更新PD官片任务状态"""
return self.dal.update_pd(artifact_action_id, update_fields)
def update_PD_record_byid(self,id: int, update_fields: dict) -> bool:
"""更新PD官片任务状态"""
return self.dal.update_pd_byid(id, update_fields)
def update_pd_notify(self,id: int, update_fields: dict) -> bool:
"""更新PD官片任务状态"""
return self.dal.update_pd_notify(id, update_fields)
def save_PD_record(self,model:PDRecordModel) -> int:
"""保存PD官片任务(存在ModuleCode更新不存在插入存在ArtifactID不处理)"""
_artifactid=self.dal.get_artifactid(model.MouldCode)
if _artifactid is None:
if model.TaskID:
model.ScanTime=datetime.now()
return self.dal.insert_PD_record(model)
else:
if model.ArtifactID:
if not _artifactid:
#不存在ArtifactID更新PDRecord表
update_dict={
'ArtifactID':model.ArtifactID,
'ArtifactActionID':model.ArtifactActionID,
'TaskID':model.TaskID,
'ProjectName':model.ProjectName,
'ProduceMixID':model.ProduceMixID,
'BetonVolume':model.BetonVolume,
'BetonGrade':model.BetonGrade,
'BuriedDepth':model.BuriedDepth,
'SkeletonID':model.SkeletonID,
'RingTypeCode':model.RingTypeCode,
'SizeSpecification':model.SizeSpecification,
'BlockNumber':model.BlockNumber,
'BetonVolume':model.BetonVolume,
'GStatus':model.GStatus,
'PlannedVolume':model.PlannedVolume,
'ScanTime':datetime.now(),
}
return self.dal.update_by_modulecode(model.MouldCode, update_dict)
else:
#已经存在了ArtifactID不处理
return 1
return 1
class FreqRecordBll:
def __init__(self):
"""初始化数据访问层,创建数据库连接"""
# 假设数据库文件在db目录下
self.dal = FreqRecordDal()
pass
def get_freqs_sync(self) -> List[FreqRecordModel]:
"""获取所有未同步的频率记录"""
return self.dal.get_all_sync()
def insert_freq_record(self,model:FreqRecordModel) -> int:
"""插入一条频率记录"""
return self.dal.insert_record(model)
if __name__ == "__main__":
# artifact_dal = ArtifactBll()
# artifacts = artifact_dal.get_artifact_task()
# print("\n打印artifacts数据:")
# for i, artifact in enumerate(artifacts):
# artifact_id = artifact.ArtifactID
# # 如果是数据类对象,转换为字典输出
# print(artifact.MouldCode)
# if hasattr(artifact, "__dataclass_fields__"):
# print(f"第{i+1}条: {artifact.__dict__}")
# else:
# print(f"第{i+1}条: {artifact}")
pdrecord_dal = PDRecordBll()
pdrecords = pdrecord_dal.get_last_pds("SHR2B2-11")
# print(pdrecords[0].MouldCode)
print("\n打印pdrecords数据:")
for i, record in enumerate(pdrecords):
# 如果是数据类对象,转换为字典输出
# print(record.__dict__["MouldCode"])
if hasattr(record, "__dataclass_fields__"):
print(f"{i+1}条: {record.__dict__}")
else:
print(f"{i+1}条: {record}")
print("\ntest success")
# # 1. 提取 artifacts 中第1-3条的 MouldCode 和对应的 BetonVolume
# print("=== artifacts 提取结果 ===")
# artifact_extracts = []
# for i, artifact in enumerate(artifacts[:3], 1): # 取前3条正好3条
# mould_code = artifact['MouldCode']
# beton_volume = artifact['BetonVolume']
# artifact_extracts.append({'序号': i, 'MouldCode': mould_code, 'BetonVolume': beton_volume})
# print(f"第{i}条: MouldCode={mould_code}, BetonVolume={beton_volume}")
# # 2. 提取 pdrecords 中的所有 BetonVolume
# print("\n=== pdrecords 提取结果 ===")
# pd_beton_volumes = []
# for i, record in enumerate(pdrecords, 1):
# beton_volume = record['BetonVolume']
# pd_beton_volumes.append({'序号': i, 'BetonVolume': beton_volume})
# print(f"第{i}条: BetonVolume={beton_volume}")