diff --git a/dao/inspection_dao.py b/dao/inspection_dao.py index 11dba35..2112ce9 100644 --- a/dao/inspection_dao.py +++ b/dao/inspection_dao.py @@ -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() diff --git a/db/jtDB.db b/db/jtDB.db index bce2c99..0810f0b 100644 Binary files a/db/jtDB.db and b/db/jtDB.db differ diff --git a/widgets/main_window.py b/widgets/main_window.py index 301573b..74e053b 100644 --- a/widgets/main_window.py +++ b/widgets/main_window.py @@ -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()