/* Navicat Premium Dump SQL Source Server : 测试端 Source Server Type : MySQL Source Server Version : 80036 (8.0.36) Source Host : 114.55.111.44:3306 Source Schema : test_mao Target Server Type : MySQL Target Server Version : 80036 (8.0.36) File Encoding : 65001 Date: 22/08/2025 14:36:05 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for accounts -- ---------------------------- DROP TABLE IF EXISTS `accounts`; CREATE TABLE `accounts` ( `id` int NOT NULL AUTO_INCREMENT, `user_id` int NOT NULL, `account_type` enum('public','user') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT 'user', `balance` decimal(10, 2) NULL DEFAULT 0.00, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) USING BTREE, INDEX `user_id`(`user_id` ASC) USING BTREE, CONSTRAINT `accounts_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE = InnoDB AUTO_INCREMENT = 40 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for admin_operation_logs -- ---------------------------- DROP TABLE IF EXISTS `admin_operation_logs`; CREATE TABLE `admin_operation_logs` ( `id` int NOT NULL AUTO_INCREMENT, `admin_id` int NOT NULL, `operation_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `target_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `target_id` int NOT NULL, `description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) USING BTREE, INDEX `admin_id`(`admin_id` ASC) USING BTREE, CONSTRAINT `admin_operation_logs_ibfk_1` FOREIGN KEY (`admin_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE = InnoDB AUTO_INCREMENT = 39 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for agent_commission_records -- ---------------------------- DROP TABLE IF EXISTS `agent_commission_records`; CREATE TABLE `agent_commission_records` ( `id` int NOT NULL AUTO_INCREMENT, `agent_id` int NOT NULL, `merchant_id` int NOT NULL, `order_id` int NULL DEFAULT NULL, `commission_amount` decimal(10, 2) NOT NULL, `commission_type` enum('registration','matching') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'matching', `description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) USING BTREE, INDEX `agent_id`(`agent_id` ASC) USING BTREE, INDEX `merchant_id`(`merchant_id` ASC) USING BTREE, INDEX `order_id`(`order_id` ASC) USING BTREE, CONSTRAINT `agent_commission_records_ibfk_1` FOREIGN KEY (`agent_id`) REFERENCES `regional_agents` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT, CONSTRAINT `agent_commission_records_ibfk_2` FOREIGN KEY (`merchant_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT, CONSTRAINT `agent_commission_records_ibfk_3` FOREIGN KEY (`order_id`) REFERENCES `matching_orders` (`id`) ON DELETE SET NULL ON UPDATE RESTRICT ) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for agent_merchants -- ---------------------------- DROP TABLE IF EXISTS `agent_merchants`; CREATE TABLE `agent_merchants` ( `id` int NOT NULL AUTO_INCREMENT, `agent_id` int NOT NULL, `merchant_id` int NOT NULL, `registration_code_id` int NULL DEFAULT NULL, `matching_count` int NULL DEFAULT 0, `commission_earned` decimal(10, 2) NULL DEFAULT 0.00, `is_qualified` tinyint(1) NULL DEFAULT 0, `qualified_at` timestamp NULL DEFAULT NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `unique_agent_merchant`(`agent_id` ASC, `merchant_id` ASC) USING BTREE, INDEX `merchant_id`(`merchant_id` ASC) USING BTREE, INDEX `registration_code_id`(`registration_code_id` ASC) USING BTREE, CONSTRAINT `agent_merchants_ibfk_1` FOREIGN KEY (`agent_id`) REFERENCES `regional_agents` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT, CONSTRAINT `agent_merchants_ibfk_2` FOREIGN KEY (`merchant_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT, CONSTRAINT `agent_merchants_ibfk_3` FOREIGN KEY (`registration_code_id`) REFERENCES `registration_codes` (`id`) ON DELETE SET NULL ON UPDATE RESTRICT ) ENGINE = InnoDB AUTO_INCREMENT = 18 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for agent_withdrawals -- ---------------------------- DROP TABLE IF EXISTS `agent_withdrawals`; CREATE TABLE `agent_withdrawals` ( `id` int NOT NULL AUTO_INCREMENT, `agent_id` int NOT NULL, `amount` decimal(10, 2) NOT NULL, `payment_type` enum('bank','wechat','alipay','unionpay') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'bank' COMMENT '收款方式类型', `bank_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '银行名称', `account_number` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '账号/银行账号', `account_holder` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '持有人姓名', `qr_code_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '收款码图片URL', `status` enum('pending','approved','rejected','completed') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'pending', `apply_note` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL, `admin_note` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL, `processed_by` int NULL DEFAULT NULL, `processed_at` timestamp NULL DEFAULT NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `bank_account` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '银行账号(兼容旧版本)', PRIMARY KEY (`id`) USING BTREE, INDEX `agent_id`(`agent_id` ASC) USING BTREE, INDEX `processed_by`(`processed_by` ASC) USING BTREE, CONSTRAINT `agent_withdrawals_ibfk_1` FOREIGN KEY (`agent_id`) REFERENCES `regional_agents` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT, CONSTRAINT `agent_withdrawals_ibfk_2` FOREIGN KEY (`processed_by`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE RESTRICT ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for articles -- ---------------------------- DROP TABLE IF EXISTS `articles`; CREATE TABLE `articles` ( `id` int NOT NULL AUTO_INCREMENT, `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL, `author_id` int NULL DEFAULT NULL, `status` enum('draft','published') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT 'draft', `views` int NULL DEFAULT 0, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) USING BTREE, INDEX `author_id`(`author_id` ASC) USING BTREE, CONSTRAINT `articles_ibfk_1` FOREIGN KEY (`author_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for balance_fix_log -- ---------------------------- DROP TABLE IF EXISTS `balance_fix_log`; CREATE TABLE `balance_fix_log` ( `id` int NOT NULL AUTO_INCREMENT, `user_id` int NOT NULL, `amount_deducted` decimal(10, 2) NOT NULL, `transfer_count` int NOT NULL, `fix_reason` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) USING BTREE, INDEX `idx_user_id`(`user_id` ASC) USING BTREE, INDEX `idx_created_at`(`created_at` ASC) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for matching_orders -- ---------------------------- DROP TABLE IF EXISTS `matching_orders`; CREATE TABLE `matching_orders` ( `id` int NOT NULL AUTO_INCREMENT, `initiator_id` int NOT NULL, `amount` decimal(10, 2) NOT NULL, `status` enum('pending','matching','completed','cancelled','failed') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT 'pending', `cycle_count` int NULL DEFAULT 0, `max_cycles` int NULL DEFAULT 3, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `matching_type` enum('small','large') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT 'small', `is_system_reverse` tinyint(1) NULL DEFAULT 0, PRIMARY KEY (`id`) USING BTREE, INDEX `initiator_id`(`initiator_id` ASC) USING BTREE, CONSTRAINT `matching_orders_ibfk_1` FOREIGN KEY (`initiator_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE = InnoDB AUTO_INCREMENT = 200 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for matching_records -- ---------------------------- DROP TABLE IF EXISTS `matching_records`; CREATE TABLE `matching_records` ( `id` int NOT NULL AUTO_INCREMENT, `matching_order_id` int NOT NULL, `user_id` int NOT NULL, `action` enum('join','confirm','reject','complete') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `amount` decimal(10, 2) NULL DEFAULT NULL, `note` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) USING BTREE, INDEX `matching_order_id`(`matching_order_id` ASC) USING BTREE, INDEX `user_id`(`user_id` ASC) USING BTREE, CONSTRAINT `matching_records_ibfk_1` FOREIGN KEY (`matching_order_id`) REFERENCES `matching_orders` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT, CONSTRAINT `matching_records_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE = InnoDB AUTO_INCREMENT = 773 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for order_allocations -- ---------------------------- DROP TABLE IF EXISTS `order_allocations`; CREATE TABLE `order_allocations` ( `id` int NOT NULL AUTO_INCREMENT, `matching_order_id` int NOT NULL, `from_user_id` int NOT NULL, `to_user_id` int NOT NULL, `amount` decimal(10, 2) NOT NULL, `cycle_number` int NOT NULL, `status` enum('pending','confirmed','rejected','completed') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT 'pending', `transfer_id` int NULL DEFAULT NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `confirmed_at` timestamp NULL DEFAULT NULL, `outbound_date` date NULL DEFAULT NULL, `return_date` date NULL DEFAULT NULL, `can_return_after` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE, INDEX `matching_order_id`(`matching_order_id` ASC) USING BTREE, INDEX `from_user_id`(`from_user_id` ASC) USING BTREE, INDEX `to_user_id`(`to_user_id` ASC) USING BTREE, INDEX `transfer_id`(`transfer_id` ASC) USING BTREE, CONSTRAINT `order_allocations_ibfk_1` FOREIGN KEY (`matching_order_id`) REFERENCES `matching_orders` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT, CONSTRAINT `order_allocations_ibfk_2` FOREIGN KEY (`from_user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT, CONSTRAINT `order_allocations_ibfk_3` FOREIGN KEY (`to_user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT, CONSTRAINT `order_allocations_ibfk_4` FOREIGN KEY (`transfer_id`) REFERENCES `transfers` (`id`) ON DELETE SET NULL ON UPDATE RESTRICT ) ENGINE = InnoDB AUTO_INCREMENT = 673 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for order_allocations_backup -- ---------------------------- DROP TABLE IF EXISTS `order_allocations_backup`; CREATE TABLE `order_allocations_backup` ( `id` int NOT NULL DEFAULT 0, `matching_order_id` int NOT NULL, `from_user_id` int NOT NULL, `to_user_id` int NOT NULL, `amount` decimal(10, 2) NOT NULL, `cycle_number` int NOT NULL, `status` enum('pending','confirmed','rejected','completed') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT 'pending', `transfer_id` int NULL DEFAULT NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `confirmed_at` timestamp NULL DEFAULT NULL, `outbound_date` date NULL DEFAULT NULL, `return_date` date NULL DEFAULT NULL, `can_return_after` timestamp NULL DEFAULT NULL ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for order_items -- ---------------------------- DROP TABLE IF EXISTS `order_items`; CREATE TABLE `order_items` ( `id` int NOT NULL AUTO_INCREMENT, `order_id` int NOT NULL, `product_id` int NOT NULL, `quantity` int NOT NULL, `price` int NOT NULL, `points` int NOT NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) USING BTREE, INDEX `order_id`(`order_id` ASC) USING BTREE, INDEX `product_id`(`product_id` ASC) USING BTREE, CONSTRAINT `order_items_ibfk_1` FOREIGN KEY (`order_id`) REFERENCES `orders` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT `order_items_ibfk_2` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for orders -- ---------------------------- DROP TABLE IF EXISTS `orders`; CREATE TABLE `orders` ( `id` int NOT NULL AUTO_INCREMENT, `user_id` int NOT NULL, `order_no` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `total_amount` int NOT NULL, `total_points` int NOT NULL, `status` enum('pending','paid','shipped','delivered','cancelled') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT 'pending', `address` json NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `order_no`(`order_no` ASC) USING BTREE, INDEX `user_id`(`user_id` ASC) USING BTREE, CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for points_history -- ---------------------------- DROP TABLE IF EXISTS `points_history`; CREATE TABLE `points_history` ( `id` int NOT NULL AUTO_INCREMENT, `user_id` int NOT NULL, `type` enum('earn','spend','admin_adjust') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `amount` int NOT NULL, `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `order_id` int NULL DEFAULT NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) USING BTREE, INDEX `user_id`(`user_id` ASC) USING BTREE, INDEX `order_id`(`order_id` ASC) USING BTREE, CONSTRAINT `points_history_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT `points_history_ibfk_2` FOREIGN KEY (`order_id`) REFERENCES `orders` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB AUTO_INCREMENT = 326 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for product_reviews -- ---------------------------- DROP TABLE IF EXISTS `product_reviews`; CREATE TABLE `product_reviews` ( `id` int NOT NULL AUTO_INCREMENT, `product_id` int NOT NULL, `user_id` int NOT NULL, `order_id` int NOT NULL, `rating` int NOT NULL, `comment` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL, `images` json NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) USING BTREE, INDEX `product_id`(`product_id` ASC) USING BTREE, INDEX `user_id`(`user_id` ASC) USING BTREE, INDEX `order_id`(`order_id` ASC) USING BTREE, CONSTRAINT `product_reviews_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT `product_reviews_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT `product_reviews_ibfk_3` FOREIGN KEY (`order_id`) REFERENCES `orders` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for products -- ---------------------------- DROP TABLE IF EXISTS `products`; CREATE TABLE `products` ( `id` int NOT NULL AUTO_INCREMENT, `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL, `price` int NOT NULL, `original_price` int NULL DEFAULT NULL, `stock` int NULL DEFAULT 0, `sales` int NULL DEFAULT 0, `rating` decimal(3, 2) NULL DEFAULT 5.00, `category` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `images` json NULL, `status` enum('active','inactive') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT 'active', `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `points_price` int NOT NULL DEFAULT 0, `image_url` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `details` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 18 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for regional_agents -- ---------------------------- DROP TABLE IF EXISTS `regional_agents`; CREATE TABLE `regional_agents` ( `id` int NOT NULL AUTO_INCREMENT, `user_id` int NOT NULL, `region_id` int NOT NULL, `agent_code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `status` enum('pending','active','suspended','terminated') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'pending', `commission_rate` decimal(5, 4) NULL DEFAULT 0.0500, `total_earnings` decimal(10, 2) NULL DEFAULT 0.00, `recruited_merchants` int NULL DEFAULT 0, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `approved_at` timestamp NULL DEFAULT NULL, `approved_by_admin_id` int NULL DEFAULT NULL, `withdrawn_amount` decimal(10, 2) NULL DEFAULT 0.00 COMMENT '已提现金额', `pending_withdrawal` decimal(10, 2) NULL DEFAULT 0.00 COMMENT '待审核提现金额', `payment_type` enum('bank','wechat','alipay','unionpay') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'bank' COMMENT '收款方式类型', `account_number` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '账号/银行账号', `account_holder` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '持有人姓名', `qr_code_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '收款码图片URL', `bank_account` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '银行账号(兼容旧版本)', `bank_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '银行名称', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `agent_code`(`agent_code` ASC) USING BTREE, UNIQUE INDEX `unique_agent_region`(`user_id` ASC, `region_id` ASC) USING BTREE, INDEX `region_id`(`region_id` ASC) USING BTREE, CONSTRAINT `regional_agents_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT, CONSTRAINT `regional_agents_ibfk_2` FOREIGN KEY (`region_id`) REFERENCES `zhejiang_regions` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for registration_codes -- ---------------------------- DROP TABLE IF EXISTS `registration_codes`; CREATE TABLE `registration_codes` ( `id` int NOT NULL AUTO_INCREMENT, `code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '注册码', `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `expires_at` timestamp NOT NULL COMMENT '过期时间', `used_at` timestamp NULL DEFAULT NULL COMMENT '使用时间', `used_by_user_id` int NULL DEFAULT NULL COMMENT '使用该注册码的用户ID', `is_used` tinyint(1) NULL DEFAULT 0 COMMENT '是否已使用', `created_by_admin_id` int NOT NULL COMMENT '创建该注册码的管理员ID', `agent_id` int NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `code`(`code` ASC) USING BTREE, INDEX `idx_code`(`code` ASC) USING BTREE, INDEX `idx_expires_at`(`expires_at` ASC) USING BTREE, INDEX `idx_is_used`(`is_used` ASC) USING BTREE, INDEX `used_by_user_id`(`used_by_user_id` ASC) USING BTREE, INDEX `created_by_admin_id`(`created_by_admin_id` ASC) USING BTREE, INDEX `fk_registration_codes_agent_id`(`agent_id` ASC) USING BTREE, CONSTRAINT `fk_registration_codes_agent_id` FOREIGN KEY (`agent_id`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE RESTRICT, CONSTRAINT `registration_codes_ibfk_1` FOREIGN KEY (`used_by_user_id`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE RESTRICT, CONSTRAINT `registration_codes_ibfk_2` FOREIGN KEY (`created_by_admin_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE = InnoDB AUTO_INCREMENT = 141 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '注册码表' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for system_settings -- ---------------------------- DROP TABLE IF EXISTS `system_settings`; CREATE TABLE `system_settings` ( `id` int NOT NULL AUTO_INCREMENT, `setting_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `setting_value` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL, `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `setting_key`(`setting_key` ASC) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 71 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for test_users -- ---------------------------- DROP TABLE IF EXISTS `test_users`; CREATE TABLE `test_users` ( `id` int NOT NULL AUTO_INCREMENT, `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for transfer_confirmations -- ---------------------------- DROP TABLE IF EXISTS `transfer_confirmations`; CREATE TABLE `transfer_confirmations` ( `id` int NOT NULL AUTO_INCREMENT, `transfer_id` int NOT NULL, `confirmer_id` int NOT NULL, `action` enum('confirm','reject') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `note` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) USING BTREE, INDEX `transfer_id`(`transfer_id` ASC) USING BTREE, INDEX `confirmer_id`(`confirmer_id` ASC) USING BTREE, CONSTRAINT `transfer_confirmations_ibfk_1` FOREIGN KEY (`transfer_id`) REFERENCES `transfers` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT, CONSTRAINT `transfer_confirmations_ibfk_2` FOREIGN KEY (`confirmer_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for transfers -- ---------------------------- DROP TABLE IF EXISTS `transfers`; CREATE TABLE `transfers` ( `id` int NOT NULL AUTO_INCREMENT, `from_user_id` int NULL DEFAULT NULL, `to_user_id` int NOT NULL, `amount` decimal(10, 2) NOT NULL, `transfer_type` enum('initial','return','user_to_user','system_to_user','user_to_system') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT 'user_to_user', `status` enum('pending','confirmed','rejected','received','not_received','cancelled') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT 'pending', `voucher_url` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL, `batch_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `deadline_at` timestamp NULL DEFAULT NULL COMMENT '转账截止时间', `is_overdue` tinyint(1) NULL DEFAULT 0 COMMENT '是否超时', `overdue_at` timestamp NULL DEFAULT NULL COMMENT '超时时间', `is_bad_debt` tinyint(1) NULL DEFAULT 0, `confirmed_at` timestamp NULL DEFAULT NULL, `admin_note` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL, `admin_modified_at` timestamp NULL DEFAULT NULL, `admin_modified_by` int NULL DEFAULT NULL, `source_type` enum('manual','allocation','system') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT 'manual' COMMENT '转账来源类型', `matching_order_id` int NULL DEFAULT NULL, `cycle_number` int NULL DEFAULT NULL, `outbound_date` date NULL DEFAULT NULL, `return_date` date NULL DEFAULT NULL, `can_return_after` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE, INDEX `from_user_id`(`from_user_id` ASC) USING BTREE, INDEX `to_user_id`(`to_user_id` ASC) USING BTREE, INDEX `fk_transfers_matching_order_id`(`matching_order_id` ASC) USING BTREE, CONSTRAINT `fk_transfers_matching_order_id` FOREIGN KEY (`matching_order_id`) REFERENCES `matching_orders` (`id`) ON DELETE SET NULL ON UPDATE RESTRICT, CONSTRAINT `transfers_ibfk_1` FOREIGN KEY (`from_user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT, CONSTRAINT `transfers_ibfk_2` FOREIGN KEY (`to_user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE = InnoDB AUTO_INCREMENT = 558 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for user_matching_pool -- ---------------------------- DROP TABLE IF EXISTS `user_matching_pool`; CREATE TABLE `user_matching_pool` ( `id` int NOT NULL AUTO_INCREMENT, `user_id` int NOT NULL, `available_amount` decimal(10, 2) NULL DEFAULT 0.00, `is_active` tinyint(1) NULL DEFAULT 1, `last_matched_at` timestamp NULL DEFAULT NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `unique_user`(`user_id` ASC) USING BTREE, CONSTRAINT `user_matching_pool_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE = InnoDB AUTO_INCREMENT = 61 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for users -- ---------------------------- DROP TABLE IF EXISTS `users`; CREATE TABLE `users` ( `id` int NOT NULL AUTO_INCREMENT, `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `role` enum('user','admin') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT 'user', `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `points` int NULL DEFAULT 0, `real_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `id_card` varchar(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `wechat_qr` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `alipay_qr` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `bank_card` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `unionpay_qr` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `is_system_account` tinyint(1) NULL DEFAULT 0, `completed_withdrawals` int NULL DEFAULT 0, `balance` decimal(10, 2) NULL DEFAULT 0.00, `is_risk_user` tinyint(1) NULL DEFAULT 0 COMMENT '是否为风险用户', `is_blacklisted` tinyint(1) NULL DEFAULT 0 COMMENT '是否被拉黑', `risk_reason` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '风险原因', `blacklist_reason` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '拉黑原因', `blacklisted_at` timestamp NULL DEFAULT NULL COMMENT '拉黑时间', `business_license` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `id_card_front` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `id_card_back` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `audit_status` enum('pending','approved','rejected') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT 'pending', `audit_note` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL, `audited_by` int NULL DEFAULT NULL, `audited_at` timestamp NULL DEFAULT NULL, `city` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `district_id` int NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `username`(`username` ASC) USING BTREE, UNIQUE INDEX `email`(`email` ASC) USING BTREE, UNIQUE INDEX `phone`(`phone` ASC) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 9548 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for zhejiang_regions -- ---------------------------- DROP TABLE IF EXISTS `zhejiang_regions`; CREATE TABLE `zhejiang_regions` ( `id` int NOT NULL AUTO_INCREMENT, `city_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `district_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `region_code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `is_available` tinyint(1) NULL DEFAULT 1, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `region_code`(`region_code` ASC) USING BTREE, UNIQUE INDEX `unique_region`(`city_name` ASC, `district_name` ASC) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 20041 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; SET FOREIGN_KEY_CHECKS = 1;