diff --git a/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs b/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs index 0e28e4db..1f26795a 100644 --- a/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs +++ b/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs @@ -111,6 +111,18 @@ public class BalancesController : ControllerBase return await _balanceService.GetPageByUserAsync(request); } + /// + /// 用户集团消费记录 + /// + /// + /// + [HttpGet("user/group/page")] + [IgnoreTenant] + public async Task> GetUserBalanceGroupAsync(BalanceRecordUserGroupPageRequest request) + { + return await _balanceService.GetUserBalanceGroupAsync(request); + } + /// /// 获取消费机总数、离线设备数量、营业点数量、可消费人数、人均日消费额 /// diff --git a/Src/Dlhis.Canteen/Order/Request/BalanceRecordUserGroupPageRequest.cs b/Src/Dlhis.Canteen/Order/Request/BalanceRecordUserGroupPageRequest.cs new file mode 100644 index 00000000..30f332cb --- /dev/null +++ b/Src/Dlhis.Canteen/Order/Request/BalanceRecordUserGroupPageRequest.cs @@ -0,0 +1,30 @@ +using System.ComponentModel.DataAnnotations; +using Kurisu.AspNetCore.CustomClass; +using Kurisu.AspNetCore.DataAccess.Dto; + +namespace Dlhis.Canteen.Order.Request; + +public class BalanceRecordUserGroupPageRequest : PageDto, IValidatableObject +{ + /// + /// 日期范围查询 + /// + public DateTimePeriod SearchDateTimePeriod { get; set; } + + /// + /// 工号 + /// + [Required(ErrorMessage = "工号不可为空")] + public string UserCode { get; set; } + + + public IEnumerable Validate(ValidationContext validationContext) + { + if (SearchDateTimePeriod is { End: not null }) + { + SearchDateTimePeriod.End = SearchDateTimePeriod.End.Value.AddDays(1).AddSeconds(-1); + } + + yield break; + } +} \ No newline at end of file diff --git a/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs b/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs index 32dea145..b40fb39f 100644 --- a/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs +++ b/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs @@ -12,6 +12,10 @@ public interface IBalanceService : IScopeDependency Task GetPageByUserAsync(BalanceRecordUserPageRequest request); + + Task> GetUserBalanceGroupAsync(BalanceRecordUserGroupPageRequest request); + + Task SupplementBalanceAsync(BalanceSupplementRequest request); /// diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs index 57b8d488..8c6fedcc 100644 --- a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs +++ b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs @@ -382,6 +382,31 @@ public class BalanceService : IBalanceService }; } + public async Task> GetUserBalanceGroupAsync(BalanceRecordUserGroupPageRequest request) + { + return 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) + .Where((record, ga) => record.UserCode == request.UserCode) + .Where(record => record.Status == BalanceRecordStatusEnumType.Valid && record.Type == BalanceRecordTypeEnumType.Out) + .Where(record => record.Source != BalanceRecordSourceEnumType.EMealVoucher) //不展示电子餐券信息 + .WhereIF(request.SearchDateTimePeriod.HasValue(), record => record.CostDate >= request.SearchDateTimePeriod.Start && record.CostDate <= request.SearchDateTimePeriod.End) + .OrderBy(record => record.CostDateTime) + .Select((record, ga, department, bPlace) => new BalanceRecordUserPageResponse + { + Id = record.Id, + CurrentAmount = SqlFunc.Abs(record.Amount), + Source = record.Source, + No = record.No, + BusinessPlaceName = bPlace.Name, + ShiftType = record.ShiftType, + CostDateTime = record.CostDateTime, + ApplicationType = record.ApplicationType, + }) + .ToPageListAsync(request); + } + public async Task GetConsumeNumberAsync() {