230 lines
16 KiB
SQL
230 lines
16 KiB
SQL
-- =============================================================================
|
||
-- CRM 业务管线:线索 → 商机 → 项目,回访贯穿全流程
|
||
-- 对应租户端 backend 页面:/apps/crm/clue、/apps/crm/business、/apps/crm/project、/apps/crm/follow
|
||
-- 说明:
|
||
-- 1. 线索的「客户名称」暂不关联客户管理(线索阶段尚无价值),
|
||
-- 线索转化为商机时才把客户名称落地为正式客户(yz_backend_erp_customer)。
|
||
-- 2. 线索转化商机后会被锁定(locked=1),后续操作都在商机进行。
|
||
-- 3. 商机转化项目后同样锁定(locked=1)。
|
||
-- 4. 回访/跟进记录(yz_backend_crm_follow)与附件、联系人、操作日志均为通用多态表,
|
||
-- 通过 related_type(1线索/2商机/3项目) + related_id 关联。
|
||
-- ⚠️ 安全说明(重要):
|
||
-- 本脚本只做 CREATE TABLE IF NOT EXISTS,**不会删除或覆盖任何已有数据**,可重复执行。
|
||
-- 如需给已存在的表新增字段,请勿重跑本脚本,改用对应的 alter_*.sql 增量脚本。
|
||
-- =============================================================================
|
||
|
||
SET NAMES utf8mb4;
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- 线索表
|
||
-- -----------------------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS `yz_backend_crm_clue` (
|
||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键ID',
|
||
`tenant_id` varchar(64) NOT NULL COMMENT '租户ID',
|
||
`clue_name` varchar(100) NOT NULL COMMENT '线索名称',
|
||
`customer_name` varchar(100) NOT NULL DEFAULT '' COMMENT '客户名称(线索阶段不关联客户管理)',
|
||
`source` varchar(50) NOT NULL DEFAULT '' COMMENT '客户来源(1官网咨询/2电话咨询/3朋友介绍/4展会/5广告投放/6陌生拜访/7其他)',
|
||
`owner_user_id` varchar(64) NOT NULL DEFAULT '' COMMENT '负责人用户ID',
|
||
`owner_user_name` varchar(128) NOT NULL DEFAULT '' COMMENT '负责人姓名',
|
||
`industry` varchar(50) NOT NULL DEFAULT '' COMMENT '客户行业',
|
||
`next_contact_time` datetime DEFAULT NULL COMMENT '下次联系时间',
|
||
`clue_level` varchar(20) NOT NULL DEFAULT '2' COMMENT '客户级别:1重点/2普通/3非优先',
|
||
`contact_person` varchar(50) NOT NULL DEFAULT '' COMMENT '客户对接人',
|
||
`contact_position` varchar(50) NOT NULL DEFAULT '' COMMENT '对接人职位',
|
||
`contact_phone` varchar(20) NOT NULL DEFAULT '' COMMENT '对接人手机',
|
||
`contact_wechat` varchar(64) NOT NULL DEFAULT '' COMMENT '对接人微信',
|
||
`contact_qq` varchar(20) NOT NULL DEFAULT '' COMMENT '对接人QQ',
|
||
`address` varchar(255) NOT NULL DEFAULT '' COMMENT '公司地址',
|
||
`status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态:1跟进中/2已转化/3已关闭',
|
||
`locked` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否锁定:0否/1是(转化后锁定不可编辑)',
|
||
`business_id` bigint(20) DEFAULT NULL COMMENT '转化后的商机ID',
|
||
`convert_time` datetime DEFAULT NULL COMMENT '转化时间',
|
||
`remark` text COMMENT '备注',
|
||
`create_user_id` varchar(64) NOT NULL DEFAULT '' COMMENT '创建人用户ID',
|
||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
`delete_time` datetime DEFAULT NULL COMMENT '删除时间(软删除)',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_tenant_id` (`tenant_id`),
|
||
KEY `idx_clue_name` (`tenant_id`,`clue_name`),
|
||
KEY `idx_owner` (`tenant_id`,`owner_user_id`),
|
||
KEY `idx_status` (`tenant_id`,`status`),
|
||
KEY `idx_delete_time` (`delete_time`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户CRM线索表';
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- 商机表
|
||
-- -----------------------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS `yz_backend_crm_business` (
|
||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键ID',
|
||
`tenant_id` varchar(64) NOT NULL COMMENT '租户ID',
|
||
`business_name` varchar(100) NOT NULL COMMENT '商机名称',
|
||
`clue_id` bigint(20) DEFAULT NULL COMMENT '来源线索ID',
|
||
`customer_id` bigint(20) DEFAULT NULL COMMENT '正式客户ID(yz_backend_erp_customer.id)',
|
||
`customer_name` varchar(100) NOT NULL DEFAULT '' COMMENT '客户名称',
|
||
`source` varchar(50) NOT NULL DEFAULT '' COMMENT '客户来源',
|
||
`owner_user_id` varchar(64) NOT NULL DEFAULT '' COMMENT '负责人用户ID',
|
||
`owner_user_name` varchar(128) NOT NULL DEFAULT '' COMMENT '负责人姓名',
|
||
`industry` varchar(50) NOT NULL DEFAULT '' COMMENT '客户行业',
|
||
`stage` varchar(20) NOT NULL DEFAULT '1' COMMENT '商机阶段:1初步接洽/2需求确认/3方案报价/4商务谈判/5赢单/6输单',
|
||
`amount` decimal(14,2) NOT NULL DEFAULT '0.00' COMMENT '预计金额(元)',
|
||
`expect_deal_date` date DEFAULT NULL COMMENT '预计成交日期',
|
||
`next_contact_time` datetime DEFAULT NULL COMMENT '下次联系时间',
|
||
`level` varchar(20) NOT NULL DEFAULT '2' COMMENT '商机级别:1重点/2普通/3非优先',
|
||
`contact_person` varchar(50) NOT NULL DEFAULT '' COMMENT '对接人',
|
||
`contact_position` varchar(50) NOT NULL DEFAULT '' COMMENT '对接人职位',
|
||
`contact_phone` varchar(20) NOT NULL DEFAULT '' COMMENT '对接人手机',
|
||
`contact_wechat` varchar(64) NOT NULL DEFAULT '' COMMENT '对接人微信',
|
||
`contact_qq` varchar(20) NOT NULL DEFAULT '' COMMENT '对接人QQ',
|
||
`address` varchar(255) NOT NULL DEFAULT '' COMMENT '客户地址',
|
||
`status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态:1跟进中/2已转化项目/3已关闭',
|
||
`locked` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否锁定:0否/1是(转化项目后锁定不可编辑)',
|
||
`project_id` bigint(20) DEFAULT NULL COMMENT '转化后的项目ID',
|
||
`convert_time` datetime DEFAULT NULL COMMENT '转化时间',
|
||
`remark` text COMMENT '备注',
|
||
`create_user_id` varchar(64) NOT NULL DEFAULT '' COMMENT '创建人用户ID',
|
||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
`delete_time` datetime DEFAULT NULL COMMENT '删除时间(软删除)',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_tenant_id` (`tenant_id`),
|
||
KEY `idx_business_name` (`tenant_id`,`business_name`),
|
||
KEY `idx_clue` (`clue_id`),
|
||
KEY `idx_customer` (`customer_id`),
|
||
KEY `idx_owner` (`tenant_id`,`owner_user_id`),
|
||
KEY `idx_status` (`tenant_id`,`status`),
|
||
KEY `idx_delete_time` (`delete_time`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户CRM商机表';
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- 项目表
|
||
-- -----------------------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS `yz_backend_crm_project` (
|
||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键ID',
|
||
`tenant_id` varchar(64) NOT NULL COMMENT '租户ID',
|
||
`project_name` varchar(100) NOT NULL COMMENT '项目名称',
|
||
`project_no` varchar(50) NOT NULL DEFAULT '' COMMENT '项目编号',
|
||
`business_id` bigint(20) DEFAULT NULL COMMENT '来源商机ID',
|
||
`customer_id` bigint(20) DEFAULT NULL COMMENT '客户ID',
|
||
`customer_name` varchar(100) NOT NULL DEFAULT '' COMMENT '客户名称',
|
||
`owner_user_id` varchar(64) NOT NULL DEFAULT '' COMMENT '负责人用户ID',
|
||
`owner_user_name` varchar(128) NOT NULL DEFAULT '' COMMENT '负责人姓名',
|
||
`industry` varchar(50) NOT NULL DEFAULT '' COMMENT '客户行业',
|
||
`amount` decimal(14,2) NOT NULL DEFAULT '0.00' COMMENT '项目金额(元)',
|
||
`status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态:1未开始/2进行中/3已完成/4已暂停',
|
||
`start_date` date DEFAULT NULL COMMENT '开始日期',
|
||
`end_date` date DEFAULT NULL COMMENT '结束日期',
|
||
`contact_person` varchar(50) NOT NULL DEFAULT '' COMMENT '对接人',
|
||
`contact_position` varchar(50) NOT NULL DEFAULT '' COMMENT '对接人职位',
|
||
`contact_phone` varchar(20) NOT NULL DEFAULT '' COMMENT '对接人手机',
|
||
`address` varchar(255) NOT NULL DEFAULT '' COMMENT '项目地址',
|
||
`remark` text COMMENT '备注',
|
||
`doc_category_id` bigint(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT '关联OA文档库项目文件夹分类ID(共享文档/项目文档/{项目名称})',
|
||
`create_user_id` varchar(64) NOT NULL DEFAULT '' COMMENT '创建人用户ID',
|
||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
`delete_time` datetime DEFAULT NULL COMMENT '删除时间(软删除)',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_tenant_id` (`tenant_id`),
|
||
KEY `idx_project_name` (`tenant_id`,`project_name`),
|
||
KEY `idx_business` (`business_id`),
|
||
KEY `idx_owner` (`tenant_id`,`owner_user_id`),
|
||
KEY `idx_status` (`tenant_id`,`status`),
|
||
KEY `idx_delete_time` (`delete_time`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户CRM项目表';
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- 回访/跟进记录表(贯穿线索、商机、项目)
|
||
-- -----------------------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS `yz_backend_crm_follow` (
|
||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键ID',
|
||
`tenant_id` varchar(64) NOT NULL COMMENT '租户ID',
|
||
`related_type` tinyint(4) NOT NULL COMMENT '关联类型:1线索/2商机/3项目',
|
||
`related_id` bigint(20) NOT NULL COMMENT '关联记录ID',
|
||
`related_name` varchar(100) NOT NULL DEFAULT '' COMMENT '关联对象名称(冗余,便于回访列表展示)',
|
||
`stage` tinyint(4) NOT NULL DEFAULT '1' COMMENT '创建阶段:1线索/2商机/3项目',
|
||
`follow_type` varchar(20) NOT NULL DEFAULT '1' COMMENT '回访方式:1电话/2微信/3上门/4邮件/5其他',
|
||
`follow_time` datetime DEFAULT NULL COMMENT '回访时间',
|
||
`content` text COMMENT '回访内容',
|
||
`next_contact_time` datetime DEFAULT NULL COMMENT '下次联系时间',
|
||
`owner_user_id` varchar(64) NOT NULL DEFAULT '' COMMENT '回访人用户ID',
|
||
`owner_user_name` varchar(128) NOT NULL DEFAULT '' COMMENT '回访人姓名',
|
||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
`delete_time` datetime DEFAULT NULL COMMENT '删除时间(软删除)',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_tenant_id` (`tenant_id`),
|
||
KEY `idx_related` (`tenant_id`,`related_type`,`related_id`),
|
||
KEY `idx_follow_time` (`tenant_id`,`follow_time`),
|
||
KEY `idx_delete_time` (`delete_time`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户CRM回访/跟进记录表';
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- 附件表(多态:线索/商机/项目的资料)
|
||
-- -----------------------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS `yz_backend_crm_attach` (
|
||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键ID',
|
||
`tenant_id` varchar(64) NOT NULL COMMENT '租户ID',
|
||
`related_type` tinyint(4) NOT NULL COMMENT '关联类型:1线索/2商机/3项目',
|
||
`related_id` bigint(20) NOT NULL COMMENT '关联记录ID',
|
||
`file_id` bigint(20) DEFAULT NULL COMMENT '文件ID(yz_system_file.id,可空)',
|
||
`file_name` varchar(255) NOT NULL DEFAULT '' COMMENT '文件名',
|
||
`file_url` varchar(500) NOT NULL DEFAULT '' COMMENT '文件访问地址',
|
||
`file_size` bigint(20) NOT NULL DEFAULT '0' COMMENT '文件大小(字节)',
|
||
`uploader_id` varchar(64) NOT NULL DEFAULT '' COMMENT '上传人用户ID',
|
||
`uploader_name` varchar(128) NOT NULL DEFAULT '' COMMENT '上传人姓名',
|
||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
`delete_time` datetime DEFAULT NULL COMMENT '删除时间(软删除)',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_tenant_id` (`tenant_id`),
|
||
KEY `idx_related` (`tenant_id`,`related_type`,`related_id`),
|
||
KEY `idx_delete_time` (`delete_time`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户CRM附件表';
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- 联系人表(多态:线索/商机/项目的对接人列表)
|
||
-- -----------------------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS `yz_backend_crm_entity_contact` (
|
||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键ID',
|
||
`tenant_id` varchar(64) NOT NULL COMMENT '租户ID',
|
||
`related_type` tinyint(4) NOT NULL COMMENT '关联类型:1线索/2商机/3项目',
|
||
`related_id` bigint(20) NOT NULL COMMENT '关联记录ID',
|
||
`contact_name` varchar(50) NOT NULL COMMENT '联系人姓名',
|
||
`position` varchar(50) NOT NULL DEFAULT '' COMMENT '职位',
|
||
`mobile` varchar(20) NOT NULL DEFAULT '' COMMENT '手机号',
|
||
`wechat` varchar(64) NOT NULL DEFAULT '' COMMENT '微信',
|
||
`qq` varchar(20) NOT NULL DEFAULT '' COMMENT 'QQ',
|
||
`email` varchar(100) NOT NULL DEFAULT '' COMMENT '邮箱',
|
||
`is_primary` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否主联系人:0否/1是',
|
||
`remark` varchar(500) NOT NULL DEFAULT '' COMMENT '备注',
|
||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
`delete_time` datetime DEFAULT NULL COMMENT '删除时间(软删除)',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_tenant_id` (`tenant_id`),
|
||
KEY `idx_related` (`tenant_id`,`related_type`,`related_id`),
|
||
KEY `idx_delete_time` (`delete_time`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户CRM联系人表(线索/商机/项目)';
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- 操作日志表(多态:记录线索/商机/项目的关键操作,用于详情页操作日志 Tab)
|
||
-- -----------------------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS `yz_backend_crm_operate_log` (
|
||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键ID',
|
||
`tenant_id` varchar(64) NOT NULL COMMENT '租户ID',
|
||
`related_type` tinyint(4) NOT NULL COMMENT '关联类型:1线索/2商机/3项目',
|
||
`related_id` bigint(20) NOT NULL COMMENT '关联记录ID',
|
||
`action` varchar(50) NOT NULL DEFAULT '' COMMENT '操作动作:create/update/convert/delete 等',
|
||
`content` varchar(500) NOT NULL DEFAULT '' COMMENT '操作描述',
|
||
`operator_id` varchar(64) NOT NULL DEFAULT '' COMMENT '操作人用户ID',
|
||
`operator_name` varchar(128) NOT NULL DEFAULT '' COMMENT '操作人姓名',
|
||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_tenant_id` (`tenant_id`),
|
||
KEY `idx_related` (`tenant_id`,`related_type`,`related_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户CRM操作日志表';
|
||
|
||
SET FOREIGN_KEY_CHECKS = 1;
|
||
|