diff --git a/docker/sql/migrations/V9__add_missing_tables.sql b/docker/sql/migrations/V9__add_missing_tables.sql new file mode 100644 index 0000000..66696ec --- /dev/null +++ b/docker/sql/migrations/V9__add_missing_tables.sql @@ -0,0 +1,280 @@ +-- V9: 添加缺失的经济系统和等级系统表 (2026-05-18) +-- 服务器数据库缺少以下表: user_mint_count, mint_cost_config, level_*, transaction_records, mint_*_config + +BEGIN; + +-- ===================================================== +-- 1. user_mint_count 铸爱次数表 (V5原有) +-- ===================================================== +CREATE TABLE IF NOT EXISTS public.user_mint_count ( + id BIGSERIAL PRIMARY KEY, + user_id BIGINT NOT NULL, + star_id BIGINT NOT NULL, + mint_count INT NOT NULL DEFAULT 0, + revenue_boost_bps INT NOT NULL DEFAULT 0, + updated_at BIGINT NOT NULL, + CONSTRAINT uk_user_mint_count_user_star UNIQUE (user_id, star_id) +); + +CREATE INDEX IF NOT EXISTS idx_user_mint_count_user ON public.user_mint_count USING btree (user_id); +CREATE INDEX IF NOT EXISTS idx_user_mint_count_star ON public.user_mint_count USING btree (star_id); + +COMMENT ON TABLE public.user_mint_count IS '用户在某偶像下的累计铸爱次数与收益加成(基点)'; + +-- ===================================================== +-- 2. mint_cost_config 铸爱阶梯配置表 (V5原有) +-- ===================================================== +CREATE TABLE IF NOT EXISTS public.mint_cost_config ( + id BIGSERIAL PRIMARY KEY, + mint_count INT NOT NULL, + cost_crystal BIGINT NOT NULL, + probability BIGINT NOT NULL DEFAULT 0, + reward_type VARCHAR(50) DEFAULT NULL, + reward_value BIGINT NOT NULL DEFAULT 0, + description VARCHAR(255), + updated_at BIGINT NOT NULL, + CONSTRAINT uk_mint_cost_config_mint_count UNIQUE (mint_count) +); + +COMMENT ON TABLE public.mint_cost_config IS '铸爱次数阶梯消耗与保底配置'; + +-- 插入铸爱阶梯数据 +INSERT INTO public.mint_cost_config (mint_count, cost_crystal, probability, reward_type, reward_value, description, updated_at) +VALUES + (1, 2, 0, NULL, 0, '第1次', 1773322573872), + (2, 4, 0, NULL, 0, '第2次', 1773322573872), + (3, 8, 0, NULL, 0, '第3次', 1773322573872), + (4, 16, 0, NULL, 0, '第4次', 1773322573872), + (5, 32, 0, NULL, 0, '第5次', 1773322573872), + (6, 64, 0, NULL, 0, '第6次', 1773322573872), + (7, 128, 0, NULL, 0, '第7次', 1773322573872), + (8, 256, 0, NULL, 0, '第8次', 1773322573872), + (9, 512, 20, '收益提升', 5, '小保底', 1773322573872), + (10, 1024, 100, '收益提升', 5, '大保底', 1773322573872) +ON CONFLICT (mint_count) DO UPDATE SET + cost_crystal = EXCLUDED.cost_crystal, + probability = EXCLUDED.probability, + reward_type = EXCLUDED.reward_type, + reward_value = EXCLUDED.reward_value, + description = EXCLUDED.description, + updated_at = EXCLUDED.updated_at; + +-- ===================================================== +-- 3. level_thresholds 等级阈值表 +-- ===================================================== +CREATE TABLE IF NOT EXISTS public.level_thresholds ( + id BIGSERIAL PRIMARY KEY, + level INT NOT NULL, + exp_requirement BIGINT NOT NULL DEFAULT 0, + title VARCHAR(50), + badge_url VARCHAR(500), + privileges JSONB, + updated_at BIGINT NOT NULL, + CONSTRAINT uk_level_thresholds_level UNIQUE (level) +); + +COMMENT ON TABLE public.level_thresholds IS '等级阈值配置表'; + +-- ===================================================== +-- 4. level_up_reward_config 升级奖励配置表 +-- ===================================================== +CREATE TABLE IF NOT EXISTS public.level_up_reward_config ( + id BIGSERIAL PRIMARY KEY, + level INT NOT NULL, + reward_type VARCHAR(50) NOT NULL, + reward_amount BIGINT NOT NULL DEFAULT 0, + description VARCHAR(255), + updated_at BIGINT NOT NULL, + CONSTRAINT uk_level_up_reward_level_type UNIQUE (level, reward_type) +); + +COMMENT ON TABLE public.level_up_reward_config IS '升级奖励配置表'; + +-- ===================================================== +-- 5. level_upgrade_conditions 升级条件表 +-- ===================================================== +CREATE TABLE IF NOT EXISTS public.level_upgrade_conditions ( + id BIGSERIAL PRIMARY KEY, + level INT NOT NULL, + condition_type VARCHAR(50) NOT NULL, + condition_value BIGINT NOT NULL DEFAULT 0, + description VARCHAR(255), + updated_at BIGINT NOT NULL, + CONSTRAINT uk_level_upgrade_conditions_level_type UNIQUE (level, condition_type) +); + +COMMENT ON TABLE public.level_upgrade_conditions IS '升级条件配置表'; + +-- ===================================================== +-- 6. dazi_level_thresholds 靶子等级阈值表 +-- ===================================================== +CREATE TABLE IF NOT EXISTS public.dazi_level_thresholds ( + id BIGSERIAL PRIMARY KEY, + level INT NOT NULL, + exp_requirement BIGINT NOT NULL DEFAULT 0, + title VARCHAR(50), + updated_at BIGINT NOT NULL, + CONSTRAINT uk_dazi_level_thresholds_level UNIQUE (level) +); + +COMMENT ON TABLE public.dazi_level_thresholds IS '靶子等级阈值配置表'; + +-- ===================================================== +-- 7. level_cap_config 等级上限配置表 +-- ===================================================== +CREATE TABLE IF NOT EXISTS public.level_cap_config ( + id BIGSERIAL PRIMARY KEY, + star_id BIGINT NOT NULL, + max_level INT NOT NULL DEFAULT 50, + exp_multiplier DECIMAL(5,2) NOT NULL DEFAULT 1.0, + updated_at BIGINT NOT NULL, + CONSTRAINT uk_level_cap_config_star UNIQUE (star_id) +); + +COMMENT ON TABLE public.level_cap_config IS '等级上限配置表'; + +-- ===================================================== +-- 8. user_dazi_level 用户靶子等级表 +-- ===================================================== +CREATE TABLE IF NOT EXISTS public.user_dazi_level ( + id BIGSERIAL PRIMARY KEY, + user_id BIGINT NOT NULL, + star_id BIGINT NOT NULL, + level INT NOT NULL DEFAULT 1, + exp BIGINT NOT NULL DEFAULT 0, + updated_at BIGINT NOT NULL, + CONSTRAINT uk_user_dazi_level_user_star UNIQUE (user_id, star_id) +); + +CREATE INDEX IF NOT EXISTS idx_user_dazi_level_user ON public.user_dazi_level USING btree (user_id); +CREATE INDEX IF NOT EXISTS idx_user_dazi_level_star ON public.user_dazi_level USING btree (star_id); + +COMMENT ON TABLE public.user_dazi_level IS '用户在某偶像下的靶子等级和经验'; + +-- ===================================================== +-- 9. coin_transaction_records 金币交易记录表 +-- ===================================================== +CREATE TABLE IF NOT EXISTS public.coin_transaction_records ( + id BIGSERIAL PRIMARY KEY, + user_id BIGINT NOT NULL, + star_id BIGINT NOT NULL, + transaction_type VARCHAR(50) NOT NULL, + amount BIGINT NOT NULL, + balance_before BIGINT NOT NULL, + balance_after BIGINT NOT NULL, + reference_id VARCHAR(100), + reference_type VARCHAR(50), + description VARCHAR(255), + created_at BIGINT NOT NULL, + CONSTRAINT uk_coin_transaction_records_id UNIQUE (id) +); + +CREATE INDEX IF NOT EXISTS idx_coin_transaction_records_user ON public.coin_transaction_records USING btree (user_id); +CREATE INDEX IF NOT EXISTS idx_coin_transaction_records_star ON public.coin_transaction_records USING btree (star_id); +CREATE INDEX IF NOT EXISTS idx_coin_transaction_records_created ON public.coin_transaction_records USING btree (created_at DESC); + +COMMENT ON TABLE public.coin_transaction_records IS '金币交易记录表'; + +-- ===================================================== +-- 10. crystal_transaction_records 水晶交易记录表 +-- ===================================================== +CREATE TABLE IF NOT EXISTS public.crystal_transaction_records ( + id BIGSERIAL PRIMARY KEY, + user_id BIGINT NOT NULL, + star_id BIGINT NOT NULL, + change_type VARCHAR(50) NOT NULL, + delta BIGINT NOT NULL, + balance_before BIGINT NOT NULL, + balance_after BIGINT NOT NULL, + source_id VARCHAR(100), + reference_type VARCHAR(50), + description VARCHAR(255), + created_at BIGINT NOT NULL, + CONSTRAINT uk_crystal_transaction_records_id UNIQUE (id) +); + +CREATE INDEX IF NOT EXISTS idx_crystal_transaction_records_user ON public.crystal_transaction_records USING btree (user_id); +CREATE INDEX IF NOT EXISTS idx_crystal_transaction_records_star ON public.crystal_transaction_records USING btree (star_id); +CREATE INDEX IF NOT EXISTS idx_crystal_transaction_records_created ON public.crystal_transaction_records USING btree (created_at DESC); + +COMMENT ON TABLE public.crystal_transaction_records IS '水晶交易记录表'; + +-- ===================================================== +-- 11. mint_reward_config 铸爱奖励配置表 +-- ===================================================== +CREATE TABLE IF NOT EXISTS public.mint_reward_config ( + id BIGSERIAL PRIMARY KEY, + mint_count INT NOT NULL, + reward_type VARCHAR(50) NOT NULL, + reward_amount BIGINT NOT NULL DEFAULT 0, + probability BIGINT NOT NULL DEFAULT 0, + description VARCHAR(255), + updated_at BIGINT NOT NULL, + CONSTRAINT uk_mint_reward_config_mint_count_type UNIQUE (mint_count, reward_type) +); + +COMMENT ON TABLE public.mint_reward_config IS '铸爱奖励配置表'; + +-- ===================================================== +-- 12. mint_milestone_config 铸爱里程碑配置表 +-- ===================================================== +CREATE TABLE IF NOT EXISTS public.mint_milestone_config ( + id BIGSERIAL PRIMARY KEY, + milestone INT NOT NULL, + reward_type VARCHAR(50) NOT NULL, + reward_amount BIGINT NOT NULL DEFAULT 0, + description VARCHAR(255), + updated_at BIGINT NOT NULL, + CONSTRAINT uk_mint_milestone_config_milestone UNIQUE (milestone) +); + +COMMENT ON TABLE public.mint_milestone_config IS '铸爱里程碑配置表'; + +COMMIT; + +-- 插入默认等级阈值数据 +INSERT INTO public.level_thresholds (level, exp_requirement, title, badge_url, privileges, updated_at) +VALUES + (1, 0, '初入星途', NULL, NULL, 1773322573872), + (2, 100, '小小星星', NULL, NULL, 1773322573872), + (3, 300, '新星闪耀', NULL, NULL, 1773322573872), + (4, 600, '潜力新星', NULL, NULL, 1773322573872), + (5, 1000, '明日之星', NULL, NULL, 1773322573872), + (6, 1500, '冉冉升起', NULL, NULL, 1773322573872), + (7, 2100, '星光熠熠', NULL, NULL, 1773322573872), + (8, 2800, '璀璨星辰', NULL, NULL, 1773322573872), + (9, 3600, '星途璀璨', NULL, NULL, 1773322573872), + (10, 4500, '超级新星', NULL, NULL, 1773322573872) +ON CONFLICT (level) DO UPDATE SET + exp_requirement = EXCLUDED.exp_requirement, + title = EXCLUDED.title, + badge_url = EXCLUDED.badge_url, + privileges = EXCLUDED.privileges, + updated_at = EXCLUDED.updated_at; + +-- 插入默认靶子等级阈值数据 +INSERT INTO public.dazi_level_thresholds (level, exp_requirement, title, updated_at) +VALUES + (1, 0, '初级靶子', 1773322573872), + (2, 50, '中级靶子', 1773322573872), + (3, 150, '高级靶子', 1773322573872), + (4, 300, '超级靶子', 1773322573872), + (5, 500, '终极靶子', 1773322573872) +ON CONFLICT (level) DO UPDATE SET + exp_requirement = EXCLUDED.exp_requirement, + title = EXCLUDED.title, + updated_at = EXCLUDED.updated_at; + +-- 插入铸爱里程碑配置 +INSERT INTO public.mint_milestone_config (milestone, reward_type, reward_amount, description, updated_at) +VALUES + (10, '称号', 1, '铸爱达人', 1773322573872), + (50, '称号', 2, '铸爱巨星', 1773322573872), + (100, '称号', 3, '铸爱传奇', 1773322573872), + (200, '称号', 4, '铸爱神话', 1773322573872), + (500, '称号', 5, '铸爱永恒', 1773322573872) +ON CONFLICT (milestone) DO UPDATE SET + reward_type = EXCLUDED.reward_type, + reward_amount = EXCLUDED.reward_amount, + description = EXCLUDED.description, + updated_at = EXCLUDED.updated_at; \ No newline at end of file diff --git a/frontend/manifest.json b/frontend/manifest.json index dae300b..2cb663b 100644 --- a/frontend/manifest.json +++ b/frontend/manifest.json @@ -3,7 +3,7 @@ "appid" : "__UNI__F199FF4", "description" : "", "versionName" : "1.1.0", - "versionCode" : 100, + "versionCode" : 101, "transformPx" : false, /* 5+App特有相关 */ "app-plus" : { @@ -64,9 +64,7 @@ "", "", "", - "", - "", - "" + "" ], "abiFilters" : [ "armeabi-v7a", "arm64-v8a" ] }, diff --git a/frontend/utils/api.js b/frontend/utils/api.js index 6e64f7e..5b3988e 100644 --- a/frontend/utils/api.js +++ b/frontend/utils/api.js @@ -3,19 +3,19 @@ // 不需要手动注释! // #ifdef H5 -const baseURL = 'http://192.168.110.60:8080' // H5 开发用本机 -// const baseURL = 'http://101.132.250.62:8080' // H5 开发用本机 +// const baseURL = 'http://192.168.110.60:8080' // H5 开发用本机 +const baseURL = 'http://101.132.250.62:8080' // H5 开发用本机 // #endif // #ifdef APP-PLUS // 开发调试:手机和电脑同一WiFi时用这个(改成你电脑IP) // 上线后:改成实际服务器地址 -const baseURL = 'http://192.168.110.60:8080' +// const baseURL = 'http://192.168.110.60:8080' // #endif // 服务器地址(正式上线用) // #ifdef APP-PLUS -// const baseURL = 'http://101.132.250.62:8080' +const baseURL = 'http://101.132.250.62:8080' // #endif // 是否使用模拟数据(开发调试时设为 true,后端API准备好后改为 false)