| | |
| | | using Volo.Abp.Domain.Repositories; |
| | | using Microsoft.EntityFrameworkCore; |
| | | using ZeroD.Util; |
| | | using LifePayment.Domain; |
| | | using static LifePayment.Domain.Shared.LifePaymentConstant; |
| | | |
| | | namespace LifePayment.Application.LifePay |
| | | { |
| | | public class LifePayOrderService : ApplicationService, ILifePayOrderService |
| | | { |
| | | private readonly IRepository<LifePayRechargeReceipts, Guid> _lifePayRechargeReceiptsRepository; |
| | | private readonly IRepository<LifePayExpensesReceipts, Guid> _lifePayExpensesReceiptsRepository; |
| | | private readonly IAliPayApi _aliPayApi; |
| | | private readonly IWxPayApi _wxPayApi; |
| | | |
| | | public LifePayOrderService( |
| | | IRepository<LifePayRechargeReceipts, Guid> lifePayRechargeReceiptsRepository) |
| | | IRepository<LifePayRechargeReceipts, Guid> lifePayRechargeReceiptsRepository, |
| | | IRepository<LifePayExpensesReceipts, Guid> lifePayExpensesReceiptsRepository, |
| | | IAliPayApi aliPayApi, |
| | | IWxPayApi wxPayApi) |
| | | { |
| | | _lifePayRechargeReceiptsRepository = lifePayRechargeReceiptsRepository; |
| | | _lifePayExpensesReceiptsRepository = lifePayExpensesReceiptsRepository; |
| | | _aliPayApi = aliPayApi; |
| | | _wxPayApi = wxPayApi; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | public async Task<LifePayRechargeReceiptsPageOutput<LifePayRechargeReceiptsListOutput>> GetLifePayRechargeReceiptsPage(LifePayRechargeReceiptsPageInput input) |
| | | { |
| | | var list = await _lifePayRechargeReceiptsRepository.Where(x => x.IsDeleted == false) |
| | | .WhereIf(input.OrderNo.IsNotNullOrEmpty(), x => x.OrderNo.Contains(input.OrderNo)) |
| | | .WhereIf(input.KeyWord.IsNotNullOrEmpty(), x => x.OrderNo.Contains(input.KeyWord)) |
| | | .WhereIf(input.CreationTimeBegin.HasValue, x => x.CreationTime >= input.CreationTimeBegin) |
| | | .WhereIf(input.CreationTimeEnd.HasValue, x => x.CreationTime <= input.CreationTimeEnd) |
| | | .Select(x => new LifePayRechargeReceiptsListOutput() |
| | |
| | | return result; |
| | | } |
| | | |
| | | //public async Task<decimal> GetTotalLifePayRechargeReceipts() |
| | | //{ |
| | | // var result = await _lifePayRechargeReceiptsRepository.Where(x => x.IsDeleted == false).SumAsync(x => x.RechargeAmount); |
| | | // return result; |
| | | //} |
| | | |
| | | |
| | | /// <summary> |
| | | /// 编辑充值流水 |
| | |
| | | await _lifePayRechargeReceiptsRepository.InsertAsync(payRechargeReceipts); |
| | | } |
| | | } |
| | | |
| | | |
| | | //public async Task<LifePayExpensesReceiptsPageOutput<LifePayExpensesReceiptsListOutput>> GetLifePayExpensesReceiptsPage(LifePayExpensesReceiptsPageInput input) |
| | | //{ |
| | | // var list = await _lifePayExpensesReceiptsRepository.Where(x => x.IsDeleted == false) |
| | | // .WhereIf(input.KeyWord.IsNotNullOrEmpty(), x => x.OrderNo.Contains(input.KeyWord)) |
| | | // .WhereIf(input.CreationTimeBegin.HasValue, x => x.CreationTime >= input.CreationTimeBegin) |
| | | // .WhereIf(input.CreationTimeEnd.HasValue, x => x.CreationTime <= input.CreationTimeEnd) |
| | | // .Select(x => new LifePayRechargeReceiptsListOutput() |
| | | // { |
| | | // Id = x.Id, |
| | | // OrderNo = x.OrderNo, |
| | | // RechargeAmount = x.RechargeAmount, |
| | | // Remark = x.Remark, |
| | | // Voucher = x.Voucher.GetOssPath(), |
| | | // CreationTime = x.CreationTime, |
| | | // }) |
| | | // .GetPageResult(input.PageModel); |
| | | |
| | | // var total = await _lifePayRechargeReceiptsRepository.Where(x => x.IsDeleted == false).SumAsync(x => x.RechargeAmount); |
| | | // LifePayRechargeReceiptsPageOutput<LifePayRechargeReceiptsListOutput> result = new LifePayRechargeReceiptsPageOutput<LifePayRechargeReceiptsListOutput>(); |
| | | // result.Data = list.Data; |
| | | // result.TotalRechargeAmount = total; |
| | | // return result; |
| | | //} |
| | | |
| | | |
| | | /// <summary> |
| | | /// 插入收支流水 |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | | public async Task AddLifePayExpensesReceipts(AddLifePayExpensesReceiptsInput input) |
| | | { |
| | | var repeat = await _lifePayExpensesReceiptsRepository.Where(x => x.ExpensesReceiptsType == input.ExpensesReceiptsType |
| | | && x.OrderNo == input.OrderNo).FirstOrDefaultAsync(); |
| | | if (repeat == null) |
| | | { |
| | | var data = new LifePayExpensesReceipts() |
| | | { |
| | | Id = Guid.NewGuid(), |
| | | OrderNo = input.OrderNo, |
| | | OutOrderNo = input.OutOrderNo, |
| | | LifePayType = input.LifePayType, |
| | | ExpensesReceiptsType = input.ExpensesReceiptsType, |
| | | Amount = input.Amount |
| | | }; |
| | | |
| | | switch (input.LifePayType) |
| | | { |
| | | case LifePayTypeEnum.AliPay: |
| | | if (input.ExpensesReceiptsType == ExpensesReceiptsTypeEnum.Expenses) |
| | | { |
| | | var query = await _aliPayApi.OrderInQuiry(new OrderInQuiryInput() { OutTradeNo = input.OrderNo }); |
| | | if (query.Code == AlipayResultCode.Success && query.TradeStatus == AlipayStatus.TRADESUCCESS) |
| | | { |
| | | await _lifePayExpensesReceiptsRepository.InsertAsync(data); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | var query = await _aliPayApi.QueryAlipayTradeRefund(new OrderInQuiryInput() { OutTradeNo = input.OrderNo }); |
| | | if (query.Code == AlipayResultCode.Success && query.RefundStatus == AlipayRefundStatus.Success) |
| | | { |
| | | await _lifePayExpensesReceiptsRepository.InsertAsync(data); |
| | | } |
| | | } |
| | | break; |
| | | case LifePayTypeEnum.WxPay: |
| | | if (input.ExpensesReceiptsType == ExpensesReceiptsTypeEnum.Expenses) |
| | | { |
| | | var query = await _wxPayApi.WxPayTradeQuery(input.OrderNo); |
| | | if (query.Code == AlipayResultCode.Success && query.Status == WxPayStatus.支付成功) |
| | | { |
| | | await _lifePayExpensesReceiptsRepository.InsertAsync(data); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | var query = await _wxPayApi.WxPayDomesticRefundsQuery(input.OrderNo); |
| | | if (query.Code == AlipayResultCode.Success && query.RefundStatus == WxPayRefundStatus.退款成功) |
| | | { |
| | | await _lifePayExpensesReceiptsRepository.InsertAsync(data); |
| | | } |
| | | } |
| | | break; |
| | | default: break; |
| | | } |
| | | |
| | | |
| | | } |
| | | } |
| | | } |
| | | } |