Files
Django/merchant_ops/sql/install_tables.sql
2026-06-20 02:34:52 +08:00

230 lines
10 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 商家子客服 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'
);