From 224ddf1be582c49ff59ac78832be228a665a5ce2 Mon Sep 17 00:00:00 2001
From: cheche <717840555@qq.com>
Date: Thu, 7 Mar 2024 09:33:13 +0800
Subject: [PATCH] =?UTF-8?q?feat=20=E9=A4=90=E9=A5=AE=E4=B8=BB=E9=A1=B5?=
=?UTF-8?q?=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Order/Controllers/BalancesController.cs | 20 ++++
.../Order/Request/AverageDailyRequest.cs | 8 ++
.../Order/Request/SpendingDetailRequest.cs | 8 ++
.../Order/Response/AverageDailyResponse.cs | 25 +++++
.../Order/Response/SpendingDetailResponse.cs | 20 +++-
.../Order/Services/IBalanceService.cs | 2 +
.../Services/Implements/BalanceService.cs | 97 +++++++++++++++++--
7 files changed, 168 insertions(+), 12 deletions(-)
create mode 100644 Src/Dlhis.Canteen/Order/Request/AverageDailyRequest.cs
create mode 100644 Src/Dlhis.Canteen/Order/Request/SpendingDetailRequest.cs
create mode 100644 Src/Dlhis.Canteen/Order/Response/AverageDailyResponse.cs
diff --git a/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs b/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs
index a94dc314..b8ab1e83 100644
--- a/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs
+++ b/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs
@@ -147,6 +147,26 @@ public class BalancesController : ControllerBase
return await _balanceService.GetConsumeNumberAsync();
}
+ ///
+ /// 消费人数详情
+ ///
+ ///
+ [HttpGet("spendingDetails")]
+ public async Task> GetSpendingDetailsAsync([FromQuery]SpendingDetailRequest request)
+ {
+ return await _balanceService.GetSpendingDetailsAsync(request);
+ }
+
+ ///
+ /// 日消费均额
+ ///
+ ///
+ ///
+ [HttpGet("averageDaily")]
+ public async Task> AverageDailyAsync([FromQuery] AverageDailyRequest request)
+ {
+ return await _balanceService.AverageDailyAsync(request);
+ }
///
/// 获取消费机详情
diff --git a/Src/Dlhis.Canteen/Order/Request/AverageDailyRequest.cs b/Src/Dlhis.Canteen/Order/Request/AverageDailyRequest.cs
new file mode 100644
index 00000000..01a91d70
--- /dev/null
+++ b/Src/Dlhis.Canteen/Order/Request/AverageDailyRequest.cs
@@ -0,0 +1,8 @@
+using Kurisu.Core.DataAccess.Dto;
+
+namespace Dlhis.Canteen.Order.Request
+{
+ public class AverageDailyRequest : PageDto
+ {
+ }
+}
diff --git a/Src/Dlhis.Canteen/Order/Request/SpendingDetailRequest.cs b/Src/Dlhis.Canteen/Order/Request/SpendingDetailRequest.cs
new file mode 100644
index 00000000..fcdcff5f
--- /dev/null
+++ b/Src/Dlhis.Canteen/Order/Request/SpendingDetailRequest.cs
@@ -0,0 +1,8 @@
+using Kurisu.Core.DataAccess.Dto;
+
+namespace Dlhis.Canteen.Order.Request
+{
+ public class SpendingDetailRequest:PageDto
+ {
+ }
+}
diff --git a/Src/Dlhis.Canteen/Order/Response/AverageDailyResponse.cs b/Src/Dlhis.Canteen/Order/Response/AverageDailyResponse.cs
new file mode 100644
index 00000000..92541825
--- /dev/null
+++ b/Src/Dlhis.Canteen/Order/Response/AverageDailyResponse.cs
@@ -0,0 +1,25 @@
+namespace Dlhis.Canteen.Order.Response
+{
+ public class AverageDailyResponse
+ {
+ ///
+ /// 档案号/QRCode
+ ///
+ public string UserNo { get; set; }
+
+ ///
+ /// 姓名
+ ///
+ public string Name { get; set; }
+
+ ///
+ /// 学工号
+ ///
+ public string UserCode { get; set; }
+
+ ///
+ /// 日消费均额
+ ///
+ public int AverageAmount { get; set; }
+ }
+}
diff --git a/Src/Dlhis.Canteen/Order/Response/SpendingDetailResponse.cs b/Src/Dlhis.Canteen/Order/Response/SpendingDetailResponse.cs
index ad309eb9..8ad95ac5 100644
--- a/Src/Dlhis.Canteen/Order/Response/SpendingDetailResponse.cs
+++ b/Src/Dlhis.Canteen/Order/Response/SpendingDetailResponse.cs
@@ -5,9 +5,9 @@ namespace Dlhis.Canteen.Order.Response
public class SpendingDetailResponse
{
///
- /// 档案号
+ /// 档案号/QRCode
///
- public string No { get; set; }
+ public string UserNo { get; set; }
///
/// 姓名
@@ -17,8 +17,22 @@ namespace Dlhis.Canteen.Order.Response
///
/// 学工号
///
- public string Code { get; set; }
+ public string UserCode { get; set; }
+ ///
+ /// 部门号
+ ///
+ public string DepartmentNo { get; set; }
+
+ ///
+ /// 成本中心
+ ///
+ public string CostId { get; set; }
+
+ ///
+ /// 消费者所在基地
+ ///
+ public string OriginTenantId { get; set; }
}
}
diff --git a/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs b/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs
index 73c3497a..8302795d 100644
--- a/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs
+++ b/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs
@@ -27,7 +27,9 @@ public interface IBalanceService : IScopeDependency
Task GetConsumeNumberAsync();
+ Task> GetSpendingDetailsAsync(SpendingDetailRequest request);
+ Task> AverageDailyAsync(AverageDailyRequest request);
Task> GetConsumeDeviceAsync(GetConsumeDeviceRequest request);
diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs
index 94370d33..dcfc0ab5 100644
--- a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs
+++ b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs
@@ -12,6 +12,7 @@ using Kurisu.Core.DataAccess.Entity;
using Kurisu.Core.User.Abstractions;
using Kurisu.SqlSugar.Extensions;
using Kurisu.SqlSugar.Services;
+using Mapster;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
@@ -565,7 +566,7 @@ public class BalanceService : IBalanceService
.Where(x =>x.Status == CanteenBusinessPlaceStatusEnumType.Opened)
.ToListAsync();
- var time = DateTime.Now.ToString("yyyy-MM-dd");
+
//所有消费数据
var bs = await _dbContext.Queryable()
.Where(x => x.Type == BalanceRecordTypeEnumType.Out)
@@ -573,13 +574,8 @@ public class BalanceService : IBalanceService
//可消费人数
var consumerable = bs.Select(x => x.UserCode).Distinct().Count();
- //当日消费数据
- var monthbs = bs
- .Where(x => x.CostDateTime.ToString("yyyy-MM-dd") == time);
- //当日消费额
- var monthlySpending = monthbs.Sum(x => x.Amount);
- //当日消费人数
- var monthlyCount = monthbs.Select(x => x.UserCode).Distinct().Count();
+ var dailyNumber = SameDay(bs,"");
+
//消费走势
var months = await GetConsumptionTrendsAsync(ConsumptionTrendEnumType.Month);
@@ -591,15 +587,98 @@ public class BalanceService : IBalanceService
OffNumber = offCount.Count,
PlaceNumber = places.Count,
ConsumerableNumber = consumerable,
- DailyNumber = monthlyCount != 0 ? Math.Abs((int)Math.Ceiling(monthlySpending / monthlyCount)) : 0,
+ DailyNumber = dailyNumber,
Days = days,
Months = months
};
return res;
}
+ ///
+ /// 获取单日消费数据
+ ///
+ ///
+ ///
+ ///
+ private int SameDay(List bs,string userCode)
+ {
+ var time = DateTime.Now.ToString("yyyy-MM-dd");
+ var b = userCode.IsEmpty();
+ //当日消费数据
+ var monthbs = bs
+ .Where(x => x.CostDateTime.ToString("yyyy-MM-dd") == time)
+ .WhereIF(!userCode.IsEmpty(),x => x.UserCode == userCode);
+ //当日消费额
+ var monthlySpending = monthbs.Sum(x => x.Amount);
+ //当日消费人数
+ var monthlyCount = monthbs.Select(x => x.UserCode).Distinct().Count();
+ var dailyNumber = monthlyCount != 0 ? Math.Abs((int)Math.Ceiling(monthlySpending / monthlyCount)) : 0;
+ return dailyNumber;
+ }
+ public async Task> GetSpendingDetailsAsync(SpendingDetailRequest request)
+ {
+ var brs = await _dbContext
+ .Queryable()
+ .Where(x => x.Type == BalanceRecordTypeEnumType.Out)
+ .ToListAsync();
+ var codes = brs.Select(x => x.UserCode).ToList().Distinct().ToList();
+ var lst = new List();
+ foreach (var code in codes)
+ {
+ var br = brs.Where(x => x.UserCode == code).FirstOrDefault();
+ var res = br.Adapt();
+ lst.Add(res);
+ }
+
+ // 分页操作
+ var startIndex = (request.PageIndex - 1) * request.PageSize;
+ var pagedData = lst.Skip(startIndex).Take(request.PageSize).ToList();
+
+ var pagination = new Pagination
+ {
+ PageIndex = request.PageIndex,
+ PageSize = request.PageSize,
+ Total = lst.Count, // 使用原始列表的总数进行分页
+ Data = pagedData
+ };
+
+ return pagination;
+ }
+
+ public async Task> AverageDailyAsync(AverageDailyRequest request)
+ {
+ //所有消费数据
+ var brs = await _dbContext.Queryable()
+ .Where(x => x.Type == BalanceRecordTypeEnumType.Out)
+ .ToListAsync();
+ var codes = brs.Select(x => x.UserCode).ToList().Distinct().ToList();
+
+ var lst = new List();
+ foreach (var code in codes)
+ {
+ var br = brs.Where(x => x.UserCode == code).FirstOrDefault();
+ var res = br.Adapt();
+ var dailyNumber = SameDay(brs,code);
+ res.AverageAmount = dailyNumber;
+ lst.Add(res);
+ }
+
+ // 分页操作
+ var startIndex = (request.PageIndex - 1) * request.PageSize;
+ var pagedData = lst.Skip(startIndex).Take(request.PageSize).ToList();
+
+ var pagination = new Pagination
+ {
+ PageIndex = request.PageIndex,
+ PageSize = request.PageSize,
+ Total = lst.Count, // 使用原始列表的总数进行分页
+ Data = pagedData
+ };
+
+ return pagination;
+ }
public async Task> GetConsumeDeviceAsync(GetConsumeDeviceRequest request)
{