20260902_add_rental_user_wallet_log.sql 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. -- 余额充值账本与权限,可重复执行。
  2. CREATE TABLE IF NOT EXISTS `sa_rental_user_wallet_log` (
  3. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '日志ID',
  4. `user_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '用户ID',
  5. `balance_type` VARCHAR(16) NOT NULL DEFAULT 'wallet' COMMENT '账户类型 wallet/card/card_gift',
  6. `direction` TINYINT NOT NULL DEFAULT 1 COMMENT '方向:1加 -1减',
  7. `amount` DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '本次变动(带符号)',
  8. `before_balance` DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '变动前余额',
  9. `after_balance` DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '变动后余额',
  10. `source` VARCHAR(32) NOT NULL DEFAULT 'admin_recharge' COMMENT '来源 admin_recharge/admin_adjust/...',
  11. `remark` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '备注',
  12. `operator_id` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '操作管理员ID',
  13. `operator_name` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '操作管理员名',
  14. `created_at` DATETIME NOT NULL COMMENT '创建时间',
  15. PRIMARY KEY (`id`),
  16. KEY `idx_rental_wallet_log_user` (`user_id`, `created_at`),
  17. KEY `idx_rental_wallet_log_type` (`balance_type`, `created_at`)
  18. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='小程序租借用户资金流水';
  19. INSERT INTO `sa_system_menu` (
  20. `parent_id`, `name`, `code`, `slug`, `type`, `path`, `component`, `method`, `icon`, `sort`,
  21. `link_url`, `is_iframe`, `is_keep_alive`, `is_hidden`, `is_fixed_tab`, `is_full_page`,
  22. `generate_id`, `generate_key`, `status`, `remark`, `created_by`, `updated_by`, `create_time`, `update_time`, `delete_time`
  23. )
  24. SELECT user_menu.`id`, '用户余额充值', 'RentalUserRecharge', 'core:user:list:recharge', 3,
  25. NULL, NULL, 'POST', NULL, 100,
  26. NULL, 2, 2, 2, 2, 2, 0, NULL, 1,
  27. '管理员对当前可见小程序租借用户的钱包余额进行加款或扣款', 1, 1, NOW(), NOW(), NULL
  28. FROM `sa_system_menu` user_menu
  29. WHERE user_menu.`code` = 'UserList' AND user_menu.`delete_time` IS NULL
  30. AND NOT EXISTS (SELECT 1 FROM `sa_system_menu` WHERE `slug` = 'core:user:list:recharge' AND `delete_time` IS NULL);
  31. UPDATE `sa_system_menu`
  32. SET `name` = '用户余额充值', `method` = 'POST',
  33. `remark` = '管理员对当前可见小程序租借用户的钱包余额进行加款或扣款', `update_time` = NOW()
  34. WHERE `slug` = 'core:user:list:recharge' AND `delete_time` IS NULL;
  35. -- 已有用户列表权限的角色自动获得余额充值权限。
  36. INSERT INTO `sa_system_role_menu` (`role_id`, `menu_id`)
  37. SELECT DISTINCT source_role.`role_id`, target_menu.`id`
  38. FROM `sa_system_role_menu` source_role
  39. INNER JOIN `sa_system_menu` source_menu
  40. ON source_menu.`id` = source_role.`menu_id`
  41. AND source_menu.`code` = 'UserList'
  42. AND source_menu.`delete_time` IS NULL
  43. INNER JOIN `sa_system_menu` target_menu
  44. ON target_menu.`slug` = 'core:user:list:recharge'
  45. AND target_menu.`delete_time` IS NULL
  46. LEFT JOIN `sa_system_role_menu` existing_role
  47. ON existing_role.`role_id` = source_role.`role_id`
  48. AND existing_role.`menu_id` = target_menu.`id`
  49. WHERE existing_role.`id` IS NULL;