230 lines
10 KiB
SQL
230 lines
10 KiB
SQL
-- 商家子客服 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'
|
||
);
|