合作成本在店长工资计算中未统计问题分析.md 6.06 KB

合作成本在店长工资计算中未统计问题分析

📋 问题描述

使用2025年12月的数据,发现合作成本在店长工资计算时没有被统计进去。

🔍 代码逻辑分析

店长工资计算中的合作成本统计逻辑

代码位置LqStoreManagerSalaryService.cs 第346-354行

// 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行

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月的数据

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:检查店长工资表中的合作成本值

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:检查其他月份的数据格式

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. 检查是否有无效数据

    SELECT COUNT(*) 
    FROM lq_cooperation_cost 
    WHERE F_Year = 2025 
     AND F_Month = '202512' 
     AND F_IsEffective != 1;
    
  2. 检查是否有其他格式的数据

    SELECT F_Month, COUNT(*) 
    FROM lq_cooperation_cost 
    WHERE F_Year = 2025 
     AND F_Month LIKE '%12%'
    GROUP BY F_Month;
    
  3. 检查11月的数据(对比参考):

    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. 如果该月应该有合作成本但未录入,则需要补充录入数据后重新计算工资