102 lines
4.4 KiB
C#
102 lines
4.4 KiB
C#
using Dlhis.Entity.Basic.Entity;
|
|
using Dlhis.Entity.Canteen.Enums;
|
|
using Dlhis.Middle.Entities;
|
|
using Dlhis.Middle.Request;
|
|
using Dlhis.Middle.Response;
|
|
using Kurisu.AspNetCore.DataAccess.Dto;
|
|
using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions;
|
|
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
|
|
using Kurisu.AspNetCore.Utils.Extensions;
|
|
using SqlSugar;
|
|
|
|
namespace Dlhis.Middle.Services.Implements;
|
|
|
|
public class BalanceService : IBalanceService
|
|
{
|
|
private readonly IDbContext _dbContext;
|
|
private readonly ICanteenSettingService _canteenSettingService;
|
|
|
|
public BalanceService(IDbContext dbContext, ICanteenSettingService canteenSettingService)
|
|
{
|
|
_dbContext = dbContext;
|
|
_canteenSettingService = canteenSettingService;
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public async Task<Pagination<BalanceRecordDeviceResponse>> GetPageByDeviceUniqueNoAsync(BalanceRecordPageByDeviceUniqueNoRequest request)
|
|
{
|
|
var device = await _dbContext.Queryable<LocalDeviceEntity>()
|
|
.Where(x => x.UniqueNo == request.DeviceUniqueNo)
|
|
.SingleAsync();
|
|
|
|
if (device == null)
|
|
{
|
|
return new Pagination<BalanceRecordDeviceResponse>
|
|
{
|
|
Data = new List<BalanceRecordDeviceResponse>()
|
|
};
|
|
}
|
|
|
|
if (request.SearchDate.HasValue)
|
|
{
|
|
request.Start = request.SearchDate;
|
|
request.End = request.SearchDate;
|
|
}
|
|
|
|
|
|
var switchTime = await _canteenSettingService.GetBusinessSwitchTimeAsync(device.TenantId);
|
|
if (switchTime.HasValue)
|
|
{
|
|
var setTime = request.Start!.Value.Add(switchTime.Value.ToTimeSpan());
|
|
if (DateTime.Now < setTime)
|
|
{
|
|
request.Start = request.Start.Value.AddDays(-1);
|
|
request.End = request.End!.Value.AddDays(-1);
|
|
}
|
|
}
|
|
|
|
var page = await _dbContext.Queryable<LocalBalanceRecordEntity>()
|
|
.LeftJoin<LocalGainfoEntity>((record, ga) => record.UserNo == ga.No)
|
|
.LeftJoin<LocalDepartmentEntity>((record, ga, department) => ga.DepartmentNo == department.No)
|
|
.LeftJoin<LocalBusinessPlaceEntity>((record, ga, department, bPlace) => record.BusinessPlaceCode == bPlace.Code)
|
|
//.LeftJoin<ImageRecordEntity>((record, ga, department, bPlace, imageRecord) => imageRecord.No == record.No)
|
|
.Where(record => record.DeviceUniqueNo == device.UniqueNo)
|
|
.Where(record => record.CostDate >= request.Start && record.CostDate <= request.End)
|
|
.Where(record => record.Type == BalanceRecordTypeEnumType.Out
|
|
&& (record.Status == BalanceRecordStatusEnumType.Valid || (record.Status == BalanceRecordStatusEnumType.Obsolute && record.Remark == "退款")))
|
|
.WhereIF(request.UserCode.IsPresent(), record => record.UserCode == request.UserCode)
|
|
.OrderBy(record => record.CostDateTime, OrderByType.Desc)
|
|
.Select((record, ga, department, bPlace) => new BalanceRecordDeviceResponse
|
|
{
|
|
Id = record.Id,
|
|
Amount = SqlFunc.Abs(record.Amount),
|
|
CostDate = record.CostDate,
|
|
DepartmentNo = record.DepartmentNo,
|
|
UserNo = record.UserNo,
|
|
UserCode = record.UserCode,
|
|
Type = record.Type,
|
|
Status = record.Status,
|
|
Source = record.Source,
|
|
No = SqlFunc.IIF(record.Status == BalanceRecordStatusEnumType.Obsolute && record.Remark == "退款", "(已退)" + record.No, record.No),
|
|
Name = record.Name,
|
|
DepartmentName = department.Name,
|
|
BusinessPlaceName = bPlace.Name,
|
|
ShiftType = record.ShiftType,
|
|
CostDateTime = record.CostDateTime,
|
|
TenantId = record.TenantId,
|
|
Image = string.Empty
|
|
})
|
|
.ToPageListAsync(request);
|
|
|
|
//消费总金额
|
|
var sum = await _dbContext.Queryable<LocalBalanceRecordEntity>()
|
|
.Where(record => record.CostDate >= request.Start && record.CostDate <= request.End)
|
|
.Where(record => record.DeviceUniqueNo == device.UniqueNo)
|
|
.Where(record => record.Type == BalanceRecordTypeEnumType.Out && record.Status == BalanceRecordStatusEnumType.Valid)
|
|
.SumAsync(record => SqlFunc.Abs(SqlFunc.IsNull(record.Amount, 0)));
|
|
|
|
page.Data.ForEach(x => x.Sum = sum);
|
|
|
|
return page;
|
|
}
|
|
} |