20260822_add_merchant_daily_statistics.sql 5.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. -- ============================================================
  2. -- 商户每日统计与数据统计页面
  3. -- 日期: 2026-08-22
  4. -- 来源: 旧项目 xs_statistics_shop_oneday / xs_statistics_profit_oneday
  5. -- 说明: 金额以分存储;脚本可重复执行。
  6. -- ============================================================
  7. SET NAMES utf8mb4;
  8. CREATE TABLE IF NOT EXISTS `sa_merchant_daily_statistics` (
  9. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '统计编号',
  10. `merchant_id` BIGINT UNSIGNED NOT NULL COMMENT '商户编号',
  11. `stat_date` DATE NOT NULL COMMENT '统计日期',
  12. `turnover_cents` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '交易额(分)',
  13. `income_cents` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '收益额(分)',
  14. `order_count` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '已支付订单量',
  15. `wechat_turnover_cents` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '微信交易额(分)',
  16. `alipay_turnover_cents` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '支付宝交易额(分)',
  17. `balance_turnover_cents` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '余额交易额(分)',
  18. `wechat_order_count` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '微信订单量',
  19. `alipay_order_count` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '支付宝订单量',
  20. `balance_order_count` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '余额订单量',
  21. `device_usage_rate` DECIMAL(7,2) UNSIGNED NOT NULL DEFAULT 0.00 COMMENT '设备使用率(%)',
  22. `device_count` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '当日设备数',
  23. `create_time` DATETIME NULL COMMENT '创建时间',
  24. `update_time` DATETIME NULL COMMENT '更新时间',
  25. PRIMARY KEY (`id`),
  26. UNIQUE KEY `uk_merchant_stat_date` (`merchant_id`, `stat_date`),
  27. KEY `idx_statistics_date` (`stat_date`)
  28. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='商户每日经营统计';
  29. -- 独立详情路由挂在商户管理下,但不在左侧菜单中单独显示。
  30. INSERT INTO `sa_system_menu` (
  31. `parent_id`, `name`, `code`, `slug`, `type`, `path`, `component`, `method`, `icon`, `sort`,
  32. `link_url`, `is_iframe`, `is_keep_alive`, `is_hidden`, `is_fixed_tab`, `is_full_page`,
  33. `generate_id`, `generate_key`, `status`, `remark`, `created_by`, `updated_by`, `create_time`, `update_time`, `delete_time`
  34. )
  35. SELECT parent_menu.`id`, '数据统计', 'MerchantStatistics', NULL, 2,
  36. 'statistics', '/merchant/statistics', NULL, NULL, 70,
  37. NULL, 2, 2, 1, 2, 2, 0, NULL, 1,
  38. '商户每日交易、收益、订单、使用率及支付渠道统计', 1, 1, NOW(), NOW(), NULL
  39. FROM `sa_system_menu` parent_menu
  40. LEFT JOIN `sa_system_menu` existing_menu
  41. ON existing_menu.`code` = 'MerchantStatistics'
  42. AND existing_menu.`delete_time` IS NULL
  43. WHERE parent_menu.`code` = 'Merchant'
  44. AND parent_menu.`delete_time` IS NULL
  45. AND existing_menu.`id` IS NULL;
  46. INSERT INTO `sa_system_menu` (
  47. `parent_id`, `name`, `code`, `slug`, `type`, `path`, `component`, `method`, `icon`, `sort`,
  48. `link_url`, `is_iframe`, `is_keep_alive`, `is_hidden`, `is_fixed_tab`, `is_full_page`,
  49. `generate_id`, `generate_key`, `status`, `remark`, `created_by`, `updated_by`, `create_time`, `update_time`, `delete_time`
  50. )
  51. SELECT parent_menu.`id`, permission_data.`name`, permission_data.`code`, permission_data.`slug`, 3,
  52. NULL, NULL, permission_data.`method`, NULL, permission_data.`sort`, NULL, 2, 2, 2, 2, 2,
  53. 0, NULL, 1, permission_data.`remark`, 1, 1, NOW(), NOW(), NULL
  54. FROM `sa_system_menu` parent_menu
  55. INNER JOIN (
  56. SELECT '商户数据统计' AS `name`, 'MerchantStatisticsRead' AS `code`,
  57. 'core:merchant:statistics' AS `slug`, 'GET' AS `method`, 43 AS `sort`,
  58. '读取有权访问商户的每日统计' AS `remark`
  59. UNION ALL
  60. SELECT '导出商户数据统计', 'MerchantStatisticsExport',
  61. 'core:merchant:statistics:export', 'POST', 42,
  62. '导出有权访问商户的每日统计'
  63. ) permission_data
  64. LEFT JOIN `sa_system_menu` existing_menu
  65. ON existing_menu.`slug` = permission_data.`slug`
  66. AND existing_menu.`delete_time` IS NULL
  67. WHERE parent_menu.`code` = 'Merchant'
  68. AND parent_menu.`delete_time` IS NULL
  69. AND existing_menu.`id` IS NULL;
  70. -- 已拥有“我的商户”或“下级商户”页面的角色继承统计页面和接口权限。
  71. INSERT INTO `sa_system_role_menu` (`role_id`, `menu_id`)
  72. SELECT DISTINCT source_role.`role_id`, target_menu.`id`
  73. FROM `sa_system_role_menu` source_role
  74. INNER JOIN `sa_system_menu` source_menu
  75. ON source_menu.`id` = source_role.`menu_id`
  76. AND source_menu.`code` IN ('MyMerchant', 'SubordinateMerchant')
  77. AND source_menu.`delete_time` IS NULL
  78. INNER JOIN `sa_system_menu` target_menu
  79. ON (
  80. target_menu.`code` = 'MerchantStatistics'
  81. OR target_menu.`slug` IN (
  82. 'core:merchant:statistics',
  83. 'core:merchant:statistics:export'
  84. )
  85. )
  86. AND target_menu.`delete_time` IS NULL
  87. LEFT JOIN `sa_system_role_menu` existing_role
  88. ON existing_role.`role_id` = source_role.`role_id`
  89. AND existing_role.`menu_id` = target_menu.`id`
  90. WHERE existing_role.`id` IS NULL;