update exportdata

This commit is contained in:
2025-09-03 21:41:11 +08:00
parent 41beb2ec33
commit 7d35766a09
13 changed files with 734 additions and 91 deletions

View File

@@ -102,6 +102,9 @@ class MainWindow(QMainWindow):
# 创建功能按钮组
self.create_button_group(main_layout)
# 创建数据导入按钮组
self.create_import_button_group(main_layout)
# 创建进度条
self.progress_bar = QProgressBar()
# self.progress_bar.setVisible(False)
@@ -307,6 +310,20 @@ class MainWindow(QMainWindow):
button_group.setLayout(button_layout)
layout.addWidget(button_group)
def create_import_button_group(self, layout):
"""创建数据导入按钮组"""
import_group = QGroupBox("数据导入")
import_layout = QHBoxLayout()
# 导入数据按钮
self.btn_import = QPushButton('导入股票数据')
self.btn_import.clicked.connect(self.on_import_clicked)
self.btn_import.setToolTip('从CSV文件导入股票数据到数据库')
import_layout.addWidget(self.btn_import)
import_group.setLayout(import_layout)
layout.addWidget(import_group)
def create_log_area(self, layout):
"""创建日志显示区域"""
@@ -341,6 +358,8 @@ class MainWindow(QMainWindow):
self.btn_export.setEnabled(enabled)
self.btn_calculate.setEnabled(enabled)
self.btn_check.setEnabled(enabled)
self.btn_import.setEnabled(enabled)
self.btn_float_share.setEnabled(enabled)
def on_update_clicked(self):
"""更新数据按钮点击事件"""
@@ -401,6 +420,17 @@ class MainWindow(QMainWindow):
worker.finished_signal.connect(self.on_task_finished)
worker.start()
self.worker_threads.append(worker)
def on_import_clicked(self):
"""导入数据按钮点击事件"""
self.log_message("开始导入股票数据...")
self.set_buttons_enabled(False)
worker = WorkerThread(self.import_stock_data)
worker.log_signal.connect(self.log_message)
worker.finished_signal.connect(self.on_task_finished)
worker.start()
self.worker_threads.append(worker)
def on_task_finished(self, success, message):
"""任务完成回调"""
@@ -486,8 +516,9 @@ class MainWindow(QMainWindow):
# 移除人民币交易的股票股票名称最后一个字符为R误删除的从配置文件读回来
reserved_codes = calculator.read_stock_codes_list(Path.cwd() / "config" / "Reservedcode.txt")
remove_codes = calculator.read_stock_codes_list(Path.cwd() / "config" / "Removecode.txt")
market_data_ll = calculator.get_stock_codes() # 使用按照价格和流通股数量筛选的那个表格
market_data = market_data_ll + reserved_codes
market_data = market_data_ll + reserved_codes - remove_codes
# 根据统计时间进行命名
target_table_name = 'hk_monthly_avg_' + datetime.now().strftime("%Y%m%d")
@@ -496,11 +527,10 @@ class MainWindow(QMainWindow):
# 使用tqdm创建进度条
for code in tqdm(market_data, desc="处理股票数据", unit=""):
tablename = 'hk_' + code[3:]
# 计算并保存月度均值
calculator.calculate_and_save_monthly_avg(
source_table=tablename,
target_table=target_table_name
stock_code =code,
target_table = target_table_name
)
# self.log_message("月度平均计算完成")
@@ -529,6 +559,54 @@ class MainWindow(QMainWindow):
except Exception as e:
self.log_message(f"数据检查失败: {str(e)}")
raise
def import_stock_data(self):
"""导入股票数据任务"""
try:
# 导入必要的模块
from base.StockDataImporter import StockDataImporter
from base.MySQLHelper import MySQLHelper
from pathlib import Path
# 数据库配置
db_config = {
'host': 'localhost',
'user': 'root',
'password': 'bzskmysql',
'database': 'hk_kline_1d'
}
# 列映射配置
COLUMN_MAPPING = {
'证券代码': 'stock_code',
'中文简称': 'stock_name_chn',
'英文简称': 'stock_name_en',
}
# 设置数据目录
current_dir = Path(__file__).parent if "__file__" in locals() else Path.cwd()
DATA_DIR = current_dir / "data"
# 确保data目录存在
DATA_DIR.mkdir(exist_ok=True, parents=True)
# 创建导入器
importer = StockDataImporter(db_config, COLUMN_MAPPING, DATA_DIR)
# 设置上传文件名(使用默认文件名 "港股通标的证券名单.csv"
importer.setUploadfile("港股通标的证券名单.csv")
# 执行导入
if importer.run_import():
self.log_message("股票数据导入成功!")
return True
else:
self.log_message("股票数据导入失败,请检查日志了解详情")
return False
except Exception as e:
self.log_message(f"导入股票数据失败: {str(e)}")
raise
def closeEvent(self, event):
"""窗口关闭事件"""