修复整点不生成数据bug,新增机器人推送
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
import os
|
||||
import sqlite3
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
def _resolve_sqlite_path(url: str) -> str:
|
||||
if not url.startswith('sqlite:///'):
|
||||
raise ValueError('Only sqlite URLs are supported')
|
||||
return url.replace('sqlite:///', '')
|
||||
|
||||
def ensure_tables(conn: sqlite3.Connection) -> None:
|
||||
cur = conn.cursor()
|
||||
cur.execute(
|
||||
"""
|
||||
CREATE TABLE IF NOT EXISTS daily_revenue (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
date DATE NOT NULL UNIQUE,
|
||||
amount REAL NOT NULL,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
is_final INTEGER NOT NULL DEFAULT 0,
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
source TEXT,
|
||||
note TEXT
|
||||
)
|
||||
"""
|
||||
)
|
||||
cur.execute(
|
||||
"""
|
||||
CREATE TABLE IF NOT EXISTS audit_log (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
date DATE NOT NULL,
|
||||
old_amount REAL,
|
||||
new_amount REAL,
|
||||
reason TEXT,
|
||||
actor TEXT,
|
||||
type TEXT,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
)
|
||||
"""
|
||||
)
|
||||
conn.commit()
|
||||
|
||||
def set_yesterday(amount: float) -> None:
|
||||
url = os.getenv('DATABASE_URL', 'sqlite:///data.db')
|
||||
path = _resolve_sqlite_path(url)
|
||||
os.makedirs(os.path.dirname(path) or '.', exist_ok=True)
|
||||
conn = sqlite3.connect(path)
|
||||
ensure_tables(conn)
|
||||
cur = conn.cursor()
|
||||
yday = (datetime.now().date() - timedelta(days=1)).isoformat()
|
||||
cur.execute('SELECT amount FROM daily_revenue WHERE date=?', (yday,))
|
||||
row = cur.fetchone()
|
||||
old = row[0] if row else None
|
||||
if row:
|
||||
cur.execute('UPDATE daily_revenue SET amount=?, is_final=1, source=? , updated_at=CURRENT_TIMESTAMP WHERE date=?', (amount, 'correct', yday))
|
||||
else:
|
||||
cur.execute('INSERT INTO daily_revenue(date, amount, is_final, source) VALUES(?, ?, 1, ?)', (yday, amount, 'correct'))
|
||||
cur.execute('INSERT INTO audit_log(date, old_amount, new_amount, reason, actor, type) VALUES(?, ?, ?, ?, ?, ?)', (yday, old, amount, 'manual_correct', 'admin', 'correct'))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
if __name__ == '__main__':
|
||||
set_yesterday(3629.76)
|
||||
Reference in New Issue
Block a user