店长三项指标统计表-逻辑梳理.md 14.4 KB

店长三项指标统计表 - 逻辑梳理

📋 需求概述

创建一个"店长三项指标统计表",用于统计和展示所有门店店长每月的底薪及三项指标的完成情况。

核心需求

  1. 统计维度:每个月、所有门店店长
  2. 统计内容
    • 底薪(固定底薪、实际底薪、考核扣款)
    • 三项指标的完成与否
    • 当月期初设定的目标
    • 完成度(实际值/目标值)
  3. 展示方式
    • ①当月全部店长的对比(横向对比)
    • ②一个店长全年数据(纵向趋势)

📊 三项指标定义

指标1:业绩考核

  • 目标值:门店生命线(F_StoreLifeline
  • 实际值:门店总业绩(F_StoreTotalPerformance = 开单业绩 - 退卡业绩)
  • 达标标准实际值 >= 目标值
  • 完成度实际值 / 目标值 × 100%
  • 数据来源
    • 目标值:lq_md_target.F_StoreLifeline(按门店ID和月份查询)
    • 实际值:lq_store_manager_salary_statistics.F_StoreTotalPerformance
    • 达标状态:lq_store_manager_salary_statistics.F_PerformanceReached("是"/"否")

指标2:人头考核

  • 目标值:门店人头目标(F_StoreHeadcountTarget
  • 实际值:进店消耗人数(F_HeadCount
  • 达标标准实际值 >= 目标值
  • 完成度实际值 / 目标值 × 100%
  • 数据来源
    • 目标值:lq_md_target.F_StoreHeadcountTarget(按门店ID和月份查询)
    • 实际值:lq_store_manager_salary_statistics.F_HeadCount
    • 达标状态:lq_store_manager_salary_statistics.F_HeadCountReached("是"/"否")

指标3:消耗考核

  • 目标值:门店消耗目标(F_StoreConsumeTarget
  • 实际值:门店消耗金额(F_StoreConsume
  • 达标标准实际值 >= 目标值
  • 完成度实际值 / 目标值 × 100%
  • 适用范围:仅老店考核,新店不考核此指标
  • 数据来源
    • 目标值:lq_md_target.F_StoreConsumeTarget(按门店ID和月份查询)
    • 实际值:lq_store_manager_salary_statistics.F_StoreConsume
    • 达标状态:lq_store_manager_salary_statistics.F_ConsumeReached("是"/"否")

💰 底薪计算逻辑

固定底薪

  • 金额:4000元(固定值)
  • 数据来源lq_store_manager_salary_statistics.F_BaseSalary

考核扣款

  • 老店:每个未达标指标扣除500元
  • 新店:每个未达标指标扣除800元
  • 计算公式 考核扣款 = 未达标指标数 × 扣款金额(500或800)
  • 数据来源
    • 未达标指标数:lq_store_manager_salary_statistics.F_UnreachedIndicatorCount
    • 考核扣款:lq_store_manager_salary_statistics.F_AssessmentDeduction

旗舰店负奖励

  • 金额:800元(仅旗舰店)
  • 判断标准F_StoreType = 2(StoreTypeEnum.旗舰店)
  • 数据来源lq_store_manager_salary_statistics.F_FlagshipStoreDeduction

实际底薪

  • 计算公式 实际底薪 = 固定底薪 - 考核扣款 - 旗舰店负奖励
  • 数据来源lq_store_manager_salary_statistics.F_ActualBaseSalary

📈 数据来源

主数据表:lq_store_manager_salary_statistics(店长工资统计表)

关键字段

  • F_StoreId:门店ID
  • F_StoreName:门店名称
  • F_EmployeeId:员工ID(店长)
  • F_EmployeeName:员工姓名(店长)
  • F_StatisticsMonth:统计月份(YYYYMM格式)
  • F_IsNewStore:是否新店("是"/"否")
  • F_StoreType:门店类型(用于判断是否旗舰店)

三项指标相关字段

  • F_StoreLifeline:门店生命线(目标值)
  • F_StoreTotalPerformance:门店总业绩(实际值)
  • F_PerformanceReached:业绩是否达标("是"/"否")
  • F_PerformanceCompletionRate:业绩完成率

  • F_TargetHeadCount:目标人头数(目标值)

  • F_HeadCount:进店消耗人数(实际值)

  • F_HeadCountReached:人头是否达标("是"/"否")

  • F_TargetConsume:目标消耗金额(目标值)

  • F_StoreConsume:门店消耗金额(实际值)

  • F_ConsumeReached:消耗是否达标("是"/"否")

底薪相关字段

  • F_BaseSalary:固定底薪(4000元)
  • F_UnreachedIndicatorCount:未达标指标数量
  • F_AssessmentDeduction:考核扣款
  • F_FlagshipStoreDeduction:旗舰店负奖励
  • F_ActualBaseSalary:实际底薪

目标数据表:lq_md_target(门店目标表)

关键字段

  • F_StoreId:门店ID
  • F_Month:月份(YYYYMM格式)
  • F_StoreLifeline:门店生命线
  • F_StoreHeadcountTarget:门店人头目标
  • F_StoreConsumeTarget:门店消耗目标

说明

  • 目标数据在期初设定,存储在 lq_md_target 表中
  • 店长工资统计表(lq_store_manager_salary_statistics)在计算时已经关联了目标数据
  • 但为了确保数据一致性,建议在统计时也关联 lq_md_target 表,以获取期初设定的目标值

🔍 统计逻辑

场景1:当月全部店长的对比

查询条件

  • F_StatisticsMonth = 指定月份(YYYYMM格式)
  • F_Position = "店长"(如果需要过滤岗位)

返回字段

  • 门店信息:门店ID、门店名称
  • 店长信息:员工ID、员工姓名
  • 门店类型:是否新店、门店类型(用于判断是否旗舰店)
  • 三项指标:
    • 指标1(业绩)
    • 目标值(生命线)
    • 实际值(门店总业绩)
    • 完成度(%)
    • 是否达标(是/否)
    • 指标2(人头)
    • 目标值(人头目标)
    • 实际值(进店消耗人数)
    • 完成度(%)
    • 是否达标(是/否)
    • 指标3(消耗)
    • 目标值(消耗目标)
    • 实际值(门店消耗金额)
    • 完成度(%)
    • 是否达标(是/否)
    • 是否考核(新店不考核,显示"-")
  • 底薪信息:
    • 固定底薪(4000元)
    • 未达标指标数
    • 考核扣款
    • 旗舰店负奖励(仅旗舰店)
    • 实际底薪

排序方式

  • 可按门店名称、店长姓名、业绩完成度、人头完成度、消耗完成度、实际底薪等字段排序

筛选条件

  • 门店ID列表
  • 是否新店
  • 门店类型(是否旗舰店)
  • 指标达标情况(全部达标/部分达标/全部未达标)

场景2:一个店长全年数据

查询条件

  • F_EmployeeId = 指定店长ID
  • F_StatisticsMonth 在指定年份范围内(如:202501-202512)

返回字段

  • 店长信息:员工ID、员工姓名
  • 月份:统计月份(YYYYMM格式)
  • 门店信息:门店ID、门店名称(可能不同月份在不同门店)
  • 门店类型:是否新店、门店类型
  • 三项指标(每个指标包含目标值、实际值、完成度、是否达标)
  • 底薪信息(固定底薪、考核扣款、旗舰店负奖励、实际底薪)

排序方式

  • 按月份升序排列

统计维度

  • 可统计全年平均完成度
  • 可统计全年达标次数
  • 可统计全年平均底薪
  • 可统计全年总扣款

📋 数据完整性说明

数据关联关系

  1. 店长工资统计表 → 门店目标表

    • 通过 F_StoreId + F_StatisticsMonth 关联 lq_md_target.F_StoreId + lq_md_target.F_Month
    • 用于获取期初设定的目标值
  2. 店长工资统计表 → 门店信息表

    • 通过 F_StoreId 关联 lq_mdxx.F_Id
    • 用于获取门店名称、门店类型等信息
  3. 店长工资统计表 → 员工信息表

    • 通过 F_EmployeeId 关联 BASE_USER.F_Id
    • 用于获取店长姓名、账号等信息

数据校验

  1. 目标值校验

    • 如果 lq_md_target 表中没有对应月份的目标数据,应提示"目标未设置"
    • 如果目标值为0,应提示"目标未设置"
  2. 实际值校验

    • 如果 lq_store_manager_salary_statistics 表中没有对应月份的统计数据,应提示"数据未计算"
    • 如果店长在某个月份离职,可能没有统计数据
  3. 新店判断

    • 通过 F_IsNewStore 字段判断是否新店
    • 新店不考核消耗指标,指标3应显示"-"或不显示

🎯 接口设计建议

接口1:获取当月全部店长三项指标对比

接口路径/api/Extend/LqStatistics/get-store-manager-indicators-comparison

请求参数

{
  "statisticsMonth": "202601",  // 统计月份(YYYYMM格式)
  "storeIds": ["门店ID1", "门店ID2"],  // 可选,门店ID列表
  "isNewStore": null,  // 可选,是否新店(true/false/null)
  "storeType": null,  // 可选,门店类型(用于筛选旗舰店)
  "indicatorStatus": null  // 可选,指标达标情况("all_reached"/"partial"/"all_unreached"
}

返回数据

{
  "list": [
    {
      "storeId": "门店ID",
      "storeName": "门店名称",
      "employeeId": "店长ID",
      "employeeName": "店长姓名",
      "isNewStore": "是",
      "storeType": 2,
      "isFlagshipStore": true,
      "performanceIndicator": {
        "target": 100000,
        "actual": 120000,
        "completionRate": 120.00,
        "reached": "是"
      },
      "headCountIndicator": {
        "target": 100,
        "actual": 120,
        "completionRate": 120.00,
        "reached": "是"
      },
      "consumeIndicator": {
        "target": 50000,
        "actual": 60000,
        "completionRate": 120.00,
        "reached": "是",
        "isAssessed": true  // 是否考核(新店为false
      },
      "baseSalary": {
        "fixedSalary": 4000,
        "unreachedIndicatorCount": 0,
        "assessmentDeduction": 0,
        "flagshipStoreDeduction": 0,
        "actualSalary": 4000
      }
    }
  ],
  "summary": {
    "totalCount": 50,
    "allReachedCount": 30,
    "partialReachedCount": 15,
    "allUnreachedCount": 5,
    "averagePerformanceCompletionRate": 105.50,
    "averageHeadCountCompletionRate": 98.30,
    "averageConsumeCompletionRate": 95.20
  }
}

接口2:获取店长全年三项指标数据

接口路径/api/Extend/LqStatistics/get-store-manager-yearly-indicators

请求参数

{
  "employeeId": "店长ID",
  "year": 2026  // 年份
}

返回数据

{
  "employeeId": "店长ID",
  "employeeName": "店长姓名",
  "year": 2026,
  "monthlyData": [
    {
      "month": "202601",
      "storeId": "门店ID",
      "storeName": "门店名称",
      "isNewStore": "是",
      "storeType": 2,
      "isFlagshipStore": true,
      "performanceIndicator": {
        "target": 100000,
        "actual": 120000,
        "completionRate": 120.00,
        "reached": "是"
      },
      "headCountIndicator": {
        "target": 100,
        "actual": 120,
        "completionRate": 120.00,
        "reached": "是"
      },
      "consumeIndicator": {
        "target": 50000,
        "actual": 60000,
        "completionRate": 120.00,
        "reached": "是",
        "isAssessed": true
      },
      "baseSalary": {
        "fixedSalary": 4000,
        "unreachedIndicatorCount": 0,
        "assessmentDeduction": 0,
        "flagshipStoreDeduction": 0,
        "actualSalary": 4000
      }
    }
  ],
  "yearlySummary": {
    "totalMonths": 12,
    "workedMonths": 10,
    "averagePerformanceCompletionRate": 105.50,
    "averageHeadCountCompletionRate": 98.30,
    "averageConsumeCompletionRate": 95.20,
    "allReachedMonths": 8,
    "partialReachedMonths": 2,
    "allUnreachedMonths": 0,
    "averageActualSalary": 3800,
    "totalAssessmentDeduction": 2000
  }
}

🔄 数据计算逻辑

完成度计算

// 业绩完成度
decimal performanceCompletionRate = targetLifeline > 0 
    ? (actualPerformance / targetLifeline) * 100m 
    : 0m;

// 人头完成度
decimal headCountCompletionRate = targetHeadCount > 0 
    ? (actualHeadCount / targetHeadCount) * 100m 
    : 0m;

// 消耗完成度(仅老店)
decimal consumeCompletionRate = isNewStore || targetConsume <= 0 
    ? 0m  // 新店不考核,返回0或null
    : (actualConsume / targetConsume) * 100m;

达标判断

// 业绩是否达标
bool performanceReached = actualPerformance >= targetLifeline;

// 人头是否达标
bool headCountReached = actualHeadCount >= targetHeadCount;

// 消耗是否达标(仅老店)
bool consumeReached = isNewStore ? true : (actualConsume >= targetConsume);

底薪计算

// 固定底薪
decimal fixedSalary = 4000m;

// 计算未达标指标数
int unreachedCount = 0;
if (!performanceReached) unreachedCount++;
if (!headCountReached) unreachedCount++;
if (!isNewStore && !consumeReached) unreachedCount++;

// 考核扣款
decimal assessmentDeduction = isNewStore 
    ? unreachedCount * 800m 
    : unreachedCount * 500m;

// 旗舰店负奖励
decimal flagshipStoreDeduction = (storeType == 2) ? 800m : 0m;

// 实际底薪
decimal actualSalary = fixedSalary - assessmentDeduction - flagshipStoreDeduction;

📝 注意事项

  1. 新店特殊处理

    • 新店不考核消耗指标,指标3应显示"-"或不显示
    • 新店每个未达标指标扣款800元(老店500元)
  2. 旗舰店特殊处理

    • 旗舰店需要扣除负奖励800元
    • 判断标准:F_StoreType = 2
  3. 数据缺失处理

    • 如果某个月份没有目标数据,应提示"目标未设置"
    • 如果某个月份没有统计数据,应提示"数据未计算"
    • 如果店长在某个月份离职,可能没有统计数据
  4. 数据一致性

    • 建议同时关联 lq_store_manager_salary_statisticslq_md_target
    • 确保目标值来自期初设定的 lq_md_target
    • 确保实际值和达标状态来自 lq_store_manager_salary_statistics
  5. 性能优化

    • 对于"当月全部店长对比",建议使用分页查询
    • 对于"店长全年数据",数据量较小,可以一次性返回

✅ 总结

核心数据表

  • 主表lq_store_manager_salary_statistics(店长工资统计表)
  • 目标表lq_md_target(门店目标表)

核心字段

  • 三项指标:业绩、人头、消耗
  • 底薪信息:固定底薪、考核扣款、实际底薪

核心逻辑

  • 达标判断:实际值 >= 目标值
  • 完成度计算:实际值 / 目标值 × 100%
  • 底薪计算:固定底薪 - 考核扣款 - 旗舰店负奖励

展示方式

  • 横向对比:当月全部店长的三项指标完成情况
  • 纵向趋势:一个店长全年的三项指标完成情况