0e7e3460
“wangming”
feat: 修改科技部老师工资提成...
|
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
|
# 主任工资计算逻辑完整梳理
## 📋 概述
主任工资由以下几个部分组成:
1. **底薪**:固定3500元,根据考核指标扣款
2. **提成**:基于**毛利**计算,使用阶梯提成模式
**重要说明**:
- **业绩(StoreTotalPerformance)就是毛利**
- **提成计算基于毛利**,而不是销售业绩(开单-退卡)
---
## 💰 核心计算公式
### 1. 销售业绩
```
销售业绩 = 开单业绩 - 退款业绩
```
### 2. 毛利(核心指标)
```
毛利 = 销售业绩 - - 合作项目成本 - 店内支出 - 洗毛巾费用
```
### 3. 业绩(用于提成计算)
```
业绩(StoreTotalPerformance)= 毛利(GrossProfit)
```
**关键点**:`StoreTotalPerformance` 字段存储的是**毛利**,用于提成计算。
---
## 📊 数据来源详解
### 1. 开单业绩
**数据来源**:
- 表:`lq_kd_kdjlb`(开单记录表)
- 字段:`sfyj`(实付业绩)
- 条件:
- `F_IsEffective = 1`(有效记录)
- `Djmd = @StoreId`(门店ID)
- `Kdrq >= @StartDate AND Kdrq <= @EndDate`(时间范围)
**代码位置**:第185-192行
### 2. 退款业绩
**数据来源**:
- 表:`lq_hytk_hytk`(退卡记录表)
- 字段:`F_ActualRefundAmount`(实际退款金额,如果没有则使用 `tkje`)
- 条件:
- `F_IsEffective = 1`(有效记录)
- `md = @StoreId`(门店ID)
- `Tksj >= @StartDate AND Tksj <= @EndDate`(时间范围)
**代码位置**:第194-202行
### 3. 产品物料
**数据来源**:
- 表:`lq_inventory_usage`(库存使用记录表)
- 字段:`F_TotalAmount`(合计金额)
- 条件:
- `F_IsEffective = 1`(有效记录)
- `F_StoreId = @StoreId`(门店ID)
- **特殊规则**:11月工资算10月数据
- 如果计算月份是11月,则查询10月的数据
- 其他月份正常查询当月数据
**代码位置**:第252-271行
### 4. 合作项目成本
**数据来源**:
- 表:`lq_cooperation_cost`(合作成本表)
- 字段:`F_TotalAmount`(合计金额)
- 条件:
- `F_Year = @Year`(年份)
- `F_Month = @MonthStr`(月份,YYYYMM格式)
- `F_StoreId = @StoreId`(门店ID)
- `F_IsEffective = 1`(有效记录)
**代码位置**:第273-281行
### 5. 店内支出
**数据来源**:
- 表:`lq_store_expense`(店内支出表)
- 字段:`F_Amount`(金额)
- 条件:
- `F_IsEffective = 1`(有效记录)
- `F_StoreId = @StoreId`(门店ID)
- `DATE_FORMAT(F_ExpenseDate, '%Y%m') = @MonthStr`(月份,YYYYMM格式)
**代码位置**:第283-296行
### 6. 洗毛巾费用
**数据来源**:
- 表:`lq_laundry_flow`(清洗流水表)
- 字段:`F_TotalPrice`(总费用)
- 条件:
- `F_IsEffective = 1`(有效记录)
- `F_FlowType = 0`(只统计送出的记录)
- `F_StoreId = @StoreId`(门店ID)
- 优先使用 `F_SendTime`,如果为空则使用 `F_CreateTime`
- `DATE_FORMAT(COALESCE(F_SendTime, F_CreateTime), '%Y%m') = @MonthStr`(月份,YYYYMM格式)
**代码位置**:第298-313行
---
## 🔄 计算流程
### 步骤1:计算销售业绩
```csharp
// 2.4 计算销售业绩(开单业绩-退款业绩)
decimal billing = storeBillingDict.ContainsKey(storeId) ? storeBillingDict[storeId] : 0;
decimal refund = storeRefundDict.ContainsKey(storeId) ? storeRefundDict[storeId] : 0;
salary.StoreBillingPerformance = billing;
salary.StoreRefundPerformance = refund;
salary.SalesPerformance = billing - refund;
```
**代码位置**:第402-407行
### 步骤2:统计各项成本
```csharp
// 2.5 统计各项成本
salary.ProductMaterial = productMaterialDict.ContainsKey(storeId) ? productMaterialDict[storeId] : 0;
salary.CooperationCost = cooperationCostDict.ContainsKey(storeId) ? cooperationCostDict[storeId] : 0;
salary.StoreExpense = storeExpenseDict.ContainsKey(storeId) ? storeExpenseDict[storeId] : 0;
salary.LaundryCost = laundryCostDict.ContainsKey(storeId) ? laundryCostDict[storeId] : 0;
```
**代码位置**:第409-420行
### 步骤3:计算毛利
```csharp
// 2.6 计算毛利
// 毛利 = 销售业绩 - 产品物料 - 合作项目成本 - 店内支出 - 洗毛巾
salary.GrossProfit = salary.SalesPerformance - salary.ProductMaterial - salary.CooperationCost - salary.StoreExpense - salary.LaundryCost;
```
**代码位置**:第422-424行
### 步骤4:将毛利赋值给StoreTotalPerformance(用于提成计算)
```csharp
// 2.7 将毛利赋值给StoreTotalPerformance(用于提成计算)
salary.StoreTotalPerformance = salary.GrossProfit;
```
**代码位置**:第426-427行
**关键点**:`StoreTotalPerformance` 存储的是**毛利**,不是销售业绩。
### 步骤5:计算业绩完成率(基于毛利)
```csharp
// 2.8 计算业绩完成率(基于毛利与生命线比较)
if (salary.StoreLifeline > 0)
{
salary.PerformanceCompletionRate = salary.GrossProfit / salary.StoreLifeline;
}
```
**代码位置**:第429-437行
### 步骤6:判断业绩是否达标(基于毛利)
```csharp
// 2.11 计算考核指标(业绩、人头、消耗是否达标)
// 业绩达标判断基于毛利
bool performanceReached = salary.GrossProfit >= salary.StoreLifeline;
```
**代码位置**:第445-447行
### 步骤7:计算提成(基于毛利)
```csharp
// 2.14 计算阶梯提成(先计算门店总提成,基于毛利)
CalculateCommission(salary, isNewStore);
```
**代码位置**:第495-496行
**提成计算方法**:
```csharp
// 提成计算基于毛利(StoreTotalPerformance存储的是毛利)
decimal performance = salary.StoreTotalPerformance; // 这里已经是毛利了
decimal lifeline = salary.StoreLifeline;
// 计算阶梯提成
if (performance <= lifeline)
{
// 业绩 ≤ 生命线:只计算≤生命线部分的提成
salary.CommissionAmountBelowLifeline = performance * rateBelowLifeline;
salary.CommissionAmountAboveLifeline = 0;
}
else
{
// 业绩 > 生命线:分别计算≤生命线部分和>生命线部分的提成
salary.CommissionAmountBelowLifeline = lifeline * rateBelowLifeline;
salary.CommissionAmountAboveLifeline = (performance - lifeline) * rateAboveLifeline;
}
```
**代码位置**:第567-640行
---
## 💰 提成规则详解
### 提成计算方式
|
1ac23a9d
“wangming”
feat: 优化库存管理和工资计算功能
|
229
230
231
232
|
**重要说明**:
- **提成基数**:使用**毛利**(GrossProfit),不是销售业绩(开单-退卡)
- **分段计算**:根据毛利与生命线的比较,分段计算提成
- **阶梯提成模式**:根据毛利是否超过生命线,使用不同的提成比例
|
0e7e3460
“wangming”
feat: 修改科技部老师工资提成...
|
233
234
235
|
### 老店主任提成规则
|
1ac23a9d
“wangming”
feat: 优化库存管理和工资计算功能
|
236
|
根据门店分类(A、B、C类)和毛利是否超过生命线,使用不同的阶梯提成比例:
|
0e7e3460
“wangming”
feat: 修改科技部老师工资提成...
|
237
|
|
1ac23a9d
“wangming”
feat: 优化库存管理和工资计算功能
|
238
|
| 门店分类 | 毛利 ≤ 生命线部分 | 毛利 > 生命线部分 |
|
0e7e3460
“wangming”
feat: 修改科技部老师工资提成...
|
239
240
241
242
243
|
|---------|----------------|-----------------|
| A类门店 | 2% | 2.5% |
| B类门店 | 2.5% | 3% |
| C类门店 | 3% | 3.5% |
|
1ac23a9d
“wangming”
feat: 优化库存管理和工资计算功能
|
244
|
**计算公式(基于毛利分段计算)**:
|
0e7e3460
“wangming”
feat: 修改科技部老师工资提成...
|
245
|
```
|
1ac23a9d
“wangming”
feat: 优化库存管理和工资计算功能
|
246
247
|
如果 毛利 ≤ 生命线:
提成 = 毛利 × 对应提成比例(≤生命线部分)
|
0e7e3460
“wangming”
feat: 修改科技部老师工资提成...
|
248
|
|
1ac23a9d
“wangming”
feat: 优化库存管理和工资计算功能
|
249
250
|
如果 毛利 > 生命线:
提成 = 生命线 × 对应提成比例(≤生命线部分) + (毛利 - 生命线) × 对应提成比例(>生命线部分)
|
0e7e3460
“wangming”
feat: 修改科技部老师工资提成...
|
251
252
|
```
|
1ac23a9d
“wangming”
feat: 优化库存管理和工资计算功能
|
253
254
255
256
257
258
259
|
**计算示例**:
- 假设:门店生命线 = 100,000元,毛利 = 120,000元,门店分类 = B类(2.5% / 3%)
- 计算:
- ≤生命线部分:100,000元 × 2.5% = 2,500元
- >生命线部分:(120,000 - 100,000)元 × 3% = 600元
- 总提成:2,500元 + 600元 = 3,100元
|
0e7e3460
“wangming”
feat: 修改科技部老师工资提成...
|
260
261
262
263
|
### 新店主任提成规则
**统一标准**,不区分门店分类:
|
1ac23a9d
“wangming”
feat: 优化库存管理和工资计算功能
|
264
|
| 毛利范围 | 提成比例 |
|
0e7e3460
“wangming”
feat: 修改科技部老师工资提成...
|
265
|
|---------|---------|
|
1ac23a9d
“wangming”
feat: 优化库存管理和工资计算功能
|
266
267
|
| 毛利 ≤ 生命线部分 | 2% |
| 毛利 > 生命线部分 | 2.5% |
|
0e7e3460
“wangming”
feat: 修改科技部老师工资提成...
|
268
|
|
1ac23a9d
“wangming”
feat: 优化库存管理和工资计算功能
|
269
|
**计算公式(基于毛利分段计算)**:
|
0e7e3460
“wangming”
feat: 修改科技部老师工资提成...
|
270
|
```
|
1ac23a9d
“wangming”
feat: 优化库存管理和工资计算功能
|
271
272
|
如果 毛利 ≤ 生命线:
提成 = 毛利 × 2%
|
0e7e3460
“wangming”
feat: 修改科技部老师工资提成...
|
273
|
|
1ac23a9d
“wangming”
feat: 优化库存管理和工资计算功能
|
274
275
|
如果 毛利 > 生命线:
提成 = 生命线 × 2% + (毛利 - 生命线) × 2.5%
|
0e7e3460
“wangming”
feat: 修改科技部老师工资提成...
|
276
277
|
```
|
1ac23a9d
“wangming”
feat: 优化库存管理和工资计算功能
|
278
279
280
281
282
283
284
|
**计算示例**:
- 假设:门店生命线 = 100,000元,毛利 = 120,000元(新店)
- 计算:
- ≤生命线部分:100,000元 × 2% = 2,000元
- >生命线部分:(120,000 - 100,000)元 × 2.5% = 500元
- 总提成:2,000元 + 500元 = 2,500元
|
0e7e3460
“wangming”
feat: 修改科技部老师工资提成...
|
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
|
### 提成按在店天数比例计算
```csharp
// 2.15 按在店天数比例计算提成金额
if (daysInMonth > 0 && workingDays > 0)
{
// 提成金额按在店天数比例计算
salary.CommissionAmountBelowLifeline = salary.CommissionAmountBelowLifeline / daysInMonth * workingDays;
salary.CommissionAmountAboveLifeline = salary.CommissionAmountAboveLifeline / daysInMonth * workingDays;
salary.TotalCommissionAmount = salary.CommissionAmountBelowLifeline + salary.CommissionAmountAboveLifeline;
}
```
**代码位置**:第498-512行
---
## 📝 关键字段说明
### StoreTotalPerformance(门店总业绩)
**字段含义**:**毛利**
**计算公式**:
```
StoreTotalPerformance = GrossProfit = 销售业绩 - 产品物料 - 合作项目成本 - 店内支出 - 洗毛巾费用
```
**用途**:
- 用于提成计算
- 用于业绩完成率计算
- 用于业绩达标判断
**重要说明**:此字段存储的是**毛利**,不是销售业绩(开单-退卡)。
### GrossProfit(毛利)
**字段含义**:毛利
**计算公式**:
```
GrossProfit = SalesPerformance - ProductMaterial - CooperationCost - StoreExpense - LaundryCost
```
### SalesPerformance(销售业绩)
**字段含义**:销售业绩(开单-退卡)
**计算公式**:
```
SalesPerformance = StoreBillingPerformance - StoreRefundPerformance
```
---
## ✅ 验证要点
### 1. 业绩就是毛利
- ✅ `StoreTotalPerformance = GrossProfit`(第427行)
- ✅ 提成计算使用 `StoreTotalPerformance`(第581行)
- ✅ 业绩完成率使用 `GrossProfit`(第432行)
- ✅ 业绩达标判断使用 `GrossProfit`(第447行)
### 2. 提成计算基于毛利
- ✅ `CalculateCommission` 方法注释明确说明"基于毛利"(第563行)
- ✅ 方法内部使用 `StoreTotalPerformance`(即毛利)进行计算(第581行)
- ✅ 所有提成计算都基于 `performance`(即毛利)
---
## 📋 总结
### 核心结论
1. **业绩(StoreTotalPerformance)就是毛利**
- `StoreTotalPerformance = GrossProfit`
- 不是销售业绩(开单-退卡)
2. **提成计算基于毛利**
- 提成计算使用 `StoreTotalPerformance`(即毛利)
- 不是基于销售业绩
3. **毛利计算公式**
```
毛利 = 销售业绩 - 产品物料 - 合作项目成本 - 店内支出 - 洗毛巾费用
```
4. **所有业绩相关的判断都基于毛利**
- 业绩完成率 = 毛利 / 生命线
- 业绩达标判断 = 毛利 >= 生命线
- 提成计算 = 基于毛利使用阶梯提成
### 数据流向
```
开单业绩 - 退款业绩
↓
销售业绩(SalesPerformance)
↓
销售业绩 - 产品物料 - 合作项目成本 - 店内支出 - 洗毛巾费用
↓
毛利(GrossProfit)
↓
StoreTotalPerformance(用于提成计算)
↓
阶梯提成计算
```
---
## 🔍 代码关键位置
| 功能 | 代码位置 | 说明 |
|-----|---------|------|
| 计算销售业绩 | 第402-407行 | 开单-退卡 |
| 统计各项成本 | 第409-420行 | 产品物料、合作成本、店内支出、洗毛巾 |
| 计算毛利 | 第422-424行 | 销售业绩 - 各项成本 |
| 将毛利赋值给StoreTotalPerformance | 第426-427行 | **关键:业绩就是毛利** |
| 计算业绩完成率 | 第429-437行 | 基于毛利 |
| 判断业绩达标 | 第445-447行 | 基于毛利 |
| 计算提成 | 第495-496行 | 调用CalculateCommission,基于毛利 |
| 提成计算方法 | 第567-640行 | 使用StoreTotalPerformance(即毛利)计算 |
---
**文档版本**:2025-01-20
**最后更新**:确认业绩就是毛利,提成计算基于毛利
|