修改尾数控制和状态监控逻辑

This commit is contained in:
xiongyi
2025-11-13 16:50:50 +08:00
parent ec51d2f786
commit f7fbe2921c
40 changed files with 160 additions and 2299 deletions

View File

@ -5,14 +5,17 @@ from database.access_db import AccessDB
from database.sql_server import SQLServerDB
from config.settings import ACCESS_DB_PATH, ACCESS_DB_PASSWORD
from utils.helpers import get_f_block_positions
import threading
import time
class TaskService:
def __init__(self):
def __init__(self, tcp_server=None):
self.api_client = APIClient()
self.half_volume = [0, 0]
self.task_before = None
self.task_before = {"block_number":None, "beton_volume":None, "artifact_id":None}
self.artifact_timestamps = {}
self.tcp_server = tcp_server
def process_not_pour_info(self):
"""处理未浇筑信息"""
@ -31,6 +34,11 @@ class TaskService:
# 处理当前任务
current_task = self._process_current_task(artifact_list[0])
# 根据F块情况处理任务
task_result = self._handle_tasks_by_f_blocks(
f_block_count, f_positions, current_task,
f_blocks, total_f_volume, artifact_list
)
# 更新上一个任务信息
self.task_before = {
"beton_task_id": current_task["beton_task_id"],
@ -38,13 +46,6 @@ class TaskService:
"artifact_id": current_task["artifact_id"],
"block_number": current_task["block_number"]
}
# 根据F块情况处理任务
task_result = self._handle_tasks_by_f_blocks(
f_block_count, f_positions, current_task,
f_blocks, total_f_volume, artifact_list
)
return task_result
def _process_f_blocks(self, artifact_list):
@ -98,41 +99,49 @@ class TaskService:
def _handle_multiple_f_blocks(self, current_task, total_f_volume, artifact_list):
"""处理多个F块的情况"""
adjusted_volume = total_f_volume - self.half_volume[0]
if self.task_before.get("block_number") == "F":
print("报警:,超出正常补块逻辑")
else:
adjusted_volume = total_f_volume - self.half_volume[0]
tasks = [{
"beton_task_id": current_task["beton_task_id"],
"beton_volume": adjusted_volume,
"artifact_id": current_task["artifact_id"],
"block_number": current_task["block_number"],
}]
tasks = [{
"beton_task_id": current_task["beton_task_id"],
"beton_volume": adjusted_volume,
"artifact_id": current_task["artifact_id"],
"block_number": current_task["block_number"],
}]
send_list = [{
"beton_task_id": current_task["beton_task_id"],
"beton_volume": adjusted_volume,
"artifact_id": current_task["artifact_id"],
"block_number": current_task["block_number"],
"beton_grade": current_task["task_data"]["BetonGrade"],
"mix_id": current_task["task_data"]["MixID"],
"time": self.artifact_timestamps.get(current_task["artifact_id"], datetime.now())
}]
send_list = [{
"beton_task_id": current_task["beton_task_id"],
"beton_volume": adjusted_volume,
"artifact_id": current_task["artifact_id"],
"block_number": current_task["block_number"],
"beton_grade": current_task["task_data"]["BetonGrade"],
"mix_id": current_task["task_data"]["MixID"],
"time": self.artifact_timestamps.get(current_task["artifact_id"], datetime.now())
}]
# 处理后续任务
self._append_additional_tasks(send_list, artifact_list, [0, 0])
# 处理后续任务
self._append_additional_tasks(send_list, artifact_list, [0, 0])
# 更新时间戳
self._update_artifact_timestamps(send_list)
# 更新时间戳
self._update_artifact_timestamps(send_list)
return tasks, artifact_list, send_list, self.half_volume
return tasks, artifact_list, send_list, self.half_volume
def _handle_two_f_blocks(self, f_positions, current_task, total_f_volume, artifact_list):
"""处理两个F块的情况"""
if f_positions == [0, 1] and self.task_before.get("block_number") == "F":
adjusted_volume = 0
block_number = "补方"
else:
elif f_positions == [1, 2]:
adjusted_volume = artifact_list[0]["BetonVolume"]
block_number = current_task["block_number"]
elif f_positions == [0, 1] and self.task_before.get("block_number") != "F":
adjusted_volume = total_f_volume - self.half_volume[0]
block_number = current_task["block_number"]
else:
print("报警")
tasks = [{
"beton_task_id": current_task["beton_task_id"],
@ -153,9 +162,7 @@ class TaskService:
# 处理后续任务
volumes = [adjusted_volume,
artifact_list[2]["BetonVolume"] if len(artifact_list) > 2 else 0] if f_positions == [0,
1] and self.task_before.get(
"block_number") == "F" else [0, 0]
artifact_list[2]["BetonVolume"] if len(artifact_list) > 2 else 0] if f_positions == [0, 1] and self.task_before.get("block_number") == "F" else [0, 0]
self._append_additional_tasks(send_list, artifact_list, volumes)
# 更新时间戳
@ -305,7 +312,7 @@ class TaskService:
def insert_into_produce_table(self, connection, task_info, beton_volume, erp_id, artifact_id, status):
"""插入数据到Produce表"""
sql_db = SQLServerDB()
if status == "1":
if status == 1:
# 准备插入数据
insert_data = {
"ErpID": erp_id,
@ -331,14 +338,14 @@ class TaskService:
try:
# 假设同事提供的函数名为 save_to_custom_table
# 参数包括: MISID(即erp_id), Flag, TaskID, ProduceMixID, ProjectName, BetonGrade, 调整后的方量
save_to_custom_table(
self.save_to_custom_table(
misid=erp_id,
flag="1", # 初始Flag值
flag="已插入", # 初始Flag值
task_id=task_info["TaskID"],
produce_mix_id=task_info["ProduceMixID"],
project_name=task_info["ProjectName"],
beton_grade=task_info["BetonGrade"],
adjusted_volume=beton_volume,
adjusted_volume=round(beton_volume,2),
artifact_id=artifact_id
# 已经调整后的方量
)
@ -346,21 +353,49 @@ class TaskService:
except Exception as e:
print(f"调用保存函数时出错: {e}")
# 发送数据给TCP客户端
if self.tcp_server:
try:
time.sleep(2)
task_data = {
"erp_id": erp_id, # 车号,相当于序号
"task_id": task_info["TaskID"], # 任务单号
"artifact_id": artifact_id,
"produce_mix_id": task_info["ProduceMixID"], # 配比号
"project_name": task_info["ProjectName"], # 任务名
"beton_grade": task_info["BetonGrade"], # 砼强度
"adjusted_volume": round(beton_volume,2), # 方量
"flag": "已插入", # 状态
"timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S") # 时间
}
self.tcp_server.send_data(task_data)
print(f"任务 {artifact_id} 的数据已发送给TCP客户端")
except Exception as e:
print(f"发送数据给TCP客户端时出错: {e}")
return erp_id
else:
try:
# 假设同事提供的函数名为 save_to_custom_table
# 参数包括: MISID(即erp_id), Flag, TaskID, ProduceMixID, ProjectName, BetonGrade, 调整后的方量
save_to_custom_table(
self.save_to_custom_table(
misid=erp_id,
flag="1", # 初始Flag值
flag="已插入", # 初始Flag值
task_id=task_info["TaskID"],
produce_mix_id=task_info["ProduceMixID"],
project_name=task_info["ProjectName"],
beton_grade=task_info["BetonGrade"],
adjusted_volume=beton_volume,
adjusted_volume=round(beton_volume,2),
artifact_id=artifact_id
)
print(f"任务 {erp_id} 的数据已保存到自定义数据表")
except Exception as e:
print(f"调用保存函数时出错: {e}")
return erp_id
def save_to_custom_table(self,misid, flag, task_id, produce_mix_id, project_name, beton_grade, adjusted_volume, artifact_id):
print(f"保存到自定义数据表: MISID={misid}, Flag={flag}, TaskID={task_id}, 调整后方量={adjusted_volume}")
def update_custom_table_status(self, erp_id, status):
print(f"更新自定义数据表状态: ERP ID={erp_id}, 状态={status}")