using LifePayment.Application.Contracts;
|
using LifePayment.Domain.LifePay;
|
using LifePayment.Domain.Models;
|
using LifePayment.Domain.Shared;
|
using LifePayment.Domain;
|
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Options;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using Volo.Abp.Application.Services;
|
using Volo.Abp.Data;
|
using Volo.Abp.Domain.Repositories;
|
using Volo.Abp.EventBus.Distributed;
|
using static Nest.FileSystemStats;
|
using Microsoft.EntityFrameworkCore;
|
|
namespace LifePayment.Application.LifePay
|
{
|
public class StatisticsService : ApplicationService, IStatisticsService
|
{
|
private readonly IRepository<LifePayOrder, Guid> _lifePayOrderRepository;
|
private readonly IRepository<LifePayUser, Guid> _lifePayUserRepository;
|
private readonly IRepository<DallyStatistics, Guid> _dallyStatisticsRepository;
|
|
public StatisticsService(
|
IRepository<LifePayOrder, Guid> lifePayOrderRepository,
|
IRepository<LifePayUser, Guid> lifePayUserRepository,
|
IRepository<DallyStatistics, Guid> dallyStatisticsRepository)
|
{
|
_lifePayOrderRepository = lifePayOrderRepository;
|
_lifePayUserRepository = lifePayUserRepository;
|
_dallyStatisticsRepository = dallyStatisticsRepository;
|
}
|
|
public async Task<TopStatisticsOutput> GetTopStatistics()
|
{
|
var today = DateTime.Now.Date;
|
var statistics = await _dallyStatisticsRepository.Where(x => x.CreationTime.Date == today).FirstOrDefaultAsync();
|
if (statistics == null)
|
{
|
/// 累计收款:统计平台账户下订单创建时间在昨天及之前收到的【用户支付成功的金额-退款给用户的金额】;
|
var accumulatedReceipts = await _lifePayOrderRepository.Where(x => x.CreationTime < today && x.PayStatus != LifePayStatusEnum.未支付).SumAsync(x => x.PayAmount) - await _lifePayOrderRepository.Where(x => x.CreationTime < today && x.LifePayRefundStatus == LifePayRefundStatusEnum.已退款).SumAsync(x => (x.RefundPrice ?? 0));
|
/// 昨日收款:统计平台账户下订单创建时间在昨天收到的【用户支付成功的金额-退款给用户的金额】;
|
var receiptsYesterday = await _lifePayOrderRepository.Where(x => x.CreationTime >= today.AddDays(-1) && x.CreationTime < today && x.PayStatus == LifePayStatusEnum.已支付).SumAsync(x => x.PayAmount) - await _lifePayOrderRepository.Where(x => x.CreationTime >= today.AddDays(-1) && x.CreationTime < today && x.LifePayRefundStatus == LifePayRefundStatusEnum.已退款).SumAsync(x => (x.RefundPrice ?? 0));
|
/// 累计收入:统计平台账户下订单状态为“已完成”且订单创建时间在昨天及之前收到的【用户实付金额-平台扣款金额-部分退款金额】;
|
var accumulatedIncome = await _lifePayOrderRepository.Where(x => x.CreationTime < today && x.LifePayOrderStatus == LifePayOrderStatusEnum.已完成).SumAsync(x => x.PayAmount - (x.PlatformDeductionAmount ?? 0) - (x.RefundPrice ?? 0));
|
/// 累计下单:统计平台中订单下单时间在昨天及之前时间的订单记录;
|
var accumulatedOrders = await _lifePayOrderRepository.Where(x => x.CreationTime < today).CountAsync();
|
/// 昨日下单:统计平台中订单下单时间在昨天的订单记录;
|
var ordersNumYesterday = await _lifePayOrderRepository.Where(x => x.CreationTime >= today.AddDays(-1) && x.CreationTime < today).CountAsync();
|
/// 昨日成功:统计平台中订单状态为“已完成/部分充值成功”且订单下单时间在昨天的订单记录;
|
var yesterdaySuccess = await _lifePayOrderRepository.Where(x => x.CreationTime >= today.AddDays(-1) && x.CreationTime < today && x.LifePayOrderStatus == LifePayOrderStatusEnum.已完成).CountAsync();
|
/// 昨日失败:统计平台中订单状态为“充值失败/已退款”且订单下单时间在昨天的订单记录;
|
var yesterdayFail = await _lifePayOrderRepository.Where(x => x.CreationTime >= today.AddDays(-1) && x.CreationTime < today && x.LifePayOrderStatus == LifePayOrderStatusEnum.已退款).CountAsync();
|
/// 累计用户
|
var accumulatedUsers = await _lifePayUserRepository.CountAsync();
|
/// 昨日活跃用户
|
var yesterdayActiveUsers = await _lifePayUserRepository.Where(x => x.LastLoginTime >= today.AddDays(-1)).CountAsync();
|
|
var entity = new DallyStatistics()
|
{
|
Id = GuidGenerator.Create(),
|
CreationTime = DateTime.Now,
|
Amount = 0,
|
AccumulatedReceipts = accumulatedReceipts??0,
|
AccumulatedIncome = accumulatedIncome ?? 0,
|
ReceiptsYesterday = receiptsYesterday ?? 0,
|
AccumulatedOrders = accumulatedOrders,
|
OrdersNumYesterday = ordersNumYesterday,
|
YesterdaySuccess = yesterdaySuccess,
|
YesterdayFail = yesterdayFail,
|
AccumulatedUsers = accumulatedUsers,
|
YesterdayActiveUsers = yesterdayActiveUsers
|
};
|
await _dallyStatisticsRepository.InsertAsync(entity);
|
|
TopStatisticsOutput topStatisticsOutput = new TopStatisticsOutput()
|
{
|
Amount = entity.Amount,
|
AccumulatedReceipts = entity.AccumulatedReceipts,
|
AccumulatedIncome = entity.AccumulatedIncome,
|
ReceiptsYesterday = entity.ReceiptsYesterday,
|
AccumulatedOrders = entity.AccumulatedOrders,
|
OrdersNumYesterday = entity.OrdersNumYesterday,
|
YesterdaySuccess = entity.YesterdaySuccess,
|
YesterdayFail = entity.YesterdayFail,
|
AccumulatedUsers = entity.AccumulatedUsers,
|
YesterdayActiveUsers = entity.YesterdayActiveUsers,
|
};
|
return topStatisticsOutput;
|
}
|
else
|
{
|
TopStatisticsOutput topStatisticsOutput = new TopStatisticsOutput()
|
{
|
Amount = statistics.Amount,
|
AccumulatedReceipts = statistics.AccumulatedReceipts,
|
AccumulatedIncome = statistics.AccumulatedIncome,
|
ReceiptsYesterday = statistics.ReceiptsYesterday,
|
AccumulatedOrders = statistics.AccumulatedOrders,
|
OrdersNumYesterday = statistics.OrdersNumYesterday,
|
YesterdaySuccess = statistics.YesterdaySuccess,
|
YesterdayFail = statistics.YesterdayFail,
|
AccumulatedUsers = statistics.AccumulatedUsers,
|
YesterdayActiveUsers = statistics.YesterdayActiveUsers,
|
};
|
return topStatisticsOutput;
|
}
|
}
|
}
|
}
|