|  |  | 
 |  |  | 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 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> | 
 |  |  | 
 |  |  |         /// </summary> | 
 |  |  |         /// <param name="input"></param> | 
 |  |  |         /// <returns></returns> | 
 |  |  |         public async Task<PageOutput<LifePayRechargeReceiptsListOutput>> GetLifePayRechargeReceiptsPage(LifePayRechargeReceiptsPageInput input) | 
 |  |  |         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() | 
 |  |  | 
 |  |  |                     OrderNo = x.OrderNo, | 
 |  |  |                     RechargeAmount = x.RechargeAmount, | 
 |  |  |                     Remark = x.Remark, | 
 |  |  |                     Voucher = x.Voucher, | 
 |  |  |                     Voucher = x.Voucher.GetOssPath(), | 
 |  |  |                     CreationTime = x.CreationTime, | 
 |  |  |                 }) | 
 |  |  |                 .GetPageResult(input.PageModel); | 
 |  |  |             return list; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public async Task<decimal> GetTotalLifePayRechargeReceipts() | 
 |  |  |         { | 
 |  |  |             var result = await _lifePayRechargeReceiptsRepository.Where(x => x.IsDeleted == false).SumAsync(x => x.RechargeAmount); | 
 |  |  |             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> | 
 |  |  |         /// 编辑充值流水 | 
 |  |  | 
 |  |  |             CheckExtensions.IfTrueThrowUserFriendlyException(input.OrderNo == null, "请输入业务订单号"); | 
 |  |  |             CheckExtensions.IfTrueThrowUserFriendlyException(input.RechargeAmount <= 0, "充值金额应大于0"); | 
 |  |  |             CheckExtensions.IfTrueThrowUserFriendlyException(input.Voucher == null, "请提交充值凭证"); | 
 |  |  |             var repeat = await _lifePayRechargeReceiptsRepository.Where(x => x.IsDeleted == false && x.OrderNo == input.OrderNo).FirstOrDefaultAsync(); | 
 |  |  |             CheckExtensions.IfTrueThrowUserFriendlyException(repeat != null && repeat.Id != input.Id, "业务订单号重复"); | 
 |  |  |             if (input.Id.HasValue) | 
 |  |  |             { | 
 |  |  |                 var payRechargeReceipts = await _lifePayRechargeReceiptsRepository.Where(x => x.IsDeleted == false && x.Id == input.Id.Value).FirstOrDefaultAsync(); | 
 |  |  | 
 |  |  |                 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; | 
 |  |  |                 } | 
 |  |  |                  | 
 |  |  |                  | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  | } |