Commit 89aadf420e0c592813fb462b3d89eae812f2da1b

Authored by “wangming”
1 parent 50da2ece

Refactor LqDailyReportService to use business unit from lq_md_target table for b…

…illing and refund performance calculations, ensuring accurate monthly associations. Updated SQL queries to reflect changes in data source and improve performance metrics.
netcore/src/Modularity/Extend/NCC.Extend/LqDailyReportService.cs
@@ -410,43 +410,48 @@ namespace NCC.Extend @@ -410,43 +410,48 @@ namespace NCC.Extend
410 } 410 }
411 411
412 // 第二步:统计各事业部的开单业绩 412 // 第二步:统计各事业部的开单业绩
  413 + // 重要:门店归属事业部应该从门店目标表(lq_md_target)中获取,不同月份的归属可能不一样
  414 + // 通过 lq_md_target 表关联门店和事业部,确保使用指定月份的事业部归属关系
413 var businessUnitIds = businessUnitDict.Keys.ToList(); 415 var businessUnitIds = businessUnitDict.Keys.ToList();
414 var unitIdsStr = string.Join("','", businessUnitIds); 416 var unitIdsStr = string.Join("','", businessUnitIds);
415 417
416 var billingPerformanceSql = $@" 418 var billingPerformanceSql = $@"
417 SELECT 419 SELECT
418 - store.syb as BusinessUnitId, 420 + target.F_BusinessUnit as BusinessUnitId,
419 COALESCE(SUM(billing.sfyj), 0) as BillingPerformance 421 COALESCE(SUM(billing.sfyj), 0) as BillingPerformance
420 FROM lq_kd_kdjlb billing 422 FROM lq_kd_kdjlb billing
421 - INNER JOIN lq_mdxx store ON billing.djmd = store.F_Id  
422 - INNER JOIN base_organize o ON store.syb = o.F_Id 423 + INNER JOIN lq_md_target target ON billing.djmd = target.F_StoreId AND target.F_Month = '{month}'
  424 + INNER JOIN base_organize o ON target.F_BusinessUnit = o.F_Id
423 WHERE billing.F_IsEffective = 1 425 WHERE billing.F_IsEffective = 1
  426 + AND target.F_BusinessUnit IS NOT NULL
424 AND o.F_Category = 'department' 427 AND o.F_Category = 'department'
425 AND (o.F_DeleteMark IS NULL OR o.F_DeleteMark != 1) 428 AND (o.F_DeleteMark IS NULL OR o.F_DeleteMark != 1)
426 AND o.F_FullName IN ('事业一部', '事业二部', '事业三部', '事业四部', '事业五部', '事业六部') 429 AND o.F_FullName IN ('事业一部', '事业二部', '事业三部', '事业四部', '事业五部', '事业六部')
427 AND DATE(billing.kdrq) >= '{startDate:yyyy-MM-dd}' 430 AND DATE(billing.kdrq) >= '{startDate:yyyy-MM-dd}'
428 AND DATE(billing.kdrq) <= '{endDate:yyyy-MM-dd}' 431 AND DATE(billing.kdrq) <= '{endDate:yyyy-MM-dd}'
429 - AND store.syb IN ('{unitIdsStr}')  
430 - GROUP BY store.syb"; 432 + AND target.F_BusinessUnit IN ('{unitIdsStr}')
  433 + GROUP BY target.F_BusinessUnit";
431 434
432 var billingPerformanceData = await _db.Ado.SqlQueryAsync<dynamic>(billingPerformanceSql); 435 var billingPerformanceData = await _db.Ado.SqlQueryAsync<dynamic>(billingPerformanceSql);
433 436
434 // 第三步:统计各事业部的退卡金额(使用实退金额,如果没有则使用退卡总金额) 437 // 第三步:统计各事业部的退卡金额(使用实退金额,如果没有则使用退卡总金额)
  438 + // 重要:门店归属事业部应该从门店目标表(lq_md_target)中获取,不同月份的归属可能不一样
435 var refundPerformanceSql = $@" 439 var refundPerformanceSql = $@"
436 SELECT 440 SELECT
437 - store.syb as BusinessUnitId, 441 + target.F_BusinessUnit as BusinessUnitId,
438 COALESCE(SUM(COALESCE(refund.F_ActualRefundAmount, refund.tkje, 0)), 0) as RefundPerformance 442 COALESCE(SUM(COALESCE(refund.F_ActualRefundAmount, refund.tkje, 0)), 0) as RefundPerformance
439 FROM lq_hytk_hytk refund 443 FROM lq_hytk_hytk refund
440 - INNER JOIN lq_mdxx store ON refund.md = store.F_Id  
441 - INNER JOIN base_organize o ON store.syb = o.F_Id 444 + INNER JOIN lq_md_target target ON refund.md = target.F_StoreId AND target.F_Month = '{month}'
  445 + INNER JOIN base_organize o ON target.F_BusinessUnit = o.F_Id
442 WHERE refund.F_IsEffective = 1 446 WHERE refund.F_IsEffective = 1
  447 + AND target.F_BusinessUnit IS NOT NULL
443 AND o.F_Category = 'department' 448 AND o.F_Category = 'department'
444 AND (o.F_DeleteMark IS NULL OR o.F_DeleteMark != 1) 449 AND (o.F_DeleteMark IS NULL OR o.F_DeleteMark != 1)
445 AND o.F_FullName IN ('事业一部', '事业二部', '事业三部', '事业四部', '事业五部', '事业六部') 450 AND o.F_FullName IN ('事业一部', '事业二部', '事业三部', '事业四部', '事业五部', '事业六部')
446 AND DATE(refund.tksj) >= '{startDate:yyyy-MM-dd}' 451 AND DATE(refund.tksj) >= '{startDate:yyyy-MM-dd}'
447 AND DATE(refund.tksj) <= '{endDate:yyyy-MM-dd}' 452 AND DATE(refund.tksj) <= '{endDate:yyyy-MM-dd}'
448 - AND store.syb IN ('{unitIdsStr}')  
449 - GROUP BY store.syb"; 453 + AND target.F_BusinessUnit IN ('{unitIdsStr}')
  454 + GROUP BY target.F_BusinessUnit";
450 455
451 var refundPerformanceData = await _db.Ado.SqlQueryAsync<dynamic>(refundPerformanceSql); 456 var refundPerformanceData = await _db.Ado.SqlQueryAsync<dynamic>(refundPerformanceSql);
452 457