-- 经销商管理系统数据库初始化脚本 -- 数据库版本:MySQL 8.0 CREATE DATABASE IF NOT EXISTS crm_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE crm_db; SET NAMES utf8mb4; SET CHARACTER SET utf8mb4; -- 经销商表 CREATE TABLE IF NOT EXISTS crm_dealer ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '经销商ID', name VARCHAR(100) NOT NULL COMMENT '经销商名称', code VARCHAR(50) NOT NULL UNIQUE COMMENT '经销商编码', contact_person VARCHAR(50) NOT NULL COMMENT '联系人', contact_phone VARCHAR(20) NOT NULL COMMENT '联系电话', email VARCHAR(100) COMMENT '邮箱', status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0-禁用 1-启用', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', INDEX idx_code (code), INDEX idx_status (status) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='经销商表'; -- 客户表 CREATE TABLE IF NOT EXISTS crm_customer ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '客户ID', name VARCHAR(100) NOT NULL COMMENT '客户名称', phone VARCHAR(20) COMMENT '联系电话', address VARCHAR(255) COMMENT '地址', industry VARCHAR(100) COMMENT '所属行业', status TINYINT NOT NULL DEFAULT 0 COMMENT '状态:0-可报备 1-保护中 2-已失效', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', INDEX idx_name (name), INDEX idx_status (status), INDEX idx_created_at (created_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='客户表'; -- 报备表 CREATE TABLE IF NOT EXISTS crm_report ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '报备ID', dealer_id BIGINT NOT NULL COMMENT '经销商ID', customer_id BIGINT NOT NULL COMMENT '客户ID', description VARCHAR(500) COMMENT '报备说明', status TINYINT NOT NULL DEFAULT 0 COMMENT '状态:0-待审核 1-已通过 2-已驳回 3-已失效', reject_reason VARCHAR(255) COMMENT '驳回原因', protect_start_date DATE DEFAULT NULL COMMENT '保护期开始日期', protect_end_date DATE DEFAULT NULL COMMENT '保护期结束日期', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', INDEX idx_dealer_id (dealer_id), INDEX idx_customer_id (customer_id), INDEX idx_status (status), INDEX idx_protect_end_date (protect_end_date), UNIQUE KEY uk_customer_valid (customer_id, status) COMMENT '同一客户只能有一个有效报备' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='报备表'; -- 用户表(管理员和经销商用户) CREATE TABLE IF NOT EXISTS crm_user ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '用户ID', username VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名', password VARCHAR(255) NOT NULL COMMENT '密码(BCrypt加密)', real_name VARCHAR(50) NOT NULL COMMENT '真实姓名', dealer_id BIGINT COMMENT '关联经销商ID(管理员为NULL)', role TINYINT NOT NULL COMMENT '角色:0-管理员 1-经销商用户', status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0-禁用 1-启用', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', INDEX idx_username (username), INDEX idx_dealer_id (dealer_id), INDEX idx_role (role) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表'; -- 数据字典表 CREATE TABLE IF NOT EXISTS crm_dict ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '字典ID', dict_code VARCHAR(50) NOT NULL UNIQUE COMMENT '字典编码', dict_name VARCHAR(100) NOT NULL COMMENT '字典名称', description VARCHAR(255) COMMENT '描述', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='数据字典表'; -- 数据字典项表 CREATE TABLE IF NOT EXISTS crm_dict_item ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '字典项ID', dict_id BIGINT NOT NULL COMMENT '字典ID', item_label VARCHAR(100) NOT NULL COMMENT '字典项标签', item_value VARCHAR(50) NOT NULL COMMENT '字典项值', sort_order INT NOT NULL DEFAULT 0 COMMENT '排序', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', INDEX idx_dict_id (dict_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='数据字典项表'; -- 操作日志表 CREATE TABLE IF NOT EXISTS crm_operation_log ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '日志ID', user_id BIGINT NOT NULL COMMENT '用户ID', module VARCHAR(50) NOT NULL COMMENT '模块名称', operation VARCHAR(50) NOT NULL COMMENT '操作类型', description VARCHAR(500) COMMENT '操作描述', ip VARCHAR(50) COMMENT 'IP地址', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', INDEX idx_user_id (user_id), INDEX idx_module (module), INDEX idx_created_at (created_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='操作日志表'; -- 插入初始数据 -- 插入默认管理员(用户名:admin,密码:Bycrmadmin123,BCrypt加密后的值) INSERT INTO crm_user (username, password, real_name, dealer_id, role, status) VALUES ('admin', '$2a$10$kWExNPRis.HIzKDa112UZeq8jzGxI2tLFo0zTNRfxhyzk6MzMKPW6', '系统管理员', NULL, 0, 1); -- 插入数据字典 INSERT INTO crm_dict (dict_code, dict_name, description) VALUES ('customer_status', '客户状态', '客户的状态信息'), ('report_status', '报备状态', '报备单的状态信息'), ('customer_industry', '客户行业', '客户所属行业分类'); -- 插入客户状态字典项 INSERT INTO crm_dict_item (dict_id, item_label, item_value, sort_order) VALUES (1, '可报备', '0', 0), (1, '保护中', '1', 1), (1, '已失效', '2', 2); -- 插入报备状态字典项 INSERT INTO crm_dict_item (dict_id, item_label, item_value, sort_order) VALUES (2, '待审核', '0', 0), (2, '已通过', '1', 1), (2, '已驳回', '2', 2), (2, '已失效', '3', 3); -- 插入客户行业字典项 INSERT INTO crm_dict_item (dict_id, item_label, item_value, sort_order) VALUES (3, '制造业', 'manufacturing', 0), (3, '互联网', 'internet', 1), (3, '金融', 'finance', 2), (3, '零售', 'retail', 3), (3, '教育', 'education', 4), (3, '医疗', 'healthcare', 5), (3, '其他', 'other', 6); -- 系统配置表 CREATE TABLE IF NOT EXISTS crm_system_config ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '配置ID', config_key VARCHAR(50) NOT NULL UNIQUE COMMENT '配置键', config_value VARCHAR(255) NOT NULL COMMENT '配置值', config_label VARCHAR(100) NOT NULL COMMENT '配置名称', config_type VARCHAR(20) NOT NULL DEFAULT 'string' COMMENT '数据类型:string/integer/boolean', description VARCHAR(255) COMMENT '配置描述', is_editable TINYINT NOT NULL DEFAULT 1 COMMENT '是否可编辑:0-否 1-是', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', INDEX idx_config_key (config_key) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统配置表'; -- 插入初始配置数据 INSERT INTO crm_system_config (config_key, config_value, config_label, config_type, description, is_editable) VALUES ('report.protect.days', '90', '报备保护期天数', 'integer', '报备审核通过后客户的保护天数', 1), ('report.allow.overlap', 'false', '允许重叠报备', 'boolean', '是否允许同一客户被多个经销商报备(测试用,生产环境必须为false)', 1); -- 学校表 CREATE TABLE IF NOT EXISTS crm_school ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '学校ID', school_code VARCHAR(50) NOT NULL UNIQUE COMMENT '学校标识码', school_name VARCHAR(200) NOT NULL COMMENT '学校名称', location VARCHAR(255) COMMENT '所在地(由主管部门和所在地组合而成,如"北京市海淀区")', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', INDEX idx_school_code (school_code), INDEX idx_school_name (school_name), INDEX idx_location (location) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='学校表';