新表迁移备选方案
This commit is contained in:
229
merchant_ops/sql/install_tables.sql
Normal file
229
merchant_ops/sql/install_tables.sql
Normal file
@@ -0,0 +1,229 @@
|
||||
-- 商家子客服 merchant_ops:直接建表(绕过 python manage.py migrate)
|
||||
-- 适用:migrate 因 users 旧 migration 文件报错、无法执行时
|
||||
-- 执行前:mysql -u用户 -p 数据库名 < install_tables.sql
|
||||
-- 或 1Panel/phpMyAdmin 粘贴执行
|
||||
-- 可重复执行:表用 IF NOT EXISTS,迁移记录用 NOT EXISTS 判断
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- 1. 权限字典
|
||||
CREATE TABLE IF NOT EXISTS `merchant_staff_permission` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`perm_code` varchar(64) NOT NULL,
|
||||
`perm_name` varchar(64) NOT NULL,
|
||||
`sort_order` int NOT NULL DEFAULT 0,
|
||||
`status` int NOT NULL DEFAULT 1,
|
||||
`CreateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
|
||||
`UpdateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `perm_code` (`perm_code`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
-- 2. 角色
|
||||
CREATE TABLE IF NOT EXISTS `merchant_staff_role` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`club_id` varchar(16) NOT NULL DEFAULT 'xq',
|
||||
`merchant_id` varchar(7) DEFAULT NULL,
|
||||
`role_code` varchar(32) NOT NULL,
|
||||
`role_name` varchar(64) NOT NULL,
|
||||
`is_system` tinyint(1) NOT NULL DEFAULT 0,
|
||||
`sort_order` int NOT NULL DEFAULT 0,
|
||||
`status` int NOT NULL DEFAULT 1,
|
||||
`CreateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
|
||||
`UpdateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `merchant_staff_role_merchant_id_role_code_uniq` (`merchant_id`,`role_code`),
|
||||
KEY `merchant_staff_role_merchant_id_idx` (`merchant_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
-- 3. 邀请码
|
||||
CREATE TABLE IF NOT EXISTS `merchant_staff_invite` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`club_id` varchar(16) NOT NULL DEFAULT 'xq',
|
||||
`merchant_id` varchar(7) NOT NULL,
|
||||
`invite_code` varchar(32) NOT NULL,
|
||||
`status` int NOT NULL DEFAULT 0,
|
||||
`created_by` varchar(7) NOT NULL,
|
||||
`used_by` varchar(7) DEFAULT NULL,
|
||||
`used_at` datetime(6) DEFAULT NULL,
|
||||
`expire_at` datetime(6) DEFAULT NULL,
|
||||
`CreateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
|
||||
`UpdateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
|
||||
`role_id` bigint DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `invite_code` (`invite_code`),
|
||||
KEY `merchant_staff_invite_merchant_id_idx` (`merchant_id`),
|
||||
KEY `merchant_staff_invite_role_id_fk` (`role_id`),
|
||||
CONSTRAINT `merchant_staff_invite_role_id_fk` FOREIGN KEY (`role_id`) REFERENCES `merchant_staff_role` (`id`) ON DELETE SET NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
-- 4. 成员
|
||||
CREATE TABLE IF NOT EXISTS `merchant_staff_member` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`club_id` varchar(16) NOT NULL DEFAULT 'xq',
|
||||
`merchant_id` varchar(7) NOT NULL,
|
||||
`staff_user_id` varchar(7) NOT NULL,
|
||||
`status` int NOT NULL DEFAULT 1,
|
||||
`display_name` varchar(64) NOT NULL DEFAULT '',
|
||||
`joined_at` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
|
||||
`revoked_at` datetime(6) DEFAULT NULL,
|
||||
`today_dispatch_count` int NOT NULL DEFAULT 0,
|
||||
`today_dispatch_amount` decimal(12,2) NOT NULL DEFAULT 0.00,
|
||||
`CreateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
|
||||
`UpdateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
|
||||
`invited_by_code_id` bigint DEFAULT NULL,
|
||||
`role_id` bigint NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `merchant_staff_member_merchant_staff_uniq` (`merchant_id`,`staff_user_id`),
|
||||
KEY `merchant_staff_member_staff_user_id_idx` (`staff_user_id`),
|
||||
KEY `merchant_staff_member_role_id_fk` (`role_id`),
|
||||
KEY `merchant_staff_member_invited_by_code_id_fk` (`invited_by_code_id`),
|
||||
CONSTRAINT `merchant_staff_member_role_id_fk` FOREIGN KEY (`role_id`) REFERENCES `merchant_staff_role` (`id`),
|
||||
CONSTRAINT `merchant_staff_member_invited_by_code_id_fk` FOREIGN KEY (`invited_by_code_id`) REFERENCES `merchant_staff_invite` (`id`) ON DELETE SET NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
-- 5. 角色-权限
|
||||
CREATE TABLE IF NOT EXISTS `merchant_staff_role_permission` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`perm_code` varchar(64) NOT NULL,
|
||||
`role_id` bigint NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `merchant_staff_role_permission_role_perm_uniq` (`role_id`,`perm_code`),
|
||||
KEY `merchant_staff_role_permission_perm_code_idx` (`perm_code`),
|
||||
CONSTRAINT `merchant_staff_role_permission_role_id_fk` FOREIGN KEY (`role_id`) REFERENCES `merchant_staff_role` (`id`) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
-- 6. 成员-权限覆盖
|
||||
CREATE TABLE IF NOT EXISTS `merchant_staff_member_permission` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`perm_code` varchar(64) NOT NULL,
|
||||
`granted` tinyint(1) NOT NULL DEFAULT 1,
|
||||
`member_id` bigint NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `merchant_staff_member_permission_member_perm_uniq` (`member_id`,`perm_code`),
|
||||
CONSTRAINT `merchant_staff_member_permission_member_id_fk` FOREIGN KEY (`member_id`) REFERENCES `merchant_staff_member` (`id`) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
-- 7. 钱包
|
||||
CREATE TABLE IF NOT EXISTS `merchant_staff_wallet` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`merchant_id` varchar(7) NOT NULL,
|
||||
`staff_user_id` varchar(7) NOT NULL,
|
||||
`quota_total` decimal(12,2) NOT NULL DEFAULT 0.00,
|
||||
`quota_used` decimal(12,2) NOT NULL DEFAULT 0.00,
|
||||
`quota_frozen` decimal(12,2) NOT NULL DEFAULT 0.00,
|
||||
`UpdateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
|
||||
`CreateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
|
||||
`member_id` bigint NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `merchant_staff_wallet_merchant_staff_uniq` (`merchant_id`,`staff_user_id`),
|
||||
KEY `merchant_staff_wallet_member_id_fk` (`member_id`),
|
||||
CONSTRAINT `merchant_staff_wallet_member_id_fk` FOREIGN KEY (`member_id`) REFERENCES `merchant_staff_member` (`id`) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
-- 8. 钱包流水
|
||||
CREATE TABLE IF NOT EXISTS `merchant_staff_wallet_ledger` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`merchant_id` varchar(7) NOT NULL,
|
||||
`staff_user_id` varchar(7) NOT NULL,
|
||||
`change_type` varchar(32) NOT NULL,
|
||||
`amount` decimal(12,2) NOT NULL,
|
||||
`balance_after` decimal(12,2) NOT NULL,
|
||||
`related_order_id` varchar(32) DEFAULT NULL,
|
||||
`operator_id` varchar(7) NOT NULL,
|
||||
`remark` varchar(255) NOT NULL DEFAULT '',
|
||||
`CreateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
|
||||
`wallet_id` bigint NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `merchant_staff_wallet_ledger_merchant_id_idx` (`merchant_id`),
|
||||
KEY `merchant_staff_wallet_ledger_wallet_id_fk` (`wallet_id`),
|
||||
CONSTRAINT `merchant_staff_wallet_ledger_wallet_id_fk` FOREIGN KEY (`wallet_id`) REFERENCES `merchant_staff_wallet` (`id`) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
-- 9. 客服日统计
|
||||
CREATE TABLE IF NOT EXISTS `merchant_staff_ri_tongji` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`club_id` varchar(16) NOT NULL DEFAULT 'xq',
|
||||
`merchant_id` varchar(7) NOT NULL,
|
||||
`staff_user_id` varchar(7) NOT NULL,
|
||||
`member_id` bigint NOT NULL,
|
||||
`stat_date` date NOT NULL,
|
||||
`year` smallint unsigned NOT NULL,
|
||||
`month` smallint unsigned NOT NULL,
|
||||
`day` smallint unsigned NOT NULL,
|
||||
`dispatch_count` int NOT NULL DEFAULT 0,
|
||||
`dispatch_amount` decimal(12,2) NOT NULL DEFAULT 0.00,
|
||||
`settle_count` int NOT NULL DEFAULT 0,
|
||||
`settle_amount` decimal(12,2) NOT NULL DEFAULT 0.00,
|
||||
`refund_count` int NOT NULL DEFAULT 0,
|
||||
`refund_amount` decimal(12,2) NOT NULL DEFAULT 0.00,
|
||||
`cancel_count` int NOT NULL DEFAULT 0,
|
||||
`penalty_count` int NOT NULL DEFAULT 0,
|
||||
`CreateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
|
||||
`UpdateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `merchant_staff_ri_tongji_uniq` (`merchant_id`,`staff_user_id`,`stat_date`),
|
||||
KEY `merchant_staff_ri_tongji_merchant_date_idx` (`merchant_id`,`stat_date`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
-- 10. 订单派单归属
|
||||
CREATE TABLE IF NOT EXISTS `merchant_order_dispatch` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`order_id` varchar(32) NOT NULL,
|
||||
`merchant_id` varchar(7) NOT NULL,
|
||||
`dispatch_actor_type` varchar(16) NOT NULL,
|
||||
`dispatch_actor_id` varchar(7) NOT NULL,
|
||||
`staff_member_id` bigint DEFAULT NULL,
|
||||
`CreateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `order_id` (`order_id`),
|
||||
KEY `merchant_order_dispatch_merchant_id_idx` (`merchant_id`),
|
||||
KEY `merchant_order_dispatch_staff_member_id_idx` (`staff_member_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
-- 11. 审计日志
|
||||
CREATE TABLE IF NOT EXISTS `merchant_staff_audit_log` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`merchant_id` varchar(7) NOT NULL,
|
||||
`operator_user_id` varchar(7) NOT NULL,
|
||||
`operator_type` varchar(16) NOT NULL,
|
||||
`staff_member_id` bigint DEFAULT NULL,
|
||||
`action` varchar(64) NOT NULL,
|
||||
`resource_type` varchar(32) NOT NULL DEFAULT '',
|
||||
`resource_id` varchar(64) NOT NULL DEFAULT '',
|
||||
`value_before` json DEFAULT NULL,
|
||||
`value_after` json DEFAULT NULL,
|
||||
`amount` decimal(12,2) DEFAULT NULL,
|
||||
`request_ip` varchar(64) NOT NULL DEFAULT '',
|
||||
`remark` varchar(500) NOT NULL DEFAULT '',
|
||||
`CreateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `merchant_staff_audit_log_merchant_id_idx` (`merchant_id`),
|
||||
KEY `merchant_staff_audit_log_action_idx` (`action`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
-- 12. 派单模板
|
||||
CREATE TABLE IF NOT EXISTS `merchant_dispatch_template` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`merchant_id` varchar(7) NOT NULL,
|
||||
`template_name` varchar(128) NOT NULL,
|
||||
`template_type` varchar(16) NOT NULL DEFAULT 'EXPRESS',
|
||||
`payload_json` json NOT NULL,
|
||||
`created_by` varchar(7) NOT NULL,
|
||||
`created_by_type` varchar(16) NOT NULL DEFAULT 'MERCHANT',
|
||||
`status` int NOT NULL DEFAULT 1,
|
||||
`use_count` int NOT NULL DEFAULT 0,
|
||||
`CreateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
|
||||
`UpdateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `merchant_dispatch_template_merchant_id_idx` (`merchant_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
-- 13. 告诉 Django:merchant_ops 迁移已执行(避免以后 migrate 重复建表)
|
||||
INSERT INTO `django_migrations` (`app`, `name`, `applied`)
|
||||
SELECT 'merchant_ops', '0001_initial', NOW(6)
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `django_migrations`
|
||||
WHERE `app` = 'merchant_ops' AND `name` = '0001_initial'
|
||||
);
|
||||
Reference in New Issue
Block a user