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; + } }