-- ============================================================================= -- 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_tenant_crm_follow)与附件、联系人、操作日志均为通用多态表, -- 通过 related_type(1线索/2商机/3项目) + related_id 关联。 -- 可重复执行(DROP TABLE IF EXISTS)。 -- ============================================================================= SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ----------------------------------------------------------------------------- -- 线索表 -- ----------------------------------------------------------------------------- DROP TABLE IF EXISTS `yz_tenant_crm_clue`; CREATE TABLE `yz_tenant_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线索表'; -- ----------------------------------------------------------------------------- -- 商机表 -- ----------------------------------------------------------------------------- DROP TABLE IF EXISTS `yz_tenant_crm_business`; CREATE TABLE `yz_tenant_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商机表'; -- ----------------------------------------------------------------------------- -- 项目表 -- ----------------------------------------------------------------------------- DROP TABLE IF EXISTS `yz_tenant_crm_project`; CREATE TABLE `yz_tenant_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 '备注', `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项目表'; -- ----------------------------------------------------------------------------- -- 回访/跟进记录表(贯穿线索、商机、项目) -- ----------------------------------------------------------------------------- DROP TABLE IF EXISTS `yz_tenant_crm_follow`; CREATE TABLE `yz_tenant_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 '关联对象名称(冗余,便于回访列表展示)', `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回访/跟进记录表'; -- ----------------------------------------------------------------------------- -- 附件表(多态:线索/商机/项目的资料) -- ----------------------------------------------------------------------------- DROP TABLE IF EXISTS `yz_tenant_crm_attach`; CREATE TABLE `yz_tenant_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附件表'; -- ----------------------------------------------------------------------------- -- 联系人表(多态:线索/商机/项目的对接人列表) -- ----------------------------------------------------------------------------- DROP TABLE IF EXISTS `yz_tenant_crm_entity_contact`; CREATE TABLE `yz_tenant_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) -- ----------------------------------------------------------------------------- DROP TABLE IF EXISTS `yz_tenant_crm_operate_log`; CREATE TABLE `yz_tenant_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;