# 合作成本在店长工资计算中未统计问题分析 ## 📋 问题描述 使用2025年12月的数据,发现合作成本在店长工资计算时没有被统计进去。 ## 🔍 代码逻辑分析 ### 店长工资计算中的合作成本统计逻辑 **代码位置**:`LqStoreManagerSalaryService.cs` 第346-354行 ```csharp // 1.10 合作项目成本统计 var cooperationCostList = await _db.Queryable() .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. 如果该月应该有合作成本但未录入,则需要补充录入数据后重新计算工资