diff --git a/scripts/load_path.py b/scripts/load_path.py index b7452ba..dfe341c 100644 --- a/scripts/load_path.py +++ b/scripts/load_path.py @@ -135,6 +135,28 @@ PATHS_LOGINED = [ f"/{MOD}/credit_limit/api/set_credit_form.ui", f"/{MOD}/credit_limit/api/set_customer_credit.dspy", + # currency_list/ + f"/{MOD}/currency_list/index.ui", + f"/{MOD}/currency_list/get_currency_list.dspy", + f"/{MOD}/currency_list/add_currency_list.dspy", + f"/{MOD}/currency_list/update_currency_list.dspy", + f"/{MOD}/currency_list/delete_currency_list.dspy", + + # exchange_rate_list/ + f"/{MOD}/exchange_rate_list/index.ui", + f"/{MOD}/exchange_rate_list/get_exchange_rate_list.dspy", + f"/{MOD}/exchange_rate_list/add_exchange_rate_list.dspy", + f"/{MOD}/exchange_rate_list/update_exchange_rate_list.dspy", + f"/{MOD}/exchange_rate_list/delete_exchange_rate_list.dspy", + + # api (manual DSPY) + f"/{MOD}/api/currency_create.dspy", + f"/{MOD}/api/currency_update.dspy", + f"/{MOD}/api/currency_delete.dspy", + f"/{MOD}/api/exchange_rate_create.dspy", + f"/{MOD}/api/exchange_rate_update.dspy", + f"/{MOD}/api/exchange_rate_delete.dspy", + # proxy_recharge/ f"/{MOD}/proxy_recharge.ui", f"/{MOD}/proxy_recharge_submit.dspy", diff --git a/scripts/multi_currency_migration.sql b/scripts/multi_currency_migration.sql index ccf988c..5f0d7a2 100644 --- a/scripts/multi_currency_migration.sql +++ b/scripts/multi_currency_migration.sql @@ -1,13 +1,10 @@ --- Multi-currency migration for accounting + pricing + llmage --- Execute against the 'accounting' and 'llmage' databases - -- ============================================================ --- 1. accounting DB: currency + exchange_rate tables +-- 多币种迁移 SQL — 一次性执行 +-- 数据库: accounting / pricing / llmage / product_management -- ============================================================ -USE accounting; --- currency table -CREATE TABLE IF NOT EXISTS currency ( +-- ─── 1. accounting: currency + exchange_rate 表 + 初始数据 ─── +CREATE TABLE IF NOT EXISTS accounting.currency ( id VARCHAR(3) NOT NULL PRIMARY KEY, name VARCHAR(32) NOT NULL, symbol VARCHAR(8) DEFAULT '', @@ -16,14 +13,13 @@ CREATE TABLE IF NOT EXISTS currency ( status VARCHAR(16) DEFAULT 'active' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -INSERT IGNORE INTO currency (id, name, symbol, decimal_places, is_base, status) VALUES +INSERT IGNORE INTO accounting.currency (id, name, symbol, decimal_places, is_base, status) VALUES ('CNY', '人民币', '¥', 2, '1', 'active'), ('USD', '美元', '$', 2, '0', 'active'), ('JPY', '日元', '¥', 0, '0', 'active'), ('GBP', '英镑', '£', 2, '0', 'active'); --- exchange_rate table -CREATE TABLE IF NOT EXISTS exchange_rate ( +CREATE TABLE IF NOT EXISTS accounting.exchange_rate ( id VARCHAR(32) NOT NULL PRIMARY KEY, from_currency VARCHAR(3) NOT NULL, to_currency VARCHAR(3) NOT NULL, @@ -31,61 +27,44 @@ CREATE TABLE IF NOT EXISTS exchange_rate ( sell_rate DOUBLE(14,6) DEFAULT 0, mid_rate DOUBLE(14,6) DEFAULT 0, effective_date DATE NOT NULL, - updated_at DATETIME DEFAULT NULL + updated_at DATETIME DEFAULT NULL, + UNIQUE KEY idx_pair_date (from_currency, to_currency, effective_date) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -CREATE UNIQUE INDEX IF NOT EXISTS idx_currency_pair_date - ON exchange_rate (from_currency, to_currency, effective_date); - -INSERT IGNORE INTO exchange_rate (id, from_currency, to_currency, buy_rate, sell_rate, mid_rate, effective_date) VALUES +INSERT IGNORE INTO accounting.exchange_rate (id, from_currency, to_currency, buy_rate, sell_rate, mid_rate, effective_date) VALUES ('er_usd_cny', 'USD', 'CNY', 7.150000, 7.250000, 7.200000, '2025-01-01'), ('er_jpy_cny', 'JPY', 'CNY', 0.048000, 0.049000, 0.048500, '2025-01-01'), ('er_gbp_cny', 'GBP', 'CNY', 9.100000, 9.250000, 9.175000, '2025-01-01'), ('er_cny_usd', 'CNY', 'USD', 0.137900, 0.139900, 0.138900, '2025-01-01'); --- appcodes for currency_status -INSERT IGNORE INTO appcodes (id, name, hierarchy_flg) VALUES ('currency_status', '币种状态', '0'); -INSERT IGNORE INTO appcodes_kv (id, parentid, k, v) VALUES +INSERT IGNORE INTO accounting.appcodes (id, name, hierarchy_flg) VALUES ('currency_status', '币种状态', '0'); +INSERT IGNORE INTO accounting.appcodes_kv (id, parentid, k, v) VALUES ('currency_status_active', 'currency_status', 'active', '启用'), ('currency_status_inactive', 'currency_status', 'inactive', '停用'); --- ============================================================ --- 2. account table: add currency field --- ============================================================ -ALTER TABLE account ADD COLUMN IF NOT EXISTS currency VARCHAR(3) DEFAULT 'CNY' AFTER org1id; +-- ─── 2. accounting: 账务表加币种字段 ─── +ALTER TABLE accounting.account ADD COLUMN currency VARCHAR(3) DEFAULT 'CNY' AFTER org1id; +ALTER TABLE accounting.acc_detail ADD COLUMN currency VARCHAR(3) DEFAULT 'CNY' AFTER amount; +ALTER TABLE accounting.acc_detail ADD COLUMN exchange_rate DOUBLE(14,6) DEFAULT 1.0 AFTER currency; +ALTER TABLE accounting.acc_detail ADD COLUMN base_amount DOUBLE(20,2) DEFAULT 0 AFTER exchange_rate; +ALTER TABLE accounting.bill ADD COLUMN currency VARCHAR(3) DEFAULT 'CNY' AFTER amount; +ALTER TABLE accounting.bill ADD COLUMN base_amount DOUBLE(20,2) DEFAULT 0 AFTER currency; +ALTER TABLE accounting.bill_detail ADD COLUMN currency VARCHAR(3) DEFAULT 'CNY' AFTER amount; +ALTER TABLE accounting.bill_detail ADD COLUMN exchange_rate DOUBLE(14,6) DEFAULT 1.0 AFTER currency; +ALTER TABLE accounting.bill_detail ADD COLUMN base_amount DOUBLE(20,2) DEFAULT 0 AFTER exchange_rate; +ALTER TABLE accounting.ledger ADD COLUMN currency VARCHAR(3) DEFAULT 'CNY' AFTER amount; +ALTER TABLE accounting.ledger ADD COLUMN exchange_rate DOUBLE(14,6) DEFAULT 1.0 AFTER currency; +ALTER TABLE accounting.ledger ADD COLUMN base_amount DOUBLE(20,2) DEFAULT 0 AFTER exchange_rate; --- Drop old unique index and recreate with currency --- (manual: if unique index exists on accounting_orgid+orgid+subjectid+org1id, recreate) --- ALTER TABLE account DROP INDEX idx1; --- CREATE UNIQUE INDEX idx1 ON account (accounting_orgid, orgid, subjectid, org1id, currency); +-- ─── 3. pricing: 定价项目加币种 ─── +ALTER TABLE pricing_program ADD COLUMN currency VARCHAR(3) DEFAULT 'CNY' AFTER description; --- ============================================================ --- 3. acc_detail / bill / bill_detail / ledger: add currency fields --- ============================================================ -ALTER TABLE acc_detail ADD COLUMN IF NOT EXISTS currency VARCHAR(3) DEFAULT 'CNY' AFTER amount; -ALTER TABLE acc_detail ADD COLUMN IF NOT EXISTS exchange_rate DOUBLE(14,6) DEFAULT 1.0 AFTER currency; -ALTER TABLE acc_detail ADD COLUMN IF NOT EXISTS base_amount DOUBLE(20,2) DEFAULT 0 AFTER exchange_rate; +-- ─── 4. llmage: 使用记录加币种字段 ─── +ALTER TABLE llmage.llmusage ADD COLUMN amount_currency VARCHAR(3) DEFAULT 'CNY' AFTER amount; +ALTER TABLE llmage.llmusage ADD COLUMN amount_base DOUBLE(20,2) DEFAULT 0 AFTER amount_currency; +ALTER TABLE llmage.llmusage ADD COLUMN cost_currency VARCHAR(3) DEFAULT 'CNY' AFTER cost; +ALTER TABLE llmage.llmusage ADD COLUMN cost_base DOUBLE(20,2) DEFAULT 0 AFTER cost_currency; -ALTER TABLE bill ADD COLUMN IF NOT EXISTS currency VARCHAR(3) DEFAULT 'CNY' AFTER amount; -ALTER TABLE bill ADD COLUMN IF NOT EXISTS base_amount DOUBLE(20,2) DEFAULT 0 AFTER currency; - -ALTER TABLE bill_detail ADD COLUMN IF NOT EXISTS currency VARCHAR(3) DEFAULT 'CNY' AFTER amount; -ALTER TABLE bill_detail ADD COLUMN IF NOT EXISTS exchange_rate DOUBLE(14,6) DEFAULT 1.0 AFTER currency; -ALTER TABLE bill_detail ADD COLUMN IF NOT EXISTS base_amount DOUBLE(20,2) DEFAULT 0 AFTER exchange_rate; - -ALTER TABLE ledger ADD COLUMN IF NOT EXISTS currency VARCHAR(3) DEFAULT 'CNY' AFTER amount; -ALTER TABLE ledger ADD COLUMN IF NOT EXISTS exchange_rate DOUBLE(14,6) DEFAULT 1.0 AFTER currency; -ALTER TABLE ledger ADD COLUMN IF NOT EXISTS base_amount DOUBLE(20,2) DEFAULT 0 AFTER exchange_rate; - --- ============================================================ --- 4. pricing DB: pricing_program add currency --- ============================================================ -ALTER TABLE pricing_program ADD COLUMN IF NOT EXISTS currency VARCHAR(3) DEFAULT 'CNY' AFTER description; - --- ============================================================ --- 5. llmage DB: llmusage add currency fields --- ============================================================ -ALTER TABLE llmusage ADD COLUMN IF NOT EXISTS amount_currency VARCHAR(3) DEFAULT 'CNY' AFTER amount; -ALTER TABLE llmusage ADD COLUMN IF NOT EXISTS amount_base DOUBLE(20,2) DEFAULT 0 AFTER amount_currency; -ALTER TABLE llmusage ADD COLUMN IF NOT EXISTS cost_currency VARCHAR(3) DEFAULT 'CNY' AFTER cost; -ALTER TABLE llmusage ADD COLUMN IF NOT EXISTS cost_base DOUBLE(20,2) DEFAULT 0 AFTER cost_currency; +-- ─── 5. product_management: 订单表加币种 ─── +ALTER TABLE product_management.biz_order ADD COLUMN currency VARCHAR(3) DEFAULT 'CNY' AFTER amount; +ALTER TABLE product_management.biz_orderdetail ADD COLUMN currency VARCHAR(3) DEFAULT 'CNY' AFTER trans_amount;