# 店长三项指标统计表 - 逻辑梳理 ## 📋 需求概述 创建一个"店长三项指标统计表",用于统计和展示所有门店店长每月的底薪及三项指标的完成情况。 ### 核心需求 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` **请求参数**: ```json { "statisticsMonth": "202601", // 统计月份(YYYYMM格式) "storeIds": ["门店ID1", "门店ID2"], // 可选,门店ID列表 "isNewStore": null, // 可选,是否新店(true/false/null) "storeType": null, // 可选,门店类型(用于筛选旗舰店) "indicatorStatus": null // 可选,指标达标情况("all_reached"/"partial"/"all_unreached") } ``` **返回数据**: ```json { "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` **请求参数**: ```json { "employeeId": "店长ID", "year": 2026 // 年份 } ``` **返回数据**: ```json { "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 } } ``` --- ## 🔄 数据计算逻辑 ### 完成度计算 ```csharp // 业绩完成度 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; ``` ### 达标判断 ```csharp // 业绩是否达标 bool performanceReached = actualPerformance >= targetLifeline; // 人头是否达标 bool headCountReached = actualHeadCount >= targetHeadCount; // 消耗是否达标(仅老店) bool consumeReached = isNewStore ? true : (actualConsume >= targetConsume); ``` ### 底薪计算 ```csharp // 固定底薪 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_statistics` 和 `lq_md_target` 表 - 确保目标值来自期初设定的 `lq_md_target` 表 - 确保实际值和达标状态来自 `lq_store_manager_salary_statistics` 表 5. **性能优化**: - 对于"当月全部店长对比",建议使用分页查询 - 对于"店长全年数据",数据量较小,可以一次性返回 --- ## ✅ 总结 ### 核心数据表 - **主表**:`lq_store_manager_salary_statistics`(店长工资统计表) - **目标表**:`lq_md_target`(门店目标表) ### 核心字段 - **三项指标**:业绩、人头、消耗 - **底薪信息**:固定底薪、考核扣款、实际底薪 ### 核心逻辑 - **达标判断**:实际值 >= 目标值 - **完成度计算**:实际值 / 目标值 × 100% - **底薪计算**:固定底薪 - 考核扣款 - 旗舰店负奖励 ### 展示方式 - **横向对比**:当月全部店长的三项指标完成情况 - **纵向趋势**:一个店长全年的三项指标完成情况