feat 当前人员的消费记录

This commit is contained in:
2024-01-11 16:06:02 +08:00
parent 0ac04b0d2d
commit 353844f348
6 changed files with 162 additions and 1 deletions

View File

@@ -43,4 +43,15 @@ public class BalancesController : ControllerBase
{
return await _balanceService.GetPageByDeviceUniqueNoAsync(request);
}
/// <summary>
/// 用户消费记录
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpGet("user/page")]
public async Task<Pagination<BalanceRecordUserResponse>> GetPageByUserAsync([FromQuery] BalanceRecordUserPageRequest request)
{
return await _balanceService.GetPageByUserAsync(request);
}
}

View File

@@ -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
{
/// <summary>
/// 查询日期范围类型 DateTimeSearchEnumType
/// </summary>
[EnumDataType(typeof(DateTimeSearchEnumType))]
public DateTimeSearchEnumType? SearchDateTimeDimension { get; set; }
/// <summary>
/// 日期范围查询
/// </summary>
public DateTimePeriod SearchDateTimePeriod { get; set; }
public IEnumerable<ValidationResult> 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;
}
}
}

View File

@@ -32,6 +32,7 @@ public class BalanceRecordResponse
/// </summary>
public string DepartmentNo { get; set; }
public string DepartmentName { get; set; }
/// <summary>

View File

@@ -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; }
/// <summary>
/// 流水号
/// </summary>
public string No { get; set; }
/// <summary>
/// 来源
/// </summary>
public BalanceRecordSourceEnumType Source { get; set; }
public string SourceDesc => Source.GetDescription();
/// <summary>
/// 收入/支出
/// </summary>
public BalanceRecordTypeEnumType Type { get; set; }
public string TypeDesc => Type.GetDescription();
/// <summary>
/// 金额
/// </summary>
public decimal Amount { get; set; }
public string BusinessPlaceName { get; set; }
public string BusinessShiftName { get; set; }
/// <summary>
/// 数据状态
/// </summary>
public BalanceRecordStatusEnumType Status { get; set; }
/// <summary>
/// 数据状态描述
/// </summary>
public string StatusDesc => Status.GetDescription();
}

View File

@@ -9,4 +9,6 @@ public interface IBalanceService : IScopeDependency
Task<Pagination<BalanceRecordResponse>> GetPageAsync(BalanceRecordPageRequest request);
Task<Pagination<BalanceRecordResponse>> GetPageByDeviceUniqueNoAsync(BalanceRecordPageByDeviceUniqueNoRequest request);
Task<Pagination<BalanceRecordUserResponse>> GetPageByUserAsync(BalanceRecordUserPageRequest request);
}

View File

@@ -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<Pagination<BalanceRecordResponse>> GetPageAsync(BalanceRecordPageRequest request)
@@ -123,4 +126,34 @@ public class BalanceService : IBalanceService
return page;
}
public async Task<Pagination<BalanceRecordUserResponse>> GetPageByUserAsync(BalanceRecordUserPageRequest request)
{
//当前用户
var userId = _currentUser.GetIntSubjectId();
var page = await _dbContext.Queryable<BalanceRecordEntity>()
.LeftJoin<GainfoEntity>((record, ga) => record.UserNo == ga.No)
.LeftJoin<DepartmentEntity>((record, ga, department) => ga.DepartmentNo == department.No)
.LeftJoin<CanteenBusinessPlaceEntity>((record, ga, department, bplace) => record.BusinessPlaceCode == bplace.Code)
.LeftJoin<CanteenBusinessShiftEntity>((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;
}
}