diff --git a/src/bot/bot.py b/src/bot/bot.py index ef66dfb..3779528 100644 --- a/src/bot/bot.py +++ b/src/bot/bot.py @@ -1,15 +1,15 @@ +import threading +import time + import schedule import telebot -import time -import threading - from loguru import logger from telebot import types from src.entity.finance import get_net_win_by_telegram_id -from src.entity.visual_list import text_count_by_telegram_id from src.entity.pay_record import get_pay_failed_by_telegram_id from src.entity.user import get_all_users +from src.entity.visual_list import text_count_by_telegram_id TOKEN = '6013830443:AAGzq1Tgtr_ZejU7bv0mab14xOwi0_64d0w' bot = telebot.TeleBot(TOKEN) diff --git a/src/core/定时任务.py b/src/core/定时任务.py index b982150..79c6893 100644 --- a/src/core/定时任务.py +++ b/src/core/定时任务.py @@ -3,12 +3,11 @@ import time import schedule from loguru import logger +from src.core.constant import BOT_TOKEN, COUNT_GROUP_ID +from src.core.message_client import send_message from src.core.util import get_curr_day from src.entity.finance import get_net_win_by_user from src.entity.pay_record import get_pay_failed_by_user - -from src.core.constant import BOT_TOKEN, COUNT_GROUP_ID -from src.core.message_client import send_message from src.entity.user import get_user_by_username_and_password from src.entity.visual_list import text_count_by_user diff --git a/src/entity/banner_info.py b/src/entity/banner_info.py index b4221f1..c156593 100644 --- a/src/entity/banner_info.py +++ b/src/entity/banner_info.py @@ -1,14 +1,15 @@ +import time from concurrent.futures import ThreadPoolExecutor from dataclasses import dataclass from typing import List +from loguru import logger + from src.core.api_request import account_post from src.core.constant import BANNER_URL, BOT_TOKEN, GROUP_ID from src.core.message_client import send_message from src.core.util import get_curr_day from src.entity.account import Account -import time - from src.entity.member import get_today_new_member_list from src.entity.pay_record import get_latest_deposit_user from src.entity.user import User @@ -47,7 +48,6 @@ def query_banner_info(account: Account): try: date = get_curr_day() banner_info = get_banner_info(account) - from loguru import logger logger.debug(f'{account.name}请求成功:{banner_info}') logger.info( f'{time.strftime("%Y-%m-%d %H:%M:%S")} {account.name}:注册:{banner_info.registerMembers},首存:{banner_info.firstDepositNum},负盈利:{banner_info.netWinLose},有效:{banner_info.effectiveNew},活跃:{banner_info.activeMembers}') @@ -87,4 +87,4 @@ def query_banner_info(account: Account): def get_banner_info_by_user(user: User) -> List[BannerInfo]: with ThreadPoolExecutor(max_workers=len(user.accounts)) as executor: futures = [executor.submit(get_banner_info, account) for account in user.accounts] - return [future.result() for future in futures] \ No newline at end of file + return [future.result() for future in futures] diff --git a/src/entity/pay_record.py b/src/entity/pay_record.py index 40bcbfb..f5e4dd0 100644 --- a/src/entity/pay_record.py +++ b/src/entity/pay_record.py @@ -6,11 +6,11 @@ from typing import Dict, List, Optional from src import logger from src.core import api_request, util -from src.core.constant import PAY_RECORD_URL, PAY_RECORD_LIST_URL +from src.core.constant import PAY_RECORD_LIST_URL, PAY_RECORD_URL from src.core.util import get_curr_day, get_first_day_month from src.entity.account import Account -from src.entity.member import (async_get_member_detail_by_name, - get_member_by_name, get_member_list, MemberList) +from src.entity.member import (MemberList, async_get_member_detail_by_name, + get_member_by_name, get_member_list) from src.entity.user import User, get_user_by_telegram_id diff --git a/src/entity/user.py b/src/entity/user.py index 506e064..35df37d 100644 --- a/src/entity/user.py +++ b/src/entity/user.py @@ -1,7 +1,7 @@ from dataclasses import dataclass from typing import List -from cachetools import cached, TTLCache +from cachetools import TTLCache, cached from sqlalchemy import String, func from sqlalchemy.dialects.mssql import TINYINT from sqlalchemy.orm import Mapped, mapped_column, relationship diff --git a/src/ui/__init__.py b/src/ui/__init__.py index af1697d..ab72b1b 100644 --- a/src/ui/__init__.py +++ b/src/ui/__init__.py @@ -1,5 +1,6 @@ from PyQt6.QtCore import QObject, pyqtSignal + class GlobalSignals(QObject): user_data_updated = pyqtSignal() diff --git a/src/ui/app.py b/src/ui/app.py index 544a87e..d12ba5d 100644 --- a/src/ui/app.py +++ b/src/ui/app.py @@ -1,13 +1,15 @@ import configparser import os +import time from loguru import logger from PyQt6.QtCore import QDate, QDateTime, Qt, QThreadPool, QTime, QTimer -from PyQt6.QtGui import QColor, QIcon, QAction +from PyQt6.QtGui import QAction, QColor, QIcon from PyQt6.QtWidgets import (QApplication, QCheckBox, QDateEdit, QHBoxLayout, - QHeaderView, QMainWindow, QPushButton, - QSizePolicy, QTableWidget, QTableWidgetItem, - QTabWidget, QTextEdit, QVBoxLayout, QWidget, QMessageBox, QSystemTrayIcon, QMenu) + QHeaderView, QMainWindow, QMenu, QMessageBox, + QPushButton, QSizePolicy, QSystemTrayIcon, + QTableWidget, QTableWidgetItem, QTabWidget, + QTextEdit, QVBoxLayout, QWidget) from src.core.message_client import send_message from src.core.util import convert_data, resource_path @@ -116,14 +118,15 @@ class Application(QMainWindow): def init_table_data(self): # 初始化表格数据 - # 例如,加载账户数据并更新表格 - for account in self.user.accounts: - data = self.query_initial_data(account) - self.update_table(account.username, data) + data = self.query_initial_data(self.user) + for row in data: + time_str = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + self.update_table(row.agentCode, [time_str, row.registerMembers, row.firstDepositNum, row.netWinLose, + row.effectiveNew, row.activeMembers]) def query_initial_data(self, account): # 实际实现应该根据您的业务逻辑来定义 - return ReportTask.query_data_for_account(account) + return ReportTask.query_data_for_user(account) def setup_report_timer(self): self.report_timer = QTimer(self) @@ -201,9 +204,10 @@ class Application(QMainWindow): def update_date_edit(self): # 更新日期选择器的日期为当前日期 self.dateEdit.setDate(QDate.currentDate()) + # 强制刷新控件 + self.dateEdit.update() # 更新日期范围 self.update_date_range() - print(self.dateEdit.date()) # 设置定时器每24小时触发一次 self.date_update_timer.start(86400000) @@ -330,7 +334,7 @@ class Application(QMainWindow): for col, cell_data in enumerate(data): cell = self.create_table_cell(cell_data, table, col) - # 注意这里我们使用 row_count 而不是 0 + # 使用 row_count 而不是 0 table.setItem(row_count, col, cell) self.handle_data_change(table, cell_data, col, account_username, notifications) @@ -354,7 +358,7 @@ class Application(QMainWindow): def update_cell_color(self, table, col, count_change): # 更新单元格颜色 - cell = table.item(0, col) + cell = table.item(table.rowCount() - 1, col) if count_change > 0: cell.setForeground(QColor(Qt.GlobalColor.green)) elif count_change < 0: diff --git a/src/ui/data_query.py b/src/ui/data_query.py index e7b1faa..26390b1 100644 --- a/src/ui/data_query.py +++ b/src/ui/data_query.py @@ -1,8 +1,9 @@ import time from PyQt6.QtCore import QObject, QRunnable, pyqtSignal -from src.entity.banner_info import get_banner_info -from src.entity.finance import get_net_win_by_user, get_adjusted_salary + +from src.entity.banner_info import get_banner_info, get_banner_info_by_user +from src.entity.finance import get_adjusted_salary, get_net_win_by_user from src.entity.pay_record import get_pay_failed_by_user from src.entity.visual_list import text_count_by_user @@ -30,6 +31,11 @@ class ReportTask(QRunnable): return [time_str, banner_info.registerMembers, banner_info.firstDepositNum, banner_info.netWinLose, banner_info.effectiveNew, banner_info.activeMembers] + @staticmethod + def query_data_for_user(user): + banner_info_res = get_banner_info_by_user(user) + return banner_info_res + class ButtonTask(QRunnable): def __init__(self, query_type, selected_date_str, user):