| | |
| | | using static Volo.Abp.Identity.Settings.IdentitySettingNames; |
| | | using static Microsoft.EntityFrameworkCore.DbLoggerCategory; |
| | | using LifePayment.Application.LifePay; |
| | | using Alipay.AopSdk.Core.Domain; |
| | | |
| | | namespace LifePayment.Application; |
| | | |
| | |
| | | .WhereIf(input.ACOOLYStatus.HasValue, x => x.ACOOLYStatus == input.ACOOLYStatus.Value) |
| | | .WhereIf(input.LifePayOrderType.HasValue, x => x.LifePayOrderType == input.LifePayOrderType.Value) |
| | | .WhereIf(input.UserId.HasValue, x => x.UserId == input.UserId.Value) |
| | | .WhereIf(input.KeyWords.IsNotNullOrEmpty(), x => x.PhoneNumber.Contains(input.KeyWords) || x.OrderNo.Contains(input.KeyWords) || x.OutOrderNo.Contains(input.KeyWords) || x.ACOOLYOrderNo.Contains(input.KeyWords)) |
| | | .WhereIf(input.KeyWords.IsNotNullOrEmpty(), x => x.PhoneNumber.Contains(input.KeyWords) || x.RefundOrderNo.Contains(input.KeyWords) || x.OutOrderNo.Contains(input.KeyWords) || x.ACOOLYOrderNo.Contains(input.KeyWords)) |
| | | join b in _lifePayChannlesRep on a.ChannelId equals b.ChannlesNum into temp |
| | | from b in temp.DefaultIfEmpty() |
| | | select new LifePayOrderListOutput |
| | |
| | | /// <returns></returns> |
| | | public async Task<AlipayTradeFastpayRefundQueryResponse> QueryAlipayTradeRefund(OrderInQuiryInput input) |
| | | { |
| | | var order = await _lifePayOrderRepository.Where(x => x.OrderNo == input.OutTradeNo || x.RefundOrderNo == input.OutRefundNo).FirstOrDefaultAsync(); |
| | | CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "未找到订单信息"); |
| | | input.OutTradeNo = order.OrderNo; |
| | | input.OutRefundNo = order.RefundOrderNo; |
| | | 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.已退款; |
| | | await _lifePayOrderService.AddLifePayExpensesReceipts(new AddLifePayExpensesReceiptsInput() |
| | | { |
| | | OrderNo = result.OutTradeNo, |
| | | OrderNo = order.RefundOrderNo, |
| | | OutOrderNo = result.TradeNo, |
| | | LifePayType = LifePayTypeEnum.AliPay, |
| | | ExpensesReceiptsType = ExpensesReceiptsTypeEnum.Receipts |
| | |
| | | /// <returns></returns> |
| | | public async Task<WxPayDomesticRefundsQueryReponse> WxPayDomesticRefundsQuery(string outTradeNo) |
| | | { |
| | | return await _wxPayApi.WxPayDomesticRefundsQuery(outTradeNo); |
| | | var order = await _lifePayOrderRepository.Where(x => x.RefundOrderNo == outTradeNo).FirstOrDefaultAsync(); |
| | | CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "未找到订单信息"); |
| | | var result = await _wxPayApi.WxPayDomesticRefundsQuery(outTradeNo); |
| | | if (order.LifePayRefundStatus != LifePayRefundStatusEnum.已退款 && result.Code == WxpayResultCode.Success && result.Status == WxPayRefundStatus.退款成功) |
| | | { |
| | | order.LifePayOrderStatus = LifePayOrderStatusEnum.已退款; |
| | | order.LifePayRefundStatus = LifePayRefundStatusEnum.已退款; |
| | | await _lifePayOrderService.AddLifePayExpensesReceipts(new AddLifePayExpensesReceiptsInput() |
| | | { |
| | | OrderNo = order.OrderNo, |
| | | OutRefundNo = order.RefundOrderNo, |
| | | OutOrderNo = order.OutOrderNo, |
| | | LifePayType = LifePayTypeEnum.AliPay, |
| | | ExpensesReceiptsType = ExpensesReceiptsTypeEnum.Receipts |
| | | }); |
| | | } |
| | | return result; |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | var channle = await GetLifePayChannlesDtoByNum(input.ChannelId); |
| | | CheckExtensions.IfTrueThrowUserFriendlyException(channle == null, "渠道不存在"); |
| | | |
| | | var repeatOrder = await _lifePayOrderRepository.Where(x => x.LifePayOrderType == LifePayOrderTypeEnum.PhoneOrder && 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, "您有同户号订单正在充值中,请勿重复充值"); |
| | |
| | | CheckExtensions.IfTrueThrowUserFriendlyException(order.ACOOLYStatus != ACOOLYStatusEnum.部分充值成功, "该订单无法修改到账金额"); |
| | | |
| | | order.ActualReceivedAmount = input.ActualReceivedAmount; |
| | | |
| | | await _lifePayOrderRepository.UpdateAsync(order); |
| | | |
| | | return Constant.SUCCESS; |
| | |
| | | OutOrderNo = orderNo |
| | | }; |
| | | var result = await _aCOOLYManager.ConfirmElectricOrder(requestInput); |
| | | #if DEBUG |
| | | |
| | | _logger.LogInformation($"CreateACOOLYElectricOrder:{JsonConvert.SerializeObject(result)}"); |
| | | |
| | | #endif |
| | | |
| | | CheckExtensions.IfTrueThrowUserFriendlyException(!result.Success || (result.Code != ACOOLYConstant.Code.SUCCESS && result.Code != ACOOLYConstant.Code.PROCESSING), |
| | | result.Message); |
| | |
| | | //SetOrderStatus(order, result.Code); |
| | | order.OutRequestNo = result.RequestNo.IsNullOrEmpty() ? null : result.RequestNo; |
| | | order.ACOOLYOrderNo = result.ACOOLYOrderNo; |
| | | order.ACOOLYStatus = ACOOLYStatusEnum.充值中; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _logger.LogError(ex, "处理生活缴费支付成功回调时异常"); |
| | | order.LifePayOrderStatus = LifePayOrderStatusEnum.待退款; |
| | | order.LifePayRefundStatus = LifePayRefundStatusEnum.待退款; |
| | | order.ACOOLYStatus = ACOOLYStatusEnum.充值失败; |
| | | order.RefundApplyRemark = ex.Message; |
| | | } |
| | | |
| | | _logger.LogError("生活缴费订单状态:" + order.LifePayOrderStatus.ToString()); |
| | | await _lifePayOrderRepository.UpdateAsync(order); |
| | | } |
| | |
| | | { |
| | | case LifePayRefundStatusEnum.已退款: |
| | | order.LifePayOrderStatus = LifePayOrderStatusEnum.已退款; |
| | | order.ACOOLYStatus = ACOOLYStatusEnum.已退款; |
| | | order.LifePayRefundStatus = LifePayRefundStatusEnum.已退款; |
| | | break; |
| | | case LifePayRefundStatusEnum.退款中: |
| | | order.LifePayOrderStatus = LifePayOrderStatusEnum.退款中; |
| | | order.LifePayRefundStatus = LifePayRefundStatusEnum.退款中; |
| | | break; |
| | | default: break; |
| | | } |
| | |
| | | var order = await _lifePayOrderRepository.Where(x => x.OrderNo == orderNo).FirstOrDefaultAsync(); |
| | | CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "订单不存在"); |
| | | |
| | | if (order.LifePayOrderStatus == LifePayOrderStatusEnum.已完成 || order.LifePayOrderStatus == LifePayOrderStatusEnum.已退款) |
| | | if (order.LifePayOrderStatus >= LifePayOrderStatusEnum.已完成) |
| | | { |
| | | return; |
| | | } |
| | |
| | | { |
| | | case LifePayTypeEnum.WxPay: |
| | | var wxRefundResult = await WxPayDomesticRefunds(order.OrderNo, outRefundNo, order.RefundApplyRemark, Convert.ToInt32(input.RefundPrice * 100), Convert.ToInt32(order.PayAmount * 100)); |
| | | if (wxRefundResult.Status == "SUCCESS") |
| | | if (wxRefundResult.Status == WxpayRefundResultStatus.SUCCESS) |
| | | { |
| | | order.RefundOrderNo = outRefundNo; |
| | | order.LifePayOrderStatus = LifePayOrderStatusEnum.退款中; |
| | | order.LifePayRefundStatus = LifePayRefundStatusEnum.退款中; |
| | | } |
| | | else if (wxRefundResult.Status == WxpayRefundResultStatus.PROCESSING) |
| | | { |
| | | order.RefundOrderNo = outRefundNo; |
| | | order.LifePayOrderStatus = LifePayOrderStatusEnum.退款中; |
| | | order.LifePayRefundStatus = LifePayRefundStatusEnum.退款中; |
| | | } |
| | | else if (wxRefundResult.Status.IsNullOrEmpty() && wxRefundResult.Message == WxpayRefundResultMessage.FullRefund) |
| | | { |
| | | order.LifePayOrderStatus = LifePayOrderStatusEnum.已退款; |
| | | order.LifePayRefundStatus = LifePayRefundStatusEnum.已退款; |
| | | } |
| | | else if (wxRefundResult.Status == "PROCESSING") |
| | | { |
| | | order.LifePayOrderStatus = LifePayOrderStatusEnum.退款中; |
| | | order.LifePayRefundStatus = LifePayRefundStatusEnum.退款中; |
| | | } |
| | | else |
| | | { |
| | | order.LifePayOrderStatus = LifePayOrderStatusEnum.待退款; |
| | | order.LifePayRefundStatus = LifePayRefundStatusEnum.待退款; |
| | | throw new UserFriendlyException("退款失败:" + wxRefundResult.Message); |
| | | } |
| | | |
| | | break; |
| | |
| | | throw new UserFriendlyException("退款失败:" + aliRefundResult.SubMsg); |
| | | } |
| | | |
| | | order.LifePayOrderStatus = LifePayOrderStatusEnum.已退款; |
| | | order.LifePayRefundStatus = LifePayRefundStatusEnum.已退款; |
| | | order.RefundOrderNo = outRefundNo; |
| | | order.LifePayOrderStatus = LifePayOrderStatusEnum.退款中; |
| | | order.LifePayRefundStatus = LifePayRefundStatusEnum.退款中; |
| | | break; |
| | | default: throw new UserFriendlyException("退款失败"); |
| | | } |
| | | |
| | | order.RefundOrderNo = outRefundNo; |
| | | order.RefundCredentialsImgUrl = input.RefundCredentialsImgUrl; |
| | | order.RefundCheckRemark = input.RefundCheckRemark; |
| | | order.RefundTime = DateTime.Now; |
| | |
| | | userAccount.DeleterId = userAccount.UserId; |
| | | userAccount.DeletionTime = DateTime.Now; |
| | | userAccount.IsDeleted = true; |
| | | |
| | | /// 清除户号对应的用户姓名 |
| | | if (userAccount.LifePayType == LifePayOrderTypeEnum.PhoneOrder || userAccount.LifePayType == LifePayOrderTypeEnum.ElectricOrder) |
| | | { |
| | | var user = await _lifePayUserRepository.Where(r => r.Id == userAccount.UserId && !r.IsDeleted).FirstOrDefaultAsync(); |
| | | CheckExtensions.IfTrueThrowUserFriendlyException(user == null, "用户不存在"); |
| | | var extraProperties = JsonConvert.DeserializeObject<Model_UserAccountExtraProperties>(userAccount.ExtraProperties); |
| | | if (!string.IsNullOrEmpty(extraProperties.Name) && extraProperties.Phone == user.PhoneNumber) |
| | | { |
| | | user.Name = string.Empty; |
| | | } |
| | | } |
| | | return Constant.SUCCESS; |
| | | } |
| | | |
| | |
| | | |
| | | #region 记录日志 |
| | | |
| | | await PublishLifePayOrderHistoryEvent("退款驳回", "退款", order.Id); |
| | | |
| | | await LifePayOrderHistory("退款驳回", "退款", order.Id, (int)OperateHistoryTypeEnum.LifePayRefund); |
| | | #endregion |
| | | } |
| | | else |