Commit 1f96867ec452904a46d535433d9012f382b5c995

Authored by “wangming”
1 parent 83e25a9e

feat: 新增消耗目标业绩和完成率统计

- 在GetBusinessStatistics方法中新增消耗目标业绩统计
- 目标业绩来自门店信息表的xhyj字段
- 计算消耗完成率(耗卡总金额 / 消耗目标业绩 * 100)
- 支持门店ID过滤
- 更新输出DTO和相关接口文档
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqReport/BusinessStatisticsOutput.cs
@@ -34,5 +34,15 @@ namespace NCC.Extend.Entitys.Dto.LqReport @@ -34,5 +34,15 @@ namespace NCC.Extend.Entitys.Dto.LqReport
34 /// 退卡人数 34 /// 退卡人数
35 /// </summary> 35 /// </summary>
36 public int RefundCount { get; set; } 36 public int RefundCount { get; set; }
  37 +
  38 + /// <summary>
  39 + /// 消耗目标业绩(所有门店xhyj字段的总和)
  40 + /// </summary>
  41 + public decimal TargetConsumeAmount { get; set; }
  42 +
  43 + /// <summary>
  44 + /// 消耗完成率(耗卡总金额 / 消耗目标业绩 * 100)
  45 + /// </summary>
  46 + public decimal ConsumeCompletionRate { get; set; }
37 } 47 }
38 } 48 }
netcore/src/Modularity/Extend/NCC.Extend/LqReportService.cs
@@ -721,6 +721,8 @@ namespace NCC.Extend @@ -721,6 +721,8 @@ namespace NCC.Extend
721 /// - BillingCount: 开单人数(按客户去重) 721 /// - BillingCount: 开单人数(按客户去重)
722 /// - ConsumeCount: 耗卡人数(按客户去重) 722 /// - ConsumeCount: 耗卡人数(按客户去重)
723 /// - RefundCount: 退卡人数(按客户去重) 723 /// - RefundCount: 退卡人数(按客户去重)
  724 + /// - TargetConsumeAmount: 消耗目标业绩(所有门店xhyj字段的总和)
  725 + /// - ConsumeCompletionRate: 消耗完成率(百分比)
724 /// </remarks> 726 /// </remarks>
725 /// <param name="input">查询参数</param> 727 /// <param name="input">查询参数</param>
726 /// <returns>业务统计数据</returns> 728 /// <returns>业务统计数据</returns>
@@ -811,6 +813,27 @@ namespace NCC.Extend @@ -811,6 +813,27 @@ namespace NCC.Extend
811 var refundCount = Convert.ToInt32(refundResult?.FirstOrDefault()?.refund_count ?? 0); 813 var refundCount = Convert.ToInt32(refundResult?.FirstOrDefault()?.refund_count ?? 0);
812 var refundAmount = Convert.ToDecimal(refundResult?.FirstOrDefault()?.refund_amount ?? 0m); 814 var refundAmount = Convert.ToDecimal(refundResult?.FirstOrDefault()?.refund_amount ?? 0m);
813 815
  816 + // 第四步:获取消耗目标业绩(所有门店xhyj字段的总和)
  817 + var targetSql = "SELECT COALESCE(SUM(CAST(md.xhyj AS DECIMAL(18,2))), 0) as target_consume_amount FROM lq_mdxx md WHERE 1=1";
  818 + object targetParameters = null;
  819 +
  820 + if (input.StoreIds != null && input.StoreIds.Any())
  821 + {
  822 + targetSql += " AND md.F_Id IN @storeIds";
  823 + targetParameters = new { storeIds = input.StoreIds };
  824 + }
  825 +
  826 + var targetResult = await _db.Ado.SqlQueryAsync<dynamic>(targetSql, targetParameters);
  827 + var targetConsumeAmount = Convert.ToDecimal(targetResult?.FirstOrDefault()?.target_consume_amount ?? 0m);
  828 +
  829 + // 计算消耗完成率
  830 + var consumeCompletionRate = 0m;
  831 + if (targetConsumeAmount > 0)
  832 + {
  833 + consumeCompletionRate = (consumeAmount / targetConsumeAmount) * 100m;
  834 + consumeCompletionRate = decimal.Round(consumeCompletionRate, 2);
  835 + }
  836 +
814 var result = new BusinessStatisticsOutput 837 var result = new BusinessStatisticsOutput
815 { 838 {
816 TotalBillingAmount = billingAmount, 839 TotalBillingAmount = billingAmount,
@@ -818,7 +841,9 @@ namespace NCC.Extend @@ -818,7 +841,9 @@ namespace NCC.Extend
818 TotalRefundAmount = refundAmount, 841 TotalRefundAmount = refundAmount,
819 BillingCount = billingCount, 842 BillingCount = billingCount,
820 ConsumeCount = consumeCount, 843 ConsumeCount = consumeCount,
821 - RefundCount = refundCount 844 + RefundCount = refundCount,
  845 + TargetConsumeAmount = targetConsumeAmount,
  846 + ConsumeCompletionRate = consumeCompletionRate
822 }; 847 };
823 848
824 return result; 849 return result;