新表迁移备选方案

This commit is contained in:
XingQue
2026-06-20 02:34:52 +08:00
parent 7dc3064a88
commit 89632228cc

View 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. 告诉 Djangomerchant_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'
);