feat:新增一键生成虚拟订单号功能
This commit is contained in:
parent
d81765e7d2
commit
3246e8981f
BIN
db/jtDB.db
BIN
db/jtDB.db
Binary file not shown.
@ -2,7 +2,7 @@ from pymodbus.client import ModbusTcpClient
|
|||||||
import time
|
import time
|
||||||
client = ModbusTcpClient('localhost', port=5020)
|
client = ModbusTcpClient('localhost', port=5020)
|
||||||
client.connect()
|
client.connect()
|
||||||
client.write_registers(address=11, values=[11322])
|
client.write_registers(address=11, values=[14322])
|
||||||
# client.write_registers(address=3, values=[0])
|
# client.write_registers(address=3, values=[0])
|
||||||
# time.sleep(2)
|
# time.sleep(2)
|
||||||
# client.write_registers(address=0, values=[0])
|
# client.write_registers(address=0, values=[0])
|
||||||
|
|||||||
@ -187,6 +187,29 @@ class MainWindowUI(QMainWindow):
|
|||||||
|
|
||||||
self.order_layout.addWidget(self.order_label)
|
self.order_layout.addWidget(self.order_label)
|
||||||
self.order_layout.addWidget(self.order_edit)
|
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.order_layout.addStretch() # 添加弹性空间,将组件推到左侧
|
||||||
self.task_layout.addLayout(self.order_layout)
|
self.task_layout.addLayout(self.order_layout)
|
||||||
|
|
||||||
|
|||||||
@ -296,6 +296,9 @@ class MainWindow(MainWindowUI):
|
|||||||
self.stop_button.clicked.connect(self.handle_stop)
|
self.stop_button.clicked.connect(self.handle_stop)
|
||||||
self.delete_row_button.clicked.connect(self.handle_delete_row)
|
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)
|
self.tray_complete_button.clicked.connect(self.handle_tray_complete)
|
||||||
@ -977,6 +980,32 @@ class MainWindow(MainWindowUI):
|
|||||||
logging.warning("工程号为空")
|
logging.warning("工程号为空")
|
||||||
QMessageBox.warning(self, "输入提示", "请输入有效的工程号")
|
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):
|
def test_rapid_scanning(self):
|
||||||
"""测试快速连续扫码的场景,确保最新扫码的工程号始终在最后"""
|
"""测试快速连续扫码的场景,确保最新扫码的工程号始终在最后"""
|
||||||
logging.info("开始测试快速连续扫码场景")
|
logging.info("开始测试快速连续扫码场景")
|
||||||
@ -1548,12 +1577,13 @@ class MainWindow(MainWindowUI):
|
|||||||
finally:
|
finally:
|
||||||
self._loading_data_in_progress = False
|
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:
|
Args:
|
||||||
order_id: 工程号
|
order_id: 工程号
|
||||||
tray_id: 托盘号
|
tray_id: 托盘号
|
||||||
|
axios_num: 轴号,如果为None则使用数据库中的轴号
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
from dao.inspection_dao import InspectionDAO
|
from dao.inspection_dao import InspectionDAO
|
||||||
@ -1566,8 +1596,13 @@ class MainWindow(MainWindowUI):
|
|||||||
logging.warning(f"未找到工程号 {gc_note} 托盘号 {tray_id} 的检验数据")
|
logging.warning(f"未找到工程号 {gc_note} 托盘号 {tray_id} 的检验数据")
|
||||||
return
|
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 = ""
|
weight_value = ""
|
||||||
@ -1579,7 +1614,7 @@ class MainWindow(MainWindowUI):
|
|||||||
net_weight_value = item['value']
|
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} 的贴标字段为空,不添加到包装记录")
|
logging.warning(f"工程号 {order_id} 托盘号 {tray_id} 的贴标字段为空,不添加到包装记录")
|
||||||
return
|
return
|
||||||
|
|
||||||
@ -1588,7 +1623,7 @@ class MainWindow(MainWindowUI):
|
|||||||
finish_time = datetime.now()
|
finish_time = datetime.now()
|
||||||
|
|
||||||
# 将数据写入到数据库表 inspection_pack_data
|
# 将数据写入到数据库表 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'):
|
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')
|
inspection_dao.update_product_status(self._current_order_code, gc_note, tray_id, 'labeled')
|
||||||
logging.info(f"工程号 {gc_note} 的贴标已完成,状态更新为labeled")
|
logging.info(f"工程号 {gc_note} 的贴标已完成,状态更新为labeled")
|
||||||
|
|
||||||
# 调用加载到包装记录的方法
|
# 获取当前行的轴号,用于保存到包装记录
|
||||||
self.load_finished_record_to_package_record(self._current_order_code,gc_note, tray_id)
|
current_axios_num = self.get_current_row_axios_num(data_row)
|
||||||
logging.info(f"贴标完成,已将工程号 {gc_note} 的记录加载到包装记录")
|
|
||||||
|
# 调用加载到包装记录的方法,传入正确的轴号
|
||||||
|
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)
|
self.process_table.removeRow(data_row)
|
||||||
@ -3826,7 +3864,7 @@ class MainWindow(MainWindowUI):
|
|||||||
background-color: #ffcdd2;
|
background-color: #ffcdd2;
|
||||||
}
|
}
|
||||||
""")
|
""")
|
||||||
self.delete_row_button.clicked.connect(self.handle_delete_row)
|
# 删除按钮的信号连接已在 connect_signals 函数中处理,这里不需要重复连接
|
||||||
|
|
||||||
# 打印托盘号按钮
|
# 打印托盘号按钮
|
||||||
self.print_tray_button = QPushButton("打印托盘号")
|
self.print_tray_button = QPushButton("打印托盘号")
|
||||||
@ -3908,7 +3946,6 @@ class MainWindow(MainWindowUI):
|
|||||||
if current_row >= 2: # 确保不是表头行
|
if current_row >= 2: # 确保不是表头行
|
||||||
selected_rows = [self.process_table.model().index(current_row, 0)]
|
selected_rows = [self.process_table.model().index(current_row, 0)]
|
||||||
else:
|
else:
|
||||||
QMessageBox.warning(self, "提示", "请先选择要删除的微丝产线数据行")
|
|
||||||
return
|
return
|
||||||
|
|
||||||
# 确认删除
|
# 确认删除
|
||||||
@ -3993,7 +4030,6 @@ class MainWindow(MainWindowUI):
|
|||||||
if current_row >= 0: # 包装记录表格没有表头行
|
if current_row >= 0: # 包装记录表格没有表头行
|
||||||
selected_rows = [self.record_table.model().index(current_row, 0)]
|
selected_rows = [self.record_table.model().index(current_row, 0)]
|
||||||
else:
|
else:
|
||||||
QMessageBox.warning(self, "提示", "请先选择要删除的包装记录行")
|
|
||||||
return
|
return
|
||||||
|
|
||||||
# 确认删除
|
# 确认删除
|
||||||
|
|||||||
@ -270,47 +270,51 @@ class OrderQueryDialog(OrderQueryDialogUI):
|
|||||||
# 处理查询结果
|
# 处理查询结果
|
||||||
results = []
|
results = []
|
||||||
for row in rows:
|
for row in rows:
|
||||||
# 将元组转换为字典
|
# 将元组转换为字典,使用安全的索引访问
|
||||||
order_data = {
|
try:
|
||||||
"note": row[0],
|
order_data = {
|
||||||
"mo": row[1],
|
"note": row[0] if len(row) > 0 else "",
|
||||||
"customer": row[2],
|
"mo": row[1] if len(row) > 1 else "",
|
||||||
"customerexp": row[3],
|
"customer": row[2] if len(row) > 2 else "",
|
||||||
"khno": row[4],
|
"customerexp": row[3] if len(row) > 3 else "",
|
||||||
"ddzl": row[5],
|
"khno": row[4] if len(row) > 4 else "",
|
||||||
"khjq": row[6],
|
"ddzl": row[5] if len(row) > 5 else "",
|
||||||
"code": row[7],
|
"khjq": row[6] if len(row) > 6 else "",
|
||||||
"type": row[8],
|
"code": row[7] if len(row) > 7 else "",
|
||||||
"cz": row[9],
|
"type": row[8] if len(row) > 8 else "",
|
||||||
"size": row[10],
|
"cz": row[9] if len(row) > 9 else "",
|
||||||
"cd": row[11],
|
"size": row[10] if len(row) > 10 else "",
|
||||||
"maxsl": row[12],
|
"cd": row[11] if len(row) > 11 else "",
|
||||||
"spack": row[13],
|
"maxsl": row[12] if len(row) > 12 else "",
|
||||||
"zx_name": row[14],
|
"spack": row[13] if len(row) > 13 else "",
|
||||||
"zx_code": row[15],
|
"zx_name": row[14] if len(row) > 14 else "",
|
||||||
"zx_zl": row[16],
|
"zx_code": row[15] if len(row) > 15 else "",
|
||||||
"template_name": row[17],
|
"zx_zl": row[16] if len(row) > 16 else "",
|
||||||
"bqlb": row[18],
|
"template_name": row[17] if len(row) > 17 else "",
|
||||||
"dycz": row[19],
|
"bqlb": row[18] if len(row) > 18 else "",
|
||||||
"luno": row[20],
|
"dycz": row[19] if len(row) > 19 else "",
|
||||||
"corp": row[21],
|
"luno": row[20] if len(row) > 20 else "",
|
||||||
"sl": row[22],
|
"corp": row[21] if len(row) > 21 else "",
|
||||||
"tccd": row[23],
|
"sl": row[22] if len(row) > 22 else "",
|
||||||
"bccd": row[24],
|
"tccd": row[23] if len(row) > 23 else "",
|
||||||
"ysl": row[25],
|
"bccd": row[24] if len(row) > 24 else "",
|
||||||
"qfqd": row[26],
|
"ysl": row[25] if len(row) > 25 else "",
|
||||||
"yzgg": row[27],
|
"qfqd": row[26] if len(row) > 26 else "",
|
||||||
"tqd": row[28],
|
"yzgg": row[27] if len(row) > 27 else "",
|
||||||
"bqd": row[29],
|
"tqd": row[28] if len(row) > 28 else "",
|
||||||
"bzfs": row[30],
|
"bqd": row[29] if len(row) > 29 else "",
|
||||||
"ddyq": row[31],
|
"bzfs": row[30] if len(row) > 30 else "",
|
||||||
"remarks_hb": row[32],
|
"ddyq": row[31] if len(row) > 31 else "",
|
||||||
"bz_tqd": row[33],
|
"remarks_hb": row[32] if len(row) > 32 else "",
|
||||||
"bz_bqd": row[34],
|
"bz_tqd": row[33] if len(row) > 33 else "",
|
||||||
"zzyq": row[35],
|
"bz_bqd": row[34] if len(row) > 34 else "",
|
||||||
"rq": row[36]
|
"zzyq": row[35] if len(row) > 35 else "",
|
||||||
}
|
"rq": row[36] if len(row) > 36 else ""
|
||||||
results.append(order_data)
|
}
|
||||||
|
results.append(order_data)
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(f"处理查询结果行时出错: {str(e)}, 行数据: {row}")
|
||||||
|
continue
|
||||||
|
|
||||||
# 保存查询结果
|
# 保存查询结果
|
||||||
self.query_results = results
|
self.query_results = results
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user