更新InspectionDAO以支持托盘号,修改主窗口以处理托盘号输入并保存检验数据,增强数据库查询功能以根据托盘号过滤未完成的检验记录。

This commit is contained in:
zhu-mengmeng 2025-06-09 01:16:49 +08:00
parent ca97662db6
commit 703f03f0bb
3 changed files with 45 additions and 24 deletions

View File

@ -237,7 +237,7 @@ class InspectionDAO:
value = item.get('value')
status = item.get('status', 'pass')
remark = item.get('remark', '')
tray_id = item.get('tray_id', '')
# 检查是否已存在该工程号和位置的记录
check_sql = """
SELECT id FROM inspection_data
@ -253,7 +253,7 @@ class InspectionDAO:
update_sql = """
UPDATE inspection_data
SET config_id = ?, value = ?, status = ?, remark = ?,
update_time = ?, update_by = ?
update_time = ?, update_by = ?, tray_id = ?
WHERE id = ?
"""
update_params = (
@ -266,12 +266,12 @@ class InspectionDAO:
insert_sql = """
INSERT INTO inspection_data (
order_id, position, config_id, value, status, remark,
create_time, create_by, is_deleted
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, FALSE)
create_time, create_by, is_deleted, tray_id
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, FALSE, ?)
"""
insert_params = (
order_id, position, config_id, value, status, remark,
current_time, username
current_time, username, tray_id
)
self.db.cursor.execute(insert_sql, insert_params)
@ -281,7 +281,7 @@ class InspectionDAO:
self.db.rollback_transaction()
logging.error(f"保存检验数据失败: {str(e)}")
return False
def get_inspection_data_unfinished(self):
def get_inspection_data_unfinished(self, tray_id):
"""获取未完成的检验数据
Returns:
@ -293,11 +293,12 @@ class InspectionDAO:
c.name, c.display_name, c.data_type, c.unit
FROM inspection_data d
JOIN inspection_config c ON d.config_id = c.id
WHERE d.is_deleted = FALSE
WHERE d.is_deleted = FALSE AND d.tray_id = ?
AND order_id IN (SELECT distinct order_id FROM inspection_data WHERE status != 'pass')
ORDER BY d.order_id, d.position
"""
self.db.cursor.execute(sql)
params = (tray_id,)
self.db.cursor.execute(sql, params)
results = self.db.cursor.fetchall()
data_list = []
@ -321,12 +322,12 @@ class InspectionDAO:
except Exception as e:
logging.error(f"获取未完成的检验数据失败: {str(e)}")
return []
def get_inspection_data_by_order(self, order_id):
def get_inspection_data_by_order(self, order_id, tray_id):
"""根据工程号获取检验数据
Args:
order_id: 工程号
tray_id: 托盘号
Returns:
list: 检验数据列表
"""
@ -336,10 +337,10 @@ class InspectionDAO:
c.name, c.display_name, c.data_type, c.unit
FROM inspection_data d
JOIN inspection_config c ON d.config_id = c.id
WHERE d.order_id = ? AND d.is_deleted = FALSE
WHERE d.order_id = ? AND d.is_deleted = FALSE AND d.tray_id = ?
ORDER BY d.position
"""
params = (order_id,)
params = (order_id, tray_id)
self.db.cursor.execute(sql, params)
results = self.db.cursor.fetchall()

Binary file not shown.

View File

@ -115,6 +115,11 @@ class MainWindow(MainWindowUI):
# 工程号输入框回车事件
self.order_edit.returnPressed.connect(self.handle_order_enter)
# 托盘号输入框回车和切换事件,触发未加载数据查询
# QComboBox没有returnPressed信号只有currentTextChanged和activated信号
self.tray_edit.currentTextChanged.connect(self.load_unfinished_inspection_data)
self.tray_edit.activated.connect(self.load_unfinished_inspection_data) # 当用户选择一项时触发
# 连接按钮事件
self.input_button.clicked.connect(self.handle_input)
self.output_button.clicked.connect(self.handle_output)
@ -434,6 +439,9 @@ class MainWindow(MainWindowUI):
order_id = order_id_item.text().strip()
if not order_id:
return
# 获取托盘号
tray_id = self.tray_edit.currentText()
# 获取启用的检验配置
enabled_configs = self.inspection_manager.get_enabled_configs()
@ -467,8 +475,10 @@ class MainWindow(MainWindowUI):
status = 'warning'
# 保存到数据库
self.save_inspection_data(order_id, config['position'], config['id'], value, status)
self.save_inspection_data(order_id, tray_id, config['position'], config['id'], value, status)
# 触发查询, 更新页面记录回显
self.load_unfinished_inspection_data()
except Exception as e:
logging.error(f"处理检验单元格变更失败: {str(e)}")
self.statusBar().showMessage(f"处理检验数据失败: {str(e)[:50]}...", 3000)
@ -522,7 +532,7 @@ class MainWindow(MainWindowUI):
logging.error(f"验证检验值失败: {str(e)}")
return False
def save_inspection_data(self, order_id, position, config_id, value, status):
def save_inspection_data(self, order_id, tray_id, position, config_id, value, status):
"""保存检验数据到数据库
Args:
@ -537,7 +547,7 @@ class MainWindow(MainWindowUI):
inspection_dao = InspectionDAO()
# 记录保存前的详细日志
logging.info(f"正在保存检验数据: 工程号={order_id}, 位置={position}, 配置ID={config_id}, 值={value}, 状态={status}")
logging.info(f"正在保存检验数据: 工程号={order_id}, 托盘号={tray_id}, 位置={position}, 配置ID={config_id}, 值={value}, 状态={status}")
# 构建数据
data = [{
@ -545,12 +555,13 @@ class MainWindow(MainWindowUI):
'config_id': config_id,
'value': value,
'status': status,
'remark': ''
'remark': '',
'tray_id': tray_id
}]
# 保存到数据库
result = inspection_dao.save_inspection_data(order_id, data)
# 判断,如果保存成功后,且当前工程号中,全部为 pass 说明该工序已经完成,需要流转到下一步,回显到包装记录中
if result:
logging.info(f"已成功保存工程号 {order_id} 的检验数据,位置: {position}, 值: {value}")
# 显示临时状态消息
@ -593,6 +604,9 @@ class MainWindow(MainWindowUI):
if not order_id:
return
# 获取托盘号
tray_id = self.tray_edit.currentText()
# 创建上下文菜单
menu = QMenu(self)
@ -610,7 +624,7 @@ class MainWindow(MainWindowUI):
# 添加查询数据库菜单项
check_action = menu.addAction("检查数据库记录")
check_action.triggered.connect(lambda: self.check_database_record(order_id, position))
check_action.triggered.connect(lambda: self.check_database_record(order_id, position, tray_id))
# 显示菜单
menu.exec_(self.process_table.viewport().mapToGlobal(pos))
@ -618,7 +632,7 @@ class MainWindow(MainWindowUI):
except Exception as e:
logging.error(f"显示表格上下文菜单失败: {str(e)}")
def check_database_record(self, order_id, position):
def check_database_record(self, order_id, position, tray_id):
"""检查数据库记录
Args:
@ -630,7 +644,7 @@ class MainWindow(MainWindowUI):
inspection_dao = InspectionDAO()
# 获取检验数据
inspection_data = inspection_dao.get_inspection_data_by_order(order_id)
inspection_data = inspection_dao.get_inspection_data_by_order(order_id, tray_id)
# 查找对应位置的数据
matching_data = None
@ -664,16 +678,22 @@ class MainWindow(MainWindowUI):
# 使用InspectionDAO获取未完成的检验数据
from dao.inspection_dao import InspectionDAO
inspection_dao = InspectionDAO()
# 获取托盘号
tray_id = self.tray_edit.currentText()
# 使用get_inspection_data_unfinished获取未完成的数据
unfinished_data = inspection_dao.get_inspection_data_unfinished()
unfinished_data = inspection_dao.get_inspection_data_unfinished(tray_id)
if not unfinished_data:
logging.info("没有未完成的检验数据")
# 清空表格现有数据行
while self.process_table.rowCount() > 2:
self.process_table.removeRow(2)
return
logging.info(f"已加载未完成的检验数据,共 {len(unfinished_data)} 条记录")
# 获取启用的检验配置
enabled_configs = self.inspection_manager.get_enabled_configs()