fee_daily_stats.sql 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. -- Transfer模块手续费每日统计表
  2. -- 用于记录每日手续费统计数据,以最后统计的ID记录进度
  3. -- =====================================================
  4. -- 手续费每日统计表
  5. -- =====================================================
  6. CREATE TABLE `kku_transfer_fee_daily_stats` (
  7. `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  8. `stat_date` date NOT NULL COMMENT '统计日期',
  9. `transfer_app_id` int unsigned NOT NULL COMMENT '划转应用ID',
  10. `last_processed_order_id` bigint unsigned NOT NULL DEFAULT 0 COMMENT '最后处理的订单ID',
  11. -- 转入统计
  12. `in_order_count` int unsigned NOT NULL DEFAULT 0 COMMENT '转入订单数量',
  13. `in_total_amount` decimal(30,10) NOT NULL DEFAULT 0.0000000000 COMMENT '转入总金额',
  14. `in_fee_amount` decimal(30,10) NOT NULL DEFAULT 0.0000000000 COMMENT '转入手续费总额',
  15. `in_avg_fee_rate` decimal(8,5) NOT NULL DEFAULT 0.00000 COMMENT '转入平均手续费率',
  16. -- 转出统计
  17. `out_order_count` int unsigned NOT NULL DEFAULT 0 COMMENT '转出订单数量',
  18. `out_total_amount` decimal(30,10) NOT NULL DEFAULT 0.0000000000 COMMENT '转出总金额',
  19. `out_fee_amount` decimal(30,10) NOT NULL DEFAULT 0.0000000000 COMMENT '转出手续费总额',
  20. `out_avg_fee_rate` decimal(8,5) NOT NULL DEFAULT 0.00000 COMMENT '转出平均手续费率',
  21. -- 汇总统计
  22. `total_order_count` int unsigned NOT NULL DEFAULT 0 COMMENT '总订单数量',
  23. `total_amount` decimal(30,10) NOT NULL DEFAULT 0.0000000000 COMMENT '总交易金额',
  24. `total_fee_amount` decimal(30,10) NOT NULL DEFAULT 0.0000000000 COMMENT '总手续费金额',
  25. `avg_fee_rate` decimal(8,5) NOT NULL DEFAULT 0.00000 COMMENT '平均手续费率',
  26. -- 时间戳
  27. `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  28. `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间',
  29. PRIMARY KEY (`id`),
  30. UNIQUE KEY `uk_stat_date_app` (`stat_date`, `transfer_app_id`),
  31. KEY `idx_stat_date` (`stat_date`),
  32. KEY `idx_transfer_app_id` (`transfer_app_id`),
  33. KEY `idx_last_processed_order_id` (`last_processed_order_id`),
  34. KEY `idx_created_at` (`created_at`),
  35. CONSTRAINT `fk_fee_daily_stats_app` FOREIGN KEY (`transfer_app_id`) REFERENCES `kku_transfer_apps` (`id`)
  36. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='手续费每日统计表';
  37. -- =====================================================
  38. -- 索引优化
  39. -- =====================================================
  40. -- 手续费金额统计索引
  41. CREATE INDEX `idx_total_fee_amount` ON `kku_transfer_fee_daily_stats` (`total_fee_amount`, `stat_date`);
  42. -- 应用统计查询索引
  43. CREATE INDEX `idx_app_date_range` ON `kku_transfer_fee_daily_stats` (`transfer_app_id`, `stat_date`, `total_fee_amount`);
  44. -- =====================================================
  45. -- 统计视图
  46. -- =====================================================
  47. -- 手续费月度统计视图
  48. CREATE VIEW `v_transfer_fee_monthly_stats` AS
  49. SELECT
  50. YEAR(stat_date) as year,
  51. MONTH(stat_date) as month,
  52. transfer_app_id,
  53. ta.keyname as app_keyname,
  54. ta.title as app_title,
  55. SUM(total_order_count) as monthly_order_count,
  56. SUM(total_amount) as monthly_total_amount,
  57. SUM(total_fee_amount) as monthly_fee_amount,
  58. AVG(avg_fee_rate) as monthly_avg_fee_rate,
  59. SUM(in_order_count) as monthly_in_orders,
  60. SUM(in_fee_amount) as monthly_in_fee,
  61. SUM(out_order_count) as monthly_out_orders,
  62. SUM(out_fee_amount) as monthly_out_fee,
  63. COUNT(*) as stat_days
  64. FROM `kku_transfer_fee_daily_stats` tfs
  65. LEFT JOIN `kku_transfer_apps` ta ON tfs.transfer_app_id = ta.id
  66. GROUP BY YEAR(stat_date), MONTH(stat_date), transfer_app_id
  67. ORDER BY year DESC, month DESC, monthly_fee_amount DESC;
  68. -- 手续费应用汇总视图
  69. CREATE VIEW `v_transfer_fee_app_summary` AS
  70. SELECT
  71. transfer_app_id,
  72. ta.keyname as app_keyname,
  73. ta.title as app_title,
  74. COUNT(*) as stat_days,
  75. SUM(total_order_count) as total_orders,
  76. SUM(total_amount) as total_amount,
  77. SUM(total_fee_amount) as total_fee,
  78. AVG(avg_fee_rate) as avg_fee_rate,
  79. SUM(in_order_count) as total_in_orders,
  80. SUM(in_fee_amount) as total_in_fee,
  81. SUM(out_order_count) as total_out_orders,
  82. SUM(out_fee_amount) as total_out_fee,
  83. MIN(stat_date) as first_stat_date,
  84. MAX(stat_date) as last_stat_date,
  85. MAX(last_processed_order_id) as last_processed_order_id
  86. FROM `kku_transfer_fee_daily_stats` tfs
  87. LEFT JOIN `kku_transfer_apps` ta ON tfs.transfer_app_id = ta.id
  88. GROUP BY transfer_app_id
  89. ORDER BY total_fee DESC;
  90. -- =====================================================
  91. -- 存储过程:获取指定日期范围的手续费统计
  92. -- =====================================================
  93. DELIMITER $$
  94. CREATE PROCEDURE `GetFeeStatsByDateRange`(
  95. IN p_app_id INT,
  96. IN p_start_date DATE,
  97. IN p_end_date DATE
  98. )
  99. READS SQL DATA
  100. COMMENT '获取指定应用和日期范围的手续费统计'
  101. BEGIN
  102. SELECT
  103. stat_date,
  104. transfer_app_id,
  105. ta.keyname as app_name,
  106. ta.title as app_title,
  107. total_order_count,
  108. total_amount,
  109. total_fee_amount,
  110. avg_fee_rate,
  111. in_order_count,
  112. in_fee_amount,
  113. out_order_count,
  114. out_fee_amount,
  115. last_processed_order_id,
  116. created_at
  117. FROM `kku_transfer_fee_daily_stats` tfs
  118. LEFT JOIN `kku_transfer_apps` ta ON tfs.transfer_app_id = ta.id
  119. WHERE (p_app_id = 0 OR transfer_app_id = p_app_id)
  120. AND stat_date BETWEEN p_start_date AND p_end_date
  121. ORDER BY stat_date DESC, total_fee_amount DESC;
  122. END$$
  123. DELIMITER ;
  124. -- =====================================================
  125. -- 示例查询
  126. -- =====================================================
  127. -- 查询最近7天的手续费统计
  128. -- SELECT * FROM `kku_transfer_fee_daily_stats`
  129. -- WHERE stat_date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)
  130. -- ORDER BY stat_date DESC;
  131. -- 查询指定应用的手续费统计
  132. -- SELECT * FROM `kku_transfer_fee_daily_stats`
  133. -- WHERE transfer_app_id = 1
  134. -- ORDER BY stat_date DESC;
  135. -- 查询手续费收入最高的日期
  136. -- SELECT stat_date, SUM(total_fee_amount) as daily_fee
  137. -- FROM `kku_transfer_fee_daily_stats`
  138. -- GROUP BY stat_date
  139. -- ORDER BY daily_fee DESC
  140. -- LIMIT 10;