拓客驾驶舱需求文档.md 28.7 KB

拓客驾驶舱需求文档

📋 文档说明

  • 创建日期: 2025-01-XX
  • 版本: v1.3
  • 状态: 业务规则已确认,待开发
  • 目标: 基于现有拓客报表页面(lqTkjlb/report),设计并实现一个功能完整的拓客驾驶舱

✅ 已确认的业务规则

  1. 大单标准: 开单金额(sfyj 实付业绩)> 10000 元(不含等于)
  2. 到店定义: 使用耗卡记录(lq_xh_hyhk)判断,存在有效耗卡记录即视为到店
  3. 团队显示: 仅当活动类型为"全员拓客"(EventType=3)时显示团队相关字段和统计,日常拓客(EventType=1)无团队概念
  4. 时间范围: 选择拓客活动后,时间范围自动填充为该活动的开始和结束时间
  5. 门店筛选: 不提供门店筛选功能,数据按活动范围统计所有门店

一、现有功能梳理

1.1 现有报表页面统计内容(参考 lqTkjlb/report

📊 团队数据报表

  • 参与门店数
  • 参与战队数
  • 参与人员数
  • 总拓客数

🏆 门店排行榜

  • 目标张数
  • 完成张数(总张数)
  • 完成率
  • 排名

👥 个人排行榜

  • 员工姓名
  • 所属门店
  • 所属团队
  • 个人目标
  • 完成数量
  • 完成率

❌ 未拓客人员

  • 姓名
  • 门店
  • 团队
  • 个人目标
  • 完成数量(0)
  • 完成率
  • 最后拓客时间

📈 到店情况(漏斗数据)

  • 拓客数量: 拓客总人数
  • 邀约数量: 邀约总人数
  • 预约数量: 预约总人数
  • 开单数量: 开单总人数
  • 耗卡数量: 耗卡总人数
  • 耗卡金额: 耗卡总金额
  • 开单金额: 开单总金额
  • 到店率: 耗卡数量 / 拓客数量 × 100%
  • 成交率: 开单数量 / 耗卡数量 × 100%
  • 预约转化率: 预约数量 / 拓客数量 × 100%
  • 耗卡转化率: 耗卡数量 / 预约数量 × 100%

👤 员工统计

  • 员工姓名
  • 部门名称
  • 岗位
  • 拓客人数
  • 到店人数
  • 开单人数
  • 开单金额
  • 到店率: 到店人数 / 拓客人数 × 100%
  • 开单率: 开单人数 / 到店人数 × 100%

二、新增需求

2.1 大单统计(核心新增功能)

2.1.1 大单定义

  • 标准: 开单金额(lq_kd_kdjlb.sfyj 实付业绩)> 10000 元(不含等于)
  • 判断条件: sfyj > 10000
  • 统计维度:
    • 按拓客活动统计
    • 按门店统计
    • 按拓客人员统计
    • 按时间范围统计

2.1.2 大单统计指标

  • 大单数量: 开单金额 > 10000 的订单数量
  • 大单金额: 大单订单总金额
  • 大单平均金额: 大单金额 / 大单数量
  • 大单占比: 大单数量 / 总开单数量 × 100%
  • 大单金额占比: 大单金额 / 总开单金额 × 100%
  • 大单转化率: 大单数量 / 拓客人数 × 100%
  • 大单到店转化率: 大单数量 / 到店人数 × 100%

2.1.3 大单明细列表

  • 顾客姓名
  • 顾客手机号
  • 拓客人员姓名
  • 拓客时间
  • 开单时间
  • 开单金额
  • 开单门店
  • 项目明细(可选)

2.2 拓客人员参与统计(核心新增功能)

2.2.1 统计内容

  • 参与拓客人员列表:
    • 员工姓名
    • 部门名称
    • 岗位
    • 所属门店
    • 所属团队(仅在活动类型为"全员拓客"时显示,日常拓客无团队概念)
    • 拓客人数(该人员拓客的顾客总数,去重)
    • 拓客张数(该人员拓客的购买张数总和)
    • 到店人数(该人员拓客的顾客中,到店人数)
    • 到店率(到店人数 / 拓客人数 × 100%)
    • 开单人数(该人员拓客的顾客中,开单人数)
    • 开单金额(该人员拓客的顾客中,开单总金额)
    • 开单转化率(开单人数 / 拓客人数 × 100%)
    • 大单数量(该人员拓客的顾客中,大单数量)
    • 大单金额(该人员拓客的顾客中,大单总金额)

2.2.2 数据来源

  • 拓客记录表: lq_tkjlb
    • F_ExpansionUserId: 拓客人员ID
    • F_MemberId: 会员ID
    • F_BuyNumber: 购买张数
  • 开单记录表: lq_kd_kdjlb
    • kdhy: 开单会员ID(关联 lq_tkjlb.F_MemberId
    • sfyj: 实付业绩(用于判断大单)
  • 耗卡记录表: lq_xh_hyhk
    • hyzh: 会员账号(关联 lq_tkjlb.F_MemberId
  • 预约记录表: lq_yyjl
    • gk: 顾客ID(关联 lq_tkjlb.F_MemberId

2.3 到店转化分析(增强现有功能)

2.3.1 到店定义(已确认)

  • 定义: 有耗卡记录即视为到店
  • 判断条件: 在 lq_xh_hyhk 表中存在记录,且 F_IsEffective = 1
  • 关联字段: lq_tkjlb.F_MemberId = lq_xh_hyhk.hyzh
  • 说明: 耗卡记录代表客户实际到店并进行了消费,是最准确的到店判断标准

2.3.2 到店率计算(基于耗卡记录)

  • 到店人数定义: 在指定时间范围内,有耗卡记录的拓客客户数(按 F_MemberId 去重)
  • 整体到店率: 到店人数 / 拓客人数 × 100%
  • 门店到店率: 各门店的到店率(该门店拓客的客户中,有耗卡记录的比例)
  • 人员到店率: 各拓客人员的到店率(该人员拓客的客户中,有耗卡记录的比例)
  • 时间维度到店率: 按时间段的到店率趋势

2.3.3 到店时间分析(基于耗卡记录)

  • 首次到店时间: 客户首次耗卡的时间(lq_xh_hyhk.hksj 最小值)
  • 拓客到首次到店间隔: 拓客时间到首次耗卡时间的间隔(天数)
  • 拓客到首次到店间隔分布:
    • 1天内
    • 3天内
    • 7天内
    • 15天内
    • 30天内
    • 超过30天
  • 平均到店间隔天数: 所有有耗卡记录的客户的平均间隔天数

注意: 如果拓客时间晚于首次耗卡时间(异常情况),间隔天数记为0或负数,需要特别处理


三、可扩展统计维度(建议)

3.1 时间维度分析

3.1.1 拓客时间趋势

  • 按日期统计拓客人数
  • 按周统计拓客人数
  • 按月统计拓客人数
  • 拓客高峰时段分析

3.1.2 转化周期分析

  • 拓客到预约的平均时间
  • 拓客到到店的平均时间
  • 拓客到开单的平均时间
  • 到店到开单的平均时间
  • 不同转化周期的转化率对比

3.2 客户画像分析

3.2.1 新老客户分析

  • 新客户拓客数量
  • 老客户拓客数量
  • 新老客户到店率对比
  • 新老客户开单率对比
  • 新老客户大单率对比

3.2.2 客户来源分析

  • 不同拓客活动来源的客户数量
  • 不同来源客户的到店率
  • 不同来源客户的开单率
  • 不同来源客户的平均开单金额

3.3 门店对比分析

3.3.1 门店效能对比

  • 门店拓客效率排名
  • 门店到店率排名
  • 门店开单率排名
  • 门店大单率排名
  • 门店平均开单金额排名

3.3.2 门店转化漏斗

  • 各门店的完整转化漏斗(拓客→邀约→预约→到店→开单)
  • 各门店的转化瓶颈分析

3.4 项目分析

3.4.1 大单项目分析

  • 大单订单中的项目分布
  • 高价值项目列表
  • 项目与开单金额的关联度

3.4.2 项目转化分析

  • 不同项目的开单率
  • 不同项目的平均金额
  • 项目组合分析

3.5 团队效能分析(仅全员拓客活动)

3.5.1 团队对比

  • 适用范围: 仅当活动类型为"全员拓客"(EventType=3)时显示
  • 各团队的拓客数量
  • 各团队的到店率
  • 各团队的开单率
  • 各团队的大单率
  • 团队排名和对比

3.5.2 团队协作分析

  • 团队内成员的拓客贡献度
  • 团队拓客协作效果
  • 团队目标完成情况

注意: 日常拓客(EventType=1)无团队概念,不显示团队相关统计

3.6 流失分析

3.6.1 流失节点分析

  • 拓客未邀约数量及占比
  • 邀约未预约数量及占比
  • 预约未到店数量及占比
  • 到店未开单数量及占比

3.6.2 流失原因分析

  • 各流失节点的可能原因
  • 流失客户特征分析

3.7 支付方式分析

3.7.1 支付方式分布

  • 不同支付方式的开单数量
  • 不同支付方式的开单金额
  • 支付方式与客户类型的关系

3.8 复购分析

3.8.1 拓客客户复购统计

  • 拓客客户首次开单后的复购率
  • 拓客客户复购时间间隔
  • 拓客客户累计消费金额

3.9 业绩贡献分析

3.9.1 拓客业绩贡献

  • 拓客活动产生的总业绩
  • 拓客活动业绩占总业绩的比例
  • 拓客活动业绩趋势

3.9.2 ROI分析

  • 拓客活动成本(如果有)
  • 拓客活动投入产出比

3.10 购买张数分析

3.10.1 购买张数分布

  • 不同购买张数的客户数量分布(1张、2张、3-5张、6-10张、10张以上)
  • 购买张数与到店率的关系
  • 购买张数与开单率的关系
  • 购买张数与平均开单金额的关系

3.10.2 购买张数效能

  • 平均购买张数
  • 高购买张数客户的转化率
  • 购买张数TOP人员排名

3.11 加微信转化分析

3.11.1 微信添加统计

  • 加微信客户数量及占比(F_IsAddWeChat = "是")
  • 加微信与未加微信客户的到店率对比
  • 加微信与未加微信客户的开单率对比
  • 加微信转化率(加微信客户数 / 拓客人数)

3.11.2 微信添加效能

  • 加微信客户的平均到店间隔
  • 加微信客户的复购率
  • 各人员加微信转化率排名

3.12 支付方式分析

3.12.1 拓客支付方式分布

  • 不同支付方式的拓客数量(现金、微信、支付宝、银行卡等,基于 F_PaymentMethod
  • 不同支付方式的客户到店率
  • 不同支付方式的客户开单率
  • 不同支付方式的客户平均开单金额

3.13 客户类型分析

3.13.1 新老客户对比

  • 新客户(首次拓客)数量
  • 老客户(再次拓客)数量
  • 新老客户到店率对比
  • 新老客户开单率对比
  • 新老客户大单率对比
  • 二次拓客转化率

3.13.2 客户质量分析

  • 高价值客户识别(拓客后多次到店或高额开单)
  • 低质量客户识别(拓客后长期未到店)

3.14 部门/岗位效能分析

3.14.1 部门对比

  • 各部门的拓客人数
  • 各部门的到店率
  • 各部门的开单率
  • 各部门的平均开单金额
  • 各部门的大单率

3.14.2 岗位对比

  • 不同岗位的拓客效能
  • 岗位与拓客转化率的关系
  • 岗位排名分析

3.15 时段分析

3.15.1 拓客时段分布

  • 按小时统计拓客数量(识别拓客高峰时段)
  • 按星期统计拓客数量(识别拓客高峰日期)
  • 不同时段的拓客转化率
  • 时段与到店率的关系

3.15.2 转化周期时段分析

  • 不同时段的拓客到店间隔
  • 不同时段的拓客开单间隔

3.16 金三角分析(如有关联)

3.16.1 金三角效能

  • 各金三角的拓客数量
  • 各金三角的到店率
  • 各金三角的开单率
  • 金三角与拓客转化的关联度

3.17 推荐人分析(如有关联)

3.17.1 推荐人效能

  • 推荐人拓客数量
  • 推荐人拓客的转化率
  • 推荐人贡献度排名

3.18 拓客渠道分析

3.18.1 渠道效能对比

  • 不同拓客渠道的客户数量
  • 不同渠道的到店率
  • 不同渠道的开单率
  • 不同渠道的平均开单金额
  • 最优渠道识别

3.19 项目偏好分析(基于开单项目)

3.19.1 拓客客户项目偏好

  • 拓客客户最常购买的项目TOP10
  • 大单客户的项目偏好
  • 高转化率项目识别
  • 项目与客户类型的匹配度

3.20 地域/门店分布分析

3.20.1 门店效能对比(增强版)

  • 门店拓客人数排名
  • 门店到店率排名
  • 门店开单率排名
  • 门店大单率排名
  • 门店平均开单金额排名
  • 门店拓客成本效益分析

3.20.2 门店类型分析

  • 不同类型门店的拓客效能(如新店vs老店)
  • 门店规模与拓客转化率的关系

四、数据表结构

4.1 核心数据表

lq_tkjlb - 拓客记录表

  • F_Id: 拓客编号
  • F_ExpansionTime: 拓客时间
  • F_ExpansionUserId: 拓客人员ID
  • F_CustomerName: 顾客姓名
  • F_CustomerPhone: 顾客电话号码
  • F_BuyNumber: 购买张数
  • F_EventId: 拓客活动ID
  • F_StoreId: 所属门店ID
  • F_TeamName: 所属战队(仅在活动类型为"全员拓客"时有值
  • F_MemberId: 会员ID

lq_kd_kdjlb - 开单记录表

  • F_Id: 开单编号
  • kdhy: 开单会员ID(关联 lq_tkjlb.F_MemberId
  • kdhyc: 开单会员名称
  • kdrq: 开单日期
  • zdyj: 整单业绩
  • sfyj: 实付业绩(用于判断大单,> 10000)
  • djmd: 单据门店
  • F_IsEffective: 是否有效

lq_xh_hyhk - 耗卡记录表

  • F_Id: 耗卡编号
  • hyzh: 会员账号(关联 lq_tkjlb.F_MemberId
  • hksj: 耗卡时间
  • xfje: 消费金额
  • md: 门店ID
  • F_IsEffective: 是否有效

lq_yyjl - 预约记录表

  • F_Id: 预约编号
  • gk: 顾客ID(关联 lq_tkjlb.F_MemberId
  • yysj: 预约时间
  • F_Status: 预约状态("已确认"表示已到店)

lq_yaoyjl - 邀约记录表

  • F_Id: 邀约编号
  • yykh: 邀约客户(关联 lq_tkjlb.F_MemberId
  • yysj: 邀约时间

4.2 关联数据表

BASE_USER - 用户表

  • F_Id: 用户ID(关联 lq_tkjlb.F_ExpansionUserId
  • F_REALNAME: 真实姓名(拓客人员姓名)
  • F_MDID: 门店ID
  • F_ZW: 职位
  • OrganizeId: 部门ID

lq_mdxx - 门店信息表

  • F_Id: 门店ID
  • dm: 门店名称

lq_event - 拓客活动表

  • F_Id: 活动ID
  • F_EventName: 活动名称
  • F_EventType: 活动类型(1=日常拓客,3=全员拓客)
  • F_StartTime: 活动开始时间
  • F_EndTime: 活动结束时间

lq_eventuser - 拓客活动用户表

  • F_EventId: 拓客活动ID
  • F_UserId: 用户ID
  • F_DepId: 部门ID
  • F_TeamName: 战队名称(仅在活动类型为"全员拓客"时有值
  • F_StoreId: 门店ID
  • F_EventTarget: 拓客目标数量

五、接口设计

5.1 拓客驾驶舱统计接口

5.1.1 获取驾驶舱概览数据

GET /api/Extend/LqTkDashboard/GetOverview

请求参数:

{
  "eventId": "活动ID(必填)",
  "startTime": "2025-01-01",  // 当选择活动时,自动填充活动的开始时间
  "endTime": "2025-01-31"     // 当选择活动时,自动填充活动的结束时间
}

说明:

  • eventId: 必填,选择拓客活动后,时间范围会自动填充为该活动的开始和结束时间
  • startTime / endTime: 根据选择的活动自动填充,用户可手动调整
  • 不提供门店筛选功能,数据按活动范围统计所有门店

返回数据:

{
  "code": 200,
  "data": {
    "totalExpansionCount": 1000,      // 总拓客人数
    "totalVisitCount": 600,           // 总到店人数
    "totalBillingCount": 400,         // 总开单人数
    "totalBillingAmount": 5000000,    // 总开单金额
    "bigOrderCount": 50,              // 大单数量
    "bigOrderAmount": 800000,         // 大单金额
    "bigOrderAvgAmount": 16000,       // 大单平均金额
    "visitRate": 60.0,                // 整体到店率
    "billingRate": 66.67,             // 整体开单率
    "bigOrderRate": 5.0,              // 大单转化率
    "bigOrderAmountRate": 16.0,       // 大单金额占比
    "participantCount": 50,           // 参与拓客人员数
    "storeCount": 10                  // 参与门店数
  }
}

5.1.2 获取大单统计

GET /api/Extend/LqTkDashboard/GetBigOrderStatistics

请求参数:

{
  "eventId": "活动ID(必填)",
  "startTime": "2025-01-01",  // 自动填充活动开始时间
  "endTime": "2025-01-31"     // 自动填充活动结束时间
}

返回数据:

{
  "code": 200,
  "data": {
    "summary": {
      "bigOrderCount": 50,
      "bigOrderAmount": 800000,
      "bigOrderAvgAmount": 16000,
      "bigOrderRate": 5.0,
      "bigOrderAmountRate": 16.0,
      "bigOrderConversionRate": 5.0,
      "bigOrderVisitConversionRate": 8.33
    },
    "byStore": [
      {
        "storeId": "门店ID",
        "storeName": "门店名称",
        "bigOrderCount": 10,
        "bigOrderAmount": 150000,
        "bigOrderRate": 5.0
      }
    ],
    "byEmployee": [
      {
        "employeeId": "员工ID",
        "employeeName": "员工姓名",
        "bigOrderCount": 5,
        "bigOrderAmount": 80000,
        "bigOrderRate": 10.0
      }
    ],
    "details": [
      {
        "customerName": "顾客姓名",
        "customerPhone": "手机号",
        "expansionUserName": "拓客人员",
        "expansionTime": "2025-01-01",
        "billingTime": "2025-01-05",
        "billingAmount": 15000,
        "storeName": "门店名称",
        "items": ["项目1", "项目2"]
      }
    ]
  }
}

5.1.3 获取拓客人员参与统计

GET /api/Extend/LqTkDashboard/GetEmployeeParticipationStatistics

请求参数:

{
  "eventId": "活动ID(必填)",
  "startTime": "2025-01-01",  // 自动填充活动开始时间
  "endTime": "2025-01-31"     // 自动填充活动结束时间
}

返回数据:

{
  "code": 200,
  "data": [
    {
      "employeeId": "员工ID",
      "employeeName": "员工姓名",
      "departmentName": "部门名称",
      "position": "岗位",
      "storeId": "门店ID",
      "storeName": "门店名称",
      "teamName": "团队名称",  // 仅当活动类型为"全员拓客"时有值,日常拓客为null或空字符串
      "expansionCount": 100,              // 拓客人数
      "expansionCardCount": 150,          // 拓客张数
      "visitCount": 60,                   // 到店人数
      "visitRate": 60.0,                  // 到店率
      "billingCount": 40,                 // 开单人数
      "billingAmount": 500000,            // 开单金额
      "billingConversionRate": 40.0,      // 开单转化率
      "bigOrderCount": 5,                 // 大单数量
      "bigOrderAmount": 80000             // 大单金额
    }
  ]
}

5.1.4 获取到店转化分析

GET /api/Extend/LqTkDashboard/GetVisitConversionAnalysis

请求参数:

{
  "eventId": "活动ID(必填)",
  "startTime": "2025-01-01",  // 自动填充活动开始时间
  "endTime": "2025-01-31"     // 自动填充活动结束时间
}

返回数据:

{
  "code": 200,
  "data": {
    "overallVisitRate": 60.0,
    "averageVisitInterval": 7.5,         // 平均到店间隔(天)
    "visitIntervalDistribution": {
      "within1Day": 100,
      "within3Days": 200,
      "within7Days": 150,
      "within15Days": 100,
      "within30Days": 40,
      "over30Days": 10
    },
    "byStore": [
      {
        "storeId": "门店ID",
        "storeName": "门店名称",
        "visitRate": 65.0,
        "averageVisitInterval": 6.5
      }
    ],
    "byEmployee": [
      {
        "employeeId": "员工ID",
        "employeeName": "员工姓名",
        "visitRate": 70.0,
        "averageVisitInterval": 5.0
      }
    ]
  }
}

5.2 数据导出接口

5.2.1 导出大单明细

GET /api/Extend/LqTkDashboard/ExportBigOrderDetails

5.2.2 导出拓客人员统计

GET /api/Extend/LqTkDashboard/ExportEmployeeStatistics

六、前端页面设计

6.1 页面结构(不使用Tab切换)

拓客驾驶舱
├── 筛选条件区域(固定在顶部)
│   ├── 拓客活动选择(必填,下拉选择)
│   ├── 时间范围选择(自动填充活动开始/结束时间,可手动调整)
│   └── 查询按钮
│
├── 概览统计卡片区域(第一屏)
│   ├── 总拓客人数
│   ├── 总到店人数
│   ├── 总开单人数
│   ├── 总开单金额
│   ├── 大单数量
│   ├── 大单金额
│   ├── 整体到店率
│   └── 整体开单率
│
├── 大单统计区域(第二屏)
│   ├── 区域标题:"大单统计"
│   ├── 大单概览卡片(5个指标)
│   │   ├── 大单数量
│   │   ├── 大单金额
│   │   ├── 大单平均金额
│   │   ├── 大单转化率
│   │   └── 大单金额占比
│   ├── 大单分布图表(可选,横排显示)
│   │   ├── 按门店分布饼图
│   │   ├── 按人员分布柱状图
│   │   └── 大单金额分布柱状图
│   └── 大单明细列表
│       ├── 表格展示大单明细
│       ├── 支持按门店、人员、金额排序
│       └── 支持导出Excel
│
├── 拓客人员统计区域(第三屏)
│   ├── 区域标题:"拓客人员统计"
│   ├── 人员统计列表
│   │   ├── 表格展示所有参与拓客的人员及其统计数据
│   │   ├── 支持按拓客人数、到店率、开单率、大单数量排序
│   │   └── 支持导出Excel
│   └── 人员排名卡片(可选,横向展示)
│       ├── 拓客人数TOP10
│       ├── 到店率TOP10
│       ├── 开单率TOP10
│       └── 大单数量TOP10
│
├── 到店转化分析区域(第四屏)
│   ├── 区域标题:"到店转化分析"
│   ├── 到店率统计卡片
│   │   ├── 整体到店率
│   │   ├── 各门店到店率对比(表格或图表)
│   │   └── 各人员到店率对比(表格或图表)
│   └── 到店时间分析
│       ├── 到店间隔分布图
│       ├── 平均到店间隔
│       └── 到店时间趋势图
│
└── 其他统计区域(可选,按需展示)
    ├── 门店对比分析(可选)
    ├── 时间趋势分析(可选)
    ├── 流失分析(可选)
    └── 其他维度统计(可选)

页面布局说明

  • 不使用Tab切换,所有统计区域垂直排列,用户通过滚动查看不同区域
  • 每个统计区域使用清晰的标题分隔
  • 各区域之间使用适当的间距和分割线区分
  • 支持页面内锚点导航(可选),用户可快速跳转到指定区域
  • 筛选条件区域固定在顶部,方便用户随时修改筛选条件

6.2 大单统计区域

6.2.1 大单概览卡片

  • 大单数量
  • 大单金额
  • 大单平均金额
  • 大单转化率
  • 大单金额占比

6.2.2 大单分布图表(可选)

  • 按门店分布饼图
  • 按人员分布柱状图
  • 大单金额分布柱状图

布局建议:图表横向排列,每个图表占据1/3宽度

6.2.3 大单明细列表

  • 表格展示大单明细
  • 支持按门店、人员、金额排序
  • 支持导出Excel

6.3 拓客人员统计区域

6.3.1 人员统计列表

  • 表格展示所有参与拓客的人员及其统计数据
  • 支持按拓客人数、到店率、开单率、大单数量排序
  • 支持导出Excel

6.3.2 人员排名卡片(可选)

  • 拓客人数TOP10
  • 到店率TOP10
  • 开单率TOP10
  • 大单数量TOP10

布局建议:排名卡片横向排列,每个卡片显示TOP10列表

6.4 到店转化分析区域

6.4.1 到店率统计

  • 整体到店率(卡片形式展示)
  • 各门店到店率对比(表格或柱状图)
  • 各人员到店率对比(表格或柱状图)

6.4.2 到店时间分析

  • 到店间隔分布图(柱状图)
  • 平均到店间隔(卡片形式展示)
  • 到店时间趋势图(折线图)

布局建议:图表采用两列布局,左侧展示分布图,右侧展示趋势图,平均间隔显示在顶部


七、技术实现要点

7.1 大单判断逻辑(已确认)

// 大单定义:开单金额(实付业绩)> 10000(不含等于)
var bigOrderThreshold = 10000m;
var isBigOrder = kd.Sfyj > bigOrderThreshold;  // 严格大于,不含等于

// SQL查询示例
WHERE kd.sfyj > 10000 AND kd.F_IsEffective = 1

7.2 数据去重逻辑(已确认)

  • 拓客人数: 按 lq_tkjlb.F_MemberId 去重
  • 到店人数: 按 lq_tkjlb.F_MemberId 去重,且关联的 lq_xh_hyhk.hyzh 存在记录且 F_IsEffective = 1
  • 开单人数: 按 lq_tkjlb.F_MemberId 去重,且关联的 lq_kd_kdjlb.kdhy 存在记录且 sfyj > 0F_IsEffective = 1
  • 大单数量: 按开单记录统计(sfyj > 10000F_IsEffective = 1),不去重(一个客户可能有多个大单)

7.3 关联查询逻辑(已确认)

-- 拓客到开单关联(用于统计开单人数、开单金额、大单)
lq_tkjlb.F_MemberId = lq_kd_kdjlb.kdhy
WHERE lq_kd_kdjlb.F_IsEffective = 1

-- 拓客到耗卡关联(用于判断到店,已确认使用此方式)
lq_tkjlb.F_MemberId = lq_xh_hyhk.hyzh
WHERE lq_xh_hyhk.F_IsEffective = 1

-- 拓客到预约关联(可选,用于预约转化率统计)
lq_tkjlb.F_MemberId = lq_yyjl.gk
WHERE lq_yyjl.F_Status = '已确认'

-- 拓客人员信息关联
lq_tkjlb.F_ExpansionUserId = BASE_USER.F_Id

-- 大单判断(已确认标准)
lq_kd_kdjlb.sfyj > 10000  -- 严格大于,不含等于

7.4 团队字段显示逻辑(已确认)

// 判断活动类型
var eventType = event.EventType; // 1=日常拓客, 3=全员拓客

// 仅在全员拓客时显示团队字段
if (eventType == 3) // 全员拓客
{
    // 显示团队相关字段和统计
    // 从 lq_eventuser.F_TeamName 或 lq_tkjlb.F_TeamName 获取
}
else // 日常拓客
{
    // 不显示团队字段,团队相关统计隐藏
}

7.5 时间范围自动填充逻辑

// 前端:选择活动后自动填充时间
onEventChange(eventId) {
  const event = eventList.find(e => e.id === eventId);
  if (event) {
    this.queryParams.startTime = event.startTime;
    this.queryParams.endTime = event.endTime;
  }
}
// 后端:根据活动ID获取活动时间范围
var event = await _db.Queryable<LqEventEntity>()
    .Where(e => e.Id == eventId)
    .FirstAsync();

var startTime = event?.StartTime;
var endTime = event?.EndTime;

7.6 性能优化建议

  • 使用索引优化查询(F_MemberId, F_ExpansionUserId, F_EventId, kdhy, hyzh, F_EventType
  • 使用聚合查询减少数据库访问
  • 大数据量时考虑分页或缓存
  • 使用视图预计算常用统计数据
  • 根据活动类型动态构建查询(团队相关查询仅在全员拓客时执行)

八、开发优先级

8.1 第一优先级(必须实现)

  1. 大单统计功能

    • 大单概览统计
    • 大单明细列表
    • 大单导出功能
  2. 拓客人员参与统计

    • 人员统计列表
    • 人员数据导出
  3. 到店转化分析增强

    • 到店率计算优化
    • 到店时间分析

8.2 第二优先级(建议实现)

  1. 时间维度分析
  2. 门店对比分析
  3. 客户画像分析

8.3 第三优先级(可选实现)

  1. 流失分析
  2. 复购分析
  3. ROI分析

九、待讨论问题

9.1 业务规则确认(已确认)

  1. 大单标准: 已确认使用 > 10000 元作为大单标准(不含等于)
  2. 到店定义: 已确认使用 耗卡记录lq_xh_hyhk)来判断到店
  3. 团队显示: 已确认仅当活动类型为"全员拓客"(EventType=3)时显示团队相关字段和统计,日常拓客(EventType=1)无团队概念
  4. 时间范围: 已确认选择拓客活动后,时间范围自动填充为该活动的开始和结束时间,用户可手动调整
  5. 门店筛选: 已确认不提供门店筛选功能,数据按活动范围统计所有门店
  6. 权限控制: 是否需要按门店权限过滤数据?

9.2 数据展示确认

  1. 大单明细: 是否需要显示项目明细?如果需要,如何获取?
  2. 人员统计: 是否需要支持按部门、岗位筛选?
  3. 导出格式: Excel导出需要哪些字段?是否需要自定义格式?

9.3 功能扩展确认

  1. 图表展示: 是否需要可视化图表(如折线图、柱状图、饼图)?
  2. 对比分析: 是否需要支持多活动对比、多门店对比?
  3. 实时更新: 数据是否需要实时更新,还是定时刷新?

十、参考资料

10.1 现有代码参考

  • 前端页面: antis-ncc-admin/src/views/lqTkjlb/Report.vue
  • 后端服务: netcore/src/Modularity/Extend/NCC.Extend/LqTkjlbService.cs
  • 实体类: netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_tkjlb/LqTkjlbEntity.cs

10.2 数据库表

  • lq_tkjlb: 拓客记录表
  • lq_kd_kdjlb: 开单记录表
  • lq_xh_hyhk: 耗卡记录表
  • lq_yyjl: 预约记录表
  • lq_yaoyjl: 邀约记录表

📝 修改记录

日期 版本 修改内容 修改人
2025-01-XX v1.0 初始版本创建 -
2025-01-XX v1.1 确认大单标准(>10000)和到店定义(耗卡记录) -
2025-01-XX v1.2 确认团队显示规则(仅全员拓客)、时间自动填充、移除门店筛选,新增多维度统计建议 -
2025-01-XX v1.3 修改页面结构,不使用Tab切换,改为垂直滚动布局 -

文档状态: ✅ 业务规则已确认,待开发实施