yumoqing 2547fad996 sync: local modifications to opportunity_management
- Updated core.py, init.py, opportunity_core.py, mysql.ddl.sql
- Updated UI: base.ui, opportunity_management.ui
- Added: opportunity.json, opportunity_stage_history.json
- Added API files: opportunities CRUD, sales_stages_list, check_tables
- Added UI/DSPY: opportunity_edit, opportunity_list, sales_stages_list
2026-04-28 18:54:47 +08:00

78 lines
5.0 KiB
SQL
Raw Permalink 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.

-- Table from opportunities.json
CREATE TABLE IF NOT EXISTS `opportunities` (
`id` VARCHAR(32) NOT NULL COMMENT '主键 - UUID格式',
`customer_id` VARCHAR(32) NOT NULL COMMENT '关联客户管理模块的客户ID',
`customer_name` VARCHAR(255) NOT NULL COMMENT '客户名称,必填字段',
`opportunity_name` VARCHAR(255) NOT NULL COMMENT '商机标题或项目名称',
`estimated_amount` DECIMAL(15,2) NOT NULL COMMENT '预估成交金额,必填字段',
`current_stage` VARCHAR(50) NOT NULL COMMENT '当前所处的销售阶段,必填字段',
`expected_close_date` DATE NOT NULL COMMENT '预计成交日期,必填字段',
`source_type` VARCHAR(20) NOT NULL DEFAULT 'manual' COMMENT 'manual=手动录入, lead=线索转化',
`owner_id` VARCHAR(32) NOT NULL COMMENT '负责该商机的销售人员ID',
`owner_name` VARCHAR(100) NOT NULL COMMENT '负责该商机的销售人员姓名',
`region` VARCHAR(100) COMMENT '商机所属区域,用于分析筛选',
`description` TEXT COMMENT '商机详细描述信息',
`probability` FLOAT(5,2) NOT NULL DEFAULT '0.00' COMMENT '基于历史转化率计算的成交概率百分比',
`predicted_revenue` DECIMAL(15,2) NOT NULL DEFAULT '0.00' COMMENT '基于成交概率计算的预测收入',
`created_at` TIMESTAMP NOT NULL,
`updated_at` TIMESTAMP NOT NULL,
`status` VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT 'active=活跃, won=已成交, lost=已丢失, closed=已关闭',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商机表';
CREATE INDEX `idx_opportunities_customer` ON `opportunities` (`customer_id`);
CREATE INDEX `idx_opportunities_owner` ON `opportunities` (`owner_id`);
CREATE INDEX `idx_opportunities_stage` ON `opportunities` (`current_stage`);
CREATE INDEX `idx_opportunities_region` ON `opportunities` (`region`);
CREATE INDEX `idx_opportunities_status` ON `opportunities` (`status`);
CREATE INDEX `idx_opportunities_expected_close` ON `opportunities` (`expected_close_date`);
-- Table from opportunity_predictions.json
CREATE TABLE IF NOT EXISTS `opportunity_predictions` (
`id` VARCHAR(32) NOT NULL COMMENT '主键 - UUID格式',
`opportunity_id` VARCHAR(32) NOT NULL COMMENT '关联的商机ID',
`predicted_amount` DECIMAL(15,2) NOT NULL DEFAULT '0.00' COMMENT '基于历史转化率计算的预测成交金额',
`confidence_level` DECIMAL(5,4) NOT NULL DEFAULT '0.0000' COMMENT '预测的置信度0-1',
`prediction_date` DATE NOT NULL COMMENT '预测生成日期',
`actual_amount` DECIMAL(15,2) COMMENT '实际成交金额(成交后更新)',
`deviation_rate` DECIMAL(5,4) COMMENT '预测与实际的偏差率',
`created_at` TIMESTAMP NOT NULL COMMENT '记录创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商机预测表';
CREATE UNIQUE INDEX `idx_predictions_opportunity` ON `opportunity_predictions` (`opportunity_id`, `prediction_date`);
CREATE INDEX `idx_predictions_date` ON `opportunity_predictions` (`prediction_date`);
-- Table from opportunity_stage_history.json
CREATE TABLE IF NOT EXISTS `opportunity_stage_history` (
`id` VARCHAR(32) NOT NULL COMMENT '主键 - UUID格式',
`opportunity_id` VARCHAR(32) NOT NULL COMMENT '关联的商机ID',
`from_stage` VARCHAR(50) COMMENT '变更前的销售阶段',
`to_stage` VARCHAR(50) NOT NULL COMMENT '变更后的销售阶段',
`change_reason` TEXT NOT NULL COMMENT '阶段变更的原因说明,必填字段',
`changed_by_id` VARCHAR(32) NOT NULL COMMENT '执行阶段变更的用户ID',
`changed_by_name` VARCHAR(100) NOT NULL COMMENT '执行阶段变更的用户姓名',
`changed_at` TIMESTAMP NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商机阶段变更历史表';
CREATE INDEX `idx_stage_history_opportunity` ON `opportunity_stage_history` (`opportunity_id`);
CREATE INDEX `idx_stage_history_changed_by` ON `opportunity_stage_history` (`changed_by_id`);
CREATE INDEX `idx_stage_history_changed_at` ON `opportunity_stage_history` (`changed_at`);
-- Table from sales_stages.json
CREATE TABLE IF NOT EXISTS `sales_stages` (
`id` VARCHAR(32) NOT NULL COMMENT '主键 - UUID格式',
`stage_name` VARCHAR(100) NOT NULL COMMENT '销售阶段名称,如\'\'、\'\'',
`stage_order` INT NOT NULL COMMENT '阶段在销售漏斗中的顺序,从小到大',
`conversion_rate` FLOAT(5,2) NOT NULL DEFAULT '0.00' COMMENT '该阶段到下一阶段的历史平均转化率',
`is_won_stage` VARCHAR(5) NOT NULL DEFAULT 'no' COMMENT 'yes=成交阶段, no=非成交阶段',
`is_lost_stage` VARCHAR(5) NOT NULL DEFAULT 'no' COMMENT 'yes=丢失阶段, no=非丢失阶段',
`created_at` TIMESTAMP NOT NULL,
`updated_at` TIMESTAMP NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='销售阶段配置表';
CREATE UNIQUE INDEX `idx_sales_stages_order` ON `sales_stages` (`stage_order`);
CREATE UNIQUE INDEX `idx_sales_stages_name` ON `sales_stages` (`stage_name`);