-- ============================================= -- 销售报价模块数据库表 -- ============================================= -- 1. 报价单主表 CREATE TABLE IF NOT EXISTS `crm_sale_quotation` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', `no` varchar(32) NOT NULL COMMENT '报价单号', `name` varchar(128) NOT NULL COMMENT '报价单名称', `customer_id` bigint NOT NULL COMMENT '客户编号', `business_id` bigint DEFAULT NULL COMMENT '商机编号', `contact_id` bigint DEFAULT NULL COMMENT '联系人编号', `owner_user_id` bigint NOT NULL COMMENT '负责人编号', `status` int NOT NULL DEFAULT 0 COMMENT '状态(0草稿 10审批中 20已通过 30已拒绝 40已取消 50已转合同)', `process_instance_id` varchar(64) DEFAULT NULL COMMENT '工作流编号', `quotation_time` datetime DEFAULT NULL COMMENT '报价日期', `valid_until` datetime DEFAULT NULL COMMENT '有效期至', `total_product_price` decimal(24,6) DEFAULT NULL COMMENT '产品总金额', `discount_percent` decimal(10,2) DEFAULT 0 COMMENT '整单折扣(%)', `discount_price` decimal(24,6) DEFAULT 0 COMMENT '优惠金额', `total_price` decimal(24,6) DEFAULT NULL COMMENT '报价总金额', `tax_rate` decimal(10,2) DEFAULT NULL COMMENT '税率(%)', `tax_price` decimal(24,6) DEFAULT NULL COMMENT '税额', `contract_id` bigint DEFAULT NULL COMMENT '关联合同编号', `contract_no` varchar(32) DEFAULT NULL COMMENT '关联合同单号', `file_url` varchar(512) DEFAULT NULL COMMENT '附件地址', `remark` varchar(1024) DEFAULT NULL COMMENT '备注', `creator` varchar(64) DEFAULT NULL COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updater` varchar(64) DEFAULT NULL COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', PRIMARY KEY (`id`), UNIQUE KEY `uk_no` (`no`), KEY `idx_customer_id` (`customer_id`), KEY `idx_business_id` (`business_id`), KEY `idx_owner_user_id` (`owner_user_id`) ) ENGINE=InnoDB COMMENT='CRM 销售报价单'; -- 2. 报价单产品明细表 CREATE TABLE IF NOT EXISTS `crm_sale_quotation_product` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', `quotation_id` bigint NOT NULL COMMENT '报价单编号', `item_id` bigint NOT NULL COMMENT 'MDM物料编号', `item_unit_id` bigint DEFAULT NULL COMMENT '计量单位编号', `item_price` decimal(24,6) NOT NULL COMMENT '物料原价(冗余)', `quotation_price` decimal(24,6) NOT NULL COMMENT '报价单价', `count` decimal(24,6) NOT NULL COMMENT '数量', `total_price` decimal(24,6) NOT NULL COMMENT '小计金额', `tax_percent` decimal(10,2) DEFAULT NULL COMMENT '税率(%)', `tax_price` decimal(24,6) DEFAULT NULL COMMENT '税额', `remark` varchar(256) DEFAULT NULL COMMENT '备注', `creator` varchar(64) DEFAULT NULL COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updater` varchar(64) DEFAULT NULL COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', PRIMARY KEY (`id`), KEY `idx_quotation_id` (`quotation_id`) ) ENGINE=InnoDB COMMENT='CRM 销售报价单产品明细'; -- ============================================= -- 合同产品表修改(使用 MDM 物料) -- ============================================= -- 3. 修改合同产品表结构 -- 注意:如果已有数据,需要先处理数据迁移 -- ALTER TABLE `crm_contract_product` DROP COLUMN `product_id`; -- ALTER TABLE `crm_contract_product` DROP COLUMN `product_price`; ALTER TABLE `crm_contract_product` ADD COLUMN `item_id` bigint DEFAULT NULL COMMENT 'MDM物料编号' AFTER `contract_id`, ADD COLUMN `item_unit_id` bigint DEFAULT NULL COMMENT '计量单位编号' AFTER `item_id`, ADD COLUMN `item_price` decimal(24,6) DEFAULT NULL COMMENT '物料原价(冗余)' AFTER `item_unit_id`; -- 数据迁移:将 product_id 重命名为 item_id(如果需要保留原有数据) -- UPDATE `crm_contract_product` SET `item_id` = `product_id`, `item_price` = `product_price`; -- ============================================= -- BPM 分类(需要在 BPM 管理后台创建,这里提供 SQL 参考) -- ============================================= -- INSERT INTO `bpm_category` (`name`, `code`, `description`, `status`, `sort`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) -- VALUES ('销售报价审批', 'sale_quotation_approve', '销售报价单审批流程分类', 0, 0, '1', NOW(), '1', NOW(), b'0');