Blame view

项目文档相关/docs/店长三项指标统计表-逻辑梳理.md 14.4 KB
fd65ae16   “wangming”   feat: inventory a...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
  # 店长三项指标统计表 - 逻辑梳理
  
  ## 📋 需求概述
  
  创建一个"店长三项指标统计表",用于统计和展示所有门店店长每月的底薪及三项指标的完成情况。
  
  ### 核心需求
  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%
  - **底薪计算**:固定底薪 - 考核扣款 - 旗舰店负奖励
  
  ### 展示方式
  - **横向对比**:当月全部店长的三项指标完成情况
  - **纵向趋势**:一个店长全年的三项指标完成情况