Blame view

项目文档相关/docs/test-reports/合作成本在店长工资计算中未统计问题分析.md 6.06 KB
83a6fd1f   “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
  # 合作成本在店长工资计算中未统计问题分析
  
  ## 📋 问题描述
  
  使用2025年12月的数据,发现合作成本在店长工资计算时没有被统计进去。
  
  ## 🔍 代码逻辑分析
  
  ### 店长工资计算中的合作成本统计逻辑
  
  **代码位置**`LqStoreManagerSalaryService.cs` 第346-354行
  
  ```csharp
  // 1.10 合作项目成本统计
  var cooperationCostList = await _db.Queryable<LqCooperationCostEntity>()
      .Where(x => x.Year == year && x.Month == monthStr && x.IsEffective == StatusEnum.有效.GetHashCode())
      .Select(x => new { x.StoreId, x.TotalAmount })
      .ToListAsync();
  var cooperationCostDict = cooperationCostList
      .Where(x => !string.IsNullOrEmpty(x.StoreId))
      .GroupBy(x => x.StoreId)
      .ToDictionary(g => g.Key, g => g.Sum(x => x.TotalAmount));
  ```
  
  **查询条件**
  - `F_Year = year`(年份,如:2025)
  - `F_Month = monthStr`(月份,格式:YYYYMM,如:"202512")
  - `F_IsEffective = StatusEnum.有效.GetHashCode()`(有效记录,值为1)
  
  **使用位置**:第558行
  ```csharp
  salary.CooperationCost = cooperationCostDict.ContainsKey(storeId) ? cooperationCostDict[storeId] : 0;
  ```
  
  ## 📊 数据检查结果
  
  ### 1. 合作成本表数据检查
  
  **查询条件**`F_Year = 2025 AND F_Month = '202512' AND F_IsEffective = 1`
  
  **查询结果****0条记录**
  
  **发现**
  - 2025年12月的合作成本数据**不存在**
  - 2025年只有以下月份的数据:
    - `F_Month = "202511"`(11月,59条记录,总金额490,151.00元)
    - `F_Month = "252511"`(数据异常,90条记录,总金额1,054,810.49元)
  
  ### 2. 店长工资表中的合作成本字段
  
  **查询条件**`F_StatisticsMonth = '202512'`
  
  **查询结果**
  - 总计21条店长工资记录
  - **所有记录的合作成本(F_CooperationCost)都是0.00**
  - 有合作成本值的记录数:0条
  
  ### 3. 数据格式检查
  
  **合作成本表中的月份格式**
  - `F_Month = "202511"`(YYYYMM格式,正确)
  - `F_Month = "252511"`(数据异常,可能是录入错误)
  
  **店长工资计算查询条件**
  - `F_Month = "202512"`(YYYYMM格式,正确)
  
  ## 🎯 问题根本原因
  
  ### **原因:2025年12月的合作成本数据不存在**
  
  **分析**
  1. 代码逻辑是正确的:
     - 查询条件:`F_Year = 2025 AND F_Month = '202512' AND F_IsEffective = 1`
     - 查询逻辑:按门店ID分组,汇总总金额
     - 使用逻辑:从字典中获取对应门店的合作成本
  
  2. 数据问题:
     - **2025年12月的合作成本数据在数据库中不存在**
     - 查询结果为空,所以 `cooperationCostDict` 为空字典
     - 所有门店的 `CooperationCost` 都被设置为 0
  
  3. 数据格式验证:
     - 代码期望的格式:`F_Month = "202512"`(YYYYMM格式)
     - 数据库中11月的数据格式:`F_Month = "202511"`(格式正确)
     - 说明数据格式本身是正确的
  
  ## 📝 验证查询
  
  ### 验证1:检查是否有2025年12月的数据
  
  ```sql
  SELECT COUNT(*) as Count, SUM(F_TotalAmount) as TotalAmount
  FROM lq_cooperation_cost
  WHERE F_Year = 2025 
    AND F_Month = '202512' 
    AND F_IsEffective = 1;
  ```
  
  **结果**:0条记录
  
  ### 验证2:检查店长工资表中的合作成本值
  
  ```sql
  SELECT 
      COUNT(*) as TotalCount,
      COUNT(CASE WHEN F_CooperationCost > 0 THEN 1 END) as HasCooperationCostCount,
      SUM(F_CooperationCost) as TotalCooperationCost
  FROM lq_store_manager_salary_statistics
  WHERE F_StatisticsMonth = '202512';
  ```
  
  **结果**
  - 总记录数:21条
  - 有合作成本的记录数:0条
  - 合作成本总和:0.00
  
  ### 验证3:检查其他月份的数据格式
  
  ```sql
  SELECT DISTINCT F_Month 
  FROM lq_cooperation_cost 
  WHERE F_Year = 2025 
  ORDER BY F_Month;
  ```
  
  **结果**
  - `F_Month = "202511"`(11月,格式正确)
  - `F_Month = "252511"`(数据异常,可能是录入错误)
  
  ## 🔍 问题总结
  
  ### 核心问题
  
  **2025年12月的合作成本数据在数据库中不存在**
  
  ### 问题表现
  
  1. **合作成本表**:没有 `F_Year = 2025 AND F_Month = '202512'` 的记录
  2. **店长工资表**:所有2025年12月的店长工资记录,`F_CooperationCost` 都是 0.00
  3. **代码逻辑**:代码逻辑是正确的,查询条件也是正确的
  
  ### 可能的原因
  
  1. **数据未录入**:2025年12月的合作成本数据还没有录入到系统中
  2. **数据录入错误**:数据可能被录入到了其他月份(如录入到了11月)
  3. **数据被删除或作废**:数据可能被标记为无效(`F_IsEffective != 1`)或删除
  
  ### 验证方法
  
  1. **检查是否有无效数据**
     ```sql
     SELECT COUNT(*) 
     FROM lq_cooperation_cost 
     WHERE F_Year = 2025 
       AND F_Month = '202512' 
       AND F_IsEffective != 1;
     ```
  
  2. **检查是否有其他格式的数据**
     ```sql
     SELECT F_Month, COUNT(*) 
     FROM lq_cooperation_cost 
     WHERE F_Year = 2025 
       AND F_Month LIKE '%12%'
     GROUP BY F_Month;
     ```
  
  3. **检查11月的数据**(对比参考):
     ```sql
     SELECT F_StoreId, F_TotalAmount 
     FROM lq_cooperation_cost 
     WHERE F_Year = 2025 
       AND F_Month = '202511' 
       AND F_IsEffective = 1;
     ```
  
  ## 💡 建议
  
  1. **确认数据是否存在**
     - 检查是否有2025年12月的合作成本数据需要录入
     - 检查数据是否被录入到了其他月份
  
  2. **如果数据确实不存在**
     - 这是正常的业务情况(该月没有合作成本)
     - 代码逻辑是正确的,不需要修改
  
  3. **如果数据应该存在但未录入**
     - 需要补充录入2025年12月的合作成本数据
     - 录入后重新计算店长工资
  
  4. **如果数据格式有问题**
     - 检查数据录入时月份格式是否正确
     - 确保月份格式为 YYYYMM(如:"202512")
  
  ## 📋 结论
  
  **问题原因**:2025年12月的合作成本数据在数据库中不存在,导致店长工资计算时无法统计到合作成本。
  
  **代码逻辑**:代码逻辑是正确的,查询条件也是正确的。
  
  **解决方案**
  1. 如果该月确实没有合作成本,则当前结果是正确的
  2. 如果该月应该有合作成本但未录入,则需要补充录入数据后重新计算工资