feat: 功能优化和增加餐饮分析
This commit is contained in:
@@ -31,19 +31,7 @@ public class MealSupplementRecordService : IMealSupplementRecordService
|
|||||||
|
|
||||||
public async Task<MealSupplementRecordSummaryResponse> GetPageAsync(MealSupplementRecordRequest request)
|
public async Task<MealSupplementRecordSummaryResponse> GetPageAsync(MealSupplementRecordRequest request)
|
||||||
{
|
{
|
||||||
var queryable = _dbContext.Queryable<MealSupplementRecordEntity>()
|
var page = await GetBaseQueryable()
|
||||||
.LeftJoin<GainfoEntity>((x, ga) => x.Code == ga.Code)
|
|
||||||
.LeftJoin<GainfoLeaveEntity>((x, ga, gaLeave) => gaLeave.Code == x.Code)
|
|
||||||
.WhereIF(request.Status.HasValue, x => x.Status == request.Status)
|
|
||||||
.WhereIF(request.Sync.HasValue, x => x.Sync == request.Sync)
|
|
||||||
.WhereIF(request.Workplace.IsPresent(), x => x.Workplace == request.Workplace)
|
|
||||||
.WhereIF(request.Factory.IsPresent(), x => x.Factory == request.Factory)
|
|
||||||
.WhereIF(request.DepartmentNo.IsPresent(), (x, ga, gaLeave) => ga.DepartmentNo == request.DepartmentNo || gaLeave.DepartmentNo == request.DepartmentNo)
|
|
||||||
.WhereIF(request.Werks.IsPresent(), (x, ga) => ga.Werks == request.Werks)
|
|
||||||
.WhereIF(request.DateTimePeriod.HasValue(), x => x.Date >= request.DateTimePeriod.Start && x.Date <= request.DateTimePeriod.End)
|
|
||||||
.WhereIF(request.Search.IsPresent(), (x, ga) => x.Code == request.Search || ga.Name == request.Search);
|
|
||||||
|
|
||||||
var page = await queryable
|
|
||||||
.Select((x, ga, gaLeave) => new MealSupplementRecordResponse
|
.Select((x, ga, gaLeave) => new MealSupplementRecordResponse
|
||||||
{
|
{
|
||||||
Amount = x.Amount,
|
Amount = x.Amount,
|
||||||
@@ -87,9 +75,25 @@ public class MealSupplementRecordService : IMealSupplementRecordService
|
|||||||
|
|
||||||
return new MealSupplementRecordSummaryResponse
|
return new MealSupplementRecordSummaryResponse
|
||||||
{
|
{
|
||||||
Amount = await queryable.SumAsync(x => x.Amount),
|
Amount = await GetBaseQueryable().SumAsync(x => x.Amount),
|
||||||
Pagination = page
|
Pagination = page
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
ISugarQueryable<MealSupplementRecordEntity, GainfoEntity, GainfoLeaveEntity> GetBaseQueryable()
|
||||||
|
{
|
||||||
|
return _dbContext.Queryable<MealSupplementRecordEntity>()
|
||||||
|
.LeftJoin<GainfoEntity>((x, ga) => x.Code == ga.Code)
|
||||||
|
.LeftJoin<GainfoLeaveEntity>((x, ga, gaLeave) => gaLeave.Code == x.Code)
|
||||||
|
.WhereIF(request.Status.HasValue, x => x.Status == request.Status)
|
||||||
|
.WhereIF(request.Sync.HasValue, x => x.Sync == request.Sync)
|
||||||
|
.WhereIF(request.Workplace.IsPresent(), x => x.Workplace == request.Workplace)
|
||||||
|
.WhereIF(request.Factory.IsPresent(), x => x.Factory == request.Factory)
|
||||||
|
.WhereIF(request.DepartmentNo.IsPresent(), (x, ga, gaLeave) => ga.DepartmentNo == request.DepartmentNo || gaLeave.DepartmentNo == request.DepartmentNo)
|
||||||
|
.WhereIF(request.Werks.IsPresent(), (x, ga) => ga.Werks == request.Werks)
|
||||||
|
.WhereIF(request.DateTimePeriod.HasValue(), x => x.Date >= request.DateTimePeriod.Start && x.Date <= request.DateTimePeriod.End)
|
||||||
|
.WhereIF(request.Search.IsPresent(), (x, ga) => x.Code == request.Search || ga.Name == request.Search);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<MealSupplementRecordMyResponse> GetMyMealSupplementRecords(MealSupplementRecordMyRequest request)
|
public async Task<MealSupplementRecordMyResponse> GetMyMealSupplementRecords(MealSupplementRecordMyRequest request)
|
||||||
|
|||||||
@@ -82,4 +82,15 @@ public class BalanceSummaryController : ControllerBase
|
|||||||
{
|
{
|
||||||
return await _balanceSummaryService.BalanceRecordAnalysisByFactoryAsync(request);
|
return await _balanceSummaryService.BalanceRecordAnalysisByFactoryAsync(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 餐次和营业点就餐分析,统计金额和人数/人次
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="request"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet("shiftAndBusinessPlace/analysis/amountAndUserCountAndCostCount")]
|
||||||
|
public async Task<ShiftAndBusinessPlaceAnalysisResponse> ShiftAndBusinessPlaceAnalysisAsync([FromQuery] BalanceRecordPageDetailRequest request)
|
||||||
|
{
|
||||||
|
return await _balanceSummaryService.ShiftAndBusinessPlaceAnalysisAsync(request);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -19,6 +19,11 @@ public class BalanceRecordByBusinessPlaceResponse
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public int Total { get; set; }
|
public int Total { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 消费次数
|
||||||
|
/// </summary>
|
||||||
|
public int CostCount => Pagination.Total;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 分页数据
|
/// 分页数据
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -28,6 +33,9 @@ public class BalanceRecordByBusinessPlaceResponse
|
|||||||
[Excel("BalanceRecordDetail")]
|
[Excel("BalanceRecordDetail")]
|
||||||
public class BalanceRecordDetailPageResponse : IExcelExportable
|
public class BalanceRecordDetailPageResponse : IExcelExportable
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// id
|
||||||
|
/// </summary>
|
||||||
public long Id { get; set; }
|
public long Id { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -108,6 +116,15 @@ public class BalanceRecordDetailPageResponse : IExcelExportable
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public BalanceRecordSourceEnumType Source { get; set; }
|
public BalanceRecordSourceEnumType Source { get; set; }
|
||||||
|
|
||||||
|
// /// <summary>
|
||||||
|
// /// 消费人数
|
||||||
|
// /// </summary>
|
||||||
|
// public int UserCount { get; set; }
|
||||||
|
//
|
||||||
|
// /// <summary>
|
||||||
|
// /// 消费次数
|
||||||
|
// /// </summary>
|
||||||
|
// public int CostCount { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 厂区
|
/// 厂区
|
||||||
|
|||||||
@@ -0,0 +1,75 @@
|
|||||||
|
using System.Text.Json.Serialization;
|
||||||
|
using Dlhis.Entity.Canteen.Enums;
|
||||||
|
using Dlhis.ExcelHelper;
|
||||||
|
using Kurisu.AspNetCore.DataAccess.Dto;
|
||||||
|
using Kurisu.AspNetCore.Utils.Extensions;
|
||||||
|
|
||||||
|
namespace Dlhis.Canteen.Order.Response;
|
||||||
|
|
||||||
|
public class ShiftAndBusinessPlaceAnalysisResponse
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 消费总金额
|
||||||
|
/// </summary>
|
||||||
|
public decimal Amount { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 消费人数
|
||||||
|
/// </summary>
|
||||||
|
public int Total { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 消费次数
|
||||||
|
/// </summary>
|
||||||
|
public int CostCount => Pagination.Total;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 分页数据
|
||||||
|
/// </summary>
|
||||||
|
public Pagination<ShiftAndBusinessPlaceAnalysisItemResponse> Pagination { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
[Excel("ShiftAndBusinessPlaceAnalysis")]
|
||||||
|
public class ShiftAndBusinessPlaceAnalysisItemResponse : IExcelExportable
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 消费额
|
||||||
|
/// </summary>
|
||||||
|
[JsonIgnore]
|
||||||
|
public decimal CurrentAmount { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 消费额
|
||||||
|
/// </summary>
|
||||||
|
[Excel("消费额")]
|
||||||
|
public string Amount => Math.Abs(CurrentAmount).ToString("F2");
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 营业点
|
||||||
|
/// </summary>
|
||||||
|
[Excel("营业点")]
|
||||||
|
public string BusinessPlaceName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 餐次
|
||||||
|
/// </summary>
|
||||||
|
public ShiftEnumType? ShiftType { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 餐次
|
||||||
|
/// </summary>
|
||||||
|
[Excel("餐次")]
|
||||||
|
public string ShiftTypeDesc => ShiftType?.GetDescription();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 消费人数
|
||||||
|
/// </summary>
|
||||||
|
[Excel("消费人数")]
|
||||||
|
public int UserCount { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 消费次数
|
||||||
|
/// </summary>
|
||||||
|
[Excel("消费次数")]
|
||||||
|
public int CostCount { get; set; }
|
||||||
|
}
|
||||||
@@ -18,4 +18,6 @@ public interface IBalanceSummaryService : IScopeDependency
|
|||||||
Task<BalanceRecordAnalysisShiftAmountAndCountResponse> BalanceRecordShiftAnalysisAmountAndCountAsync(BalanceRecordAnalysisByShiftRequest request);
|
Task<BalanceRecordAnalysisShiftAmountAndCountResponse> BalanceRecordShiftAnalysisAmountAndCountAsync(BalanceRecordAnalysisByShiftRequest request);
|
||||||
|
|
||||||
Task<Pagination<BalanceRecordAnalysisFactoryAmountAndCountResponse>> BalanceRecordAnalysisByFactoryAsync(SummaryCommonDto request);
|
Task<Pagination<BalanceRecordAnalysisFactoryAmountAndCountResponse>> BalanceRecordAnalysisByFactoryAsync(SummaryCommonDto request);
|
||||||
|
|
||||||
|
Task<ShiftAndBusinessPlaceAnalysisResponse> ShiftAndBusinessPlaceAnalysisAsync(BalanceRecordPageDetailRequest request);
|
||||||
}
|
}
|
||||||
@@ -298,16 +298,7 @@ public class BalanceService : IBalanceService
|
|||||||
|
|
||||||
//var myCodes = request.BusinessplaceCodes;
|
//var myCodes = request.BusinessplaceCodes;
|
||||||
|
|
||||||
var queryable = _dbContext.Queryable<BalanceRecordEntity>()
|
var page = await GetBaseQuery()
|
||||||
.LeftJoin<DepartmentEntity>((record, department) => record.DepartmentNo == department.No)
|
|
||||||
.LeftJoin<BusinessPlaceEntity>((record, department, bPlace) => record.BusinessPlaceCode == bPlace.Code)
|
|
||||||
.WhereIF(request.SearchDateTimePeriod.HasValue(), record => record.CostDate >= request.SearchDateTimePeriod.Start && record.CostDate <= request.SearchDateTimePeriod.End)
|
|
||||||
.Where(record => record.Type == BalanceRecordTypeEnumType.Out && record.Status == BalanceRecordStatusEnumType.Valid)
|
|
||||||
.Where(record => myCodes.Contains(record.BusinessPlaceCode))
|
|
||||||
.WhereIF(request.ShiftTypes.IsPresent(), record => request.ShiftTypes.Contains(record.ShiftType))
|
|
||||||
.WhereIF(request.Search.IsPresent(), record => record.UserCode == request.Search || record.Name == request.Search);
|
|
||||||
|
|
||||||
var page = await queryable
|
|
||||||
.OrderBy(record => new { CostDate = SqlFunc.Desc(record.CostDate), CostDateTime = SqlFunc.Desc(record.CostDateTime) })
|
.OrderBy(record => new { CostDate = SqlFunc.Desc(record.CostDate), CostDateTime = SqlFunc.Desc(record.CostDateTime) })
|
||||||
.Select((record, department, bPlace) => new BalanceRecordDetailPageResponse
|
.Select((record, department, bPlace) => new BalanceRecordDetailPageResponse
|
||||||
{
|
{
|
||||||
@@ -339,16 +330,28 @@ public class BalanceService : IBalanceService
|
|||||||
//ignore
|
//ignore
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var amount = await GetBaseQuery().SumAsync(record => SqlFunc.Abs(record.Amount));
|
||||||
var amount = await queryable.SumAsync(record => SqlFunc.Abs(record.Amount));
|
var userCount = await GetBaseQuery().Select(record => record.UserCode).Distinct().CountAsync();
|
||||||
var total = await queryable.Select(record => record.UserCode).Distinct().CountAsync();
|
|
||||||
|
|
||||||
return new BalanceRecordByBusinessPlaceResponse
|
return new BalanceRecordByBusinessPlaceResponse
|
||||||
{
|
{
|
||||||
Amount = amount,
|
Amount = amount,
|
||||||
Total = total,
|
Total = userCount,
|
||||||
Pagination = page,
|
Pagination = page,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
ISugarQueryable<BalanceRecordEntity, DepartmentEntity, BusinessPlaceEntity> GetBaseQuery()
|
||||||
|
{
|
||||||
|
return _dbContext.Queryable<BalanceRecordEntity>()
|
||||||
|
.LeftJoin<DepartmentEntity>((record, department) => record.DepartmentNo == department.No)
|
||||||
|
.LeftJoin<BusinessPlaceEntity>((record, department, bPlace) => record.BusinessPlaceCode == bPlace.Code)
|
||||||
|
.WhereIF(request.SearchDateTimePeriod.HasValue(), record => record.CostDate >= request.SearchDateTimePeriod.Start && record.CostDate <= request.SearchDateTimePeriod.End)
|
||||||
|
.Where(record => record.Type == BalanceRecordTypeEnumType.Out && record.Status == BalanceRecordStatusEnumType.Valid)
|
||||||
|
.Where(record => myCodes.Contains(record.BusinessPlaceCode))
|
||||||
|
.WhereIF(request.ShiftTypes.IsPresent(), record => request.ShiftTypes.Contains(record.ShiftType))
|
||||||
|
.WhereIF(request.Search.IsPresent(), record => record.UserCode == request.Search || record.Name == request.Search);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -362,16 +365,14 @@ public class BalanceService : IBalanceService
|
|||||||
|
|
||||||
//var myCodes = request.BusinessplaceCodes;
|
//var myCodes = request.BusinessplaceCodes;
|
||||||
|
|
||||||
var queryable = _dbContext.Queryable<BalanceRecordEntity>()
|
var rows = await _dbContext.Queryable<BalanceRecordEntity>()
|
||||||
.LeftJoin<DepartmentEntity>((record, department) => record.DepartmentNo == department.No)
|
.LeftJoin<DepartmentEntity>((record, department) => record.DepartmentNo == department.No)
|
||||||
.LeftJoin<BusinessPlaceEntity>((record, department, bPlace) => record.BusinessPlaceCode == bPlace.Code)
|
.LeftJoin<BusinessPlaceEntity>((record, department, bPlace) => record.BusinessPlaceCode == bPlace.Code)
|
||||||
.WhereIF(request.SearchDateTimePeriod.HasValue(), record => record.CostDate >= request.SearchDateTimePeriod.Start && record.CostDate <= request.SearchDateTimePeriod.End)
|
.WhereIF(request.SearchDateTimePeriod.HasValue(), record => record.CostDate >= request.SearchDateTimePeriod.Start && record.CostDate <= request.SearchDateTimePeriod.End)
|
||||||
.Where(record => record.Type == BalanceRecordTypeEnumType.Out && record.Status == BalanceRecordStatusEnumType.Valid)
|
.Where(record => record.Type == BalanceRecordTypeEnumType.Out && record.Status == BalanceRecordStatusEnumType.Valid)
|
||||||
.Where(record => myCodes.Contains(record.BusinessPlaceCode))
|
.Where(record => myCodes.Contains(record.BusinessPlaceCode))
|
||||||
.WhereIF(request.ShiftTypes.IsPresent(), record => request.ShiftTypes.Contains(record.ShiftType))
|
.WhereIF(request.ShiftTypes.IsPresent(), record => request.ShiftTypes.Contains(record.ShiftType))
|
||||||
.WhereIF(request.Search.IsPresent(), record => record.UserCode == request.Search || record.Name == request.Search);
|
.WhereIF(request.Search.IsPresent(), record => record.UserCode == request.Search || record.Name == request.Search)
|
||||||
|
|
||||||
var rows = await queryable
|
|
||||||
.OrderBy(record => new { CostDate = SqlFunc.Desc(record.CostDate), CostDateTime = SqlFunc.Desc(record.CostDateTime) })
|
.OrderBy(record => new { CostDate = SqlFunc.Desc(record.CostDate), CostDateTime = SqlFunc.Desc(record.CostDateTime) })
|
||||||
.Select((record, department, bPlace) => new BalanceRecordDetailPageResponse
|
.Select((record, department, bPlace) => new BalanceRecordDetailPageResponse
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ using Kurisu.AspNetCore.DataAccess.Dto;
|
|||||||
using Kurisu.AspNetCore.DataAccess.Extensions;
|
using Kurisu.AspNetCore.DataAccess.Extensions;
|
||||||
using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions;
|
using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions;
|
||||||
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
|
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
|
||||||
|
using Kurisu.AspNetCore.Utils.Extensions;
|
||||||
using SqlSugar;
|
using SqlSugar;
|
||||||
|
|
||||||
namespace Dlhis.Canteen.Order.Services.Implements;
|
namespace Dlhis.Canteen.Order.Services.Implements;
|
||||||
@@ -34,8 +35,7 @@ public class BalanceSummaryService : IBalanceSummaryService
|
|||||||
request.BusinessPlaceCodes = new List<Guid> { request.BusinessPlaceCode.Value };
|
request.BusinessPlaceCodes = new List<Guid> { request.BusinessPlaceCode.Value };
|
||||||
}
|
}
|
||||||
|
|
||||||
var queryable = GetQueryable(request);
|
var list = await GetQueryable(request).ToListAsync();
|
||||||
var list = await queryable.ToListAsync();
|
|
||||||
|
|
||||||
var sum = list.Sum(x => Math.Abs(x.Amount));
|
var sum = list.Sum(x => Math.Abs(x.Amount));
|
||||||
|
|
||||||
@@ -96,13 +96,11 @@ public class BalanceSummaryService : IBalanceSummaryService
|
|||||||
|
|
||||||
public async Task<BalanceRecordAnalysisShiftAmountResponse> BalanceRecordShiftAnalysisAmountAsync(BalanceRecordAnalysisByShiftRequest request)
|
public async Task<BalanceRecordAnalysisShiftAmountResponse> BalanceRecordShiftAnalysisAmountAsync(BalanceRecordAnalysisByShiftRequest request)
|
||||||
{
|
{
|
||||||
var queryable = GetQueryable(request);
|
var amount = await GetQueryable(request).SumAsync(x => SqlFunc.Abs(x.Amount));
|
||||||
|
|
||||||
var amount = await queryable.SumAsync(x => SqlFunc.Abs(x.Amount));
|
|
||||||
|
|
||||||
var count = typeof(ShiftEnumType).GetFields(BindingFlags.Public | BindingFlags.Static).Length;
|
var count = typeof(ShiftEnumType).GetFields(BindingFlags.Public | BindingFlags.Static).Length;
|
||||||
|
|
||||||
var result = await queryable.GroupBy(x => new { x.CostDate, x.ShiftType })
|
var result = await GetQueryable(request).GroupBy(x => new { x.CostDate, x.ShiftType })
|
||||||
.Select(x => new { x.CostDate, x.ShiftType, Amount = SqlFunc.AggregateSum(SqlFunc.Abs(x.Amount)) })
|
.Select(x => new { x.CostDate, x.ShiftType, Amount = SqlFunc.AggregateSum(SqlFunc.Abs(x.Amount)) })
|
||||||
.ToPageListAsync(request.PageIndex, count * request.PageSize);
|
.ToPageListAsync(request.PageIndex, count * request.PageSize);
|
||||||
|
|
||||||
@@ -129,11 +127,9 @@ public class BalanceSummaryService : IBalanceSummaryService
|
|||||||
|
|
||||||
public async Task<BalanceRecordAnalysisShiftAmountAndCountResponse> BalanceRecordShiftAnalysisAmountAndCountAsync(BalanceRecordAnalysisByShiftRequest request)
|
public async Task<BalanceRecordAnalysisShiftAmountAndCountResponse> BalanceRecordShiftAnalysisAmountAndCountAsync(BalanceRecordAnalysisByShiftRequest request)
|
||||||
{
|
{
|
||||||
var queryable = GetQueryable(request);
|
var amount = await GetQueryable(request).SumAsync(x => SqlFunc.Abs(x.Amount));
|
||||||
|
|
||||||
var amount = await queryable.SumAsync(x => SqlFunc.Abs(x.Amount));
|
var result = await GetQueryable(request).GroupBy(x => new { x.ShiftType })
|
||||||
|
|
||||||
var result = await queryable.GroupBy(x => new { x.ShiftType })
|
|
||||||
.Select(x => new { x.ShiftType, Amount = SqlFunc.AggregateSum(SqlFunc.Abs(x.Amount)), Count = SqlFunc.AggregateDistinctCount(x.UserCode) })
|
.Select(x => new { x.ShiftType, Amount = SqlFunc.AggregateSum(SqlFunc.Abs(x.Amount)), Count = SqlFunc.AggregateDistinctCount(x.UserCode) })
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
|
|
||||||
@@ -151,9 +147,7 @@ public class BalanceSummaryService : IBalanceSummaryService
|
|||||||
|
|
||||||
public async Task<Pagination<BalanceRecordAnalysisFactoryAmountAndCountResponse>> BalanceRecordAnalysisByFactoryAsync(SummaryCommonDto request)
|
public async Task<Pagination<BalanceRecordAnalysisFactoryAmountAndCountResponse>> BalanceRecordAnalysisByFactoryAsync(SummaryCommonDto request)
|
||||||
{
|
{
|
||||||
var queryable = GetQueryable(request);
|
var page = await GetQueryable(request)
|
||||||
|
|
||||||
var page = await queryable
|
|
||||||
.GroupBy(x => new { x.TenantId })
|
.GroupBy(x => new { x.TenantId })
|
||||||
.Select(x => new BalanceRecordAnalysisFactoryAmountAndCountResponse
|
.Select(x => new BalanceRecordAnalysisFactoryAmountAndCountResponse
|
||||||
{
|
{
|
||||||
@@ -176,6 +170,45 @@ public class BalanceSummaryService : IBalanceSummaryService
|
|||||||
return page;
|
return page;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public async Task<ShiftAndBusinessPlaceAnalysisResponse> ShiftAndBusinessPlaceAnalysisAsync(BalanceRecordPageDetailRequest request)
|
||||||
|
{
|
||||||
|
var page = await QueryableShiftAndBusinessPlaceAnalysis(request)
|
||||||
|
.GroupBy((record, bPlace) => new { record.ShiftType, record.BusinessPlaceCode, bPlace.Name })
|
||||||
|
.Select((record, bPlace) => new ShiftAndBusinessPlaceAnalysisItemResponse
|
||||||
|
{
|
||||||
|
ShiftType = record.ShiftType,
|
||||||
|
BusinessPlaceName = bPlace.Name,
|
||||||
|
UserCount = SqlFunc.AggregateDistinctCount(record.UserCode),
|
||||||
|
CostCount = SqlFunc.AggregateCount(record.Id),
|
||||||
|
CurrentAmount = SqlFunc.AggregateSum(record.Amount),
|
||||||
|
})
|
||||||
|
.ToPageListAsync(request);
|
||||||
|
|
||||||
|
var amount = await QueryableShiftAndBusinessPlaceAnalysis(request).SumAsync(record => SqlFunc.Abs(record.Amount));
|
||||||
|
var userCount = await QueryableShiftAndBusinessPlaceAnalysis(request).Select(record => record.UserCode).Distinct().CountAsync();
|
||||||
|
|
||||||
|
return new ShiftAndBusinessPlaceAnalysisResponse
|
||||||
|
{
|
||||||
|
Amount = amount,
|
||||||
|
Total = userCount,
|
||||||
|
Pagination = page,
|
||||||
|
};
|
||||||
|
|
||||||
|
ISugarQueryable<BalanceRecordEntity, BusinessPlaceEntity> QueryableShiftAndBusinessPlaceAnalysis(BalanceRecordPageDetailRequest internalRequest)
|
||||||
|
{
|
||||||
|
return _dbContext.Queryable<BalanceRecordEntity>()
|
||||||
|
.LeftJoin<BusinessPlaceEntity>((record, bPlace) => record.BusinessPlaceCode == bPlace.Code)
|
||||||
|
.WhereIF(internalRequest.SearchDateTimePeriod.HasValue(), record => record.CostDate >= internalRequest.SearchDateTimePeriod.Start && record.CostDate <= internalRequest.SearchDateTimePeriod.End)
|
||||||
|
.WhereIF(internalRequest.ShiftTypes.IsPresent(), record => internalRequest.ShiftTypes.Contains(record.ShiftType))
|
||||||
|
.Where(record => record.Type == BalanceRecordTypeEnumType.Out && record.Status == BalanceRecordStatusEnumType.Valid)
|
||||||
|
.WhereIF(internalRequest.Search.IsPresent(), (record, bPlace) => bPlace.Name.Contains(internalRequest.Search))
|
||||||
|
.Where(record => record.BusinessPlaceCode.HasValue)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//**************************************************************help method***********************************************************************
|
//**************************************************************help method***********************************************************************
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
},
|
},
|
||||||
"SwaggerOptions": {
|
"SwaggerOptions": {
|
||||||
"Enable": true,
|
"Enable": true,
|
||||||
"Authority": "http://localhost:5000",
|
"Authority": "https://park.yaens.com/oauth2",
|
||||||
"ClientId": "98958aa485d38412",
|
"ClientId": "98958aa485d38412",
|
||||||
"ClientSecret": "52589e011f02fe19",
|
"ClientSecret": "52589e011f02fe19",
|
||||||
"Scopes": {
|
"Scopes": {
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"IdentityServerOptions": {
|
"IdentityServerOptions": {
|
||||||
"Authority": "http://localhost:5000",
|
"Authority": "https://park.yaens.com/oauth2",
|
||||||
"RequireHttpsMetadata": false,
|
"RequireHttpsMetadata": false,
|
||||||
"Issuer": "identity.isawesome.cn",
|
"Issuer": "identity.isawesome.cn",
|
||||||
"Audience": "",
|
"Audience": "",
|
||||||
|
|||||||
Reference in New Issue
Block a user