diff --git a/antis-ncc-admin/src/views/extend/storeDashboard/index.vue b/antis-ncc-admin/src/views/extend/storeDashboard/index.vue index 92622b6..cbdb8e9 100644 --- a/antis-ncc-admin/src/views/extend/storeDashboard/index.vue +++ b/antis-ncc-admin/src/views/extend/storeDashboard/index.vue @@ -92,18 +92,9 @@ - + - - -
- - 每日运营数据趋势 -
-
-
-
- +
@@ -182,7 +173,8 @@ + + + + + + public string itemCategory { get; set; } + + /// + /// 健康师账号 + /// + public string healthCoachId { get; set; } + + /// + /// 健康师姓名 + /// + public string healthCoachName { get; set; } + + /// + /// 健康师业绩 + /// + public decimal healthCoachPerformance { get; set; } } } diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqHytkHytkService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqHytkHytkService.cs index 6731e6a..f2c9210 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqHytkHytkService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqHytkHytkService.cs @@ -27,6 +27,7 @@ using NCC.Extend.Entitys.lq_hytk_jksyj; using NCC.Extend.Entitys.lq_hytk_kjbsyj; using NCC.Extend.Entitys.lq_hytk_mx; using NCC.Extend.Entitys.lq_kd_pxmx; +using NCC.Extend.Entitys.lq_kd_jksyj; using NCC.Extend.Entitys.lq_xmzl; using NCC.Extend.Entitys.lq_khxx; using NCC.Extend.Entitys.lq_mdxx; @@ -915,7 +916,43 @@ namespace NCC.Extend.LqHytkHytk memberDict = members.ToDictionary(x => x.Id, x => x.Sjh ?? ""); } - // 5. 组装数据 + // 5. 批量查询健康师业绩信息 + var billingItemIds = mxList.Select(x => x.BillingItemId).Where(x => !string.IsNullOrEmpty(x)).Distinct().ToList(); + var healthCoachDict = new Dictionary(); + if (billingItemIds.Any()) + { + // 通过开单品项明细ID查询开单品项明细,获取开单编号和品项明细ID + var pxmxList = await _db.Queryable() + .Where(x => billingItemIds.Contains(x.Id)) + .Select(x => new { x.Id, x.Glkdbh }) + .ToListAsync(); + + if (pxmxList.Any()) + { + var glkdbhList = pxmxList.Select(x => x.Glkdbh).Where(x => !string.IsNullOrEmpty(x)).Distinct().ToList(); + var pxmxIdList = pxmxList.Select(x => x.Id).Distinct().ToList(); + + // 通过开单编号和品项明细ID查询健康师业绩 + var jksyjList = await _db.Queryable() + .Where(x => glkdbhList.Contains(x.Glkdbh) && pxmxIdList.Contains(x.Kdpxid) && x.IsEffective == 1) + .Select(x => new { x.Glkdbh, x.Kdpxid, x.Jkszh, x.Jksxm, x.Jksyj }) + .ToListAsync(); + + // 建立开单品项明细ID到健康师信息的映射 + foreach (var jksyj in jksyjList) + { + // 找到对应的开单品项明细ID + var pxmxId = pxmxList.FirstOrDefault(x => x.Glkdbh == jksyj.Glkdbh && x.Id == jksyj.Kdpxid)?.Id; + if (!string.IsNullOrEmpty(pxmxId)) + { + var jksyjValue = decimal.TryParse(jksyj.Jksyj, out var perf) ? perf : 0; + healthCoachDict[pxmxId] = (jksyj.Jkszh ?? "", jksyj.Jksxm ?? "", jksyjValue); + } + } + } + } + + // 6. 组装数据 var resultList = new List(); foreach (var mx in mxList) { @@ -936,6 +973,11 @@ namespace NCC.Extend.LqHytkHytk var memberId = mx.MemberId ?? (refundInfo?.Hy); var refundTime = mx.Tksj ?? refundInfo?.Tksj; + // 获取健康师信息 + var healthCoachInfo = !string.IsNullOrEmpty(mx.BillingItemId) && healthCoachDict.ContainsKey(mx.BillingItemId) + ? healthCoachDict[mx.BillingItemId] + : (Id: "", Name: "", Performance: 0m); + resultList.Add(new RefundDetailListOutput { storeId = refundInfo?.Md, @@ -952,11 +994,14 @@ namespace NCC.Extend.LqHytkHytk performanceType = mx.PerformanceType, beautyType = mx.BeautyType, sourceType = mx.SourceType, - itemCategory = mx.ItemCategory + itemCategory = mx.ItemCategory, + healthCoachId = healthCoachInfo.Id, + healthCoachName = healthCoachInfo.Name, + healthCoachPerformance = healthCoachInfo.Performance }); } - // 6. 排序 + // 7. 排序 var sidx = string.IsNullOrEmpty(input.sidx) ? "refundTime" : input.sidx; var sort = string.IsNullOrEmpty(input.sort) ? "desc" : input.sort; @@ -969,7 +1014,7 @@ namespace NCC.Extend.LqHytkHytk resultList = resultList.OrderBy(x => GetPropertyValue(x, sidx)).ToList(); } - // 7. 分页 + // 8. 分页 var total = resultList.Count; var skip = (input.currentPage - 1) * input.pageSize; var pagedList = resultList.Skip(skip).Take(input.pageSize).ToList(); @@ -1069,7 +1114,43 @@ namespace NCC.Extend.LqHytkHytk memberDict = members.ToDictionary(x => x.Id, x => x.Sjh ?? ""); } - // 5. 组装数据 + // 5. 批量查询健康师业绩信息 + var billingItemIds = mxList.Select(x => x.BillingItemId).Where(x => !string.IsNullOrEmpty(x)).Distinct().ToList(); + var healthCoachDict = new Dictionary(); + if (billingItemIds.Any()) + { + // 通过开单品项明细ID查询开单品项明细,获取开单编号和品项明细ID + var pxmxList = await _db.Queryable() + .Where(x => billingItemIds.Contains(x.Id)) + .Select(x => new { x.Id, x.Glkdbh }) + .ToListAsync(); + + if (pxmxList.Any()) + { + var glkdbhList = pxmxList.Select(x => x.Glkdbh).Where(x => !string.IsNullOrEmpty(x)).Distinct().ToList(); + var pxmxIdList = pxmxList.Select(x => x.Id).Distinct().ToList(); + + // 通过开单编号和品项明细ID查询健康师业绩 + var jksyjList = await _db.Queryable() + .Where(x => glkdbhList.Contains(x.Glkdbh) && pxmxIdList.Contains(x.Kdpxid) && x.IsEffective == 1) + .Select(x => new { x.Glkdbh, x.Kdpxid, x.Jkszh, x.Jksxm, x.Jksyj }) + .ToListAsync(); + + // 建立开单品项明细ID到健康师信息的映射 + foreach (var jksyj in jksyjList) + { + // 找到对应的开单品项明细ID + var pxmxId = pxmxList.FirstOrDefault(x => x.Glkdbh == jksyj.Glkdbh && x.Id == jksyj.Kdpxid)?.Id; + if (!string.IsNullOrEmpty(pxmxId)) + { + var jksyjValue = decimal.TryParse(jksyj.Jksyj, out var perf) ? perf : 0; + healthCoachDict[pxmxId] = (jksyj.Jkszh ?? "", jksyj.Jksxm ?? "", jksyjValue); + } + } + } + } + + // 6. 组装数据 var resultList = new List(); foreach (var mx in mxList) { @@ -1090,6 +1171,11 @@ namespace NCC.Extend.LqHytkHytk var memberId = mx.MemberId ?? (refundInfo?.Hy); var refundTime = mx.Tksj ?? refundInfo?.Tksj; + // 获取健康师信息 + var healthCoachInfo = !string.IsNullOrEmpty(mx.BillingItemId) && healthCoachDict.ContainsKey(mx.BillingItemId) + ? healthCoachDict[mx.BillingItemId] + : (Id: "", Name: "", Performance: 0m); + resultList.Add(new RefundDetailListOutput { storeId = refundInfo?.Md, @@ -1106,11 +1192,14 @@ namespace NCC.Extend.LqHytkHytk performanceType = mx.PerformanceType, beautyType = mx.BeautyType, sourceType = mx.SourceType, - itemCategory = mx.ItemCategory + itemCategory = mx.ItemCategory, + healthCoachId = healthCoachInfo.Id, + healthCoachName = healthCoachInfo.Name, + healthCoachPerformance = healthCoachInfo.Performance }); } - // 6. 排序 + // 7. 排序 var sidx = string.IsNullOrEmpty(input.sidx) ? "refundTime" : input.sidx; var sort = string.IsNullOrEmpty(input.sort) ? "desc" : input.sort;