兼容性修改

main
COT001\DEV 2026-04-01 18:39:55 +08:00
parent b33d83a287
commit 8f9ee65fe8
4 changed files with 95 additions and 13 deletions

View File

@ -168,8 +168,9 @@ def submit_work_order():
返回: 提交结果
"""
data = request.get_json()
trace_id = data.get('trace_id')
process_id = data.get('process_id')
# 统一转换为字符串类型,保持与创建工单时的类型一致
trace_id = str(data.get('trace_id')) if data.get('trace_id') is not None else None
process_id = str(data.get('process_id')) if data.get('process_id') is not None else None
bolts = data.get('bolts', [])
device_sn = data.get('device_sn')
device_name = data.get('device_name')
@ -260,15 +261,24 @@ def create_work_order():
"message": f"字段 {field} 不能为空"
}), 400
# 构建工单数据
# 构建工单数据,统一类型
bolts = data.get('bolts', [])
normalized_bolts = []
for bolt in bolts:
normalized_bolt = bolt.copy()
# 统一bolt_id为字符串
if 'bolt_id' in normalized_bolt:
normalized_bolt['bolt_id'] = str(normalized_bolt['bolt_id'])
normalized_bolts.append(normalized_bolt)
order_data = {
"trace_id": data.get('trace_id'),
"process_id": data.get('process_id'),
"trace_id": str(data.get('trace_id')),
"process_id": str(data.get('process_id')),
"process_name": data.get('process_name', ''),
"product_name": data.get('product_name', ''),
"operator": data.get('operator', ''),
"status": data.get('status', 'pending'),
"bolts": data.get('bolts', [])
"bolts": normalized_bolts
}
# 创建工单

View File

@ -25,7 +25,7 @@
"description": "测试模式:失败也算成功,用于无钉子测试"
},
"torque_display": {
"decimal_mode": true,
"decimal_mode": false,
"description": "扭矩显示模式decimal_mode=true时显示值除以10如350显示为35.0false时原样显示"
},
"bolt_default_config": {

View File

@ -606,8 +606,26 @@ class WrenchGUI:
def update_order_list(self, orders):
"""更新工单列表(只在数据变化时更新,并保持选中状态)"""
# 统一数据类型将trace_id、process_id、bolt_id转换为字符串
normalized_orders = []
for order in orders:
normalized_order = order.copy()
if 'trace_id' in normalized_order:
normalized_order['trace_id'] = str(normalized_order['trace_id'])
if 'process_id' in normalized_order:
normalized_order['process_id'] = str(normalized_order['process_id'])
if 'bolts' in normalized_order:
normalized_bolts = []
for bolt in normalized_order['bolts']:
normalized_bolt = bolt.copy()
if 'bolt_id' in normalized_bolt:
normalized_bolt['bolt_id'] = str(normalized_bolt['bolt_id'])
normalized_bolts.append(normalized_bolt)
normalized_order['bolts'] = normalized_bolts
normalized_orders.append(normalized_order)
# 检查数据是否真的变化了
if self._orders_equal(orders, self.cached_orders):
if self._orders_equal(normalized_orders, self.cached_orders):
return # 数据没有变化,不更新
# 保存当前选中状态
@ -619,7 +637,7 @@ class WrenchGUI:
self.selected_process_id = item_values[1]
# 更新缓存
self.cached_orders = orders.copy()
self.cached_orders = normalized_orders.copy()
# 清空并重新填充列表
self.order_tree.delete(*self.order_tree.get_children())
@ -699,26 +717,41 @@ class WrenchGUI:
def on_order_select(self, event):
"""工单选择事件处理 - 显示作业列表预览"""
self.log(f"🔍 工单选择事件触发")
selected = self.order_tree.selection()
if not selected:
self.log(f"🔍 没有选中的工单")
return
item = self.order_tree.item(selected[0])
values = item['values']
trace_id = values[0]
process_id = values[1]
self.log(f"🔍 选中工单: trace_id={trace_id}, process_id={process_id}")
self.log(f"🔍 cached_orders数量: {len(self.cached_orders)}")
# 从缓存中查找工单数据
found = False
for order in self.cached_orders:
if order.get('trace_id') == trace_id and order.get('process_id') == process_id:
order_trace_id = order.get('trace_id')
order_process_id = order.get('process_id')
self.log(f"🔍 比较: 选中={trace_id}({type(trace_id).__name__}), {process_id}({type(process_id).__name__}) vs 缓存={order_trace_id}({type(order_trace_id).__name__}), {order_process_id}({type(order_process_id).__name__})")
if str(order.get('trace_id')) == str(trace_id) and str(order.get('process_id')) == str(process_id):
self.log(f"🔍 找到匹配的工单调用preview_bolt_list")
self.preview_bolt_list(order)
found = True
break
if not found:
self.log(f"⚠️ 在cached_orders中未找到匹配的工单", "WARN")
def preview_bolt_list(self, order_data):
"""预览作业列表(认领前)"""
self.log(f"🔍 预览工单数据: {order_data}")
self.tree.delete(*self.tree.get_children())
bolts = order_data.get('bolts', [])
self.log(f"🔍 预览bolts数量: {len(bolts)}")
for bolt in bolts:
self.tree.insert("", tk.END, values=(
bolt.get('bolt_id'),
@ -756,17 +789,28 @@ class WrenchGUI:
if not self.work_order:
return
self.log(f"🔍 update_bolt_order被调用当前bolts数量: {len(self.work_order.get('bolts', []))}")
# 从树形控件读取新顺序
new_bolts = []
for item in self.tree.get_children():
values = self.tree.item(item)['values']
bolt_id = values[0]
# 在原始作业列表中找到对应的作业
self.log(f"🔍 从树形控件读取 bolt_id: {bolt_id} (类型: {type(bolt_id).__name__})")
# 在原始作业列表中找到对应的作业(统一转换为字符串比较)
found = False
for bolt in self.work_order.get('bolts', []):
if bolt.get('bolt_id') == bolt_id:
bolt_id_in_order = bolt.get('bolt_id')
self.log(f"🔍 比较: 树形控件={bolt_id}({type(bolt_id).__name__}) vs work_order={bolt_id_in_order}({type(bolt_id_in_order).__name__})")
if str(bolt.get('bolt_id')) == str(bolt_id):
new_bolts.append(bolt)
found = True
break
if not found:
self.log(f"⚠️ 未找到匹配的bolt_id: {bolt_id}", "WARN")
self.log(f"🔍 update_bolt_order完成new_bolts数量: {len(new_bolts)}")
# 更新work_order中的作业顺序
self.work_order['bolts'] = new_bolts
@ -795,7 +839,24 @@ class WrenchGUI:
if response.status_code == 200:
result = response.json()
if result.get("success"):
self.work_order = result.get("data")
self.log(f"🔍 后端返回的原始数据: {result.get('data')}")
# 统一数据类型
work_order = result.get("data")
if work_order:
if 'trace_id' in work_order:
work_order['trace_id'] = str(work_order['trace_id'])
if 'process_id' in work_order:
work_order['process_id'] = str(work_order['process_id'])
if 'bolts' in work_order:
normalized_bolts = []
for bolt in work_order['bolts']:
normalized_bolt = bolt.copy()
if 'bolt_id' in normalized_bolt:
normalized_bolt['bolt_id'] = str(normalized_bolt['bolt_id'])
normalized_bolts.append(normalized_bolt)
work_order['bolts'] = normalized_bolts
self.work_order = work_order
self.log(f"🔍 保存到work_order后: {self.work_order}")
self.can_sort = True # 认领后允许排序
self.update_work_order_info()
self.update_bolt_list()
@ -1062,6 +1123,8 @@ class WrenchGUI:
# 遍历所有作业
bolts = self.work_order.get('bolts', [])
self.log(f"📋 工单中的作业数量: {len(bolts)}")
self.log(f"📋 作业数据: {bolts}")
bolt_results = []
for index, bolt in enumerate(bolts):
@ -1094,6 +1157,7 @@ class WrenchGUI:
def process_bolt(self, bolt, index):
"""处理单个作业"""
self.log(f"🔧 处理作业 #{index+1}, 原始数据: {bolt}")
bolt_id = bolt.get('bolt_id')
bolt_name = bolt.get('name')
target_torque = bolt.get('target_torque')
@ -1106,6 +1170,12 @@ class WrenchGUI:
# 设定参数
self.log(f"设定参数: 扭矩={self.format_torque(target_torque)}Nm, 模式=M{bolt.get('mode', 1)}")
self.log(f"🔧 扳手对象状态: {self.wrench is not None}, is_running: {self.is_running}")
if not self.wrench:
self.log("❌ 扳手对象为None无法设置参数", "ERROR")
return None
self.wrench.set_torque_parameters(
target_torque=target_torque,
mode=bolt.get('mode', 1),
@ -1118,6 +1188,7 @@ class WrenchGUI:
attempt = 0
result_data = None
self.log(f"🔄 进入拧紧循环is_running={self.is_running}")
while self.is_running:
attempt += 1
self.log(f"{attempt} 次尝试拧紧作业 {bolt_id}")
@ -1132,6 +1203,7 @@ class WrenchGUI:
# 等待结果
self.log("等待扳手响应...")
result = self.wrench.wait_for_result()
self.log(f"📊 收到结果: {result}")
if result and result.get("success"):
# 成功

BIN
wrench.db

Binary file not shown.