- 商机管理页面: - 实现crmStats真实数据计算(商机总数、金额、本月赢单、转化率) - 添加环比变化率计算功能 - 修复金额字段类型转换问题(字符串转数字) - 完善Pipeline View阶段过滤和列显示 - 添加商机搜索、详情查看、编辑和删除功能 - 后端改造: - 移除线索转化自动创建商机的逻辑(业务流程修正) - 新增经销商选择器API(/crm/dealer/portal/select) - 实现经销商列表查询接口 - 新增50条商机测试数据SQL脚本 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
121 lines
15 KiB
SQL
121 lines
15 KiB
SQL
-- CRM商机测试数据生成脚本
|
||
-- 使用方法: docker exec -i hzhub-mysql mysql -uroot -phzhub123 hzhub < test_opportunity_data.sql
|
||
|
||
-- ========================================
|
||
-- 1. 先创建经销商测试数据(如果需要)
|
||
-- ========================================
|
||
|
||
-- 使用INSERT IGNORE避免重复插入
|
||
INSERT IGNORE INTO crm_dealer (dealer_id, tenant_id, dealer_name, dealer_code, contact_name, mobile, province, city, level, lifecycle, owner_user_id, create_by, create_time, del_flag)
|
||
VALUES
|
||
(1001, '000000', '华东商贸有限公司', 'DL001', '张经理', '13800001001', '上海', '上海', 'A', 'active', 1, 1, NOW(), 0),
|
||
(1002, '000000', '华南供应链集团', 'DL002', '李总监', '13800001002', '广东', '广州', 'A', 'active', 1, 1, NOW(), 0),
|
||
(1003, '000000', '北方商贸股份', 'DL003', '王总', '13800001003', '北京', '北京', 'B', 'active', 2, 1, NOW(), 0),
|
||
(1004, '000000', '西南贸易公司', 'DL004', '陈经理', '13800001004', '四川', '成都', 'B', 'active', 2, 1, NOW(), 0),
|
||
(1005, '000000', '东北经销中心', 'DL005', '刘主管', '13800001005', '辽宁', '沈阳', 'C', 'active', 3, 1, NOW(), 0),
|
||
(1006, '000000', '中部物流商贸', 'DL006', '赵经理', '13800001006', '湖北', '武汉', 'B', 'active', 1, 1, NOW(), 0),
|
||
(1007, '000000', '沿海贸易集团', 'DL007', '孙总', '13800001007', '浙江', '杭州', 'A', 'active', 2, 1, NOW(), 0),
|
||
(1008, '000000', '西部商贸公司', 'DL008', '周经理', '13800001008', '陕西', '西安', 'C', 'active', 3, 1, NOW(), 0),
|
||
(1009, '000000', '南方快销商贸', 'DL009', '吴主管', '13800001009', '福建', '厦门', 'B', 'active', 1, 1, NOW(), 0),
|
||
(1010, '000000', '京津冀经销站', 'DL010', '郑经理', '13800001010', '河北', '石家庄', 'C', 'active', 2, 1, NOW(), 0);
|
||
|
||
-- ========================================
|
||
-- 2. 创建50条商机测试数据
|
||
-- ========================================
|
||
|
||
-- lead阶段 - 15条(线索阶段,新商机)
|
||
INSERT IGNORE INTO crm_opportunity (opportunity_id, tenant_id, dealer_id, opportunity_name, stage, amount, probability, expected_close_date, owner_user_id, product_name, description, status, create_by, create_time, update_by, update_time, del_flag)
|
||
VALUES
|
||
(2001, '000000', 1001, '首批进货合作意向', 'lead', 50000.00, 10, DATE_ADD(NOW(), INTERVAL 90 DAY), 1, '智能货架系统', '客户对智能货架产品有兴趣,初步接触阶段', 'active', 1, DATE_ADD(NOW(), INTERVAL -5 DAY), 1, NOW(), 0),
|
||
(2002, '000000', 1002, '季度采购计划', 'lead', 120000.00, 10, DATE_ADD(NOW(), INTERVAL 85 DAY), 2, '仓储管理软件', '大型经销商季度采购需求', 'active', 1, DATE_ADD(NOW(), INTERVAL -3 DAY), 1, NOW(), 0),
|
||
(2003, '000000', 1003, '新品推广合作', 'lead', 35000.00, 10, DATE_ADD(NOW(), INTERVAL 80 DAY), 1, '营销推广服务', '新品上市推广合作意向', 'active', 2, NOW(), 2, NOW(), 0),
|
||
(2004, '000000', 1004, '门店升级项目', 'lead', 85000.00, 10, DATE_ADD(NOW(), INTERVAL 75 DAY), 2, '门店装修方案', '门店形象升级需求', 'active', 2, DATE_ADD(NOW(), INTERVAL -2 DAY), 2, NOW(), 0),
|
||
(2005, '000000', 1005, '区域代理申请', 'lead', 20000.00, 10, DATE_ADD(NOW(), INTERVAL 70 DAY), 3, '区域代理权', '申请区域代理资格', 'active', 3, NOW(), 3, NOW(), 0),
|
||
(2006, '000000', 1006, '物流系统对接', 'lead', 150000.00, 10, DATE_ADD(NOW(), INTERVAL 95 DAY), 1, '物流追踪系统', '物流管理系统对接需求', 'active', 1, DATE_ADD(NOW(), INTERVAL -7 DAY), 1, NOW(), 0),
|
||
(2007, '000000', 1007, '年度框架协议', 'lead', 300000.00, 10, DATE_ADD(NOW(), INTERVAL 100 DAY), 2, '综合服务包', '年度合作协议框架', 'active', 2, DATE_ADD(NOW(), INTERVAL -4 DAY), 2, NOW(), 0),
|
||
(2008, '000000', 1008, '本地化服务需求', 'lead', 45000.00, 10, DATE_ADD(NOW(), INTERVAL 65 DAY), 3, '本地运营支持', '本地化运营服务需求', 'active', 3, NOW(), 3, NOW(), 0),
|
||
(2009, '000000', 1009, '电商渠道拓展', 'lead', 75000.00, 10, DATE_ADD(NOW(), INTERVAL 60 DAY), 1, '电商平台对接', '电商销售渠道拓展', 'active', 1, DATE_ADD(NOW(), INTERVAL -1 DAY), 1, NOW(), 0),
|
||
(2010, '000000', 1010, '冷链仓储合作', 'lead', 180000.00, 10, DATE_ADD(NOW(), INTERVAL 88 DAY), 2, '冷链解决方案', '冷链仓储需求', 'active', 2, NOW(), 2, NOW(), 0),
|
||
(2011, '000000', 1001, '二次采购意向', 'lead', 60000.00, 10, DATE_ADD(NOW(), INTERVAL 92 DAY), 1, '货架配件', '已有合作客户追加采购', 'active', 1, NOW(), 1, NOW(), 0),
|
||
(2012, '000000', 1003, '促销活动支持', 'lead', 25000.00, 10, DATE_ADD(NOW(), INTERVAL 55 DAY), 2, '促销策划服务', '促销活动策划需求', 'active', 2, DATE_ADD(NOW(), INTERVAL -6 DAY), 2, NOW(), 0),
|
||
(2013, '000000', 1005, '培训服务需求', 'lead', 15000.00, 10, DATE_ADD(NOW(), INTERVAL 50 DAY), 3, '员工培训课程', '员工技能培训需求', 'active', 3, NOW(), 3, NOW(), 0),
|
||
(2014, '000000', 1007, '数据分析服务', 'lead', 40000.00, 10, DATE_ADD(NOW(), INTERVAL 45 DAY), 1, 'BI数据分析', '销售数据分析服务', 'active', 1, DATE_ADD(NOW(), INTERVAL -8 DAY), 1, NOW(), 0),
|
||
(2015, '000000', 1009, '客户管理系统', 'lead', 95000.00, 10, DATE_ADD(NOW(), INTERVAL 58 DAY), 2, 'CRM系统定制', '客户管理需求', 'active', 2, NOW(), 2, NOW(), 0);
|
||
|
||
-- negotiation阶段 - 15条(谈判中)
|
||
INSERT IGNORE INTO crm_opportunity (opportunity_id, tenant_id, dealer_id, opportunity_name, stage, amount, probability, expected_close_date, owner_user_id, product_name, description, status, create_by, create_time, update_by, update_time, del_flag)
|
||
VALUES
|
||
(2016, '000000', 1001, '大批量采购谈判', 'negotiation', 280000.00, 30, DATE_ADD(NOW(), INTERVAL 60 DAY), 1, '智能货架批量', '批量采购价格谈判', 'active', 1, DATE_ADD(NOW(), INTERVAL -20 DAY), 1, NOW(), 0),
|
||
(2017, '000000', 1002, '系统集成方案', 'negotiation', 450000.00, 30, DATE_ADD(NOW(), INTERVAL 55 DAY), 2, '全系统集成', '系统集成方案谈判', 'active', 2, DATE_ADD(NOW(), INTERVAL -18 DAY), 2, NOW(), 0),
|
||
(2018, '000000', 1003, '品牌合作推广', 'negotiation', 120000.00, 30, DATE_ADD(NOW(), INTERVAL 50 DAY), 1, '品牌联合推广', '品牌推广合作谈判', 'active', 1, DATE_ADD(NOW(), INTERVAL -15 DAY), 1, NOW(), 0),
|
||
(2019, '000000', 1004, '区域扩展计划', 'negotiation', 200000.00, 30, DATE_ADD(NOW(), INTERVAL 48 DAY), 2, '区域扩张服务', '区域扩展方案谈判', 'active', 2, DATE_ADD(NOW(), INTERVAL -12 DAY), 2, NOW(), 0),
|
||
(2020, '000000', 1005, '年度供货协议', 'negotiation', 350000.00, 30, DATE_ADD(NOW(), INTERVAL 45 DAY), 3, '年度供货合同', '年度协议谈判', 'active', 3, DATE_ADD(NOW(), INTERVAL -10 DAY), 3, NOW(), 0),
|
||
(2021, '000000', 1006, '智慧门店方案', 'negotiation', 180000.00, 30, DATE_ADD(NOW(), INTERVAL 42 DAY), 1, '智慧门店系统', '智慧门店方案谈判', 'active', 1, DATE_ADD(NOW(), INTERVAL -25 DAY), 1, NOW(), 0),
|
||
(2022, '000000', 1007, '营销自动化', 'negotiation', 95000.00, 30, DATE_ADD(NOW(), INTERVAL 40 DAY), 2, '营销自动化工具', '营销工具采购谈判', 'active', 2, DATE_ADD(NOW(), INTERVAL -22 DAY), 2, NOW(), 0),
|
||
(2023, '000000', 1008, '供应链优化', 'negotiation', 250000.00, 30, DATE_ADD(NOW(), INTERVAL 38 DAY), 3, '供应链优化方案', '供应链优化谈判', 'active', 3, DATE_ADD(NOW(), INTERVAL -19 DAY), 3, NOW(), 0),
|
||
(2024, '000000', 1009, '电商运营合作', 'negotiation', 150000.00, 30, DATE_ADD(NOW(), INTERVAL 35 DAY), 1, '电商运营服务', '电商运营合作谈判', 'active', 1, DATE_ADD(NOW(), INTERVAL -16 DAY), 1, NOW(), 0),
|
||
(2025, '000000', 1010, '仓储物流升级', 'negotiation', 320000.00, 30, DATE_ADD(NOW(), INTERVAL 33 DAY), 2, '仓储升级方案', '仓储升级谈判', 'active', 2, DATE_ADD(NOW(), INTERVAL -14 DAY), 2, NOW(), 0),
|
||
(2026, '000000', 1002, '增值服务采购', 'negotiation', 80000.00, 30, DATE_ADD(NOW(), INTERVAL 30 DAY), 2, '增值服务包', '增值服务采购谈判', 'active', 2, DATE_ADD(NOW(), INTERVAL -28 DAY), 2, NOW(), 0),
|
||
(2027, '000000', 1004, '定制开发需求', 'negotiation', 220000.00, 30, DATE_ADD(NOW(), INTERVAL 28 DAY), 1, '定制开发服务', '定制开发方案谈判', 'active', 1, DATE_ADD(NOW(), INTERVAL -21 DAY), 1, NOW(), 0),
|
||
(2028, '000000', 1006, '设备租赁合作', 'negotiation', 65000.00, 30, DATE_ADD(NOW(), INTERVAL 26 DAY), 3, '设备租赁方案', '设备租赁谈判', 'active', 3, DATE_ADD(NOW(), INTERVAL -17 DAY), 3, NOW(), 0),
|
||
(2029, '000000', 1008, '数据服务合作', 'negotiation', 100000.00, 30, DATE_ADD(NOW(), INTERVAL 24 DAY), 2, '数据分析服务', '数据服务谈判', 'active', 2, DATE_ADD(NOW(), INTERVAL -11 DAY), 2, NOW(), 0),
|
||
(2030, '000000', 1010, '技术支持服务', 'negotiation', 55000.00, 30, DATE_ADD(NOW(), INTERVAL 22 DAY), 1, '技术支持包', '技术支持谈判', 'active', 1, DATE_ADD(NOW(), INTERVAL -9 DAY), 1, NOW(), 0);
|
||
|
||
-- proposal阶段 - 12条(方案阶段)
|
||
INSERT IGNORE INTO crm_opportunity (opportunity_id, tenant_id, dealer_id, opportunity_name, stage, amount, probability, expected_close_date, owner_user_id, product_name, description, status, create_by, create_time, update_by, update_time, del_flag)
|
||
VALUES
|
||
(2031, '000000', 1001, '大型项目方案', 'proposal', 580000.00, 50, DATE_ADD(NOW(), INTERVAL 30 DAY), 1, '全链条解决方案', '已提交方案等待审批', 'active', 1, DATE_ADD(NOW(), INTERVAL -35 DAY), 1, NOW(), 0),
|
||
(2032, '000000', 1002, '年度战略合作', 'proposal', 850000.00, 50, DATE_ADD(NOW(), INTERVAL 28 DAY), 2, '战略合作方案', '方案已提交等待确认', 'active', 2, DATE_ADD(NOW(), INTERVAL -32 DAY), 2, NOW(), 0),
|
||
(2033, '000000', 1003, '智慧零售方案', 'proposal', 380000.00, 50, DATE_ADD(NOW(), INTERVAL 25 DAY), 1, '智慧零售系统', '方案评审中', 'active', 1, DATE_ADD(NOW(), INTERVAL -30 DAY), 1, NOW(), 0),
|
||
(2034, '000000', 1004, '区域代理方案', 'proposal', 250000.00, 50, DATE_ADD(NOW(), INTERVAL 23 DAY), 2, '代理合作方案', '代理方案已提交', 'active', 2, DATE_ADD(NOW(), INTERVAL -27 DAY), 2, NOW(), 0),
|
||
(2035, '000000', 1005, '仓储改造方案', 'proposal', 420000.00, 50, DATE_ADD(NOW(), INTERVAL 20 DAY), 3, '仓储改造计划', '改造方案等待审批', 'active', 3, DATE_ADD(NOW(), INTERVAL -25 DAY), 3, NOW(), 0),
|
||
(2036, '000000', 1006, '品牌升级方案', 'proposal', 180000.00, 50, DATE_ADD(NOW(), INTERVAL 18 DAY), 1, '品牌升级服务', '品牌方案评审中', 'active', 1, DATE_ADD(NOW(), INTERVAL -40 DAY), 1, NOW(), 0),
|
||
(2037, '000000', 1007, '营销整合方案', 'proposal', 320000.00, 50, DATE_ADD(NOW(), INTERVAL 15 DAY), 2, '营销整合服务', '营销方案已提交', 'active', 2, DATE_ADD(NOW(), INTERVAL -38 DAY), 2, NOW(), 0),
|
||
(2038, '000000', 1008, '供应链方案', 'proposal', 450000.00, 50, DATE_ADD(NOW(), INTERVAL 12 DAY), 3, '供应链整合', '供应链方案等待审批', 'active', 3, DATE_ADD(NOW(), INTERVAL -36 DAY), 3, NOW(), 0),
|
||
(2039, '000000', 1009, '电商平台方案', 'proposal', 280000.00, 50, DATE_ADD(NOW(), INTERVAL 10 DAY), 1, '电商全案', '电商方案评审中', 'active', 1, DATE_ADD(NOW(), INTERVAL -33 DAY), 1, NOW(), 0),
|
||
(2040, '000000', 1010, '物流优化方案', 'proposal', 350000.00, 50, DATE_ADD(NOW(), INTERVAL 8 DAY), 2, '物流优化服务', '物流方案已提交', 'active', 2, DATE_ADD(NOW(), INTERVAL -29 DAY), 2, NOW(), 0),
|
||
(2041, '000000', 1003, '培训体系建设', 'proposal', 120000.00, 50, DATE_ADD(NOW(), INTERVAL 15 DAY), 1, '培训体系建设', '培训方案等待审批', 'active', 1, DATE_ADD(NOW(), INTERVAL -42 DAY), 1, NOW(), 0),
|
||
(2042, '000000', 1007, '客户运营方案', 'proposal', 200000.00, 50, DATE_ADD(NOW(), INTERVAL 12 DAY), 2, '客户运营服务', '运营方案评审中', 'active', 2, DATE_ADD(NOW(), INTERVAL -44 DAY), 2, NOW(), 0);
|
||
|
||
-- closing阶段 - 8条(赢单阶段,本月和上月分布)
|
||
INSERT IGNORE INTO crm_opportunity (opportunity_id, tenant_id, dealer_id, opportunity_name, stage, amount, probability, expected_close_date, owner_user_id, product_name, description, status, create_by, create_time, update_by, update_time, del_flag)
|
||
VALUES
|
||
(2043, '000000', 1001, '首批进货合同', 'closing', 680000.00, 90, DATE_ADD(NOW(), INTERVAL 5 DAY), 1, '智能货架系统', '合同已签订,准备执行', 'active', 1, DATE_ADD(NOW(), INTERVAL -45 DAY), 1, NOW(), 0),
|
||
(2044, '000000', 1002, '年度框架合同', 'closing', 1200000.00, 90, NOW(), 2, '综合服务包', '年度合同已签订', 'active', 2, DATE_ADD(NOW(), INTERVAL -50 DAY), 2, NOW(), 0),
|
||
(2045, '000000', 1003, '区域代理合同', 'closing', 350000.00, 90, DATE_ADD(NOW(), INTERVAL -3 DAY), 1, '区域代理权', '代理合同已签订', 'active', 1, DATE_ADD(NOW(), INTERVAL -48 DAY), 1, NOW(), 0),
|
||
(2046, '000000', 1004, '仓储改造合同', 'closing', 520000.00, 90, DATE_ADD(NOW(), INTERVAL -7 DAY), 2, '仓储改造计划', '改造合同已签订', 'active', 2, DATE_ADD(NOW(), INTERVAL -52 DAY), 2, NOW(), 0),
|
||
-- 上月赢单(用于计算环比)
|
||
(2047, '000000', 1005, '上月签约项目A', 'closing', 450000.00, 90, DATE_ADD(NOW(), INTERVAL -35 DAY), 3, '物流方案', '上月赢单案例', 'active', 3, DATE_ADD(NOW(), INTERVAL -55 DAY), 3, NOW(), 0),
|
||
(2048, '000000', 1006, '上月签约项目B', 'closing', 280000.00, 90, DATE_ADD(NOW(), INTERVAL -38 DAY), 1, '营销服务', '上月赢单案例', 'active', 1, DATE_ADD(NOW(), INTERVAL -58 DAY), 1, NOW(), 0),
|
||
(2049, '000000', 1007, '上月签约项目C', 'closing', 380000.00, 90, DATE_ADD(NOW(), INTERVAL -40 DAY), 2, '数据服务', '上月赢单案例', 'active', 2, DATE_ADD(NOW(), INTERVAL -62 DAY), 2, NOW(), 0),
|
||
(2050, '000000', 1008, '上月签约项目D', 'closing', 150000.00, 90, DATE_ADD(NOW(), INTERVAL -42 DAY), 3, '培训服务', '上月赢单案例', 'active', 3, DATE_ADD(NOW(), INTERVAL -65 DAY), 3, NOW(), 0);
|
||
|
||
-- ========================================
|
||
-- 3. 验证数据插入结果
|
||
-- ========================================
|
||
SELECT '=== 各阶段商机统计 ===' as title;
|
||
SELECT
|
||
stage,
|
||
COUNT(*) as count,
|
||
SUM(amount) as total_amount,
|
||
ROUND(AVG(amount), 2) as avg_amount
|
||
FROM crm_opportunity
|
||
WHERE del_flag = 0
|
||
GROUP BY stage
|
||
ORDER BY FIELD(stage, 'lead', 'negotiation', 'proposal', 'closing');
|
||
|
||
SELECT '=== 赢单月度统计 ===' as title;
|
||
SELECT
|
||
CASE
|
||
WHEN MONTH(create_time) = MONTH(NOW()) AND YEAR(create_time) = YEAR(NOW()) THEN '本月'
|
||
WHEN MONTH(create_time) = MONTH(DATE_SUB(NOW(), INTERVAL 1 MONTH)) AND YEAR(create_time) = YEAR(DATE_SUB(NOW(), INTERVAL 1 MONTH)) THEN '上月'
|
||
ELSE '其他'
|
||
END as month_period,
|
||
COUNT(*) as win_count,
|
||
SUM(amount) as win_amount
|
||
FROM crm_opportunity
|
||
WHERE stage = 'closing' AND del_flag = 0
|
||
GROUP BY month_period;
|
||
|
||
SELECT '=== 经销商数据确认 ===' as title;
|
||
SELECT dealer_id, dealer_name, dealer_code FROM crm_dealer WHERE del_flag = 0 LIMIT 10; |