voice_api_tenant_migration.sql 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. -- ============================================================
  2. -- 通话接口多租户分配改造 - 数据库变更脚本
  3. -- 执行顺序: 先建表 → ALTER → 数据迁移
  4. -- ============================================================
  5. -- 1. 新建表: 通话接口-租户分配关系
  6. CREATE TABLE IF NOT EXISTS `company_voice_api_tenant` (
  7. `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  8. `api_id` bigint NOT NULL COMMENT '通话接口ID',
  9. `company_id` bigint NOT NULL COMMENT '租户ID',
  10. `status` tinyint DEFAULT 1 COMMENT '状态 1启用 0禁用',
  11. `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  12. PRIMARY KEY (`id`),
  13. UNIQUE KEY `uk_api_company` (`api_id`, `company_id`),
  14. KEY `idx_company_id` (`company_id`)
  15. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通话接口-租户分配关系';
  16. -- 2. 新建缺失表: 通话套餐
  17. CREATE TABLE IF NOT EXISTS `company_voice_package` (
  18. `package_id` bigint NOT NULL AUTO_INCREMENT COMMENT '套餐ID',
  19. `package_name` varchar(100) DEFAULT NULL COMMENT '套餐名',
  20. `price` decimal(10,2) DEFAULT NULL COMMENT '价格',
  21. `times` bigint DEFAULT NULL COMMENT '时长(分)',
  22. `status` int DEFAULT 1 COMMENT '状态 0禁用 1正常',
  23. `expire_price` decimal(10,2) DEFAULT NULL COMMENT '超出后每分钟价格',
  24. `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  25. `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  26. `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  27. PRIMARY KEY (`package_id`)
  28. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通话套餐';
  29. -- 3. 新建缺失表: 中间号
  30. CREATE TABLE IF NOT EXISTS `company_voice_mobile` (
  31. `mobile_id` bigint NOT NULL AUTO_INCREMENT COMMENT '中间号ID',
  32. `api_id` bigint DEFAULT NULL COMMENT '接口ID',
  33. `mobile` varchar(20) DEFAULT NULL COMMENT '手机号',
  34. `status` int DEFAULT 1 COMMENT '状态',
  35. `company_id` bigint DEFAULT NULL COMMENT '租户ID',
  36. `mobile_type` int DEFAULT NULL COMMENT '号码类型 1公共 2私有',
  37. `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  38. `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  39. `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  40. PRIMARY KEY (`mobile_id`),
  41. KEY `idx_api_id` (`api_id`),
  42. KEY `idx_company_id` (`company_id`)
  43. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='中间号';
  44. -- 4. company_voice_caller 增加 api_id 字段(坐席关联通话接口)
  45. -- 先检查字段是否已存在
  46. SET @dbname = DATABASE();
  47. SET @tablename = 'company_voice_caller';
  48. SET @columnname = 'api_id';
  49. SET @preparedStatement = (SELECT IF(
  50. (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
  51. WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
  52. 'SELECT 1',
  53. 'ALTER TABLE company_voice_caller ADD COLUMN api_id bigint DEFAULT NULL COMMENT ''通话接口ID'' AFTER company_user_id'
  54. ));
  55. PREPARE alterIfNotExists FROM @preparedStatement;
  56. EXECUTE alterIfNotExists;
  57. DEALLOCATE PREPARE alterIfNotExists;
  58. -- 添加索引(如果不存在)
  59. SET @indexname = 'idx_caller_api_id';
  60. SET @preparedStatement = (SELECT IF(
  61. (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
  62. WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND INDEX_NAME = @indexname) > 0,
  63. 'SELECT 1',
  64. 'ALTER TABLE company_voice_caller ADD INDEX idx_caller_api_id (api_id)'
  65. ));
  66. PREPARE addIndexIfNotExists FROM @preparedStatement;
  67. EXECUTE addIndexIfNotExists;
  68. DEALLOCATE PREPARE addIndexIfNotExists;
  69. -- 5. 数据迁移: 将现有的 company.voice_api_id 绑定迁移到分配关系表
  70. INSERT IGNORE INTO company_voice_api_tenant (api_id, company_id, status, create_time)
  71. SELECT voice_api_id, company_id, 1, NOW()
  72. FROM company
  73. WHERE voice_api_id IS NOT NULL;
  74. -- 6. 数据迁移: 为现有坐席设置默认接口
  75. UPDATE company_voice_caller c
  76. JOIN company co ON co.company_id = c.company_id
  77. SET c.api_id = co.voice_api_id
  78. WHERE c.api_id IS NULL AND co.voice_api_id IS NOT NULL;