| | |
| | | using NPOI.SS.Formula.Functions; |
| | | using StackExchange.Redis; |
| | | using static Volo.Abp.Identity.Settings.IdentitySettingNames; |
| | | using static Microsoft.EntityFrameworkCore.DbLoggerCategory; |
| | | |
| | | namespace LifePayment.Application; |
| | | |
| | |
| | | private readonly IRepository<LifePayChannles, Guid> _lifePayChannlesRep; |
| | | private readonly IRepository<LifePayAccount, Guid> _lifePayAccount; |
| | | private readonly IRepository<OperateHistory, Guid> _operateHistory; |
| | | private readonly IRepository<LifePayChannlesRake, Guid> _lifePayChannlesRakeRepository; |
| | | private readonly IDataFilter dataFilter; |
| | | private readonly IChannelFilter _channelFilter; |
| | | private readonly IAliPayApi _aliPayApi; |
| | |
| | | IRepository<LifePayUser, Guid> lifePayUserRepository, |
| | | IRepository<LifePayPremium, Guid> lifePayPremiumRepository, |
| | | IRepository<LifePayIntroInfo, Guid> lifePayIntroInfoRepository, |
| | | IRepository<LifePayChannlesRake, Guid> lifePayChannlesRakeRepository, |
| | | IRepository<OperateHistory, Guid> operateHistory, |
| | | IAliPayApi aliPayApi, |
| | | IAlipayInterfaceManager aliPayInterfaceManager, |
| | |
| | | _lifePayRateRepository = lifePayRateRepository; |
| | | _lifePayOrderRepository = lifePayOrderRepository; |
| | | _lifePayUserRepository = lifePayUserRepository; |
| | | _lifePayChannlesRakeRepository = lifePayChannlesRakeRepository; |
| | | _lifePayPremiumRepository = lifePayPremiumRepository; |
| | | _lifePayIntroInfoRepository = lifePayIntroInfoRepository; |
| | | _aliPayApi = aliPayApi; |
| | |
| | | public async Task<AlipayTradeQueryResponse> QueryAlipayTrade(OrderInQuiryInput input) |
| | | { |
| | | var result = await _aliPayApi.OrderInQuiry(input); |
| | | |
| | | return result; |
| | | } |
| | | |
| | |
| | | public async Task<AlipayTradeFastpayRefundQueryResponse> QueryAlipayTradeRefund(OrderInQuiryInput input) |
| | | { |
| | | var result = await _aliPayApi.QueryAlipayTradeRefund(input); |
| | | var order = await _lifePayOrderRepository.Where(x => x.OrderNo == input.OutTradeNo).FirstOrDefaultAsync(); |
| | | if (result.Code == AlipayResultCode.Success && result.RefundStatus == AlipayRefundStatus.Success) |
| | | { |
| | | order.LifePayOrderStatus = LifePayOrderStatusEnum.已退款; |
| | | order.LifePayRefundStatus = LifePayRefundStatusEnum.已退款; |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | |
| | | public async Task WxPayDomesticRefundsQuery(string outTradeNo) |
| | | /// <summary> |
| | | /// 查询微信退款订单信息 |
| | | /// </summary> |
| | | /// <param name="outTradeNo"></param> |
| | | /// <returns></returns> |
| | | public async Task<WxPayDomesticRefundsQueryReponse> WxPayDomesticRefundsQuery(string outTradeNo) |
| | | { |
| | | await _wxPayApi.WxPayDomesticRefundsQuery(outTradeNo); |
| | | return await _wxPayApi.WxPayDomesticRefundsQuery(outTradeNo); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 查询微信订单信息 |
| | | /// </summary> |
| | | /// <param name="outTradeNo"></param> |
| | | /// <returns></returns> |
| | | public async Task<WxPayTradeQueryReponse> WxPayTradeQuery(string outTradeNo) |
| | | { |
| | | return await _wxPayApi.WxPayTradeQuery(outTradeNo); |
| | | } |
| | | |
| | | |
| | | |
| | | #endregion |
| | | |
| | |
| | | var channle = await GetLifePayChannlesDtoByNum(input.ChannelId); |
| | | CheckExtensions.IfTrueThrowUserFriendlyException(channle == null, "渠道不存在"); |
| | | |
| | | var repeatOrder = await _lifePayOrderRepository.Where(x => x.LifePayOrderType == LifePayOrderTypeEnum.话费订单 && x.PayStatus == LifePayStatusEnum.已支付 |
| | | var repeatOrder = await _lifePayOrderRepository.Where(x => x.LifePayOrderType == LifePayOrderTypeEnum.PhoneOrder && x.PayStatus == LifePayStatusEnum.已支付 |
| | | && x.LifePayOrderStatus == LifePayOrderStatusEnum.充值中 |
| | | && x.OrderParamDetailJsonStr.Contains(input.ProductData.Phone)).ToListAsync(); |
| | | CheckExtensions.IfTrueThrowUserFriendlyException(repeatOrder.Count() > 0, "您有同户号订单正在充值中,请勿重复充值"); |
| | |
| | | |
| | | //var rate = await GetRate(); |
| | | //CheckExtensions.IfTrueThrowUserFriendlyException(rate.IsNullOrEmpty(), "未配置折扣"); |
| | | var repeatOrder = await _lifePayOrderRepository.Where(x => x.LifePayOrderType == LifePayOrderTypeEnum.电费订单 && x.PayStatus == LifePayStatusEnum.已支付 |
| | | var repeatOrder = await _lifePayOrderRepository.Where(x => x.LifePayOrderType == LifePayOrderTypeEnum.ElectricOrder && x.PayStatus == LifePayStatusEnum.已支付 |
| | | && x.LifePayOrderStatus == LifePayOrderStatusEnum.充值中 && x.OrderParamDetailJsonStr.Contains(input.ProductData.ElectricType) |
| | | && x.OrderParamDetailJsonStr.Contains(input.ProductData.ElectricAccount)).ToListAsync(); |
| | | CheckExtensions.IfTrueThrowUserFriendlyException(repeatOrder.Count() > 0, "您有同户号订单正在充值中,请勿重复充值"); |
| | |
| | | |
| | | //var rate = await GetRate(); |
| | | //CheckExtensions.IfTrueThrowUserFriendlyException(rate.IsNullOrEmpty(), "未配置折扣"); |
| | | var repeatOrder = await _lifePayOrderRepository.Where(x => x.LifePayOrderType == LifePayOrderTypeEnum.燃气订单 && x.PayStatus == LifePayStatusEnum.已支付 |
| | | var repeatOrder = await _lifePayOrderRepository.Where(x => x.LifePayOrderType == LifePayOrderTypeEnum.GasOrder && x.PayStatus == LifePayStatusEnum.已支付 |
| | | && x.LifePayOrderStatus == LifePayOrderStatusEnum.充值中 && x.OrderParamDetailJsonStr.Contains(input.ProductData.GasOrgType) |
| | | && x.OrderParamDetailJsonStr.Contains(input.ProductData.GasAccount)).ToListAsync(); |
| | | CheckExtensions.IfTrueThrowUserFriendlyException(repeatOrder.Count() > 0, "您有同户号订单正在充值中,请勿重复充值"); |
| | |
| | | //var payUrl = await GetPayQRCode(order.LifePayType.Value, order.OrderNo, desc, 0.01m, ip, input.H5Type); |
| | | var payUrl = await GetPayQRCode(res.LifePayType, res.OrderNo, res.Desc, res.PayAmount, ip, input.H5Type); |
| | | #else |
| | | //var payUrl = await GetPayQRCode(order.LifePayType.Value, order.OrderNo, desc, 0.01m, ip, input.H5Type); |
| | | var payUrl = await GetPayQRCode(order.LifePayType.Value, order.OrderNo, desc, order.PayAmount??0, ip, input.H5Type); |
| | | //var payUrl = await GetPayQRCode(res.LifePayType, res.OrderNo, res.Desc, 0.01m, ip, input.H5Type); |
| | | var payUrl = await GetPayQRCode(res.LifePayType, res.OrderNo, res.Desc, res.PayAmount, ip, input.H5Type); |
| | | #endif |
| | | |
| | | return payUrl; |
| | |
| | | order.ACOOLYStatus = acoolyStatus; |
| | | order.FinishTime = DateTime.Now; |
| | | await _lifePayOrderRepository.UpdateAsync(order); |
| | | |
| | | if (order.LifePayOrderStatus == LifePayOrderStatusEnum.已完成) |
| | | { |
| | | /// 毛利 |
| | | var grossProfit = order.RechargeAmount * (order.ChannleRate - order.PlatformRate) / 100; |
| | | /// 渠道佣金 ((充值面额 * 渠道折扣比例)-(充值面额 * 平台折扣比例))* 佣金比例 |
| | | var channlesRakePrice = grossProfit * (order.ChannlesRakeRate) / 100; |
| | | if (channlesRakePrice.HasValue) |
| | | { |
| | | LifePayChannlesRake lifePayChannlesRake = new LifePayChannlesRake() |
| | | { |
| | | OrderNo = order.OrderNo, |
| | | PayAmount = order.PayAmount.Value, |
| | | ChannlesRakeRate = order.ChannlesRakeRate.Value, |
| | | ChannlesRakePrice = channlesRakePrice.Value, |
| | | FinishTime = order.FinishTime.Value, |
| | | ChannelId = order.ChannelId, |
| | | }; |
| | | await _lifePayChannlesRakeRepository.InsertAsync(lifePayChannlesRake); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | |
| | | break; |
| | | case LifePayTypeEnum.AliPay: |
| | | var aliRefundResult = await AliTradeRefund(new AlipayTradeRefundRequest() { OutTradeNo = order.OrderNo, RefundAmount = input.RefundPrice.ToString() }); |
| | | var aliRefundResult = await AliTradeRefund(new AlipayTradeRefundRequest() { OutTradeNo = order.OrderNo, OutRefundNo = outRefundNo, RefundAmount = input.RefundPrice.ToString() }); |
| | | if (aliRefundResult.Code != AlipayResultCode.Success) |
| | | { |
| | | throw new UserFriendlyException("退款失败:" + aliRefundResult.SubMsg); |
| | |
| | | await _lifePayAccount.InsertAsync(userAccount); |
| | | } |
| | | |
| | | if (input.LifePayType == LifePayOrderTypeEnum.话费订单) |
| | | if (input.LifePayType == LifePayOrderTypeEnum.PhoneOrder) |
| | | { |
| | | var extraProperties = JsonConvert.DeserializeObject<Model_UserAccountExtraProperties>(input.ExtraProperties); |
| | | if (!string.IsNullOrEmpty(extraProperties.Name) && extraProperties.Phone == user.PhoneNumber) |
| | |
| | | return message; |
| | | } |
| | | |
| | | |
| | | private async Task<IQueryable<LifePayOrderListOutput>> GetLifePayOrderListFilter(QueryLifePayOrderListInput input) |
| | | { |
| | | var channles = await _lifePayChannlesRep.Where(x => x.ChannlesName.Contains(input.KeyWords)).Select(x => x.ChannlesNum).ToListAsync(); |
| | |
| | | return channel.ChannlesRate; |
| | | } |
| | | } |
| | | |
| | | public async Task<SetPayTypeReturn> SetPayType(string orderNo, LifePayTypeEnum lifePayType, string ip) |
| | | { |
| | | var order = await _lifePayOrderRepository.Where(x => x.OrderNo == orderNo).FirstOrDefaultAsync(); |