| | |
| | | using Microsoft.Extensions.Logging; |
| | | using Microsoft.Extensions.Options; |
| | | using Newtonsoft.Json; |
| | | using StackExchange.Redis; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Data; |
| | |
| | | ACOOLYStatus = a.ACOOLYStatus, |
| | | LifePayRefundStatus = a.LifePayRefundStatus, |
| | | }).GetPageResult(input.PageModel); |
| | | |
| | | return result; |
| | | } |
| | | |
| | |
| | | s.FinishTimeStr = !s.FinishTime.HasValue ? string.Empty : s.FinishTime.Value.ToString(LifePaymentConstant.DateTimeFormatStr.yyyyMMddHHmm); |
| | | s.RefundApplyTimeStr = !s.RefundApplyTime.HasValue ? string.Empty : s.RefundApplyTime.Value.ToString(LifePaymentConstant.DateTimeFormatStr.yyyyMMddHHmm); |
| | | }); |
| | | CheckExtensions.IfTrueThrowUserFriendlyException(result.IsNullOrEmpty(), "暂无数据导出"); |
| | | return result; |
| | | } |
| | | |
| | |
| | | s.LifePayOrderStatusStr = s.LifePayOrderStatus.GetDescription(); |
| | | s.FinishTimeStr = !s.FinishTime.HasValue ? string.Empty : s.FinishTime.Value.ToString(LifePaymentConstant.DateTimeFormatStr.yyyyMMddHHmmss); |
| | | }); |
| | | CheckExtensions.IfTrueThrowUserFriendlyException(result.IsNullOrEmpty(), "暂无数据导出"); |
| | | return result; |
| | | } |
| | | |
| | | public async Task<List<LifePayOrderListTemplateForChannle>> GetLifePayOrderPageExportForChannle(QueryLifePayOrderListInput input) |
| | | { |
| | | var result = await (await GetLifePayOrderListFilter(input)).Select(x => new LifePayOrderListTemplateForChannle |
| | | { |
| | | DiscountAmount = x.DiscountAmount, |
| | | FinishTime = x.FinishTime, |
| | | LifePayOrderStatus = x.LifePayOrderStatus, |
| | | LifePayOrderType = x.LifePayOrderType, |
| | | LifePayType = x.LifePayType, |
| | | OrderNo = x.OrderNo, |
| | | PayAmount = x.PayAmount, |
| | | ActualRechargeAmount = x.RechargeAmount, |
| | | PhoneNumber = x.PhoneNumber, |
| | | RechargeAmount = x.RechargeAmount, |
| | | OutOrderNo = x.OutOrderNo, |
| | | PayStatus = x.PayStatus, |
| | | PayTime = x.PayTime, |
| | | ACOOLYOrderNo = x.ACOOLYOrderNo, |
| | | CreationTime = x.CreationTime, |
| | | LifePayRefundStatus = x.LifePayRefundStatus, |
| | | ACOOLYStatus = x.ACOOLYStatus, |
| | | //RefundApplyRemark = x.RefundApplyRemark, |
| | | ChannelName = x.ChannelName, |
| | | PlatformPrice = x.PlatformDeductionAmount.HasValue ? x.PlatformDeductionAmount.Value : 0.00m |
| | | }).OrderByDescending(r => r.CreationTime).ToListAsync(); |
| | | var i = 0; |
| | | result.ForEach(s => |
| | | { |
| | | s.SerialNumber = ++i; |
| | | s.LifePayOrderTypeStr = s.LifePayOrderType.GetDescription(); |
| | | s.CreationTimeStr = s.CreationTime.ToString(LifePaymentConstant.DateTimeFormatStr.yyyyMMddHHmmss); |
| | | s.RechargeAmountStr = s.RechargeAmount.ToString("F2"); |
| | | s.PayAmountStr = s.PayAmount.ToString("F2"); |
| | | s.PayTimeStr = !s.PayTime.HasValue ? string.Empty : s.PayTime.Value.ToString(LifePaymentConstant.DateTimeFormatStr.yyyyMMddHHmmss); |
| | | s.LifePayTypeStr = s.LifePayType.GetDescription(); |
| | | s.PayStatusStr = s.PayStatus.GetDescription(); |
| | | s.ActualRechargeAmountStr = s.ActualRechargeAmount.ToString("F2"); |
| | | s.LifePayRefundStatusStr = s.LifePayRefundStatus == LifePayRefundStatusEnum.无需退款 ? "" : s.LifePayRefundStatus.GetDescription(); |
| | | s.ACOOLYStatusStr = s.ACOOLYStatus.GetDescription(); |
| | | s.LifePayOrderStatusStr = s.LifePayOrderStatus.GetDescription(); |
| | | s.FinishTimeStr = !s.FinishTime.HasValue ? string.Empty : s.FinishTime.Value.ToString(LifePaymentConstant.DateTimeFormatStr.yyyyMMddHHmmss); |
| | | }); |
| | | CheckExtensions.IfTrueThrowUserFriendlyException(result.IsNullOrEmpty(), "暂无数据导出"); |
| | | return result; |
| | | } |
| | | |
| | | public async Task<string> GetBillErceiptExport(string orderNo) |
| | | { |
| | | try |
| | |
| | | public async Task LifePaySuccessHandler(string orderNo, string outOrderNo) |
| | | { |
| | | var order = await _lifePayOrderRepository.Where(x => x.OrderNo == orderNo).FirstOrDefaultAsync(); |
| | | _logger.LogInformation($"正在处理订单:{order?.Id}-{order?.PayStatus}"); |
| | | CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "订单不存在"); |
| | | |
| | | if (order.PayStatus != LifePayStatusEnum.未支付) |
| | |
| | | default: |
| | | break; |
| | | } |
| | | _logger.LogInformation("已向供应商发起订单"); |
| | | |
| | | order.LifePayRefundStatus = LifePayRefundStatusEnum.无需退款; |
| | | order.LifePayOrderStatus = LifePayOrderStatusEnum.充值中; |
| | |
| | | order.OutRequestNo = result.RequestNo.IsNullOrEmpty() ? null : result.RequestNo; |
| | | order.ACOOLYOrderNo = result.ACOOLYOrderNo; |
| | | order.ACOOLYStatus = ACOOLYStatusEnum.充值中; |
| | | await _lifePayOrderRepository.UpdateAsync(order); |
| | | _logger.LogInformation("生活缴费订单:" + order.ToJson()); |
| | | |
| | | /// 创建生活缴费消费记录 |
| | | await _lifePayOrderService.CreatLifePayConsumption(ACOOLYStatusEnum.充值中, order.OrderNo, order.ACOOLYOrderNo, |
| | | order.PlatformDeductionAmount ?? 0, order.ChannelId, order.CreationTime, order.FinishTime); |
| | | _logger.LogInformation("已插入消费记录"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | order.LifePayRefundStatus = LifePayRefundStatusEnum.待退款; |
| | | order.ACOOLYStatus = ACOOLYStatusEnum.充值失败; |
| | | order.RefundApplyRemark = ex.Message; |
| | | await _lifePayOrderRepository.UpdateAsync(order); |
| | | _logger.LogError("生活缴费订单状态:" + order.LifePayOrderStatus.ToString()); |
| | | } |
| | | |
| | | _logger.LogError("生活缴费订单状态:" + order.LifePayOrderStatus.ToString()); |
| | | await _lifePayOrderRepository.UpdateAsync(order); |
| | | } |
| | | |
| | | public async Task LifePayRefundsHandler(string orderNo, LifePayRefundStatusEnum refundStatus) |
| | |
| | | var order = await _lifePayOrderRepository.Where(x => x.OrderNo == orderNo).FirstOrDefaultAsync(); |
| | | CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "订单不存在"); |
| | | |
| | | if (order.ACOOLYStatus.HasValue && (int)order.ACOOLYStatus > (int)acoolyStatus) |
| | | { |
| | | _logger.LogInformation($"订单({orderNo})由{order.ACOOLYStatus}至{acoolyStatus}失败,不可回滚状态"); |
| | | return; |
| | | } |
| | | |
| | | if (order.LifePayOrderStatus == status && order.ACOOLYStatus == acoolyStatus) |
| | | { |
| | | _logger.LogInformation($"订单({orderNo})已处理该状态"); |
| | |
| | | } |
| | | |
| | | order.ActualReceivedAmount = actualParValue; |
| | | order.PlatformDeductionAmount = Math.Round((order.ActualReceivedAmount ?? 0) * (order.PlatformRate ?? 0) / 100, 2); |
| | | |
| | | if (acoolyOrderNo.IsNotNullOrEmpty()) |
| | | { |
| | |
| | | |
| | | order.LifePayOrderStatus = status; |
| | | order.ACOOLYStatus = acoolyStatus; |
| | | |
| | | if (order.LifePayOrderStatus == LifePayOrderStatusEnum.已完成 |
| | | || order.LifePayOrderStatus == LifePayOrderStatusEnum.已退款) |
| | | { |
| | | order.FinishTime = DateTime.Now; |
| | | order.PlatformDeductionAmount = Math.Round((order.ActualReceivedAmount ?? 0) * (order.PlatformRate ?? 0) / 100, 2); |
| | | } |
| | | |
| | | if (order.ACOOLYStatus == ACOOLYStatusEnum.已退款 || order.ACOOLYStatus == ACOOLYStatusEnum.部分充值成功) |
| | | { |
| | | order.RefundPrice = Math.Round((1 - ((order.ActualReceivedAmount ?? 0) / (order.RechargeAmount ?? 0))) * (order.PayAmount ?? 0), 2); |
| | | } |
| | | |
| | |
| | | |
| | | if (order.LifePayOrderStatus == LifePayOrderStatusEnum.待退款 || order.LifePayRefundStatus == LifePayRefundStatusEnum.待退款) |
| | | { |
| | | if (order.ACOOLYStatus == ACOOLYStatusEnum.已完成 || order.ACOOLYStatus == ACOOLYStatusEnum.充值成功 || order.ACOOLYStatus == ACOOLYStatusEnum.部分充值成功) |
| | | { |
| | | order.LifePayOrderStatus = LifePayOrderStatusEnum.已完成; |
| | | } |
| | | else |
| | | { |
| | | order.LifePayOrderStatus = LifePayOrderStatusEnum.退款失败; |
| | | } |
| | | |
| | | order.RefundCheckRemark = input.RefundCheckRemark; |
| | | order.RefundCheckUserId = CurrentUser.Id; |
| | | order.LifePayRefundStatus = LifePayRefundStatusEnum.退款驳回; |
| | | order.LifePayRefundStatus = LifePayRefundStatusEnum.待退款; |
| | | order.LifePayOrderStatus = LifePayOrderStatusEnum.待退款; |
| | | |
| | | await _lifePayOrderRepository.UpdateAsync(order); |
| | | |
| | |
| | | dto.PromoterId = promoter.Id; |
| | | } |
| | | |
| | | var rate = await _lifePayRateRepository.FirstOrDefaultAsync(it => it.RateType == LifePayRateTypeEnum.供应商折扣价); |
| | | CheckExtensions.IfTrueThrowUserFriendlyException(rate != null && input.ChannlesRate < rate.Rate, "渠道折扣无法低于供应商折扣"); |
| | | |
| | | dto.ChannlesName = input.ChannlesName; |
| | | dto.ChannlesNum = input.ChannlesNum; |
| | | dto.ChannlesRate = input.ChannlesRate; |
| | |
| | | dto.AgentType = input.AgentType; |
| | | dto.AreaProvinceId = input.AreaProvinceId; |
| | | dto.AreaCityId = input.AreaCityId; |
| | | |
| | | #region 记录日志 |
| | | |
| | | await LifePayOrderHistory("渠道管理", "编辑", input.Id.Value, TableType.LifePayChannles); |