diff --git a/db/jtDB.db b/db/jtDB.db index ee9b90e..128bcfc 100644 Binary files a/db/jtDB.db and b/db/jtDB.db differ diff --git a/from pymodbus.py b/from pymodbus.py index 8ec234a..bff86fa 100644 --- a/from pymodbus.py +++ b/from pymodbus.py @@ -2,7 +2,7 @@ from pymodbus.client import ModbusTcpClient import time client = ModbusTcpClient('localhost', port=5020) client.connect() -client.write_registers(address=11, values=[11322]) +client.write_registers(address=11, values=[14322]) # client.write_registers(address=3, values=[0]) # time.sleep(2) # client.write_registers(address=0, values=[0]) diff --git a/ui/main_window_ui.py b/ui/main_window_ui.py index aa922ff..4769bcb 100644 --- a/ui/main_window_ui.py +++ b/ui/main_window_ui.py @@ -187,6 +187,29 @@ class MainWindowUI(QMainWindow): self.order_layout.addWidget(self.order_label) self.order_layout.addWidget(self.order_edit) + + # 添加虚拟工程号按钮 + self.virtual_order_button = QPushButton("虚拟工程号") + self.virtual_order_button.setFixedHeight(30) + self.virtual_order_button.setFixedWidth(100) + self.virtual_order_button.setFont(QFont("微软雅黑", 10)) + self.virtual_order_button.setStyleSheet(""" + QPushButton { + background-color: #e3f2fd; + border: 1px solid #2196f3; + border-radius: 3px; + padding: 2px 5px; + color: #1976d2; + } + QPushButton:hover { + background-color: #bbdefb; + } + QPushButton:pressed { + background-color: #90caf9; + } + """) + self.order_layout.addWidget(self.virtual_order_button) + self.order_layout.addStretch() # 添加弹性空间,将组件推到左侧 self.task_layout.addLayout(self.order_layout) diff --git a/widgets/main_window.py b/widgets/main_window.py index 7ef2a8a..abde4b4 100644 --- a/widgets/main_window.py +++ b/widgets/main_window.py @@ -296,6 +296,9 @@ class MainWindow(MainWindowUI): self.stop_button.clicked.connect(self.handle_stop) self.delete_row_button.clicked.connect(self.handle_delete_row) + # 连接虚拟工程号按钮事件 + self.virtual_order_button.clicked.connect(self.handle_virtual_order) + # 连接托盘完成按钮事件 self.tray_complete_button.clicked.connect(self.handle_tray_complete) @@ -976,6 +979,32 @@ class MainWindow(MainWindowUI): else: logging.warning("工程号为空") QMessageBox.warning(self, "输入提示", "请输入有效的工程号") + + def handle_virtual_order(self): + """处理虚拟工程号按钮点击事件""" + try: + # 获取当前订单代码 + order_code = self._current_order_code + if not order_code: + QMessageBox.warning(self, "提示", "请先选择订单") + return + + # 生成基于时间戳的虚拟工程号 + import datetime + timestamp = datetime.datetime.now() + virtual_gc_note = f"{timestamp.strftime('%Y%m%d_%H%M%S')}" + + # 直接添加虚拟工程号到微丝产线表格,跳过接口调用 + self.add_new_inspection_row(virtual_gc_note, order_code) + + # 清空工程号输入框 + self.order_edit.clear() + + logging.info(f"已生成虚拟工程号并直接添加: {virtual_gc_note}") + + except Exception as e: + logging.error(f"生成虚拟工程号失败: {str(e)}") + QMessageBox.critical(self, "错误", f"生成虚拟工程号失败: {str(e)}") def test_rapid_scanning(self): """测试快速连续扫码的场景,确保最新扫码的工程号始终在最后""" @@ -1548,12 +1577,13 @@ class MainWindow(MainWindowUI): finally: self._loading_data_in_progress = False - def load_finished_record_to_package_record(self, order_id, gc_note, tray_id): + def load_finished_record_to_package_record(self, order_id, gc_note, tray_id, axios_num=None): """加载已完成检验数据到包装记录 Args: order_id: 工程号 tray_id: 托盘号 + axios_num: 轴号,如果为None则使用数据库中的轴号 """ try: from dao.inspection_dao import InspectionDAO @@ -1566,8 +1596,13 @@ class MainWindow(MainWindowUI): logging.warning(f"未找到工程号 {gc_note} 托盘号 {tray_id} 的检验数据") return - # 获取轴号并保存 - label_value = self.get_axios_num_by_order_id(self._current_order_code) + # 使用传入的轴号,如果没有传入则使用数据库中的轴号 + if axios_num is not None: + label_value = axios_num + logging.info(f"使用传入的轴号: {label_value}") + else: + label_value = self.get_axios_num_by_order_id(self._current_order_code) + logging.info(f"使用数据库中的轴号: {label_value}") # 从检验数据中获取贴标和称重数据 weight_value = "" @@ -1579,7 +1614,7 @@ class MainWindow(MainWindowUI): net_weight_value = item['value'] # 只要贴标字段有值,就可以写入包装记录 - if label_value == None or label_value == "": + if label_value is None or label_value == "": logging.warning(f"工程号 {order_id} 托盘号 {tray_id} 的贴标字段为空,不添加到包装记录") return @@ -1588,7 +1623,7 @@ class MainWindow(MainWindowUI): finish_time = datetime.now() # 将数据写入到数据库表 inspection_pack_data - inspection_dao.save_package_record(order_id, tray_id, str(label_value+1), weight_value,net_weight_value, finish_time,gc_note) + inspection_dao.save_package_record(order_id, tray_id, str(label_value), weight_value, net_weight_value, finish_time, gc_note) # 回显数据,但避免循环调用 if not getattr(self, '_loading_data_in_progress'): @@ -2566,9 +2601,12 @@ class MainWindow(MainWindowUI): inspection_dao.update_product_status(self._current_order_code, gc_note, tray_id, 'labeled') logging.info(f"工程号 {gc_note} 的贴标已完成,状态更新为labeled") - # 调用加载到包装记录的方法 - self.load_finished_record_to_package_record(self._current_order_code,gc_note, tray_id) - logging.info(f"贴标完成,已将工程号 {gc_note} 的记录加载到包装记录") + # 获取当前行的轴号,用于保存到包装记录 + current_axios_num = self.get_current_row_axios_num(data_row) + + # 调用加载到包装记录的方法,传入正确的轴号 + self.load_finished_record_to_package_record(self._current_order_code, gc_note, tray_id, current_axios_num) + logging.info(f"贴标完成,已将工程号 {gc_note} 的记录加载到包装记录,轴号: {current_axios_num}") # 删除当前处理的行 self.process_table.removeRow(data_row) @@ -3826,7 +3864,7 @@ class MainWindow(MainWindowUI): background-color: #ffcdd2; } """) - self.delete_row_button.clicked.connect(self.handle_delete_row) + # 删除按钮的信号连接已在 connect_signals 函数中处理,这里不需要重复连接 # 打印托盘号按钮 self.print_tray_button = QPushButton("打印托盘号") @@ -3908,7 +3946,6 @@ class MainWindow(MainWindowUI): if current_row >= 2: # 确保不是表头行 selected_rows = [self.process_table.model().index(current_row, 0)] else: - QMessageBox.warning(self, "提示", "请先选择要删除的微丝产线数据行") return # 确认删除 @@ -3993,7 +4030,6 @@ class MainWindow(MainWindowUI): if current_row >= 0: # 包装记录表格没有表头行 selected_rows = [self.record_table.model().index(current_row, 0)] else: - QMessageBox.warning(self, "提示", "请先选择要删除的包装记录行") return # 确认删除 diff --git a/widgets/order_query_dialog.py b/widgets/order_query_dialog.py index 1210217..fa7af56 100644 --- a/widgets/order_query_dialog.py +++ b/widgets/order_query_dialog.py @@ -270,47 +270,51 @@ class OrderQueryDialog(OrderQueryDialogUI): # 处理查询结果 results = [] for row in rows: - # 将元组转换为字典 - order_data = { - "note": row[0], - "mo": row[1], - "customer": row[2], - "customerexp": row[3], - "khno": row[4], - "ddzl": row[5], - "khjq": row[6], - "code": row[7], - "type": row[8], - "cz": row[9], - "size": row[10], - "cd": row[11], - "maxsl": row[12], - "spack": row[13], - "zx_name": row[14], - "zx_code": row[15], - "zx_zl": row[16], - "template_name": row[17], - "bqlb": row[18], - "dycz": row[19], - "luno": row[20], - "corp": row[21], - "sl": row[22], - "tccd": row[23], - "bccd": row[24], - "ysl": row[25], - "qfqd": row[26], - "yzgg": row[27], - "tqd": row[28], - "bqd": row[29], - "bzfs": row[30], - "ddyq": row[31], - "remarks_hb": row[32], - "bz_tqd": row[33], - "bz_bqd": row[34], - "zzyq": row[35], - "rq": row[36] - } - results.append(order_data) + # 将元组转换为字典,使用安全的索引访问 + try: + order_data = { + "note": row[0] if len(row) > 0 else "", + "mo": row[1] if len(row) > 1 else "", + "customer": row[2] if len(row) > 2 else "", + "customerexp": row[3] if len(row) > 3 else "", + "khno": row[4] if len(row) > 4 else "", + "ddzl": row[5] if len(row) > 5 else "", + "khjq": row[6] if len(row) > 6 else "", + "code": row[7] if len(row) > 7 else "", + "type": row[8] if len(row) > 8 else "", + "cz": row[9] if len(row) > 9 else "", + "size": row[10] if len(row) > 10 else "", + "cd": row[11] if len(row) > 11 else "", + "maxsl": row[12] if len(row) > 12 else "", + "spack": row[13] if len(row) > 13 else "", + "zx_name": row[14] if len(row) > 14 else "", + "zx_code": row[15] if len(row) > 15 else "", + "zx_zl": row[16] if len(row) > 16 else "", + "template_name": row[17] if len(row) > 17 else "", + "bqlb": row[18] if len(row) > 18 else "", + "dycz": row[19] if len(row) > 19 else "", + "luno": row[20] if len(row) > 20 else "", + "corp": row[21] if len(row) > 21 else "", + "sl": row[22] if len(row) > 22 else "", + "tccd": row[23] if len(row) > 23 else "", + "bccd": row[24] if len(row) > 24 else "", + "ysl": row[25] if len(row) > 25 else "", + "qfqd": row[26] if len(row) > 26 else "", + "yzgg": row[27] if len(row) > 27 else "", + "tqd": row[28] if len(row) > 28 else "", + "bqd": row[29] if len(row) > 29 else "", + "bzfs": row[30] if len(row) > 30 else "", + "ddyq": row[31] if len(row) > 31 else "", + "remarks_hb": row[32] if len(row) > 32 else "", + "bz_tqd": row[33] if len(row) > 33 else "", + "bz_bqd": row[34] if len(row) > 34 else "", + "zzyq": row[35] if len(row) > 35 else "", + "rq": row[36] if len(row) > 36 else "" + } + results.append(order_data) + except Exception as e: + logging.error(f"处理查询结果行时出错: {str(e)}, 行数据: {row}") + continue # 保存查询结果 self.query_results = results