| | |
| | | using Microsoft.EntityFrameworkCore; |
| | | using ZeroD.Util; |
| | | using LifePayment.Domain; |
| | | using static LifePayment.Domain.Shared.LifePaymentConstant; |
| | | using Newtonsoft.Json; |
| | | |
| | | namespace LifePayment.Application.LifePay |
| | | { |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取收支流水 |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | | 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) || x.OutOrderNo.Contains(input.KeyWord)) |
| | | .WhereIf(input.LifePayType.HasValue, x => x.LifePayType == input.LifePayType) |
| | | .WhereIf(input.ExpensesReceiptsType.HasValue, x => x.ExpensesReceiptsType == input.ExpensesReceiptsType) |
| | | .WhereIf(input.TimeBegin.HasValue, x => x.FinishTime >= input.TimeBegin) |
| | | .WhereIf(input.TimeEnd.HasValue, x => x.FinishTime <= input.TimeEnd) |
| | | |
| | | .Select(x => new LifePayExpensesReceiptsListOutput() |
| | | { |
| | | Id = x.Id, |
| | | OrderNo = x.OrderNo, |
| | | OutOrderNo = x.OutOrderNo, |
| | | LifePayType = x.LifePayType, |
| | | ExpensesReceiptsType = x.ExpensesReceiptsType, |
| | | Amount = x.Amount, |
| | | FinishTime = x.FinishTime |
| | | }) |
| | | .GetPageResult(input.PageModel); |
| | | |
| | | var totalIncome = await _lifePayExpensesReceiptsRepository.Where(x => x.IsDeleted == false && x.ExpensesReceiptsType == ExpensesReceiptsTypeEnum.Expenses).SumAsync(x => x.Amount); |
| | | var totalRefund = await _lifePayExpensesReceiptsRepository.Where(x => x.IsDeleted == false && x.ExpensesReceiptsType == ExpensesReceiptsTypeEnum.Receipts).SumAsync(x => x.Amount); |
| | | |
| | | LifePayExpensesReceiptsPageOutput<LifePayExpensesReceiptsListOutput> result = new LifePayExpensesReceiptsPageOutput<LifePayExpensesReceiptsListOutput>(); |
| | | result.Data = list.Data; |
| | | result.TotalIncome = totalIncome; |
| | | result.TotalRefund = totalRefund; |
| | | result.RealIncome = totalIncome - totalRefund; |
| | | return result; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 插入收支流水 |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | |
| | | OutOrderNo = input.OutOrderNo, |
| | | LifePayType = input.LifePayType, |
| | | ExpensesReceiptsType = input.ExpensesReceiptsType, |
| | | Amount = input.Amount |
| | | Amount = input.Amount, |
| | | }; |
| | | |
| | | switch (input.LifePayType) |
| | |
| | | if (input.ExpensesReceiptsType == ExpensesReceiptsTypeEnum.Expenses) |
| | | { |
| | | var query = await _aliPayApi.OrderInQuiry(new OrderInQuiryInput() { OutTradeNo = input.OrderNo }); |
| | | if (query.Code == AlipayResultCode.Success && query.TradeStatus == AlipayStatus.TRADESUCCESS) |
| | | if (query.Code == AlipayResultCode.Success && (query.TradeStatus == AlipayStatus.TRADESUCCESS |
| | | || query.TradeStatus == AlipayStatus.TRADECLOSED)) |
| | | { |
| | | data.ExtraProperties = JsonConvert.SerializeObject(query); |
| | | data.FinishTime = Convert.ToDateTime(query.SendPayDate); |
| | | await _lifePayExpensesReceiptsRepository.InsertAsync(data); |
| | | } |
| | | } |
| | |
| | | var query = await _aliPayApi.QueryAlipayTradeRefund(new OrderInQuiryInput() { OutTradeNo = input.OrderNo }); |
| | | if (query.Code == AlipayResultCode.Success && query.RefundStatus == AlipayRefundStatus.Success) |
| | | { |
| | | data.ExtraProperties = JsonConvert.SerializeObject(query); |
| | | //data.FinishTime = Convert.ToDateTime(query.SendPayDate); |
| | | await _lifePayExpensesReceiptsRepository.InsertAsync(data); |
| | | } |
| | | } |
| | | break; |
| | | case LifePayTypeEnum.WxPay: break; |
| | | case LifePayTypeEnum.WxPay: |
| | | if (input.ExpensesReceiptsType == ExpensesReceiptsTypeEnum.Expenses) |
| | | { |
| | | var query = await _wxPayApi.WxPayTradeQuery(input.OrderNo); |
| | | if (query.TradeState == WxPayStatus.支付成功 || query.TradeState == WxPayStatus.转入退款) |
| | | { |
| | | data.ExtraProperties = JsonConvert.SerializeObject(query); |
| | | data.FinishTime = Convert.ToDateTime(query.SuccessTime); |
| | | await _lifePayExpensesReceiptsRepository.InsertAsync(data); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | var query = await _wxPayApi.WxPayDomesticRefundsQuery(input.OrderNo); |
| | | if (query.Code == AlipayResultCode.Success && query.RefundStatus == WxPayRefundStatus.退款成功) |
| | | { |
| | | data.ExtraProperties = JsonConvert.SerializeObject(query); |
| | | data.FinishTime = Convert.ToDateTime(query.SuccessTime); |
| | | await _lifePayExpensesReceiptsRepository.InsertAsync(data); |
| | | } |
| | | } |
| | | break; |
| | | default: break; |
| | | } |
| | | |
| | | |
| | | } |
| | | } |
| | | } |