diff --git a/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs b/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs
index c99c0b3a..59c3f328 100644
--- a/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs
+++ b/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs
@@ -43,4 +43,15 @@ public class BalancesController : ControllerBase
{
return await _balanceService.GetPageByDeviceUniqueNoAsync(request);
}
+
+ ///
+ /// 用户消费记录
+ ///
+ ///
+ ///
+ [HttpGet("user/page")]
+ public async Task> GetPageByUserAsync([FromQuery] BalanceRecordUserPageRequest request)
+ {
+ return await _balanceService.GetPageByUserAsync(request);
+ }
}
diff --git a/Src/Dlhis.Canteen/Order/Request/BalanceRecordUserPageRequest.cs b/Src/Dlhis.Canteen/Order/Request/BalanceRecordUserPageRequest.cs
new file mode 100644
index 00000000..aed5e86e
--- /dev/null
+++ b/Src/Dlhis.Canteen/Order/Request/BalanceRecordUserPageRequest.cs
@@ -0,0 +1,67 @@
+using Dlhis.Entity.Canteen.Enums;
+using Kurisu.Core.CustomClass;
+using System.ComponentModel.DataAnnotations;
+using Kurisu.Core.DataAccess.Dto;
+
+namespace Dlhis.Canteen.Order.Request
+{
+ public class BalanceRecordUserPageRequest : PageDto, IValidatableObject
+ {
+ ///
+ /// 查询日期范围类型 DateTimeSearchEnumType
+ ///
+ [EnumDataType(typeof(DateTimeSearchEnumType))]
+ public DateTimeSearchEnumType? SearchDateTimeDimension { get; set; }
+
+ ///
+ /// 日期范围查询
+ ///
+ public DateTimePeriod SearchDateTimePeriod { get; set; }
+
+ public IEnumerable Validate(ValidationContext validationContext)
+ {
+ var now = DateTime.Now;
+ if (SearchDateTimeDimension.HasValue)
+ {
+ //重新赋值
+ SearchDateTimePeriod = new DateTimePeriod();
+
+ if (SearchDateTimeDimension == DateTimeSearchEnumType.Day)
+ {
+ SearchDateTimePeriod.Start = DateTime.Today;
+ SearchDateTimePeriod.End = new DateTime(now.Year, now.Month, now.Day, 23, 59, 59);
+ }
+ else if (SearchDateTimeDimension == DateTimeSearchEnumType.Week)
+ {
+ SearchDateTimePeriod.Start = now.AddDays(1 - (int)now.DayOfWeek);
+ SearchDateTimePeriod.End = SearchDateTimePeriod.Start.Value.AddDays(6);
+ }
+ else if (SearchDateTimeDimension == DateTimeSearchEnumType.Month)
+ {
+ SearchDateTimePeriod.Start = new DateTime(now.Year, now.Month, 1);
+ SearchDateTimePeriod.End = SearchDateTimePeriod.Start.Value.AddMonths(1).AddDays(-1);
+ }
+ else if (SearchDateTimeDimension == DateTimeSearchEnumType.Season)
+ {
+ SearchDateTimePeriod.Start = now.AddMonths(0 - ((now.Month - 1) % 3));
+ SearchDateTimePeriod.End = now.AddMonths(3 - ((now.Month - 1) % 3)).AddMonths(1).AddDays(-1);
+ }
+ else if (SearchDateTimeDimension == DateTimeSearchEnumType.HalfOfYear)
+ {
+ SearchDateTimePeriod.Start = now.AddDays(-180);
+ SearchDateTimePeriod.End = now;
+ }
+ else if (SearchDateTimeDimension == DateTimeSearchEnumType.Year)
+ {
+ SearchDateTimePeriod.Start = new DateTime(now.Year, 1, 1);
+ SearchDateTimePeriod.End = SearchDateTimePeriod.Start.Value.AddYears(1).AddDays(-1);
+ }
+
+ SearchDateTimePeriod.Start = SearchDateTimePeriod.Start.Value.Date;
+ SearchDateTimePeriod.End = SearchDateTimePeriod.End.Value.Date;
+ }
+
+ yield break;
+ }
+ }
+}
diff --git a/Src/Dlhis.Canteen/Order/Response/BalanceRecordResponse.cs b/Src/Dlhis.Canteen/Order/Response/BalanceRecordResponse.cs
index bf715693..054ba498 100644
--- a/Src/Dlhis.Canteen/Order/Response/BalanceRecordResponse.cs
+++ b/Src/Dlhis.Canteen/Order/Response/BalanceRecordResponse.cs
@@ -32,6 +32,7 @@ public class BalanceRecordResponse
///
public string DepartmentNo { get; set; }
+
public string DepartmentName { get; set; }
///
diff --git a/Src/Dlhis.Canteen/Order/Response/BalanceRecordUserResponse.cs b/Src/Dlhis.Canteen/Order/Response/BalanceRecordUserResponse.cs
new file mode 100644
index 00000000..70ae969d
--- /dev/null
+++ b/Src/Dlhis.Canteen/Order/Response/BalanceRecordUserResponse.cs
@@ -0,0 +1,47 @@
+using Dlhis.Entity.Canteen.Enums;
+using Kurisu.AspNetCore.Utils.Extensions;
+
+namespace Dlhis.Canteen.Order.Response;
+
+public class BalanceRecordUserResponse
+{
+ public long Id { get; set; }
+
+ ///
+ /// 流水号
+ ///
+ public string No { get; set; }
+
+ ///
+ /// 来源
+ ///
+ public BalanceRecordSourceEnumType Source { get; set; }
+
+ public string SourceDesc => Source.GetDescription();
+
+ ///
+ /// 收入/支出
+ ///
+ public BalanceRecordTypeEnumType Type { get; set; }
+
+ public string TypeDesc => Type.GetDescription();
+
+ ///
+ /// 金额
+ ///
+ public decimal Amount { get; set; }
+
+ public string BusinessPlaceName { get; set; }
+
+ public string BusinessShiftName { get; set; }
+
+ ///
+ /// 数据状态
+ ///
+ public BalanceRecordStatusEnumType Status { get; set; }
+
+ ///
+ /// 数据状态描述
+ ///
+ public string StatusDesc => Status.GetDescription();
+}
diff --git a/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs b/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs
index 8e29f233..54da29aa 100644
--- a/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs
+++ b/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs
@@ -9,4 +9,6 @@ public interface IBalanceService : IScopeDependency
Task> GetPageAsync(BalanceRecordPageRequest request);
Task> GetPageByDeviceUniqueNoAsync(BalanceRecordPageByDeviceUniqueNoRequest request);
+
+ Task> GetPageByUserAsync(BalanceRecordUserPageRequest request);
}
diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs
index 2beb3444..00754341 100644
--- a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs
+++ b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs
@@ -3,6 +3,7 @@ using Dlhis.Canteen.Order.Response;
using Dlhis.Entity.Basic.Entity;
using Dlhis.Entity.Canteen.Entities;
using Kurisu.Core.DataAccess.Dto;
+using Kurisu.Core.User.Abstractions;
using Kurisu.SqlSugar.Attributes;
using Kurisu.SqlSugar.Extensions;
using Kurisu.SqlSugar.Services;
@@ -13,10 +14,12 @@ namespace Dlhis.Canteen.Order.Services.Implements;
public class BalanceService : IBalanceService
{
private readonly IDbContext _dbContext;
+ private readonly ICurrentUser _currentUser;
- public BalanceService(IDbContext dbContext)
+ public BalanceService(IDbContext dbContext, ICurrentUser currentUser)
{
_dbContext = dbContext;
+ _currentUser = currentUser;
}
public async Task> GetPageAsync(BalanceRecordPageRequest request)
@@ -123,4 +126,34 @@ public class BalanceService : IBalanceService
return page;
}
+
+ public async Task> GetPageByUserAsync(BalanceRecordUserPageRequest request)
+ {
+ //当前用户
+ var userId = _currentUser.GetIntSubjectId();
+
+ var page = await _dbContext.Queryable()
+ .LeftJoin((record, ga) => record.UserNo == ga.No)
+ .LeftJoin((record, ga, department) => ga.DepartmentNo == department.No)
+ .LeftJoin((record, ga, department, bplace) => record.BusinessPlaceCode == bplace.Code)
+ .LeftJoin((record, ga, department, bplace, bshift) => record.BusinessShiftCode == bshift.Code)
+ .WhereIF(request.SearchDateTimePeriod?.Start.HasValue == true, record => record.CreateTime >= request.SearchDateTimePeriod.Start)
+ .WhereIF(request.SearchDateTimePeriod?.End.HasValue == true, record => record.CreateTime <= request.SearchDateTimePeriod.End)
+ .Where((record, ga) => ga.IdentityUserId == userId)
+ .OrderBy(record => record.CreateTime, OrderByType.Desc)
+ .Select((record, ga, department, bplace, bshift) => new BalanceRecordUserResponse
+ {
+ Id = record.Id,
+ Amount = record.Amount,
+ Type = record.Type,
+ Status = record.Status,
+ Source = record.Source,
+ No = record.No,
+ BusinessPlaceName = bplace.Name,
+ BusinessShiftName = bshift.Name,
+ })
+ .ToPageListAsync(request);
+
+ return page;
+ }
}