|
|
@@ -0,0 +1,274 @@
|
|
|
+-- =============================================
|
|
|
+-- Migration: Integer Prices (分/千分比/百分位)
|
|
|
+-- Converts DECIMAL price fields to INT across ALL tables
|
|
|
+-- Run manually: mysql -u cfc -p cfc < migration_integer_prices.sql
|
|
|
+-- =============================================
|
|
|
+-- Convention:
|
|
|
+-- Price fields: DECIMAL(x,2) → INT (分, 1元=100)
|
|
|
+-- Rate fields: DECIMAL(x,2) → INT (千分比, 10% = 1000)
|
|
|
+-- Rating fields: DECIMAL(x,2) → INT (百分位, 5.00 = 500)
|
|
|
+-- Weight fields: DECIMAL(x,2) → INT (百分位, 50.00 = 5000) [energy only]
|
|
|
+-- =============================================
|
|
|
+
|
|
|
+SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
|
|
|
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
|
|
|
+
|
|
|
+-- =============================================
|
|
|
+-- 1. products: price, member_price, profit_rate
|
|
|
+-- =============================================
|
|
|
+-- price DECIMAL(10,2) → INT (分)
|
|
|
+ALTER TABLE products ADD COLUMN price_int INT NOT NULL DEFAULT 0 COMMENT '价格(分)' AFTER price;
|
|
|
+UPDATE products SET price_int = ROUND(price * 100);
|
|
|
+ALTER TABLE products DROP COLUMN price;
|
|
|
+ALTER TABLE products RENAME COLUMN price_int TO price;
|
|
|
+
|
|
|
+-- member_price DECIMAL(10,2) → INT (分)
|
|
|
+ALTER TABLE products ADD COLUMN member_price_int INT COMMENT '会员价(分)' AFTER member_price;
|
|
|
+UPDATE products SET member_price_int = ROUND(member_price * 100) WHERE member_price IS NOT NULL;
|
|
|
+ALTER TABLE products DROP COLUMN member_price;
|
|
|
+ALTER TABLE products RENAME COLUMN member_price_int TO member_price;
|
|
|
+
|
|
|
+-- profit_rate DECIMAL(5,2) → INT (千分比)
|
|
|
+ALTER TABLE products ADD COLUMN profit_rate_int INT DEFAULT 0 COMMENT '平台利润率(千分比)' AFTER profit_rate;
|
|
|
+UPDATE products SET profit_rate_int = ROUND(profit_rate * 1000);
|
|
|
+ALTER TABLE products DROP COLUMN profit_rate;
|
|
|
+ALTER TABLE products RENAME COLUMN profit_rate_int TO profit_rate;
|
|
|
+
|
|
|
+-- =============================================
|
|
|
+-- 2. product_orders: unit_price, total_amount
|
|
|
+-- =============================================
|
|
|
+ALTER TABLE product_orders ADD COLUMN unit_price_int INT NOT NULL COMMENT '单价(分)' AFTER unit_price;
|
|
|
+UPDATE product_orders SET unit_price_int = ROUND(unit_price * 100);
|
|
|
+ALTER TABLE product_orders DROP COLUMN unit_price;
|
|
|
+ALTER TABLE product_orders RENAME COLUMN unit_price_int TO unit_price;
|
|
|
+
|
|
|
+ALTER TABLE product_orders ADD COLUMN total_amount_int INT NOT NULL COMMENT '总金额(分)' AFTER total_amount;
|
|
|
+UPDATE product_orders SET total_amount_int = ROUND(total_amount * 100);
|
|
|
+ALTER TABLE product_orders DROP COLUMN total_amount;
|
|
|
+ALTER TABLE product_orders RENAME COLUMN total_amount_int TO total_amount;
|
|
|
+
|
|
|
+-- =============================================
|
|
|
+-- 3. activities: price
|
|
|
+-- =============================================
|
|
|
+ALTER TABLE activities ADD COLUMN price_int INT NOT NULL DEFAULT 0 COMMENT '价格(分)' AFTER price;
|
|
|
+UPDATE activities SET price_int = ROUND(price * 100);
|
|
|
+ALTER TABLE activities DROP COLUMN price;
|
|
|
+ALTER TABLE activities RENAME COLUMN price_int TO price;
|
|
|
+
|
|
|
+-- =============================================
|
|
|
+-- 4. guide_packages: price, commission_rate
|
|
|
+-- =============================================
|
|
|
+ALTER TABLE guide_packages ADD COLUMN price_int INT NOT NULL DEFAULT 0 COMMENT '价格(分)' AFTER price;
|
|
|
+UPDATE guide_packages SET price_int = ROUND(price * 100);
|
|
|
+ALTER TABLE guide_packages DROP COLUMN price;
|
|
|
+ALTER TABLE guide_packages RENAME COLUMN price_int TO price;
|
|
|
+
|
|
|
+ALTER TABLE guide_packages ADD COLUMN commission_rate_int INT DEFAULT 0 COMMENT '佣金率(千分比)' AFTER commission_rate;
|
|
|
+UPDATE guide_packages SET commission_rate_int = ROUND(commission_rate * 1000);
|
|
|
+ALTER TABLE guide_packages DROP COLUMN commission_rate;
|
|
|
+ALTER TABLE guide_packages RENAME COLUMN commission_rate_int TO commission_rate;
|
|
|
+
|
|
|
+-- =============================================
|
|
|
+-- 5. guide_package_templates: reference_price, min_price
|
|
|
+-- =============================================
|
|
|
+ALTER TABLE guide_package_templates ADD COLUMN reference_price_int INT NOT NULL DEFAULT 0 COMMENT '参考价(分)' AFTER reference_price;
|
|
|
+UPDATE guide_package_templates SET reference_price_int = ROUND(reference_price * 100);
|
|
|
+ALTER TABLE guide_package_templates DROP COLUMN reference_price;
|
|
|
+ALTER TABLE guide_package_templates RENAME COLUMN reference_price_int TO reference_price;
|
|
|
+
|
|
|
+ALTER TABLE guide_package_templates ADD COLUMN min_price_int INT NOT NULL DEFAULT 0 COMMENT '最低价(分)' AFTER min_price;
|
|
|
+UPDATE guide_package_templates SET min_price_int = ROUND(min_price * 100);
|
|
|
+ALTER TABLE guide_package_templates DROP COLUMN min_price;
|
|
|
+ALTER TABLE guide_package_templates RENAME COLUMN min_price_int TO min_price;
|
|
|
+
|
|
|
+-- =============================================
|
|
|
+-- 6. guide_families: service_price
|
|
|
+-- =============================================
|
|
|
+ALTER TABLE guide_families ADD COLUMN service_price_int INT DEFAULT 0 COMMENT '服务价格(分)' AFTER service_price;
|
|
|
+UPDATE guide_families SET service_price_int = ROUND(service_price * 100) WHERE service_price IS NOT NULL;
|
|
|
+ALTER TABLE guide_families DROP COLUMN service_price;
|
|
|
+ALTER TABLE guide_families RENAME COLUMN service_price_int TO service_price;
|
|
|
+
|
|
|
+-- =============================================
|
|
|
+-- 7. package_orders: price, platform_fee
|
|
|
+-- =============================================
|
|
|
+ALTER TABLE package_orders ADD COLUMN price_int INT NOT NULL DEFAULT 0 COMMENT '支付金额(分)' AFTER price;
|
|
|
+UPDATE package_orders SET price_int = ROUND(price * 100);
|
|
|
+ALTER TABLE package_orders DROP COLUMN price;
|
|
|
+ALTER TABLE package_orders RENAME COLUMN price_int TO price;
|
|
|
+
|
|
|
+ALTER TABLE package_orders ADD COLUMN platform_fee_int INT DEFAULT 0 COMMENT '平台服务费(分)' AFTER platform_fee;
|
|
|
+UPDATE package_orders SET platform_fee_int = ROUND(platform_fee * 100) WHERE platform_fee IS NOT NULL;
|
|
|
+ALTER TABLE package_orders DROP COLUMN platform_fee;
|
|
|
+ALTER TABLE package_orders RENAME COLUMN platform_fee_int TO platform_fee;
|
|
|
+
|
|
|
+-- =============================================
|
|
|
+-- 8. payment_orders: amount
|
|
|
+-- =============================================
|
|
|
+ALTER TABLE payment_orders ADD COLUMN amount_int INT NOT NULL DEFAULT 0 COMMENT '金额(分)' AFTER amount;
|
|
|
+UPDATE payment_orders SET amount_int = ROUND(amount * 100);
|
|
|
+ALTER TABLE payment_orders DROP COLUMN amount;
|
|
|
+ALTER TABLE payment_orders RENAME COLUMN amount_int TO amount;
|
|
|
+
|
|
|
+-- =============================================
|
|
|
+-- 9. commission_records: commission_amount, profit_rate
|
|
|
+-- =============================================
|
|
|
+ALTER TABLE commission_records ADD COLUMN commission_amount_int INT NOT NULL DEFAULT 0 COMMENT '佣金金额(分)' AFTER commission_amount;
|
|
|
+UPDATE commission_records SET commission_amount_int = ROUND(commission_amount * 100);
|
|
|
+ALTER TABLE commission_records DROP COLUMN commission_amount;
|
|
|
+ALTER TABLE commission_records RENAME COLUMN commission_amount_int TO commission_amount;
|
|
|
+
|
|
|
+ALTER TABLE commission_records ADD COLUMN profit_rate_int INT DEFAULT 0 COMMENT '利润率(千分比)' AFTER profit_rate;
|
|
|
+UPDATE commission_records SET profit_rate_int = ROUND(profit_rate * 1000);
|
|
|
+ALTER TABLE commission_records DROP COLUMN profit_rate;
|
|
|
+ALTER TABLE commission_records RENAME COLUMN profit_rate_int TO profit_rate;
|
|
|
+
|
|
|
+-- =============================================
|
|
|
+-- 10. withdrawal_requests: amount
|
|
|
+-- =============================================
|
|
|
+ALTER TABLE withdrawal_requests ADD COLUMN amount_int INT NOT NULL DEFAULT 0 COMMENT '金额(分)' AFTER amount;
|
|
|
+UPDATE withdrawal_requests SET amount_int = ROUND(amount * 100);
|
|
|
+ALTER TABLE withdrawal_requests DROP COLUMN amount;
|
|
|
+ALTER TABLE withdrawal_requests RENAME COLUMN amount_int TO amount;
|
|
|
+
|
|
|
+-- =============================================
|
|
|
+-- 11. family_memberships: amount
|
|
|
+-- =============================================
|
|
|
+ALTER TABLE family_memberships ADD COLUMN amount_int INT DEFAULT 0 COMMENT '支付金额(分)' AFTER amount;
|
|
|
+UPDATE family_memberships SET amount_int = ROUND(amount * 100) WHERE amount IS NOT NULL;
|
|
|
+ALTER TABLE family_memberships DROP COLUMN amount;
|
|
|
+ALTER TABLE family_memberships RENAME COLUMN amount_int TO amount;
|
|
|
+
|
|
|
+-- =============================================
|
|
|
+-- 12. membership_levels: price_monthly, price_yearly
|
|
|
+-- =============================================
|
|
|
+ALTER TABLE membership_levels ADD COLUMN price_monthly_int INT DEFAULT 0 COMMENT '月费(分)' AFTER price_monthly;
|
|
|
+UPDATE membership_levels SET price_monthly_int = ROUND(price_monthly * 100) WHERE price_monthly IS NOT NULL;
|
|
|
+ALTER TABLE membership_levels DROP COLUMN price_monthly;
|
|
|
+ALTER TABLE membership_levels RENAME COLUMN price_monthly_int TO price_monthly;
|
|
|
+
|
|
|
+ALTER TABLE membership_levels ADD COLUMN price_yearly_int INT DEFAULT 0 COMMENT '年费(分)' AFTER price_yearly;
|
|
|
+UPDATE membership_levels SET price_yearly_int = ROUND(price_yearly * 100) WHERE price_yearly IS NOT NULL;
|
|
|
+ALTER TABLE membership_levels DROP COLUMN price_yearly;
|
|
|
+ALTER TABLE membership_levels RENAME COLUMN price_yearly_int TO price_yearly;
|
|
|
+
|
|
|
+-- =============================================
|
|
|
+-- 13. insurance_policies: premium
|
|
|
+-- =============================================
|
|
|
+ALTER TABLE insurance_policies ADD COLUMN premium_int INT DEFAULT 0 COMMENT '保费(分)' AFTER premium;
|
|
|
+UPDATE insurance_policies SET premium_int = ROUND(premium * 100) WHERE premium IS NOT NULL;
|
|
|
+ALTER TABLE insurance_policies DROP COLUMN premium;
|
|
|
+ALTER TABLE insurance_policies RENAME COLUMN premium_int TO premium;
|
|
|
+
|
|
|
+-- =============================================
|
|
|
+-- 14. service_contents: price
|
|
|
+-- =============================================
|
|
|
+ALTER TABLE service_contents ADD COLUMN price_int INT DEFAULT 0 COMMENT '价格(分)' AFTER price;
|
|
|
+UPDATE service_contents SET price_int = ROUND(price * 100) WHERE price IS NOT NULL;
|
|
|
+ALTER TABLE service_contents DROP COLUMN price;
|
|
|
+ALTER TABLE service_contents RENAME COLUMN price_int TO price;
|
|
|
+
|
|
|
+-- =============================================
|
|
|
+-- 15. task_template_packages: price, platform_fee
|
|
|
+-- =============================================
|
|
|
+ALTER TABLE task_template_packages ADD COLUMN price_int INT NOT NULL DEFAULT 0 COMMENT '售价(分)' AFTER price;
|
|
|
+UPDATE task_template_packages SET price_int = ROUND(price * 100);
|
|
|
+ALTER TABLE task_template_packages DROP COLUMN price;
|
|
|
+ALTER TABLE task_template_packages RENAME COLUMN price_int TO price;
|
|
|
+
|
|
|
+ALTER TABLE task_template_packages ADD COLUMN platform_fee_int INT DEFAULT 0 COMMENT '平台服务费(千分比)' AFTER platform_fee;
|
|
|
+UPDATE task_template_packages SET platform_fee_int = ROUND(platform_fee * 1000) WHERE platform_fee IS NOT NULL;
|
|
|
+ALTER TABLE task_template_packages DROP COLUMN platform_fee;
|
|
|
+ALTER TABLE task_template_packages RENAME COLUMN platform_fee_int TO platform_fee;
|
|
|
+
|
|
|
+-- =============================================
|
|
|
+-- 16. guides: rating, commission_rate
|
|
|
+-- =============================================
|
|
|
+ALTER TABLE guides ADD COLUMN rating_int INT DEFAULT 500 COMMENT '评分(百分位,5.00=500)' AFTER rating;
|
|
|
+UPDATE guides SET rating_int = ROUND(rating * 100) WHERE rating IS NOT NULL;
|
|
|
+ALTER TABLE guides DROP COLUMN rating;
|
|
|
+ALTER TABLE guides RENAME COLUMN rating_int TO rating;
|
|
|
+
|
|
|
+ALTER TABLE guides ADD COLUMN commission_rate_int INT DEFAULT 1000 COMMENT '佣金率(千分比,10%=1000)' AFTER commission_rate;
|
|
|
+UPDATE guides SET commission_rate_int = ROUND(commission_rate * 1000) WHERE commission_rate IS NOT NULL;
|
|
|
+ALTER TABLE guides DROP COLUMN commission_rate;
|
|
|
+ALTER TABLE guides RENAME COLUMN commission_rate_int TO commission_rate;
|
|
|
+
|
|
|
+-- =============================================
|
|
|
+-- 17. teachers: rating
|
|
|
+-- =============================================
|
|
|
+ALTER TABLE teachers ADD COLUMN rating_int INT DEFAULT 500 COMMENT '评分(百分位,5.00=500)' AFTER rating;
|
|
|
+UPDATE teachers SET rating_int = ROUND(rating * 100) WHERE rating IS NOT NULL;
|
|
|
+ALTER TABLE teachers DROP COLUMN rating;
|
|
|
+ALTER TABLE teachers RENAME COLUMN rating_int TO rating;
|
|
|
+
|
|
|
+-- =============================================
|
|
|
+-- 18. energy_dimension_configs: weight
|
|
|
+-- =============================================
|
|
|
+ALTER TABLE energy_dimension_configs ADD COLUMN weight_int INT NOT NULL DEFAULT 0 COMMENT '权重(千分比,50%=5000)' AFTER weight;
|
|
|
+UPDATE energy_dimension_configs SET weight_int = ROUND(weight * 10000);
|
|
|
+ALTER TABLE energy_dimension_configs DROP COLUMN weight;
|
|
|
+ALTER TABLE energy_dimension_configs RENAME COLUMN weight_int TO weight;
|
|
|
+
|
|
|
+-- =============================================
|
|
|
+-- 19. energy_source_configs: ratio
|
|
|
+-- =============================================
|
|
|
+ALTER TABLE energy_source_configs ADD COLUMN ratio_int INT NOT NULL DEFAULT 10000 COMMENT '比例(千分比,100%=10000)' AFTER ratio;
|
|
|
+UPDATE energy_source_configs SET ratio_int = ROUND(ratio * 10000);
|
|
|
+ALTER TABLE energy_source_configs DROP COLUMN ratio;
|
|
|
+ALTER TABLE energy_source_configs RENAME COLUMN ratio_int TO ratio;
|
|
|
+
|
|
|
+-- =============================================
|
|
|
+-- 20. energy_logs: amount
|
|
|
+-- =============================================
|
|
|
+-- energy_logs.amount was already INT in original schema (energy points, not money)
|
|
|
+-- No migration needed
|
|
|
+
|
|
|
+-- =============================================
|
|
|
+-- 21. finance_checkin: amount
|
|
|
+-- =============================================
|
|
|
+ALTER TABLE finance_checkin ADD COLUMN amount_int INT DEFAULT 0 COMMENT '金额(分)' AFTER amount;
|
|
|
+UPDATE finance_checkin SET amount_int = ROUND(amount * 100) WHERE amount IS NOT NULL;
|
|
|
+ALTER TABLE finance_checkin DROP COLUMN amount;
|
|
|
+ALTER TABLE finance_checkin RENAME COLUMN amount_int TO amount;
|
|
|
+
|
|
|
+-- =============================================
|
|
|
+-- 22. dan_assessment_results: weight (child body weight)
|
|
|
+-- =============================================
|
|
|
+-- This is body weight in KG, stored as percentile: 50.00 KG = 5000
|
|
|
+ALTER TABLE dan_assessment_results ADD COLUMN weight_int INT COMMENT '体重(KG百分位,50.00=5000)' AFTER weight;
|
|
|
+UPDATE dan_assessment_results SET weight_int = ROUND(weight * 100) WHERE weight IS NOT NULL;
|
|
|
+ALTER TABLE dan_assessment_results DROP COLUMN weight;
|
|
|
+ALTER TABLE dan_assessment_results RENAME COLUMN weight_int TO weight;
|
|
|
+
|
|
|
+-- =============================================
|
|
|
+-- 23. assessment_results: weight (energy weight)
|
|
|
+-- =============================================
|
|
|
+ALTER TABLE assessment_results ADD COLUMN weight_int INT DEFAULT 0 COMMENT '权重(千分比)' AFTER weight;
|
|
|
+UPDATE assessment_results SET weight_int = ROUND(weight * 10000) WHERE weight IS NOT NULL;
|
|
|
+ALTER TABLE assessment_results DROP COLUMN weight;
|
|
|
+ALTER TABLE assessment_results RENAME COLUMN weight_int TO weight;
|
|
|
+
|
|
|
+-- =============================================
|
|
|
+-- 24. game_records: score
|
|
|
+-- =============================================
|
|
|
+-- game_records.score was already INT in original schema
|
|
|
+-- No migration needed
|
|
|
+
|
|
|
+-- =============================================
|
|
|
+-- 25. points_logs: amount
|
|
|
+-- =============================================
|
|
|
+-- points_logs.amount was already INT in original schema (points, not money)
|
|
|
+-- No migration needed
|
|
|
+
|
|
|
+SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
|
|
|
+SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
|
|
|
+
|
|
|
+-- =============================================
|
|
|
+-- Verification queries (run after migration)
|
|
|
+-- =============================================
|
|
|
+-- SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE
|
|
|
+-- FROM INFORMATION_SCHEMA.COLUMNS
|
|
|
+-- WHERE TABLE_SCHEMA = 'cfc' AND DATA_TYPE = 'decimal'
|
|
|
+-- ORDER BY TABLE_NAME, COLUMN_NAME;
|
|
|
+-- Expected: 0 rows
|