20260822_add_merchant_withdrawal_setting.sql 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. -- ============================================================
  2. -- 商户可提现金额更新配置
  3. -- 日期: 2026-08-22
  4. -- 来源: 旧项目 xs_admin_user.crond_money_type / crond_once_unit_day
  5. -- 说明: 可重复执行,不修改现有商户的默认行为。
  6. -- ============================================================
  7. SET NAMES utf8mb4;
  8. SET @has_withdraw_mode = (
  9. SELECT COUNT(*) FROM information_schema.COLUMNS
  10. WHERE TABLE_SCHEMA = DATABASE()
  11. AND TABLE_NAME = 'sa_merchant'
  12. AND COLUMN_NAME = 'withdraw_update_mode'
  13. );
  14. SET @add_withdraw_mode_sql = IF(
  15. @has_withdraw_mode = 0,
  16. 'ALTER TABLE `sa_merchant` ADD COLUMN `withdraw_update_mode` TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT ''可提现金额更新:0实时、1定时'' AFTER `withdrawable_amount`',
  17. 'SELECT 1'
  18. );
  19. PREPARE add_withdraw_mode_stmt FROM @add_withdraw_mode_sql;
  20. EXECUTE add_withdraw_mode_stmt;
  21. DEALLOCATE PREPARE add_withdraw_mode_stmt;
  22. SET @has_withdraw_day = (
  23. SELECT COUNT(*) FROM information_schema.COLUMNS
  24. WHERE TABLE_SCHEMA = DATABASE()
  25. AND TABLE_NAME = 'sa_merchant'
  26. AND COLUMN_NAME = 'withdraw_update_day'
  27. );
  28. SET @add_withdraw_day_sql = IF(
  29. @has_withdraw_day = 0,
  30. 'ALTER TABLE `sa_merchant` ADD COLUMN `withdraw_update_day` TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT ''定时更新日期:1-31,0为每月最后一天'' AFTER `withdraw_update_mode`',
  31. 'SELECT 1'
  32. );
  33. PREPARE add_withdraw_day_stmt FROM @add_withdraw_day_sql;
  34. EXECUTE add_withdraw_day_stmt;
  35. DEALLOCATE PREPARE add_withdraw_day_stmt;
  36. INSERT INTO `sa_system_menu` (
  37. `parent_id`, `name`, `code`, `slug`, `type`, `path`, `component`, `method`, `icon`, `sort`,
  38. `link_url`, `is_iframe`, `is_keep_alive`, `is_hidden`, `is_fixed_tab`, `is_full_page`,
  39. `generate_id`, `generate_key`, `status`, `remark`, `created_by`, `updated_by`, `create_time`, `update_time`, `delete_time`
  40. )
  41. SELECT parent_menu.`id`, permission_data.`name`, permission_data.`code`, permission_data.`slug`, 3,
  42. NULL, NULL, permission_data.`method`, NULL, permission_data.`sort`, NULL, 2, 2, 2, 2, 2,
  43. 0, NULL, 1, permission_data.`remark`, 1, 1, NOW(), NOW(), NULL
  44. FROM `sa_system_menu` parent_menu
  45. INNER JOIN (
  46. SELECT '商户提现更新配置' AS `name`, 'MerchantWithdrawalSettingRead' AS `code`, 'core:merchant:withdrawalSetting:read' AS `slug`, 'GET' AS `method`, 45 AS `sort`, '读取有权访问商户的提现更新设置' AS `remark`
  47. UNION ALL SELECT '保存商户提现更新配置', 'MerchantWithdrawalSettingUpdate', 'core:merchant:withdrawalSetting:update', 'PUT', 44, '保存实时或每月定时更新方式'
  48. ) permission_data
  49. LEFT JOIN `sa_system_menu` existing_menu
  50. ON existing_menu.`slug` = permission_data.`slug`
  51. AND existing_menu.`delete_time` IS NULL
  52. WHERE parent_menu.`code` = 'Merchant'
  53. AND parent_menu.`delete_time` IS NULL
  54. AND existing_menu.`id` IS NULL;
  55. INSERT INTO `sa_system_role_menu` (`role_id`, `menu_id`)
  56. SELECT DISTINCT source_role.`role_id`, permission_menu.`id`
  57. FROM `sa_system_role_menu` source_role
  58. INNER JOIN `sa_system_menu` source_menu
  59. ON source_menu.`id` = source_role.`menu_id`
  60. AND source_menu.`code` IN ('MyMerchant', 'SubordinateMerchant')
  61. AND source_menu.`delete_time` IS NULL
  62. INNER JOIN `sa_system_menu` merchant_menu
  63. ON merchant_menu.`code` = 'Merchant'
  64. AND merchant_menu.`delete_time` IS NULL
  65. INNER JOIN `sa_system_menu` permission_menu
  66. ON permission_menu.`parent_id` = merchant_menu.`id`
  67. AND permission_menu.`slug` IN (
  68. 'core:merchant:withdrawalSetting:read',
  69. 'core:merchant:withdrawalSetting:update'
  70. )
  71. AND permission_menu.`delete_time` IS NULL
  72. LEFT JOIN `sa_system_role_menu` existing_role
  73. ON existing_role.`role_id` = source_role.`role_id`
  74. AND existing_role.`menu_id` = permission_menu.`id`
  75. WHERE existing_role.`id` IS NULL;