by-crm/sql/init.sql
2026-01-23 17:20:52 +08:00

162 lines
8.2 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.

-- 经销商管理系统数据库初始化脚本
-- 数据库版本MySQL 8.0
CREATE DATABASE IF NOT EXISTS by_crm DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE by_crm;
-- 经销商表
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 DATETIME COMMENT '保护期开始时间',
protect_end_date DATETIME 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密码admin123BCrypt加密后的值
INSERT INTO crm_user (username, password, real_name, dealer_id, role, status) VALUES
('admin', '$2a$10$ZK5LlFqFZ5.LpFJj/YqxJ.X5JD4JlSfHz.FGG8XnP/YjV6LvVJz0q', '系统管理员', NULL, 0, 1);
-- 插入测试经销商
INSERT INTO crm_dealer (name, code, contact_person, contact_phone, email, status) VALUES
('北京科技有限公司', 'DLR001', '张三', '13800138001', 'zhangsan@example.com', 1),
('上海贸易有限公司', 'DLR002', '李四', '13800138002', 'lisi@example.com', 1),
('深圳实业有限公司', 'DLR003', '王五', '13800138003', 'wangwu@example.com', 1);
-- 插入测试经销商用户
INSERT INTO crm_user (username, password, real_name, dealer_id, role, status) VALUES
('user001', '$2a$10$ZK5LlFqFZ5.LpFJj/YqxJ.X5JD4JlSfHz.FGG8XnP/YjV6LvVJz0q', '张三', 1, 1, 1),
('user002', '$2a$10$ZK5LlFqFZ5.LpFJj/YqxJ.X5JD4JlSfHz.FGG8XnP/YjV6LvVJz0q', '李四', 2, 1, 1),
('user003', '$2a$10$ZK5LlFqFZ5.LpFJj/YqxJ.X5JD4JlSfHz.FGG8XnP/YjV6LvVJz0q', '王五', 3, 1, 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);
-- 插入测试客户
INSERT INTO crm_customer (name, phone, address, industry, status) VALUES
('阿里巴巴集团', '0571-12345678', '浙江省杭州市余杭区', 'internet', 0),
('腾讯科技', '0755-87654321', '广东省深圳市南山区', 'internet', 0),
('华为技术', '0755-12345678', '广东省深圳市龙岗区', 'manufacturing', 0),
('京东集团', '010-66666666', '北京市大兴区', 'retail', 0),
('平安保险', '0755-55555555', '广东省深圳市福田区', 'finance', 0);