feat: 新增库房功能
This commit is contained in:
parent
083cc3f675
commit
e6c7c3a46e
@ -185,3 +185,51 @@ class GcApi:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f"获取订单列表失败: {str(e)}")
|
logging.error(f"获取订单列表失败: {str(e)}")
|
||||||
return {"status": False, "message": f"获取订单列表失败: {str(e)}"}
|
return {"status": False, "message": f"获取订单列表失败: {str(e)}"}
|
||||||
|
|
||||||
|
def get_params(self, stype, main, corp_id):
|
||||||
|
"""
|
||||||
|
获取指定参数信息
|
||||||
|
|
||||||
|
Args:
|
||||||
|
stype: 参数类型,如"库房档案"
|
||||||
|
main: 主参数,如"XC"
|
||||||
|
corp_id: 公司ID
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
dict: 参数信息列表
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
# API 配置中的键名
|
||||||
|
api_key = "get_params"
|
||||||
|
|
||||||
|
# 构建GET请求参数
|
||||||
|
params = {
|
||||||
|
"stype": stype,
|
||||||
|
"main": main,
|
||||||
|
"corp_id": corp_id
|
||||||
|
}
|
||||||
|
|
||||||
|
# 发送GET请求
|
||||||
|
response = self.api_utils.get(api_key, params=params)
|
||||||
|
|
||||||
|
# 检查响应状态
|
||||||
|
if response.get("success", False):
|
||||||
|
return {
|
||||||
|
"status": True,
|
||||||
|
"data": response.get("data", []),
|
||||||
|
"message": "获取参数信息成功"
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
return {
|
||||||
|
"status": False,
|
||||||
|
"data": [],
|
||||||
|
"message": response.get("message", "获取参数信息失败")
|
||||||
|
}
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(f"获取参数信息失败: {str(e)}")
|
||||||
|
return {
|
||||||
|
"status": False,
|
||||||
|
"data": [],
|
||||||
|
"message": f"获取参数信息失败: {str(e)}"
|
||||||
|
}
|
||||||
@ -7,8 +7,8 @@
|
|||||||
"enable_keyboard_listener": false,
|
"enable_keyboard_listener": false,
|
||||||
"enable_camera": false
|
"enable_camera": false
|
||||||
},
|
},
|
||||||
"base_url": "http://localhost:8084",
|
"base_url": "http://localhost:8085",
|
||||||
"mode": "standalone"
|
"mode": "api"
|
||||||
},
|
},
|
||||||
"apis": {
|
"apis": {
|
||||||
"get_tray_info": "/apjt/xcsc/tpda/getByTp_note/",
|
"get_tray_info": "/apjt/xcsc/tpda/getByTp_note/",
|
||||||
@ -16,7 +16,8 @@
|
|||||||
"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"
|
"ismt_option": "/jsjt/xcsc/tprk/ismtOptioTonWsbz.do",
|
||||||
|
"get_params": "/select/getcombcodeWsbz.do"
|
||||||
},
|
},
|
||||||
"database": {
|
"database": {
|
||||||
"default": "sqlite",
|
"default": "sqlite",
|
||||||
|
|||||||
BIN
db/jtDB.db
BIN
db/jtDB.db
Binary file not shown.
@ -9,6 +9,7 @@ from PySide6.QtCore import Qt, QDateTime, QTimer
|
|||||||
class MainWindowUI(QMainWindow):
|
class MainWindowUI(QMainWindow):
|
||||||
# 定义字段映射为类属性,方便外部引用
|
# 定义字段映射为类属性,方便外部引用
|
||||||
FIELD_MAPPING = {
|
FIELD_MAPPING = {
|
||||||
|
"库房": "lib",
|
||||||
"客户": "customerexp",
|
"客户": "customerexp",
|
||||||
"规格": "size",
|
"规格": "size",
|
||||||
"材质": "cz",
|
"材质": "cz",
|
||||||
@ -348,7 +349,25 @@ class MainWindowUI(QMainWindow):
|
|||||||
label.setAlignment(Qt.AlignLeft | Qt.AlignVCenter)
|
label.setAlignment(Qt.AlignLeft | Qt.AlignVCenter)
|
||||||
label.setStyleSheet("background-color: #FAFAFA; padding: 5px;")
|
label.setStyleSheet("background-color: #FAFAFA; padding: 5px;")
|
||||||
|
|
||||||
# 创建值(改为QLineEdit)
|
# 根据字段类型创建不同的值组件
|
||||||
|
if field_name == "库房":
|
||||||
|
# 库房字段使用QComboBox,完全复刻托盘号组件的配置
|
||||||
|
value = QComboBox()
|
||||||
|
value.setFixedHeight(35)
|
||||||
|
value.setStyleSheet("QComboBox { border: 1px solid #cccccc; padding: 3px; background-color: white; } QComboBox::drop-down { border: none; width: 20px; }")
|
||||||
|
value.setFont(QFont("微软雅黑", 12))
|
||||||
|
value.setEditable(False) # 设置为不可编辑,确保是纯下拉选择
|
||||||
|
value.setInsertPolicy(QComboBox.NoInsert) # 不自动插入用户输入到列表中
|
||||||
|
value.setMaxVisibleItems(10) # 设置下拉框最多显示10个项目
|
||||||
|
# 添加默认选项
|
||||||
|
value.addItem("成品库")
|
||||||
|
value.addItem("退回仓")
|
||||||
|
value.addItem("散装库")
|
||||||
|
value.addItem("不合格库(线材)")
|
||||||
|
value.addItem("废丝库")
|
||||||
|
value.setCurrentIndex(0) # 默认选择第一个
|
||||||
|
else:
|
||||||
|
# 其他字段使用QLineEdit
|
||||||
value = QLineEdit("")
|
value = QLineEdit("")
|
||||||
value.setFont(self.normal_font)
|
value.setFont(self.normal_font)
|
||||||
value.setAlignment(Qt.AlignLeft | Qt.AlignVCenter)
|
value.setAlignment(Qt.AlignLeft | Qt.AlignVCenter)
|
||||||
|
|||||||
@ -339,6 +339,9 @@ class MainWindow(MainWindowUI):
|
|||||||
# 加载托盘号列表
|
# 加载托盘号列表
|
||||||
self.load_pallet_codes()
|
self.load_pallet_codes()
|
||||||
|
|
||||||
|
# 加载库房数据
|
||||||
|
self.load_warehouse_data()
|
||||||
|
|
||||||
logging.info("显示主页面")
|
logging.info("显示主页面")
|
||||||
|
|
||||||
def load_pallet_codes(self):
|
def load_pallet_codes(self):
|
||||||
@ -378,6 +381,78 @@ class MainWindow(MainWindowUI):
|
|||||||
self.tray_edit.clear()
|
self.tray_edit.clear()
|
||||||
self.tray_edit.setCurrentText("")
|
self.tray_edit.setCurrentText("")
|
||||||
|
|
||||||
|
def load_warehouse_data(self):
|
||||||
|
"""从API加载库房数据并更新到信息表格的库房组件"""
|
||||||
|
try:
|
||||||
|
# 获取信息表格中的库房组件
|
||||||
|
warehouse_combo = self.info_values.get("库房")
|
||||||
|
if not warehouse_combo:
|
||||||
|
logging.warning("未找到库房组件")
|
||||||
|
return
|
||||||
|
|
||||||
|
# 获取当前选中的库房,以便保留用户选择
|
||||||
|
current_warehouse = warehouse_combo.currentText()
|
||||||
|
|
||||||
|
# 清空当前项目
|
||||||
|
warehouse_combo.clear()
|
||||||
|
|
||||||
|
# 调用API获取库房数据
|
||||||
|
from apis.gc_api import GcApi
|
||||||
|
gc_api = GcApi()
|
||||||
|
|
||||||
|
# 调用get_params接口获取库房信息
|
||||||
|
response = gc_api.get_params("库房档案", "XC", self.corp_id)
|
||||||
|
|
||||||
|
if response.get("status", False):
|
||||||
|
warehouse_data = response.get("data", [])
|
||||||
|
|
||||||
|
if warehouse_data and len(warehouse_data) > 0:
|
||||||
|
# 添加库房到下拉框
|
||||||
|
for warehouse in warehouse_data:
|
||||||
|
warehouse_name = warehouse.get("combtext", "")
|
||||||
|
if warehouse_name:
|
||||||
|
warehouse_combo.addItem(warehouse_name)
|
||||||
|
|
||||||
|
# 默认选择成品库房
|
||||||
|
default_index = warehouse_combo.findText("成品库")
|
||||||
|
if default_index != -1:
|
||||||
|
warehouse_combo.setCurrentIndex(default_index)
|
||||||
|
elif warehouse_combo.count() > 0:
|
||||||
|
# 如果没有找到成品库,选择第一个
|
||||||
|
warehouse_combo.setCurrentIndex(0)
|
||||||
|
|
||||||
|
# 如果有之前的选择,尝试恢复它
|
||||||
|
if current_warehouse:
|
||||||
|
index = warehouse_combo.findText(current_warehouse)
|
||||||
|
if index != -1:
|
||||||
|
warehouse_combo.setCurrentIndex(index)
|
||||||
|
|
||||||
|
logging.info(f"已加载库房数据,共 {len(warehouse_data)} 个")
|
||||||
|
else:
|
||||||
|
logging.warning("未找到库房数据,库房列表将为空")
|
||||||
|
else:
|
||||||
|
logging.error(f"获取库房数据失败: {response.get('message', '未知错误')}")
|
||||||
|
# 如果API调用失败,添加默认选项
|
||||||
|
warehouse_combo.addItem("成品库")
|
||||||
|
warehouse_combo.addItem("退回仓")
|
||||||
|
warehouse_combo.addItem("散装库")
|
||||||
|
warehouse_combo.addItem("不合格库(线材)")
|
||||||
|
warehouse_combo.addItem("废丝库")
|
||||||
|
warehouse_combo.setCurrentIndex(0)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(f"加载库房数据失败: {str(e)}")
|
||||||
|
# 如果加载失败,添加默认选项
|
||||||
|
warehouse_combo = self.info_values.get("库房")
|
||||||
|
if warehouse_combo:
|
||||||
|
warehouse_combo.clear()
|
||||||
|
warehouse_combo.addItem("成品库")
|
||||||
|
warehouse_combo.addItem("退回仓")
|
||||||
|
warehouse_combo.addItem("散装库")
|
||||||
|
warehouse_combo.addItem("不合格库(线材)")
|
||||||
|
warehouse_combo.addItem("废丝库")
|
||||||
|
warehouse_combo.setCurrentIndex(0)
|
||||||
|
|
||||||
def show_settings_page(self):
|
def show_settings_page(self):
|
||||||
"""显示设置页面"""
|
"""显示设置页面"""
|
||||||
# 创建设置窗口
|
# 创建设置窗口
|
||||||
@ -741,12 +816,23 @@ class MainWindow(MainWindowUI):
|
|||||||
order_info = {}
|
order_info = {}
|
||||||
for field_name, label in self.info_values.items():
|
for field_name, label in self.info_values.items():
|
||||||
order_info_key = self.FIELD_MAPPING.get(field_name)
|
order_info_key = self.FIELD_MAPPING.get(field_name)
|
||||||
if order_info_key:
|
if order_info_key and label is not None:
|
||||||
|
try:
|
||||||
# 根据控件类型选择合适的方法获取文本
|
# 根据控件类型选择合适的方法获取文本
|
||||||
if isinstance(label, QTextEdit):
|
if isinstance(label, QTextEdit):
|
||||||
order_info[order_info_key] = label.toPlainText()
|
order_info[order_info_key] = label.toPlainText()
|
||||||
|
elif isinstance(label, QComboBox):
|
||||||
|
order_info[order_info_key] = label.currentText()
|
||||||
else:
|
else:
|
||||||
order_info[order_info_key] = label.text()
|
order_info[order_info_key] = label.text()
|
||||||
|
except RuntimeError as e:
|
||||||
|
# 如果对象已被删除,记录错误并跳过
|
||||||
|
logging.warning(f"控件对象已被删除,字段: {field_name}, 错误: {str(e)}")
|
||||||
|
continue
|
||||||
|
except Exception as e:
|
||||||
|
# 其他异常也记录并跳过
|
||||||
|
logging.warning(f"获取控件文本失败,字段: {field_name}, 错误: {str(e)}")
|
||||||
|
continue
|
||||||
# 更新/补充 qd 字段
|
# 更新/补充 qd 字段
|
||||||
order_info["qd"] = self._current_gc_qd
|
order_info["qd"] = self._current_gc_qd
|
||||||
# 再调用 update_info_table
|
# 再调用 update_info_table
|
||||||
@ -1998,6 +2084,12 @@ class MainWindow(MainWindowUI):
|
|||||||
info['pono'] = self._current_order_code
|
info['pono'] = self._current_order_code
|
||||||
info["dycz"] = info.get("cz")
|
info["dycz"] = info.get("cz")
|
||||||
info['qd'] = self._current_gc_qd
|
info['qd'] = self._current_gc_qd
|
||||||
|
# 添加库房信息
|
||||||
|
warehouse_combo = self.info_values.get("库房")
|
||||||
|
if warehouse_combo:
|
||||||
|
info['lib'] = warehouse_combo.currentText()
|
||||||
|
else:
|
||||||
|
info['lib'] = "成品库" # 默认值
|
||||||
# 获取本机IP地址
|
# 获取本机IP地址
|
||||||
# import socket
|
# import socket
|
||||||
# try:
|
# try:
|
||||||
@ -3563,29 +3655,82 @@ class MainWindow(MainWindowUI):
|
|||||||
# 记录 order_info 中的所有键,用于调试
|
# 记录 order_info 中的所有键,用于调试
|
||||||
logging.debug(f"订单信息键: {list(order_info.keys())}")
|
logging.debug(f"订单信息键: {list(order_info.keys())}")
|
||||||
|
|
||||||
# 更新表格内容
|
# 更新表格内容 - 智能更新:已有就更新,没有就新增,空值不覆盖
|
||||||
for field_name, field_key in field_mapping.items():
|
for field_name, field_key in field_mapping.items():
|
||||||
if field_name in self.info_values:
|
if field_name in self.info_values and self.info_values[field_name] is not None:
|
||||||
value = ""
|
try:
|
||||||
# 对可能存在的键进行安全检查
|
# 获取当前控件中的值
|
||||||
|
current_value = ""
|
||||||
|
if isinstance(self.info_values[field_name], QTextEdit):
|
||||||
|
current_value = self.info_values[field_name].toPlainText()
|
||||||
|
elif isinstance(self.info_values[field_name], QComboBox):
|
||||||
|
current_value = self.info_values[field_name].currentText()
|
||||||
|
else:
|
||||||
|
current_value = self.info_values[field_name].text()
|
||||||
|
except RuntimeError as e:
|
||||||
|
# 如果对象已被删除,记录错误并跳过
|
||||||
|
logging.warning(f"控件对象已被删除,字段: {field_name}, 错误: {str(e)}")
|
||||||
|
continue
|
||||||
|
except Exception as e:
|
||||||
|
# 其他异常也记录并跳过
|
||||||
|
logging.warning(f"获取控件文本失败,字段: {field_name}, 错误: {str(e)}")
|
||||||
|
continue
|
||||||
|
|
||||||
|
# 获取API返回的新值
|
||||||
|
new_value = ""
|
||||||
if field_key and field_key in order_info:
|
if field_key and field_key in order_info:
|
||||||
value = str(order_info[field_key])
|
new_value = str(order_info[field_key])
|
||||||
|
|
||||||
# 特殊处理线径公差
|
# 特殊处理线径公差
|
||||||
if field_name == "线径公差" and "bccd" in order_info and "tccd" in order_info:
|
if field_name == "线径公差" and "bccd" in order_info and "tccd" in order_info:
|
||||||
bccd = order_info.get("bccd")
|
bccd = order_info.get("bccd")
|
||||||
tccd = order_info.get("tccd")
|
tccd = order_info.get("tccd")
|
||||||
if bccd is not None and tccd is not None:
|
if bccd is not None and tccd is not None:
|
||||||
value = f"{bccd} - {tccd}"
|
new_value = f"{bccd} - {tccd}"
|
||||||
|
|
||||||
|
# 特殊处理强度范围
|
||||||
if field_name == "强度范围" and "bqd" in order_info and "tqd" in order_info:
|
if field_name == "强度范围" and "bqd" in order_info and "tqd" in order_info:
|
||||||
bqd = order_info.get("bqd")
|
bqd = order_info.get("bqd")
|
||||||
tqd = order_info.get("tqd")
|
tqd = order_info.get("tqd")
|
||||||
if bqd is not None and tqd is not None:
|
if bqd is not None and tqd is not None:
|
||||||
value = f"{bqd} - {tqd}"
|
new_value = f"{bqd} - {tqd}"
|
||||||
# 根据控件类型选择合适的方法设置文本
|
|
||||||
|
# 智能更新逻辑:如果新值不为空且与当前值不同,则更新;如果新值为空但当前值不为空,则保持当前值
|
||||||
|
if new_value and new_value != current_value:
|
||||||
|
# 有新值且与当前值不同,进行更新
|
||||||
|
try:
|
||||||
if isinstance(self.info_values[field_name], QTextEdit):
|
if isinstance(self.info_values[field_name], QTextEdit):
|
||||||
self.info_values[field_name].setPlainText(value)
|
self.info_values[field_name].setPlainText(new_value)
|
||||||
|
elif isinstance(self.info_values[field_name], QComboBox):
|
||||||
|
# 对于QComboBox,尝试找到匹配的选项并设置
|
||||||
|
combo = self.info_values[field_name]
|
||||||
|
index = combo.findText(new_value)
|
||||||
|
if index != -1:
|
||||||
|
combo.setCurrentIndex(index)
|
||||||
else:
|
else:
|
||||||
self.info_values[field_name].setText(value)
|
# 如果没找到匹配的选项,添加新选项
|
||||||
|
combo.addItem(new_value)
|
||||||
|
combo.setCurrentText(new_value)
|
||||||
|
else:
|
||||||
|
self.info_values[field_name].setText(new_value)
|
||||||
|
logging.debug(f"更新字段 '{field_name}': '{current_value}' -> '{new_value}'")
|
||||||
|
except RuntimeError as e:
|
||||||
|
# 如果对象已被删除,记录错误并跳过
|
||||||
|
logging.warning(f"控件对象已被删除,无法更新字段: {field_name}, 错误: {str(e)}")
|
||||||
|
continue
|
||||||
|
except Exception as e:
|
||||||
|
# 其他异常也记录并跳过
|
||||||
|
logging.warning(f"更新控件文本失败,字段: {field_name}, 错误: {str(e)}")
|
||||||
|
continue
|
||||||
|
elif not new_value and current_value:
|
||||||
|
# 新值为空但当前值不为空,保持当前值
|
||||||
|
logging.debug(f"保持字段 '{field_name}' 的当前值: '{current_value}' (API返回空值)")
|
||||||
|
elif not new_value and not current_value:
|
||||||
|
# 新值和当前值都为空,无需操作
|
||||||
|
logging.debug(f"字段 '{field_name}' 新值和当前值都为空,无需更新")
|
||||||
|
else:
|
||||||
|
# 新值与当前值相同,无需更新
|
||||||
|
logging.debug(f"字段 '{field_name}' 值未变化: '{current_value}'")
|
||||||
else:
|
else:
|
||||||
logging.warning(f"字段名 '{field_name}' 在info_values中不存在")
|
logging.warning(f"字段名 '{field_name}' 在info_values中不存在")
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user