lingling
2025-03-24 384ce2060d3422341f96c2f897e807b52d15cb0c
Merge branch 'master' of http://120.26.58.240:8888/r/LifePaymentApi
15个文件已修改
547 ■■■■ 已修改文件
LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Application.Contracts/LifePay/LifePayInput.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Application.Contracts/User/CreateBackClientUserInput.cs 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Application/LifePay/LifePayService.cs 186 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Application/LifePay/StatisticsService.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Application/LifePaymentServicesApplicationModuleAutoMapperProfile.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Application/Setting/OperateHistoryService.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Domain.Shared/Enum/LifePay/LifePayEnum.cs 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Domain.Shared/WeChat/WxPayPostBaseModel.cs 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Domain/LifePay/LifePayOrder.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs
@@ -50,7 +50,7 @@
    Task LifePaySuccessHandler(string orderNo, string outOrderNo);
    /// <summary>
    /// 支付成功回调处理
    /// 供应商回调处理
    /// </summary>
    /// <param name="orderNo"></param>
    /// <param name="acoolyOrderNo"></param>
@@ -58,7 +58,7 @@
    /// <param name="acoolyStatus"></param>
    /// <param name="payAmount"></param>
    /// <returns></returns>
    Task ACOOLYOrderNotifyHandler(string orderNo, string acoolyOrderNo, LifePayOrderStatusEnum status, ACOOLYStatusEnum acoolyStatus, decimal payAmount);
    Task ACOOLYOrderNotifyHandler(string orderNo, string acoolyOrderNo, LifePayOrderStatusEnum status, ACOOLYStatusEnum acoolyStatus, decimal payAmount, string refundApplyRemark);
    /// <summary>
    /// 创建生活缴费话费订单
@@ -142,6 +142,13 @@
    /// </summary>
    /// <returns></returns>
    Task<List<LifePayRateListOutput>> GetRate();
    /// <summary>
    /// 获取渠道折扣
    /// </summary>
    /// <returns></returns>
    Task<ChannelRateOutput> GetChannelRate(ChannelsBaseInput input);
    /// <summary>
    /// 获取手续费费率
@@ -250,6 +257,9 @@
    Task<List<LifePayOrderListTemplate>> GetLifePayOrderPageExport(QueryLifePayOrderListInput input);
    Task<List<LifePayRefundOrderListTemplate>> GetLifePayRefudOrderPageExport(QueryLifePayRefundOrderListInput input);
    Task<string> GetBillErceiptExport(string orderNo);
    /// <summary>
LifePayment/LifePayment.Application.Contracts/LifePay/LifePayInput.cs
@@ -357,6 +357,10 @@
    /// 订单状态
    /// </summary>
    public LifePayOrderStatusEnum? LifePayOrderStatus { get; set; }
    /// <summary>
    /// 订单状态
    /// </summary>
    public LifePayRefundStatusEnum? LifePayRefundStatus { get; set; }
    /// <summary>
    /// 用户Id
LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs
@@ -176,6 +176,11 @@
    public string OrderNo { get; set; }
    /// <summary>
    /// 退款订单号
    /// </summary>
    public string RefundOrderNo { get; set; }
    /// <summary>
    /// 充值金额
    /// </summary>
    public decimal RechargeAmount { get; set; }
@@ -379,6 +384,103 @@
}
public class LifePayRefundOrderListTemplate
{
    [Name("序号")]
    public int SerialNumber { get; set; }
    [Name("手机号")]
    public string PhoneNumber { get; set; }
    public LifePayTypeEnum? LifePayType { get; set; }
    public LifePayOrderTypeEnum LifePayOrderType { get; set; }
    [Name("充值类型")]
    public string LifePayOrderTypeStr { get; set; }
    [Name("充值渠道")]
    public string ChannelName { get; set; }
    /// <summary>
    /// 退款申请时间
    /// </summary>
    [Name("申请退款时间")]
    public string RefundApplyTimeStr { get; set; }
    /// <summary>
    /// 下单时间
    /// </summary>
    public DateTime CreationTime { get; set; }
    [Name("下单时间")]
    public string CreationTimeStr { get; set; }
    [Name("退款订单号")]
    public string RefundOrderNo { get; set; }
    [Name("充值金额")]
    public string RechargeAmountStr { get; set; }
    /// <summary>
    /// 充值金额
    /// </summary>
    public decimal RechargeAmount { get; set; }
    /// <summary>
    /// 实际到账金额
    /// </summary>
    [Name("实际到账金额")]
    public string ActualReceivedAmount { get; set; }
    /// <summary>
    /// 实付金额
    /// </summary>
    public decimal PayAmount { get; set; }
    [Name("实付金额")]
    public string PayAmountStr { get; set; }
    [Name("退款渠道")]
    public string LifePayTypeStr { get; set; }
    /// <summary>
    /// 退款金额
    /// </summary>
    [Name("退款金额")]
    public decimal? RefundPrice { get; set; }
    public ACOOLYStatusEnum ACOOLYStatus { get; set; }
    /// <summary>
    /// 供应商订单状态
    /// </summary>
    [Name("供应商订单状态")]
    public string ACOOLYStatusStr { get; set; }
    /// <summary>
    /// 完成时间
    /// </summary>
    public DateTime? FinishTime { get; set; }
    /// <summary>
    /// 平台退款状态
    /// </summary>
    [Name("平台退款状态")]
    public string LifePayRefundStatus { get; set; }
    [Name("完成时间")]
    public string FinishTimeStr { get; set; }
}
public class UserLifePayOrderOutput
{
    public Guid Id { get; set; }
@@ -457,10 +559,21 @@
    public string RefundApplyRemark { get; set; }
    public string RefundCheckRemark { get; set; }
    /// <summary>
    /// 渠道流水号
    /// </summary>
    public string ACOOLYOrderNo { get; set; }
    /// <summary>
    /// 平台退款状态
    /// </summary>
    public LifePayRefundStatusEnum? LifePayRefundStatus { get; set; }
    /// <summary>
    /// 平台状态
    /// </summary>
    public ACOOLYStatusEnum? ACOOLYStatus { get; set; }
}
public class LifePayOrderOutput
@@ -925,3 +1038,8 @@
    public int YesterdayActiveUsers { get; set; }
}
public class ChannelRateOutput
{
    public decimal ChannlesRate { get; set; }
}
LifePayment/LifePayment.Application.Contracts/User/CreateBackClientUserInput.cs
@@ -1,5 +1,7 @@
using System;
using LifePayment.Domain.Shared;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using ZeroD.Util;
namespace LifePayment.Application.Contracts
@@ -15,11 +17,16 @@
        /// 手机号
        /// </summary>
        public string PhoneNumber { get; set; }
        /// <summary>
        /// 密码
        /// </summary>
        public string Password { get; set; }
        /// <summary>
        /// 账户
        /// </summary>
        [RegularExpression(LifePaymentConstant.RegularExpression.UserNameEx, ErrorMessage = "账号格式不正确")]
        public string UserName { get; set; }
        public string Remark { get; set; }
LifePayment/LifePayment.Application/LifePay/LifePayService.cs
@@ -152,6 +152,16 @@
    }
    /// <summary>
    /// 获取渠道折扣
    /// </summary>
    /// <returns></returns>
    public async Task<ChannelRateOutput> GetChannelRate(ChannelsBaseInput input)
    {
        return  _lifePayChannlesRep.Where(x => x.IsDeleted == false && x.ChannlesNum == input.CheckChannelId).Select(x => new ChannelRateOutput() { ChannlesRate = x.ChannlesRate })
                                           .FirstOrDefault();
    }
    /// <summary>
    /// 获取手续费费率
    /// </summary>
    /// <returns></returns>
@@ -234,6 +244,7 @@
    /// <returns></returns>
    public async Task<PageOutput<LifePayOrderListOutput>> GetLifePayOrderPage(QueryLifePayOrderListInput input)
    {
        var channles = await _lifePayChannlesRep.Where(x => x.ChannlesName.Contains(input.KeyWords)).Select(x => x.ChannlesNum).ToListAsync();
        var result = await (from a in _channelFilter.GetChannelLifePayOrderFilter(_lifePayOrderRepository)
                      .WhereIf(input.BeginFinishTime.HasValue, x => x.FinishTime >= input.BeginFinishTime)
                                            .WhereIf(input.EndFinishTime.HasValue, x => x.FinishTime <= input.EndFinishTime)
@@ -245,7 +256,7 @@
                                            .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.OrderNo.Contains(input.KeyWords) || x.OutOrderNo.Contains(input.KeyWords) || x.ACOOLYOrderNo.Contains(input.KeyWords) || channles.Contains(x.ChannelId))
                            join b in _lifePayChannlesRep on a.ChannelId equals b.ChannlesNum into temp
                            from b in temp.DefaultIfEmpty()
                            select new LifePayOrderListOutput
@@ -290,15 +301,14 @@
    {
        var result = await (from a in _channelFilter.GetChannelLifePayOrderFilter(_lifePayOrderRepository)
        .Where(x => x.PayStatus == LifePayStatusEnum.待退款 || x.PayStatus == LifePayStatusEnum.已退款 || x.PayStatus == LifePayStatusEnum.退款中
        || x.LifePayOrderStatus == LifePayOrderStatusEnum.退款待审核 || x.LifePayOrderStatus == LifePayOrderStatusEnum.已退款 || x.LifePayOrderStatus == LifePayOrderStatusEnum.退款失败
        .Where(x => x.LifePayOrderStatus == LifePayOrderStatusEnum.待退款 || x.LifePayOrderStatus == LifePayOrderStatusEnum.已退款 || x.LifePayOrderStatus == LifePayOrderStatusEnum.退款中
        || x.LifePayRefundStatus > LifePayRefundStatusEnum.无需退款)
                                            .WhereIf(input.BeginFinishTime.HasValue, x => x.FinishTime >= input.BeginFinishTime)
                                            .WhereIf(input.EndFinishTime.HasValue, x => x.FinishTime <= input.EndFinishTime)
                                            .WhereIf(input.BeginRefundApplyTime.HasValue, x => x.RefundApplyTime >= input.BeginRefundApplyTime)
                                            .WhereIf(input.LifePayType.HasValue, x => x.LifePayType == input.LifePayType)
                                            .WhereIf(input.EndRefundApplyTime.HasValue, x => x.RefundApplyTime <= input.EndRefundApplyTime)
                                            .WhereIf(input.LifePayOrderStatus.HasValue, x => x.LifePayOrderStatus == input.LifePayOrderStatus.Value)
                                            .WhereIf(input.LifePayRefundStatus.HasValue, x => x.LifePayRefundStatus == input.LifePayRefundStatus.Value)
                                            .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)
@@ -338,6 +348,44 @@
        return result;
    }
    /// <summary>
    /// 退款订单分页
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public async Task<List<LifePayRefundOrderListTemplate>> GetLifePayRefudOrderPageExport(QueryLifePayRefundOrderListInput input)
    {
        var result = await (await GetLifePayRefundOrderListFilter(input)).Select(x => new LifePayRefundOrderListTemplate
        {
            FinishTime = x.FinishTime,
            RefundPrice = x.RefundPrice,
            LifePayOrderType = x.LifePayOrderType,
            LifePayType = x.LifePayType,
            PayAmount = x.PayAmount,
            PhoneNumber = x.PhoneNumber,
            RefundOrderNo = x.RefundOrderNo,
            ChannelName = x.ChannelName
        }).OrderByDescending(r => r.CreationTime).ToListAsync();
        var i = 0;
        result.ForEach(s =>
        {
            s.SerialNumber = ++i;
            s.ACOOLYStatusStr = s.ACOOLYStatus.GetDescription();
            s.LifePayOrderTypeStr = s.LifePayOrderType.GetDescription();
            s.CreationTimeStr = s.CreationTime.ToString(LifePaymentConstant.DateTimeFormatStr.yyyyMMddHHmm);
            s.RechargeAmountStr = s.RechargeAmount.ToString("F2");
            s.ActualReceivedAmount = s.ActualReceivedAmount;
            s.LifePayRefundStatus = s.LifePayRefundStatus.GetDescription();
            s.PayAmountStr = s.PayAmount.ToString("F2");
            s.LifePayTypeStr = s.LifePayType.GetDescription();
            s.FinishTimeStr = !s.FinishTime.HasValue ? string.Empty : s.FinishTime.Value.ToString(LifePaymentConstant.DateTimeFormatStr.yyyyMMddHHmm);
        });
        return result;
    }
    public async Task<LifePayOrderOutput> GetLifePayOrderDetail(string orderNo)
    {
@@ -477,6 +525,8 @@
                                                        RefundApplyRemark = x.RefundApplyRemark,
                                                        RefundTime = x.RefundTime,
                                                        ACOOLYOrderNo = x.ACOOLYOrderNo,
                                                        LifePayRefundStatus = x.LifePayRefundStatus,
                                                        ACOOLYStatus = x.ACOOLYStatus,
                                                    })
                                            .GetPageResult(input.PageModel);
    }
@@ -777,7 +827,7 @@
        var orderInput = new CreateLifePayOrderInput
        {
            OrderNo = channle.ChannlesNum + CreateOrderNo(),
            LifePayOrderStatus = LifePayOrderStatusEnum.待确认,
            LifePayOrderStatus = LifePayOrderStatusEnum.充值中,
            LifePayOrderType = LifePayOrderTypeEnum.话费订单,
            //LifePayType = input.LifePayType,
            OrderParamDetailJsonStr = JsonConvert.SerializeObject(input.ProductData),
@@ -826,7 +876,7 @@
        var orderInput = new CreateLifePayOrderInput
        {
            OrderNo = channle.ChannlesNum + CreateOrderNo(),
            LifePayOrderStatus = LifePayOrderStatusEnum.待确认,
            LifePayOrderStatus = LifePayOrderStatusEnum.充值中,
            LifePayOrderType = LifePayOrderTypeEnum.电费订单,
            // LifePayType = input.LifePayType,
            OrderParamDetailJsonStr = JsonConvert.SerializeObject(input.ProductData),
@@ -875,7 +925,7 @@
        var orderInput = new CreateLifePayOrderInput
        {
            OrderNo = channle.ChannlesNum + CreateOrderNo(),
            LifePayOrderStatus = LifePayOrderStatusEnum.待确认,
            LifePayOrderStatus = LifePayOrderStatusEnum.充值中,
            LifePayOrderType = LifePayOrderTypeEnum.燃气订单,
            // LifePayType = input.LifePayType,
            OrderParamDetailJsonStr = JsonConvert.SerializeObject(input.ProductData),
@@ -1188,7 +1238,7 @@
            }
            order.LifePayRefundStatus = LifePayRefundStatusEnum.无需退款;
            order.LifePayOrderStatus = LifePayOrderStatusEnum.待确认;
            order.LifePayOrderStatus = LifePayOrderStatusEnum.充值中;
            //SetOrderStatus(order, result.Code);
            order.OutRequestNo = result.RequestNo.IsNullOrEmpty() ? null : result.RequestNo;
            order.ACOOLYOrderNo = result.ACOOLYOrderNo.IsNullOrEmpty() ? null : result.ACOOLYOrderNo;
@@ -1196,7 +1246,7 @@
        catch (Exception ex)
        {
            _logger.LogError(ex, "处理生活缴费支付成功回调时异常");
            order.LifePayOrderStatus = LifePayOrderStatusEnum.已失败;
            order.LifePayOrderStatus = LifePayOrderStatusEnum.待退款;
            order.LifePayRefundStatus = LifePayRefundStatusEnum.待退款;
        }
        _logger.LogError("生活缴费订单状态:" + order.LifePayOrderStatus.ToString());
@@ -1209,30 +1259,24 @@
    /// <param name="orderNo"></param>
    /// <param name="outOrderNo"></param>
    /// <returns></returns>
    public async Task ACOOLYOrderNotifyHandler(string orderNo, string acoolyOrderNo, LifePayOrderStatusEnum status, ACOOLYStatusEnum acoolyStatus, decimal payAmount)
    public async Task ACOOLYOrderNotifyHandler(string orderNo, string acoolyOrderNo, LifePayOrderStatusEnum status, ACOOLYStatusEnum acoolyStatus, decimal payAmount,string refundApplyRemark)
    {
        var order = await _lifePayOrderRepository.Where(x => x.OrderNo == orderNo).FirstOrDefaultAsync();
        CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "订单不存在");
        if (order.LifePayOrderStatus == LifePayOrderStatusEnum.已完成)
        {
            return;
        }
        //if (order.LifePayOrderStatus == LifePayOrderStatusEnum.已完成)
        //{
        //    return;
        //}
        order.PlatformDeductionAmount = payAmount;
        if (acoolyOrderNo.IsNotNullOrEmpty())
        {
            order.ACOOLYOrderNo = acoolyOrderNo;
        }
        if (order.LifePayOrderStatus == LifePayOrderStatusEnum.已完成)
        if (refundApplyRemark.IsNotNullOrEmpty())
        {
            order.FinishTime = DateTime.Now;
        }
        if (order.LifePayOrderStatus == LifePayOrderStatusEnum.已失败 && order.LifePayRefundStatus != LifePayRefundStatusEnum.已退款)
        {
            order.LifePayRefundStatus = LifePayRefundStatusEnum.待退款;
            order.RefundApplyRemark = refundApplyRemark;
        }
        order.LifePayOrderStatus = status;
@@ -1267,7 +1311,7 @@
            input.RefundPrice = order.PayAmount;
        }
        if (order.LifePayOrderStatus != LifePayOrderStatusEnum.已失败 && order.PayStatus != LifePayStatusEnum.待退款 && order.LifePayOrderStatus != LifePayOrderStatusEnum.退款待审核)
        if (order.LifePayOrderStatus != LifePayOrderStatusEnum.待退款 || order.PayStatus != LifePayStatusEnum.已支付 || order.LifePayRefundStatus != LifePayRefundStatusEnum.待退款)
        {
            throw new UserFriendlyException("当前订单状态无法退款");
        }
@@ -1288,12 +1332,16 @@
                    order.LifePayOrderStatus = LifePayOrderStatusEnum.退款中;
                    order.LifePayRefundStatus = LifePayRefundStatusEnum.退款中;
                }
                else if (wxRefundResult.Message == "订单已全额退款")
                {
                    order.LifePayOrderStatus = LifePayOrderStatusEnum.已退款;
                    order.LifePayRefundStatus = LifePayRefundStatusEnum.已退款;
                }
                else
                {
                    order.LifePayOrderStatus = LifePayOrderStatusEnum.退款失败;
                    order.LifePayOrderStatus = LifePayOrderStatusEnum.待退款;
                    order.LifePayRefundStatus = LifePayRefundStatusEnum.待退款;
                }
                break;
            case LifePayTypeEnum.AliPay:
                var aliRefundResult = await AliTradeRefund(new AlipayTradeRefundRequest() { OutTradeNo = order.OrderNo, RefundAmount = Convert.ToInt32(input.RefundPrice * 100).ToString() });
@@ -1312,7 +1360,7 @@
        order.RefundCheckUserId = CurrentUser.Id;
        order.RefundPrice = input.RefundPrice;
        await _lifePayOrderRepository.UpdateAsync(order);
        //await _lifePayOrderRepository.UpdateAsync(order);
        #region 记录日志
@@ -1342,17 +1390,25 @@
            return;
        }
        if (order.LifePayOrderStatus != LifePayOrderStatusEnum.待确认 && order.LifePayOrderStatus != LifePayOrderStatusEnum.已失败
            && order.PayStatus != LifePayStatusEnum.已支付)
        if (order.PayStatus == LifePayStatusEnum.已支付 && order.LifePayOrderStatus != LifePayOrderStatusEnum.已完成
            && order.LifePayOrderStatus != LifePayOrderStatusEnum.待退款 && order.LifePayOrderStatus != LifePayOrderStatusEnum.已退款)
        {
            throw new UserFriendlyException("当前订单状态无法申请退款");
        }
        order.LifePayOrderStatus = LifePayOrderStatusEnum.退款待审核;
            order.LifePayOrderStatus = LifePayOrderStatusEnum.待退款;
        order.RefundApplyRemark = input.RefundApplyRemark;
        order.RefundApplyTime = DateTime.Now;
        await _lifePayOrderRepository.UpdateAsync(order);
        }
        else if (order.LifePayOrderStatus == LifePayOrderStatusEnum.待退款 || order.LifePayRefundStatus == LifePayRefundStatusEnum.待退款 ||
            order.LifePayOrderStatus == LifePayOrderStatusEnum.退款中 || order.LifePayRefundStatus == LifePayRefundStatusEnum.退款中 ||
            order.LifePayOrderStatus == LifePayOrderStatusEnum.已退款 || order.LifePayRefundStatus == LifePayRefundStatusEnum.已退款)
        {
            throw new UserFriendlyException("当前订单无法重复申请退款");
        }
        else
        {
            throw new UserFriendlyException("当前订单状态无法申请退款");
        }
    }
    /// <summary>
@@ -1370,7 +1426,7 @@
        {
            OutTradeNo = outTradeNo,
            OutRefundNo = outRefundNo,
            Reason = reason,
            //Reason = reason,
            Amount = new Model_WxPayDomesticRefunds_Amount
            {
                Refund = refund,
@@ -1434,7 +1490,7 @@
        if (input.LifePayType == LifePayOrderTypeEnum.话费订单)
        {
            var extraProperties = JsonConvert.DeserializeObject<Model_UserAccountExtraProperties>(input.ExtraProperties);
            if (!string.IsNullOrEmpty(extraProperties.Name))
            if (!string.IsNullOrEmpty(extraProperties.Name) && extraProperties.Phone == user.PhoneNumber)
            {
                user.Name = extraProperties.Name;
            }
@@ -1476,10 +1532,17 @@
            return;
        }
        if ((order.LifePayOrderStatus == LifePayOrderStatusEnum.已失败 && order.PayStatus == LifePayStatusEnum.待退款) ||
            order.LifePayOrderStatus == LifePayOrderStatusEnum.退款待审核 || order.LifePayOrderStatus == LifePayOrderStatusEnum.待确认)
        if (order.LifePayOrderStatus == LifePayOrderStatusEnum.待退款)
        {
            if (order.ACOOLYStatus == ACOOLYStatusEnum.已完成 || order.ACOOLYStatus == ACOOLYStatusEnum.部分充值成功)
            {
                order.LifePayOrderStatus = LifePayOrderStatusEnum.已完成;
            }
            else if (order.ACOOLYStatus == ACOOLYStatusEnum.充值失败)
        {
            order.LifePayOrderStatus = LifePayOrderStatusEnum.退款失败;
            }
            order.RefundCheckRemark = input.RefundCheckRemark;
            order.RefundCheckUserId = CurrentUser.Id;
@@ -1678,7 +1741,7 @@
                order.FinishTime = DateTime.Now;
                break;
            case ACOOLYConstant.Code.PROCESSING:
                order.LifePayOrderStatus = LifePayOrderStatusEnum.待确认;
                order.LifePayOrderStatus = LifePayOrderStatusEnum.充值中;
                break;
            default:
                break;
@@ -1906,6 +1969,55 @@
        return result;
    }
    private async Task<IQueryable<LifePayOrderListOutput>> GetLifePayRefundOrderListFilter(QueryLifePayRefundOrderListInput input)
    {
        var result = (from a in _channelFilter.GetChannelLifePayOrderFilter(_lifePayOrderRepository)
     .Where(x => x.LifePayOrderStatus == LifePayOrderStatusEnum.待退款 || x.LifePayOrderStatus == LifePayOrderStatusEnum.已退款 || x.LifePayOrderStatus == LifePayOrderStatusEnum.退款中
     || x.LifePayRefundStatus > LifePayRefundStatusEnum.无需退款)
                                         .WhereIf(input.BeginFinishTime.HasValue, x => x.FinishTime >= input.BeginFinishTime)
                                         .WhereIf(input.EndFinishTime.HasValue, x => x.FinishTime <= input.EndFinishTime)
                                         .WhereIf(input.BeginRefundApplyTime.HasValue, x => x.RefundApplyTime >= input.BeginRefundApplyTime)
                                         .WhereIf(input.LifePayType.HasValue, x => x.LifePayType == input.LifePayType)
                                         .WhereIf(input.EndRefundApplyTime.HasValue, x => x.RefundApplyTime <= input.EndRefundApplyTime)
                                         .WhereIf(input.LifePayOrderStatus.HasValue, x => x.LifePayOrderStatus == input.LifePayOrderStatus.Value)
                                         .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))
                            join b in _lifePayChannlesRep on a.ChannelId equals b.ChannlesNum into temp
                            from b in temp.DefaultIfEmpty()
                            select new LifePayOrderListOutput
                            {
                                DiscountAmount = a.DiscountAmount,
                                FinishTime = a.FinishTime,
                                Id = a.Id,
                                LifePayOrderStatus = a.LifePayOrderStatus,
                                LifePayOrderType = a.LifePayOrderType,
                                LifePayType = a.LifePayType,
                                OrderNo = a.OrderNo,
                                PayAmount = a.PayAmount,
                                PhoneNumber = a.PhoneNumber,
                                RechargeAmount = a.RechargeAmount,
                                UserId = a.UserId,
                                OutOrderNo = a.OutOrderNo,
                                PayStatus = a.PayStatus,
                                PayTime = a.PayTime,
                                ACOOLYOrderNo = a.ACOOLYOrderNo,
                                RefundCredentialsImgUrl = a.RefundCredentialsImgUrl.GetOssPath(),
                                CreationTime = a.CreationTime,
                                RefundCheckRemark = a.RefundCheckRemark,
                                RefundApplyRemark = a.RefundApplyRemark,
                                RefundApplyTime = a.RefundApplyTime,
                                RefundTime = a.RefundTime,
                                RefundPrice = a.RefundPrice,
                                ChannelName = b.ChannlesName,
                                ActualRechargeAmount = a.ActualRechargeAmount,
                                PlatformDeductionAmount = a.PlatformDeductionAmount,
                                ACOOLYStatus = a.ACOOLYStatus,
                                LifePayRefundStatus = a.LifePayRefundStatus,
                            });
        return result;
    }
    private IQueryable<CreateEditPayChannelsInput> GetLifePayChannlesListFilter()
    {
        return _lifePayChannlesRep.Select(x =>
LifePayment/LifePayment.Application/LifePay/StatisticsService.cs
@@ -47,9 +47,9 @@
                var accumulatedIncome = await _lifePayOrderRepository.Where(x => x.CreationTime < today).SumAsync(x => x.ActualRechargeAmount);
                var ordersNumYesterday = await _lifePayOrderRepository.Where(x => x.CreationTime >= today.AddDays(-1) && x.CreationTime < today).CountAsync();
                var yesterdaySuccess = await _lifePayOrderRepository.Where(x => x.CreationTime >= today.AddDays(-1) && x.CreationTime < today && x.LifePayOrderStatus == LifePayOrderStatusEnum.已完成).CountAsync();
                var yesterdayFail = await _lifePayOrderRepository.Where(x => x.CreationTime >= today.AddDays(-1) && x.CreationTime < today && x.LifePayOrderStatus == LifePayOrderStatusEnum.已失败).CountAsync();
                var yesterdayFail = await _lifePayOrderRepository.Where(x => x.CreationTime >= today.AddDays(-1) && x.CreationTime < today && x.LifePayOrderStatus == LifePayOrderStatusEnum.退款失败).CountAsync();
                var accumulatedUsers = await _lifePayUserRepository.CountAsync();
                var yesterdayActiveUsers = await _lifePayUserRepository.Where(x => x.LastLoginTime >= today.AddDays(-1)).CountAsync();
                var entity = new DallyStatistics()
                {
                    Id = GuidGenerator.Create(),
@@ -62,6 +62,7 @@
                    YesterdaySuccess = yesterdaySuccess,
                    YesterdayFail = yesterdayFail,
                    AccumulatedUsers = accumulatedUsers,
                    YesterdayActiveUsers = yesterdayActiveUsers
                };
                await _dallyStatisticsRepository.InsertAsync(entity);
@@ -75,6 +76,7 @@
                    YesterdaySuccess = entity.YesterdaySuccess,
                    YesterdayFail = entity.YesterdayFail,
                    AccumulatedUsers = entity.AccumulatedUsers,
                    YesterdayActiveUsers = yesterdayActiveUsers
                };
                return topStatisticsOutput;
            }
LifePayment/LifePayment.Application/LifePaymentServicesApplicationModuleAutoMapperProfile.cs
@@ -14,6 +14,8 @@
            CreateMap<CreateLifePayOrderInput, LifePayOrder>(MemberList.None);
            CreateMap<CreateEditPayChannelsInput, LifePayChannles>(MemberList.None);
            CreateMap<CreateBackClientUserInput, CreateAccountInput>(MemberList.None);
            #endregion
        }
    }
LifePayment/LifePayment.Application/Setting/OperateHistoryService.cs
@@ -48,7 +48,6 @@
                case OperateHistoryTypeEnum.AccountManage:
                    query = query.Where(x => x.UserId == input.TypeId
                                          && LifePaymentConstant.LogsSpecies.AccountManageOperateNameList.Contains(x.OperateName));
                    break;
                case OperateHistoryTypeEnum.LifePayChannles:
                    query = query.Where(x => x.RelationId == input.TypeId);
LifePayment/LifePayment.Domain.Shared/Enum/LifePay/LifePayEnum.cs
@@ -41,10 +41,35 @@
    退款中 = 50,
}
//public enum LifePayOrderStatusEnum
//{
//    [Description("充值中")]
//    待确认 = 10,
//    [Description("已失败")]
//    已失败 = 20,
//    [Description("已完成")]
//    已完成 = 30,
//    [Description("退款待审核")]
//    退款待审核 = 40,
//    [Description("已退款")]
//    已退款 = 50,
//    [Description("退款失败")]
//    退款失败 = 60,
//    [Description("退款中")]
//    退款中 = 70,
//}
public enum LifePayOrderStatusEnum
{
    [Description("待确认")]
    待确认 = 10,
    [Description("充值中")]
    充值中 = 10,
    [Description("已失败")]
    已失败 = 20,
@@ -52,8 +77,8 @@
    [Description("已完成")]
    已完成 = 30,
    [Description("退款待审核")]
    退款待审核 = 40,
    [Description("待退款")]
    待退款 = 40,
    [Description("已退款")]
    已退款 = 50,
@@ -64,6 +89,7 @@
    [Description("退款中")]
    退款中 = 70,
}
public enum ACOOLYStatusEnum
LifePayment/LifePayment.Domain.Shared/WeChat/WxPayPostBaseModel.cs
@@ -613,11 +613,11 @@
        [JsonProperty("out_refund_no")]
        public string OutRefundNo { get; set; }
        /// <summary>
        ///  退款原因
        /// </summary>
        [JsonProperty("reason")]
        public string Reason { get; set; }
        ///// <summary>
        /////  退款原因
        ///// </summary>
        //[JsonProperty("reason")]
        //public string Reason { get; set; }
        /// <summary>
        /// 退款结果回调url
@@ -721,6 +721,13 @@
        [JsonProperty("amount")]
        public Model_WxPayRetuenDomesticRefunds_Amount Amount { get; set; }
        /// <summary>
        /// 返回信息
        /// </summary>
        [JsonProperty("message")]
        public string Message { get; set; }
    }
    public class Model_WxPayRetuenDomesticRefunds_Amount: Model_WxPayDomesticRefunds_Amount
LifePayment/LifePayment.Domain/LifePay/LifePayOrder.cs
@@ -81,12 +81,12 @@
        public string ACOOLYOrderNo { get; set; }
        /// <summary>
        /// 订单状态
        /// 平台订单状态
        /// </summary>
        public LifePayOrderStatusEnum LifePayOrderStatus { get; set; }
        /// <summary>
        /// 平台状态
        /// 供应商状态
        /// </summary>
        public ACOOLYStatusEnum? ACOOLYStatus { get; set; }
LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml
@@ -104,6 +104,12 @@
            </summary>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.GetChannelRate(LifePayment.Domain.Shared.ChannelsBaseInput)">
            <summary>
            获取渠道折扣
            </summary>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.GetPremium">
            <summary>
            获取手续费费率
@@ -234,6 +240,13 @@
            <param name="input"></param>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.GetLifePayRefudOrderPageExport(LifePayment.Application.Contracts.QueryLifePayRefundOrderListInput)">
            <summary>
            导出退款订单Excel
            </summary>
            <param name="input"></param>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.CreateLifePayPhoneOrder(LifePayment.Application.Contracts.CreateLifePayOrderInput{LifePayment.Application.Contracts.LifePhoneData})">
            <summary>
            创建生活缴费话费订单
LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml
@@ -42,9 +42,9 @@
            <param name="outOrderNo"></param>
            <returns></returns>
        </member>
        <member name="M:LifePayment.Application.Contracts.ILifePayService.ACOOLYOrderNotifyHandler(System.String,System.String,LifePayment.Domain.Shared.LifePayOrderStatusEnum,LifePayment.Domain.Shared.ACOOLYStatusEnum,System.Decimal)">
        <member name="M:LifePayment.Application.Contracts.ILifePayService.ACOOLYOrderNotifyHandler(System.String,System.String,LifePayment.Domain.Shared.LifePayOrderStatusEnum,LifePayment.Domain.Shared.ACOOLYStatusEnum,System.Decimal,System.String)">
            <summary>
            支付成功回调处理
            供应商回调处理
            </summary>
            <param name="orderNo"></param>
            <param name="acoolyOrderNo"></param>
@@ -127,6 +127,12 @@
        <member name="M:LifePayment.Application.Contracts.ILifePayService.GetRate">
            <summary>
            获取折扣
            </summary>
            <returns></returns>
        </member>
        <member name="M:LifePayment.Application.Contracts.ILifePayService.GetChannelRate(LifePayment.Domain.Shared.ChannelsBaseInput)">
            <summary>
            获取渠道折扣
            </summary>
            <returns></returns>
        </member>
@@ -520,6 +526,11 @@
            订单状态
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.QueryLifePayRefundOrderListInput.LifePayRefundStatus">
            <summary>
            订单状态
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.QueryLifePayRefundOrderListInput.UserId">
            <summary>
            用户Id
@@ -725,6 +736,11 @@
            订单号
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.RefundOrderNo">
            <summary>
            退款订单号
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.RechargeAmount">
            <summary>
            充值金额
@@ -865,6 +881,51 @@
            完成时间
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.LifePayRefundOrderListTemplate.RefundApplyTimeStr">
            <summary>
            退款申请时间
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.LifePayRefundOrderListTemplate.CreationTime">
            <summary>
            下单时间
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.LifePayRefundOrderListTemplate.RechargeAmount">
            <summary>
            充值金额
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.LifePayRefundOrderListTemplate.ActualReceivedAmount">
            <summary>
            实际到账金额
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.LifePayRefundOrderListTemplate.PayAmount">
            <summary>
            实付金额
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.LifePayRefundOrderListTemplate.RefundPrice">
            <summary>
            退款金额
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.LifePayRefundOrderListTemplate.ACOOLYStatusStr">
            <summary>
            供应商订单状态
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.LifePayRefundOrderListTemplate.FinishTime">
            <summary>
            完成时间
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.LifePayRefundOrderListTemplate.LifePayRefundStatus">
            <summary>
            平台退款状态
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.UserLifePayOrderOutput.LifePayType">
            <summary>
            生活缴费支付类型
@@ -938,6 +999,16 @@
        <member name="P:LifePayment.Application.Contracts.UserLifePayOrderOutput.ACOOLYOrderNo">
            <summary>
            渠道流水号
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.UserLifePayOrderOutput.LifePayRefundStatus">
            <summary>
            平台退款状态
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.UserLifePayOrderOutput.ACOOLYStatus">
            <summary>
            平台状态
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.UserPhoneNumber">
@@ -1980,6 +2051,11 @@
            手机号
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CreateBackClientUserInput.Password">
            <summary>
            密码
            </summary>
        </member>
        <member name="P:LifePayment.Application.Contracts.CreateBackClientUserInput.UserName">
            <summary>
            账户
LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs
@@ -52,10 +52,11 @@
            }
            var baseInfo = JsonConvert.DeserializeObject<ACOOLYRequestBaseResponse>(body);
            var orderNo = string.Empty;
            LifePayOrderStatusEnum status = LifePayOrderStatusEnum.已失败;
            LifePayOrderStatusEnum status = LifePayOrderStatusEnum.待退款;
            ACOOLYStatusEnum acoolyStatus = ACOOLYStatusEnum.充值失败;
            var acoolyOrderNo = string.Empty;
            decimal payAmount = 0;
            string refundApplyRemark = string.Empty;
            _logger.LogError("ACOOLY回调通处理类型:" + baseInfo.Service);
            _logger.LogError("ACOOLY回调内容:" + body);
            switch (baseInfo.Service)
@@ -70,7 +71,7 @@
                    if (!confirmElectricOrderResponse.Success
                    || (confirmElectricOrderResponse.Code != ACOOLYConstant.Code.SUCCESS && confirmElectricOrderResponse.Code != ACOOLYConstant.Code.PROCESSING))
                    {
                        status = LifePayOrderStatusEnum.已失败;
                        status = LifePayOrderStatusEnum.待退款;
                        acoolyStatus = ACOOLYStatusEnum.充值失败;
                    }
                    else
@@ -82,14 +83,15 @@
                    else
                    if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Status.充值中)
                    {
                        status = LifePayOrderStatusEnum.待确认;
                        status = LifePayOrderStatusEnum.充值中;
                        acoolyStatus = ACOOLYStatusEnum.充值中;
                    }
                    else
                    if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Status.充值失败)
                    {
                        status = LifePayOrderStatusEnum.已失败;
                        status = LifePayOrderStatusEnum.待退款;
                        acoolyStatus = ACOOLYStatusEnum.充值失败;
                        refundApplyRemark = "供应商充值失败";
                    }
                    else
                    if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Status.退款中)
@@ -106,7 +108,7 @@
                    else
                    if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Status.失败关闭)
                    {
                        status = LifePayOrderStatusEnum.已失败;
                        status = LifePayOrderStatusEnum.待退款;
                        acoolyStatus = ACOOLYStatusEnum.充值失败;
                    }
                    break;
@@ -119,7 +121,7 @@
                    if (!confirmPhoneOrderResponse.Success
                     || (confirmPhoneOrderResponse.Code != ACOOLYConstant.Code.SUCCESS && confirmPhoneOrderResponse.Code != ACOOLYConstant.Code.PROCESSING))
                    {
                        status = LifePayOrderStatusEnum.已失败;
                        status = LifePayOrderStatusEnum.待退款;
                        acoolyStatus = ACOOLYStatusEnum.充值失败;
                    }
                    else
@@ -133,13 +135,13 @@
                     if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Status.充值中)
                    {
                        status = LifePayOrderStatusEnum.待确认;
                        status = LifePayOrderStatusEnum.充值中;
                        acoolyStatus = ACOOLYStatusEnum.充值中;
                    }
                    else
                     if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Status.充值失败)
                    {
                        status = LifePayOrderStatusEnum.已失败;
                        status = LifePayOrderStatusEnum.待退款;
                        acoolyStatus = ACOOLYStatusEnum.充值失败;
                    }
                    else
@@ -157,7 +159,7 @@
                    else
                     if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Status.失败关闭)
                    {
                        status = LifePayOrderStatusEnum.已失败;
                        status = LifePayOrderStatusEnum.待退款;
                        acoolyStatus = ACOOLYStatusEnum.充值失败;
                    }
                    break;
@@ -170,7 +172,7 @@
                    if (!confirmGasOrderResponse.Success
                     || (confirmGasOrderResponse.Code != ACOOLYConstant.Code.SUCCESS && confirmGasOrderResponse.Code != ACOOLYConstant.Code.PROCESSING))
                    {
                        status = LifePayOrderStatusEnum.已失败;
                        status = LifePayOrderStatusEnum.待退款;
                        acoolyStatus = ACOOLYStatusEnum.充值失败;
                    }
                    else
@@ -184,13 +186,13 @@
                     if (confirmGasOrderResponse.GasChargeOrder.Status == ACOOLYConstant.Status.充值中)
                    {
                        status = LifePayOrderStatusEnum.待确认;
                        status = LifePayOrderStatusEnum.待退款;
                        acoolyStatus = ACOOLYStatusEnum.充值中;
                    }
                    else
                     if (confirmGasOrderResponse.GasChargeOrder.Status == ACOOLYConstant.Status.充值失败)
                    {
                        status = LifePayOrderStatusEnum.已失败;
                        status = LifePayOrderStatusEnum.待退款;
                        acoolyStatus = ACOOLYStatusEnum.充值失败;
                    }
                    else
@@ -208,7 +210,7 @@
                    else
                     if (confirmGasOrderResponse.GasChargeOrder.Status == ACOOLYConstant.Status.失败关闭)
                    {
                        status = LifePayOrderStatusEnum.已失败;
                        status = LifePayOrderStatusEnum.待退款;
                        acoolyStatus = ACOOLYStatusEnum.充值失败;
                    }
                    break;
@@ -216,7 +218,7 @@
                    throw new UserFriendlyException("ACOOLY回调通处理类型不存在");
            }
            await _lifePayService.ACOOLYOrderNotifyHandler(orderNo, acoolyOrderNo, status, acoolyStatus, payAmount);
            await _lifePayService.ACOOLYOrderNotifyHandler(orderNo, acoolyOrderNo, status, acoolyStatus, payAmount, refundApplyRemark);
        }
    }
}
LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs
@@ -150,6 +150,17 @@
        }
        /// <summary>
        /// 获取渠道折扣
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        [AllowAnonymous]
        public async Task<ChannelRateOutput> GetChannelRate(ChannelsBaseInput input)
        {
            return await _lifePayService.GetChannelRate(input);
        }
        /// <summary>
        /// 获取手续费费率
        /// </summary>
        /// <returns></returns>
@@ -376,6 +387,24 @@
            return Json(default);
        }
        /// <summary>
        /// 导出退款订单Excel
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<ActionResult> GetLifePayRefudOrderPageExport(QueryLifePayRefundOrderListInput input)
        {
            var data = await _lifePayService.GetLifePayRefudOrderPageExport(input);
            if (data.Any())
            {
                var bytes = ExcelHelper.ListToByteForExcel(data, "xlsx");
                return File(bytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "退款管理" + ".xlsx");
            }
            return Json(default);
        }
        [HttpGet]
        public async Task<string> GetBillErceiptExport(string orderNo)
        {