add_active_user_fields.sql 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. -- URS推广模块活跃用户功能数据库扩展脚本
  2. -- 创建时间: 2025-06-16
  3. -- 功能: 为URS推广模块添加活跃用户概念支持
  4. -- =====================================================
  5. -- 1. 扩展用户映射表,添加活跃用户相关字段
  6. -- =====================================================
  7. -- 添加活跃状态字段
  8. ALTER TABLE `kku_urs_promotion_user_mappings`
  9. ADD COLUMN `is_active` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否活跃:1活跃,0不活跃' AFTER `status`;
  10. -- 添加最后活跃检查时间字段
  11. ALTER TABLE `kku_urs_promotion_user_mappings`
  12. ADD COLUMN `last_activity_check` TIMESTAMP NULL COMMENT '最后活跃检查时间' AFTER `is_active`;
  13. -- 添加活跃天数统计字段
  14. ALTER TABLE `kku_urs_promotion_user_mappings`
  15. ADD COLUMN `active_days_count` INT NOT NULL DEFAULT 0 COMMENT '活跃天数统计' AFTER `last_activity_check`;
  16. -- 添加活跃状态索引
  17. ALTER TABLE `kku_urs_promotion_user_mappings`
  18. ADD INDEX `idx_is_active` (`is_active`);
  19. -- 添加活跃检查时间索引
  20. ALTER TABLE `kku_urs_promotion_user_mappings`
  21. ADD INDEX `idx_last_activity_check` (`last_activity_check`);
  22. -- =====================================================
  23. -- 2. 扩展达人等级配置表,添加活跃人数条件
  24. -- =====================================================
  25. -- 添加所需活跃人数字段
  26. ALTER TABLE `kku_urs_promotion_talent_configs`
  27. ADD COLUMN `active_count_required` INT NOT NULL DEFAULT 0 COMMENT '所需活跃人数' AFTER `promotion_count_required`;
  28. -- 添加所需直推活跃人数字段
  29. ALTER TABLE `kku_urs_promotion_talent_configs`
  30. ADD COLUMN `active_direct_required` INT NOT NULL DEFAULT 0 COMMENT '所需直推活跃人数' AFTER `active_count_required`;
  31. -- =====================================================
  32. -- 3. 更新达人等级配置数据,设置活跃人数要求
  33. -- =====================================================
  34. -- 更新各等级的活跃人数要求
  35. UPDATE `kku_urs_promotion_talent_configs` SET
  36. `active_count_required` = 0,
  37. `active_direct_required` = 0
  38. WHERE `level` = 0; -- 非达人
  39. UPDATE `kku_urs_promotion_talent_configs` SET
  40. `active_count_required` = 3,
  41. `active_direct_required` = 2
  42. WHERE `level` = 1; -- 初级达人
  43. UPDATE `kku_urs_promotion_talent_configs` SET
  44. `active_count_required` = 8,
  45. `active_direct_required` = 5
  46. WHERE `level` = 2; -- 中级达人
  47. UPDATE `kku_urs_promotion_talent_configs` SET
  48. `active_count_required` = 15,
  49. `active_direct_required` = 8
  50. WHERE `level` = 3; -- 高级达人
  51. UPDATE `kku_urs_promotion_talent_configs` SET
  52. `active_count_required` = 30,
  53. `active_direct_required` = 15
  54. WHERE `level` = 4; -- 资深达人
  55. UPDATE `kku_urs_promotion_talent_configs` SET
  56. `active_count_required` = 50,
  57. `active_direct_required` = 25
  58. WHERE `level` = 5; -- 顶级达人
  59. -- =====================================================
  60. -- 4. 验证数据库结构
  61. -- =====================================================
  62. -- 验证用户映射表结构
  63. DESCRIBE `kku_urs_promotion_user_mappings`;
  64. -- 验证达人等级配置表结构
  65. DESCRIBE `kku_urs_promotion_talent_configs`;
  66. -- 验证索引创建
  67. SHOW INDEX FROM `kku_urs_promotion_user_mappings` WHERE Key_name IN ('idx_is_active', 'idx_last_activity_check');
  68. -- 验证配置数据更新
  69. SELECT `level`, `name`, `direct_count_required`, `promotion_count_required`, `active_count_required`, `active_direct_required`
  70. FROM `kku_urs_promotion_talent_configs`
  71. ORDER BY `level`;
  72. -- =====================================================
  73. -- 5. 初始化活跃状态数据
  74. -- =====================================================
  75. -- 为现有用户初始化活跃状态(基于最近15天的活动)
  76. UPDATE `kku_urs_promotion_user_mappings` m
  77. INNER JOIN `kku_users` u ON m.user_id = u.id
  78. SET
  79. m.is_active = CASE
  80. WHEN u.last_activity_time >= DATE_SUB(NOW(), INTERVAL 15 DAY) THEN 1
  81. ELSE 0
  82. END,
  83. m.last_activity_check = NOW(),
  84. m.active_days_count = CASE
  85. WHEN u.last_activity_time >= DATE_SUB(NOW(), INTERVAL 15 DAY) THEN 1
  86. ELSE 0
  87. END
  88. WHERE m.status = 1; -- 只处理有效的映射关系
  89. -- 统计初始化结果
  90. SELECT
  91. COUNT(*) as total_mappings,
  92. SUM(is_active) as active_users,
  93. SUM(CASE WHEN is_active = 0 THEN 1 ELSE 0 END) as inactive_users,
  94. ROUND(SUM(is_active) * 100.0 / COUNT(*), 2) as active_percentage
  95. FROM `kku_urs_promotion_user_mappings`
  96. WHERE status = 1;
  97. -- =====================================================
  98. -- 脚本执行完成
  99. -- =====================================================
  100. SELECT 'URS推广模块活跃用户功能数据库扩展完成' as message;