feat 餐饮主页接口
This commit is contained in:
@@ -147,6 +147,26 @@ public class BalancesController : ControllerBase
|
|||||||
return await _balanceService.GetConsumeNumberAsync();
|
return await _balanceService.GetConsumeNumberAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 消费人数详情
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet("spendingDetails")]
|
||||||
|
public async Task<Pagination<SpendingDetailResponse>> GetSpendingDetailsAsync([FromQuery]SpendingDetailRequest request)
|
||||||
|
{
|
||||||
|
return await _balanceService.GetSpendingDetailsAsync(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 日消费均额
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="request"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet("averageDaily")]
|
||||||
|
public async Task<Pagination<AverageDailyResponse>> AverageDailyAsync([FromQuery] AverageDailyRequest request)
|
||||||
|
{
|
||||||
|
return await _balanceService.AverageDailyAsync(request);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取消费机详情
|
/// 获取消费机详情
|
||||||
|
|||||||
8
Src/Dlhis.Canteen/Order/Request/AverageDailyRequest.cs
Normal file
8
Src/Dlhis.Canteen/Order/Request/AverageDailyRequest.cs
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
using Kurisu.Core.DataAccess.Dto;
|
||||||
|
|
||||||
|
namespace Dlhis.Canteen.Order.Request
|
||||||
|
{
|
||||||
|
public class AverageDailyRequest : PageDto
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
8
Src/Dlhis.Canteen/Order/Request/SpendingDetailRequest.cs
Normal file
8
Src/Dlhis.Canteen/Order/Request/SpendingDetailRequest.cs
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
using Kurisu.Core.DataAccess.Dto;
|
||||||
|
|
||||||
|
namespace Dlhis.Canteen.Order.Request
|
||||||
|
{
|
||||||
|
public class SpendingDetailRequest:PageDto
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
25
Src/Dlhis.Canteen/Order/Response/AverageDailyResponse.cs
Normal file
25
Src/Dlhis.Canteen/Order/Response/AverageDailyResponse.cs
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
namespace Dlhis.Canteen.Order.Response
|
||||||
|
{
|
||||||
|
public class AverageDailyResponse
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 档案号/QRCode
|
||||||
|
/// </summary>
|
||||||
|
public string UserNo { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 姓名
|
||||||
|
/// </summary>
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 学工号
|
||||||
|
/// </summary>
|
||||||
|
public string UserCode { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 日消费均额
|
||||||
|
/// </summary>
|
||||||
|
public int AverageAmount { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,9 +5,9 @@ namespace Dlhis.Canteen.Order.Response
|
|||||||
public class SpendingDetailResponse
|
public class SpendingDetailResponse
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 档案号
|
/// 档案号/QRCode
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string No { get; set; }
|
public string UserNo { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 姓名
|
/// 姓名
|
||||||
@@ -17,8 +17,22 @@ namespace Dlhis.Canteen.Order.Response
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 学工号
|
/// 学工号
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string Code { get; set; }
|
public string UserCode { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 部门号
|
||||||
|
/// </summary>
|
||||||
|
public string DepartmentNo { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 成本中心
|
||||||
|
/// </summary>
|
||||||
|
public string CostId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 消费者所在基地
|
||||||
|
/// </summary>
|
||||||
|
public string OriginTenantId { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,9 @@ public interface IBalanceService : IScopeDependency
|
|||||||
|
|
||||||
Task<ConsumeNumberResponse> GetConsumeNumberAsync();
|
Task<ConsumeNumberResponse> GetConsumeNumberAsync();
|
||||||
|
|
||||||
|
Task<Pagination<SpendingDetailResponse>> GetSpendingDetailsAsync(SpendingDetailRequest request);
|
||||||
|
|
||||||
|
Task<Pagination<AverageDailyResponse>> AverageDailyAsync(AverageDailyRequest request);
|
||||||
|
|
||||||
Task<Pagination<DevicePageResponse>> GetConsumeDeviceAsync(GetConsumeDeviceRequest request);
|
Task<Pagination<DevicePageResponse>> GetConsumeDeviceAsync(GetConsumeDeviceRequest request);
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ using Kurisu.Core.DataAccess.Entity;
|
|||||||
using Kurisu.Core.User.Abstractions;
|
using Kurisu.Core.User.Abstractions;
|
||||||
using Kurisu.SqlSugar.Extensions;
|
using Kurisu.SqlSugar.Extensions;
|
||||||
using Kurisu.SqlSugar.Services;
|
using Kurisu.SqlSugar.Services;
|
||||||
|
using Mapster;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using SqlSugar;
|
using SqlSugar;
|
||||||
|
|
||||||
@@ -565,7 +566,7 @@ public class BalanceService : IBalanceService
|
|||||||
.Where(x =>x.Status == CanteenBusinessPlaceStatusEnumType.Opened)
|
.Where(x =>x.Status == CanteenBusinessPlaceStatusEnumType.Opened)
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
|
|
||||||
var time = DateTime.Now.ToString("yyyy-MM-dd");
|
|
||||||
//所有消费数据
|
//所有消费数据
|
||||||
var bs = await _dbContext.Queryable<BalanceRecordEntity>()
|
var bs = await _dbContext.Queryable<BalanceRecordEntity>()
|
||||||
.Where(x => x.Type == BalanceRecordTypeEnumType.Out)
|
.Where(x => x.Type == BalanceRecordTypeEnumType.Out)
|
||||||
@@ -573,13 +574,8 @@ public class BalanceService : IBalanceService
|
|||||||
//可消费人数
|
//可消费人数
|
||||||
var consumerable = bs.Select(x => x.UserCode).Distinct().Count();
|
var consumerable = bs.Select(x => x.UserCode).Distinct().Count();
|
||||||
|
|
||||||
//当日消费数据
|
var dailyNumber = SameDay(bs,"");
|
||||||
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 months = await GetConsumptionTrendsAsync(ConsumptionTrendEnumType.Month);
|
var months = await GetConsumptionTrendsAsync(ConsumptionTrendEnumType.Month);
|
||||||
@@ -591,15 +587,98 @@ public class BalanceService : IBalanceService
|
|||||||
OffNumber = offCount.Count,
|
OffNumber = offCount.Count,
|
||||||
PlaceNumber = places.Count,
|
PlaceNumber = places.Count,
|
||||||
ConsumerableNumber = consumerable,
|
ConsumerableNumber = consumerable,
|
||||||
DailyNumber = monthlyCount != 0 ? Math.Abs((int)Math.Ceiling(monthlySpending / monthlyCount)) : 0,
|
DailyNumber = dailyNumber,
|
||||||
Days = days,
|
Days = days,
|
||||||
Months = months
|
Months = months
|
||||||
};
|
};
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 获取单日消费数据
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="bs"></param>
|
||||||
|
/// <param name="userCode"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
private int SameDay(List<BalanceRecordEntity> 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<Pagination<SpendingDetailResponse>> GetSpendingDetailsAsync(SpendingDetailRequest request)
|
||||||
|
{
|
||||||
|
var brs = await _dbContext
|
||||||
|
.Queryable<BalanceRecordEntity>()
|
||||||
|
.Where(x => x.Type == BalanceRecordTypeEnumType.Out)
|
||||||
|
.ToListAsync();
|
||||||
|
var codes = brs.Select(x => x.UserCode).ToList().Distinct().ToList();
|
||||||
|
|
||||||
|
var lst = new List<SpendingDetailResponse>();
|
||||||
|
foreach (var code in codes)
|
||||||
|
{
|
||||||
|
var br = brs.Where(x => x.UserCode == code).FirstOrDefault();
|
||||||
|
var res = br.Adapt<SpendingDetailResponse>();
|
||||||
|
lst.Add(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 分页操作
|
||||||
|
var startIndex = (request.PageIndex - 1) * request.PageSize;
|
||||||
|
var pagedData = lst.Skip(startIndex).Take(request.PageSize).ToList();
|
||||||
|
|
||||||
|
var pagination = new Pagination<SpendingDetailResponse>
|
||||||
|
{
|
||||||
|
PageIndex = request.PageIndex,
|
||||||
|
PageSize = request.PageSize,
|
||||||
|
Total = lst.Count, // 使用原始列表的总数进行分页
|
||||||
|
Data = pagedData
|
||||||
|
};
|
||||||
|
|
||||||
|
return pagination;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<Pagination<AverageDailyResponse>> AverageDailyAsync(AverageDailyRequest request)
|
||||||
|
{
|
||||||
|
//所有消费数据
|
||||||
|
var brs = await _dbContext.Queryable<BalanceRecordEntity>()
|
||||||
|
.Where(x => x.Type == BalanceRecordTypeEnumType.Out)
|
||||||
|
.ToListAsync();
|
||||||
|
var codes = brs.Select(x => x.UserCode).ToList().Distinct().ToList();
|
||||||
|
|
||||||
|
var lst = new List<AverageDailyResponse>();
|
||||||
|
foreach (var code in codes)
|
||||||
|
{
|
||||||
|
var br = brs.Where(x => x.UserCode == code).FirstOrDefault();
|
||||||
|
var res = br.Adapt<AverageDailyResponse>();
|
||||||
|
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<AverageDailyResponse>
|
||||||
|
{
|
||||||
|
PageIndex = request.PageIndex,
|
||||||
|
PageSize = request.PageSize,
|
||||||
|
Total = lst.Count, // 使用原始列表的总数进行分页
|
||||||
|
Data = pagedData
|
||||||
|
};
|
||||||
|
|
||||||
|
return pagination;
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<Pagination<DevicePageResponse>> GetConsumeDeviceAsync(GetConsumeDeviceRequest request)
|
public async Task<Pagination<DevicePageResponse>> GetConsumeDeviceAsync(GetConsumeDeviceRequest request)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user