add: 新增一键满托功能
This commit is contained in:
parent
b6c65ca493
commit
4495b1683d
@ -2,10 +2,50 @@ from utils.api_utils import ApiUtils
|
|||||||
import logging
|
import logging
|
||||||
import json
|
import json
|
||||||
class GcApi:
|
class GcApi:
|
||||||
|
"""工程API接口类"""
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
"""初始化托盘API工具类"""
|
"""初始化API接口"""
|
||||||
self.api_utils = ApiUtils()
|
self.api_utils = ApiUtils()
|
||||||
|
|
||||||
|
|
||||||
|
def ismt_option(self, params):
|
||||||
|
"""
|
||||||
|
标记是否满托
|
||||||
|
|
||||||
|
Args:
|
||||||
|
ismt: 是否满托
|
||||||
|
corp_id: 公司ID
|
||||||
|
tray_id: 托盘ID
|
||||||
|
ip: 机器IP
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
dict: 返回结果
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
# API 配置中的键名
|
||||||
|
api_key = "ismt_option"
|
||||||
|
# 构建 form-data 格式的数据
|
||||||
|
data = {
|
||||||
|
"ismt": params.get("ismt", False),
|
||||||
|
"xpack":params.get("tray_id", ""),
|
||||||
|
"nw_ip":params.get("ip", ""),
|
||||||
|
"data_corp":params.get("corp_id", ""),
|
||||||
|
}
|
||||||
|
# 将工程号作为参数传递,使用 data 参数传递 form-data 格式数据
|
||||||
|
response = self.api_utils.post(api_key, data=data)
|
||||||
|
|
||||||
|
# 请求失败时返回空数据
|
||||||
|
if not response.get("status", False):
|
||||||
|
return {
|
||||||
|
"success": False,
|
||||||
|
"message": "标记是否满托失败",
|
||||||
|
"data": None
|
||||||
|
}
|
||||||
|
return response
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(f"标记是否满托失败: {str(e)}")
|
||||||
|
return None
|
||||||
def get_gc_info(self, gc_code):
|
def get_gc_info(self, gc_code):
|
||||||
"""
|
"""
|
||||||
获取GC信息
|
获取GC信息
|
||||||
|
|||||||
@ -15,7 +15,8 @@
|
|||||||
"get_gc_info": "/jsjt/xcsc/tprk/getBZGCInfoToWsbz.do",
|
"get_gc_info": "/jsjt/xcsc/tprk/getBZGCInfoToWsbz.do",
|
||||||
"get_order_info": "/jsjt/xcsc/tprk/getXsddBzrkGridListToWsbz.do",
|
"get_order_info": "/jsjt/xcsc/tprk/getXsddBzrkGridListToWsbz.do",
|
||||||
"add_order_info": "/jsjt/xcsc/tprk/bzrkAdd01.do",
|
"add_order_info": "/jsjt/xcsc/tprk/bzrkAdd01.do",
|
||||||
"get_xpack": "/jsjt/xcsc/tprk/getXpackToWsbz.do"
|
"get_xpack": "/jsjt/xcsc/tprk/getXpackToWsbz.do",
|
||||||
|
"ismt_option": "/jsjt/xcsc/tprk/ismtOptioTonWsbz.do"
|
||||||
},
|
},
|
||||||
"database": {
|
"database": {
|
||||||
"default": "sqlite",
|
"default": "sqlite",
|
||||||
|
|||||||
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=[2247])
|
client.write_registers(address=11, values=[212])
|
||||||
# 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])
|
||||||
@ -11,8 +11,8 @@ client.write_registers(address=4, values=[0])
|
|||||||
# client.write_registers(address=30, values=[25])
|
# client.write_registers(address=30, values=[25])
|
||||||
# client.write_registers(address=5, values=[16])
|
# client.write_registers(address=5, values=[16])
|
||||||
# 贴标完成
|
# 贴标完成
|
||||||
# client.write_registers(address=24, values=[1])s
|
# client.write_registers(address=24, values=[1])
|
||||||
# client.write_registers(address=13, values=[1])
|
client.write_registers(address=13, values=[1])
|
||||||
|
|
||||||
|
|
||||||
result = client.read_holding_registers(address=0, count=1)
|
result = client.read_holding_registers(address=0, count=1)
|
||||||
|
|||||||
@ -472,9 +472,9 @@ class MainWindowUI(QMainWindow):
|
|||||||
"""创建微丝产线表格,包含上料、检验、包装部分"""
|
"""创建微丝产线表格,包含上料、检验、包装部分"""
|
||||||
# 创建微丝产线框架
|
# 创建微丝产线框架
|
||||||
self.process_frame = QFrame()
|
self.process_frame = QFrame()
|
||||||
self.process_frame.setFrameShape(QFrame.Box)
|
self.process_frame.setFrameShape(QFrame.NoFrame) # 移除边框
|
||||||
self.process_frame.setLineWidth(1)
|
self.process_frame.setLineWidth(0)
|
||||||
self.process_frame.setStyleSheet("QFrame { border: 1px solid #dddddd; }")
|
self.process_frame.setStyleSheet("QFrame { background-color: #f5f5f5; }") # 与其他标题背景色一致
|
||||||
self.process_layout = QVBoxLayout(self.process_frame)
|
self.process_layout = QVBoxLayout(self.process_frame)
|
||||||
self.process_layout.setContentsMargins(0, 0, 0, 0)
|
self.process_layout.setContentsMargins(0, 0, 0, 0)
|
||||||
self.process_layout.setSpacing(0)
|
self.process_layout.setSpacing(0)
|
||||||
@ -483,9 +483,8 @@ class MainWindowUI(QMainWindow):
|
|||||||
self.process_title = QLabel("微丝产线")
|
self.process_title = QLabel("微丝产线")
|
||||||
self.process_title.setFont(self.second_title_font)
|
self.process_title.setFont(self.second_title_font)
|
||||||
self.process_title.setAlignment(Qt.AlignLeft | Qt.AlignVCenter)
|
self.process_title.setAlignment(Qt.AlignLeft | Qt.AlignVCenter)
|
||||||
# 调整行高
|
|
||||||
self.process_title.setFixedHeight(40)
|
self.process_title.setFixedHeight(40)
|
||||||
self.process_title.setStyleSheet("background-color: #f8f8f8; padding: 5px; border-bottom: 1px solid #dddddd;")
|
self.process_title.setStyleSheet("background-color: #f5f5f5; padding: 5px;") # 移除底部边框
|
||||||
self.process_layout.addWidget(self.process_title)
|
self.process_layout.addWidget(self.process_title)
|
||||||
|
|
||||||
|
|
||||||
@ -529,9 +528,9 @@ class MainWindowUI(QMainWindow):
|
|||||||
"""创建包装记录表格"""
|
"""创建包装记录表格"""
|
||||||
# 创建包装记录框架
|
# 创建包装记录框架
|
||||||
self.record_frame = QFrame()
|
self.record_frame = QFrame()
|
||||||
self.record_frame.setFrameShape(QFrame.Box)
|
self.record_frame.setFrameShape(QFrame.NoFrame) # 移除边框
|
||||||
self.record_frame.setLineWidth(1)
|
self.record_frame.setLineWidth(0)
|
||||||
self.record_frame.setStyleSheet("QFrame { border: 1px solid #dddddd; }") # 移除 border-top: none;
|
self.record_frame.setStyleSheet("QFrame { background-color: #f5f5f5; }") # 与其他标题背景色一致
|
||||||
self.record_layout = QVBoxLayout(self.record_frame)
|
self.record_layout = QVBoxLayout(self.record_frame)
|
||||||
self.record_layout.setContentsMargins(0, 0, 0, 0)
|
self.record_layout.setContentsMargins(0, 0, 0, 0)
|
||||||
self.record_layout.setSpacing(0)
|
self.record_layout.setSpacing(0)
|
||||||
@ -540,10 +539,44 @@ class MainWindowUI(QMainWindow):
|
|||||||
self.record_title = QLabel("包装记录")
|
self.record_title = QLabel("包装记录")
|
||||||
self.record_title.setFont(self.second_title_font)
|
self.record_title.setFont(self.second_title_font)
|
||||||
self.record_title.setAlignment(Qt.AlignLeft | Qt.AlignVCenter)
|
self.record_title.setAlignment(Qt.AlignLeft | Qt.AlignVCenter)
|
||||||
# 调整行高
|
|
||||||
self.record_title.setFixedHeight(40)
|
self.record_title.setFixedHeight(40)
|
||||||
self.record_title.setStyleSheet("background-color: #f8f8f8; padding: 5px; border-bottom: 1px solid #dddddd;")
|
self.record_title.setStyleSheet("background-color: #f5f5f5; padding: 5px;") # 移除底部边框
|
||||||
self.record_layout.addWidget(self.record_title)
|
|
||||||
|
# 创建标题容器,用于水平布局标题和按钮
|
||||||
|
self.record_title_container = QWidget()
|
||||||
|
self.record_title_layout = QHBoxLayout(self.record_title_container)
|
||||||
|
self.record_title_layout.setContentsMargins(5, 0, 5, 0)
|
||||||
|
self.record_title_layout.setSpacing(10)
|
||||||
|
|
||||||
|
# 添加标题到布局
|
||||||
|
self.record_title_layout.addWidget(self.record_title)
|
||||||
|
|
||||||
|
# 创建托盘完成按钮
|
||||||
|
self.tray_complete_button = QPushButton("托盘完成")
|
||||||
|
self.tray_complete_button.setFont(self.normal_font)
|
||||||
|
self.tray_complete_button.setFixedSize(100, 30)
|
||||||
|
self.tray_complete_button.setStyleSheet("""
|
||||||
|
QPushButton {
|
||||||
|
background-color: #4CAF50;
|
||||||
|
color: white;
|
||||||
|
border: none;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 5px 10px;
|
||||||
|
}
|
||||||
|
QPushButton:hover {
|
||||||
|
background-color: #45a049;
|
||||||
|
}
|
||||||
|
QPushButton:pressed {
|
||||||
|
background-color: #3d8b40;
|
||||||
|
}
|
||||||
|
""")
|
||||||
|
|
||||||
|
# 添加按钮到布局,并设置右对齐
|
||||||
|
self.record_title_layout.addStretch() # 添加弹性空间,将按钮推到右侧
|
||||||
|
self.record_title_layout.addWidget(self.tray_complete_button)
|
||||||
|
|
||||||
|
# 将标题容器添加到记录布局
|
||||||
|
self.record_layout.addWidget(self.record_title_container)
|
||||||
|
|
||||||
# 创建表格
|
# 创建表格
|
||||||
self.record_table = QTableWidget(13, 10) # 13行10列:序号、订单、工程号、品名、规格、托号、轴包装号、重量、净重、完成时间
|
self.record_table = QTableWidget(13, 10) # 13行10列:序号、订单、工程号、品名、规格、托号、轴包装号、重量、净重、完成时间
|
||||||
|
|||||||
@ -270,6 +270,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.tray_complete_button.clicked.connect(self.handle_tray_complete)
|
||||||
|
|
||||||
# 设置表格上下文菜单
|
# 设置表格上下文菜单
|
||||||
self.process_table.setContextMenuPolicy(Qt.CustomContextMenu)
|
self.process_table.setContextMenuPolicy(Qt.CustomContextMenu)
|
||||||
self.process_table.customContextMenuRequested.connect(self.show_table_context_menu)
|
self.process_table.customContextMenuRequested.connect(self.show_table_context_menu)
|
||||||
@ -3541,4 +3544,53 @@ class MainWindow(MainWindowUI):
|
|||||||
self.camera_display.start_display()
|
self.camera_display.start_display()
|
||||||
logging.warning("====> 已切换到实时相机模式")
|
logging.warning("====> 已切换到实时相机模式")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f"处理本地图像模式变更时发生错误: {e}")
|
logging.error(f"处理本地图像模式变更时发生错误: {e}")
|
||||||
|
|
||||||
|
def handle_tray_complete(self):
|
||||||
|
"""处理托盘完成按钮点击事件"""
|
||||||
|
try:
|
||||||
|
# 获取托盘号
|
||||||
|
tray_id = self.tray_edit.currentText()
|
||||||
|
if not tray_id:
|
||||||
|
QMessageBox.warning(self, "提示", "请先选择托盘号")
|
||||||
|
return
|
||||||
|
|
||||||
|
# 确认对话框
|
||||||
|
reply = QMessageBox.question(
|
||||||
|
self,
|
||||||
|
"确认完成",
|
||||||
|
f"确认将托盘 {tray_id} 标记为已满托?",
|
||||||
|
QMessageBox.Yes | QMessageBox.No,
|
||||||
|
QMessageBox.No
|
||||||
|
)
|
||||||
|
|
||||||
|
if reply != QMessageBox.Yes:
|
||||||
|
return
|
||||||
|
|
||||||
|
# 调用接口
|
||||||
|
from apis.gc_api import GcApi
|
||||||
|
gc_api = GcApi()
|
||||||
|
|
||||||
|
# 准备参数
|
||||||
|
params = {
|
||||||
|
'ismt': True,
|
||||||
|
'corp_id': self.corp_id,
|
||||||
|
'tray_id': tray_id,
|
||||||
|
'ip': '192.168.1.246'
|
||||||
|
}
|
||||||
|
|
||||||
|
# 调用接口
|
||||||
|
response = gc_api.ismt_option(params)
|
||||||
|
|
||||||
|
# 处理响应
|
||||||
|
if response.get('status', False):
|
||||||
|
QMessageBox.information(self, "成功", "托盘已标记为完成")
|
||||||
|
logging.info(f"托盘 {tray_id} 已标记为完成")
|
||||||
|
else:
|
||||||
|
error_msg = response.get('message', '未知错误')
|
||||||
|
QMessageBox.warning(self, "失败", f"标记托盘完成失败: {error_msg}")
|
||||||
|
logging.error(f"标记托盘 {tray_id} 完成失败: {error_msg}")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(f"处理托盘完成失败: {str(e)}")
|
||||||
|
QMessageBox.critical(self, "错误", f"处理托盘完成失败: {str(e)}")
|
||||||
Loading…
Reference in New Issue
Block a user