lingling
2025-03-14 1b62e001474c3887934d514d7f32dedb55b01cf8
添加单独项目代码
已修改3个文件
已添加5个文件
699 ■■■■■ 文件已修改
LifePayment/LifePayment.Application.Contracts/User/IAccountService.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Application.Contracts/User/QrCodeLogin.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Application/User/AccountService.cs 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.HttpApi/LifePay/AccountController.cs 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.HttpApi/LifePay/ChannelFilterAttribute.cs 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs 277 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Application.Contracts/User/IAccountService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
using System;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Services;
namespace LifePayment.Application.Contracts
{
    public interface IAccountService : IApplicationService
    {
        #region life pay
        /// <summary>
        /// æ‰‹æœºéªŒè¯ç ç™»å½•
        /// ç‰ˆæœ¬è¯´æ˜Žï¼šä½¿ç”¨éªŒè¯ç ç®¡ç†åŽ»æ ¡éªŒå’Œå¤±æ•ˆå¯¹åº”ä¸šåŠ¡çš„éªŒè¯ç 
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        /// <exception cref="UserFriendlyException"></exception>
        Task<Guid> LifePayPhoneMesssageCodeLogin(LifePayPhoneMesssageCodeLoginInput input);
        #endregion
    }
}
LifePayment/LifePayment.Application.Contracts/User/QrCodeLogin.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
using LifePayment.Domain.Shared;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace LifePayment.Application.Contracts
{
    public class LifePayPhoneMesssageCodeLoginInput : ChannelsBaseInput
    {
        /// <summary>
        /// æ‰‹æœºå·
        /// </summary>
        [DisplayName("手机号")]
        [Required(ErrorMessage = "{0}不能为空")]
        [RegularExpression(LifePaymentConstant.RegularExpression.PhoneNumberRegEx, ErrorMessage = "{0}格式错误")]
        public string PhoneNumber { get; set; }
        /// <summary>
        /// éªŒè¯ç 
        /// </summary>
        //[Required]
        //public string Code { get; set; }
    }
}
LifePayment/LifePayment.Application/User/AccountService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,88 @@
using LifePayment.Application.Contracts;
using LifePayment.Domain.Models;
using Microsoft.EntityFrameworkCore;
using System;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Services;
using Volo.Abp.Domain.Repositories;
using ZeroD.Util;
namespace HumanResourcesServices.Application
{
    public class AccountService : ApplicationService, IAccountService
    {
        private readonly IRepository<LifePayUser, Guid> _lifePayUserRepository;
        public AccountService(
               IRepository<LifePayUser, Guid> lifePayUserRepository
)
        {
            _lifePayUserRepository = lifePayUserRepository;
        }
        #region æŸ¥è¯¢
        #endregion
        #region æ“ä½œ
        #region life pay
        /// <summary>
        /// æ‰‹æœºéªŒè¯ç ç™»å½•
        /// ç‰ˆæœ¬è¯´æ˜Žï¼šä½¿ç”¨éªŒè¯ç ç®¡ç†åŽ»æ ¡éªŒå’Œå¤±æ•ˆå¯¹åº”ä¸šåŠ¡çš„éªŒè¯ç 
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        /// <exception cref="UserFriendlyException"></exception>
        public async Task<Guid> LifePayPhoneMesssageCodeLogin(LifePayPhoneMesssageCodeLoginInput input)
        {
            //var vcodeType = VerificationCodeBusinessTypeEnum.LifePayPhoneMesssageCodeLogin;
            //var checkResult = await _verificationCodeManager.CheckVerificationCodeByBusinessType(vcodeType,
            //                                                                                     input.PhoneNumber,
            //                                                                                     input.Code,
            //                                                                                     true);
            //CheckExtensions.IfTrueThrowUserFriendlyException(!checkResult,
            //                                                 CustomeErrorMessage.SometingWrongOrSometing, "验证码", "已失效");
            var lifeUser = await _lifePayUserRepository.Where(x => x.PhoneNumber == input.PhoneNumber).FirstOrDefaultAsync();
            if (lifeUser == null)
            {
                lifeUser = new LifePayUser()
                {
                    Id = GuidGenerator.Create(),
                    PhoneNumber = input.PhoneNumber,
                    LastLoginTime = DateTime.Now
                };
                await _lifePayUserRepository.InsertAsync(lifeUser);
            }
            else
            {
                lifeUser.LastLoginTime = DateTime.Now;
                await _lifePayUserRepository.UpdateAsync(lifeUser);
            }
            return lifeUser.Id;
        }
        #endregion
        #endregion
    }
}
LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml
@@ -4,24 +4,44 @@
        <name>LifePayment.HttpApi</name>
    </assembly>
    <members>
        <member name="M:LifePayment.HttpApi.LifePayController.GetElectricParValue">
        <member name="M:LifePayment.HttpApi.AccountController.LifePayPhoneMesssageCodeLogin(LifePayment.Application.Contracts.LifePayPhoneMesssageCodeLoginInput)">
            <summary>
            life pay手机验证码登录
            </summary>
            <param name="input"></param>
            <returns></returns>
            <exception cref="T:Volo.Abp.UserFriendlyException"></exception>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.GetElectricParValue(LifePayment.Domain.Shared.ChannelsBaseInput)">
            <summary>
            èŽ·å–ç”µè´¹é¢å€¼
            </summary>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.GetElectricSupportArea">
        <member name="M:LifePayment.HttpApi.LifePayController.GetElectricSupportArea(LifePayment.Domain.Shared.ChannelsBaseInput)">
            <summary>
            èŽ·å–ç”µè´¹å……å€¼åŒºåŸŸ
            </summary>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.GetPhoneParValue">
        <member name="M:LifePayment.HttpApi.LifePayController.GetPhoneParValue(LifePayment.Domain.Shared.ChannelsBaseInput)">
            <summary>
            èŽ·å–è¯è´¹é¢å€¼
            </summary>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.GetGasParValue(LifePayment.Domain.Shared.ChannelsBaseInput)">
            <summary>
            èŽ·å–ç‡ƒæ°”é¢å€¼
            </summary>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.GetGasOrgType(LifePayment.Domain.Shared.ChannelsBaseInput)">
            <summary>
            èŽ·å–ç‡ƒæ°”æ”¯æŒå•†æˆ·
            </summary>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.GetRate">
            <summary>
            èŽ·å–æŠ˜æ‰£
@@ -49,11 +69,75 @@
            <param name="input"></param>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.GetPayStatusByOrderNo(System.String)">
        <member name="M:LifePayment.HttpApi.LifePayController.GetUserLifePayOrderDetail(System.String)">
            <summary>
            èŽ·å–æˆ‘çš„è®¢å•è¯¦æƒ…
            </summary>
            <param name="orderNo"></param>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.GetPayStatusByOrderNo(LifePayment.Application.Contracts.GetPayStatusByOrderNoInput)">
            <summary>
            æ ¹æ®è®¢å•号获取支付状态
            </summary>
            <param name="orderNo"></param>
            <param name="input"></param>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.GetLifePayChannlesPage(ZeroD.Util.PageInput)">
            <summary>
            èŽ·å–ç¼´è´¹æ¸ é“åˆ—è¡¨
            </summary>
            <param name="input"></param>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.GetLifePayChannlesDto(System.Guid)">
            <summary>
            èŽ·å–æ¸ é“è¯¦æƒ…
            </summary>
            <param name="id"></param>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.GetUserLifePayOrderRefund(System.Guid)">
            <summary>
            ç”¨æˆ·æŸ¥çœ‹ç”Ÿæ´»ç¼´è´¹é€€æ¬¾å¤±è´¥è¯¦æƒ…
            </summary>
            <param name="id"></param>
            <returns></returns>
            <exception cref="T:Volo.Abp.UserFriendlyException"></exception>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.GetAccountPage(LifePayment.Application.Contracts.QueryUserAccountListInput)">
            <summary>
            èŽ·å–ç”¨æˆ·æˆ·å·åˆ†é¡µæ•°æ®
            </summary>
            <param name="input"></param>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.GetUserAccountList(LifePayment.Application.Contracts.QueryUserAccountListInput)">
            <summary>
            èŽ·å–æˆ‘çš„æˆ·å·åˆ—è¡¨
            </summary>
            <param name="input"></param>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.GetUserAccountAllList(LifePayment.Application.Contracts.QueryUserAccountAllListInput)">
            <summary>
            èŽ·å–æˆ‘çš„å…¨éƒ¨æˆ·å·åˆ—è¡¨
            </summary>
            <param name="input"></param>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.GetUserAccountDetail(System.Guid)">
            <summary>
            èŽ·å–æˆ‘çš„æˆ·å·è¯¦æƒ…
            </summary>
            <param name="id"></param>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.GetLifePayOrderPageExport(LifePayment.Application.Contracts.QueryLifePayOrderListInput)">
            <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})">
@@ -70,6 +154,13 @@
            <param name="input"></param>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.CreateLifePayGasOrder(LifePayment.Application.Contracts.CreateLifePayOrderInput{LifePayment.Application.Contracts.LifeGasData})">
            <summary>
            åˆ›å»ºç”Ÿæ´»ç¼´è´¹ç‡ƒæ°”订单
            </summary>
            <param name="input"></param>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.RefundLifePayOrder(LifePayment.Application.Contracts.RefundLifePayOrderInput)">
            <summary>
            é€€æ¬¾ç”Ÿæ´»ç¼´è´¹è®¢å•
@@ -78,6 +169,57 @@
            <returns></returns>
            <exception cref="T:Volo.Abp.UserFriendlyException"></exception>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.RefundUserLifePayOrder(LifePayment.Application.Contracts.RefundUserLifePayOrderInput)">
            <summary>
            ç”¨æˆ·å‘起生活缴费退款
            </summary>
            <param name="input"></param>
            <returns></returns>
            <exception cref="T:Volo.Abp.UserFriendlyException"></exception>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.AddUpdateUserAccount(LifePayment.Application.Contracts.AddUpdateUserAccountInput)">
            <summary>
            æ·»åŠ æˆ–ä¿®æ”¹æˆ‘çš„æˆ·å·
            </summary>
            <param name="input"></param>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.DeleteUserAccount(System.Guid)">
            <summary>
            åˆ é™¤æˆ‘的户号
            </summary>
            <param name="id"></param>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.RejectRefundLifePayOrder(LifePayment.Application.Contracts.RefundLifePayOrderInput)">
            <summary>
            é€€æ¬¾é©³å›ž
            </summary>
            <param name="input"></param>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.CreateEditPayChannels(LifePayment.Application.Contracts.CreateEditPayChannelsInput)">
            <summary>
            æ¸ é“管理
            </summary>
            <param name="input"></param>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.SetLifePayChannelsStatus(System.Guid,LifePayment.Domain.Shared.LifePayChannelsStatsEnum)">
            <summary>
            è®¾ç½®æ¸ é“启用状态
            </summary>
            <param name="id"></param>
            <param name="status"></param>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.CreateEditLifePayRate(System.Collections.Generic.List{LifePayment.Application.Contracts.LifePayRateInput})">
            <summary>
            æŠ˜æ‰£é…ç½®
            </summary>
            <param name="input"></param>
            <returns></returns>
        </member>
        <member name="M:LifePayment.HttpApi.LifePayController.SetLifePayOrderPayType(LifePayment.Domain.Shared.SetLifePayOrderPayTypeInput)">
            <summary>
            è®¾ç½®ç”Ÿæ´»ç¼´è´¹æ”¯ä»˜ç±»åž‹
LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml
@@ -763,5 +763,19 @@
            ç”¨æˆ·id
            </summary>
        </member>
        <member name="M:LifePayment.Application.Contracts.IAccountService.LifePayPhoneMesssageCodeLogin(LifePayment.Application.Contracts.LifePayPhoneMesssageCodeLoginInput)">
            <summary>
            æ‰‹æœºéªŒè¯ç ç™»å½•
            ç‰ˆæœ¬è¯´æ˜Žï¼šä½¿ç”¨éªŒè¯ç ç®¡ç†åŽ»æ ¡éªŒå’Œå¤±æ•ˆå¯¹åº”ä¸šåŠ¡çš„éªŒè¯ç 
            </summary>
            <param name="input"></param>
            <returns></returns>
            <exception cref="T:Volo.Abp.UserFriendlyException"></exception>
        </member>
        <member name="P:LifePayment.Application.Contracts.LifePayPhoneMesssageCodeLoginInput.PhoneNumber">
            <summary>
            æ‰‹æœºå·
            </summary>
        </member>
    </members>
</doc>
LifePayment/LifePayment.HttpApi/LifePay/AccountController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,57 @@
using LifePayment.Application.Contracts;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
using System;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.WebClientInfo;
namespace LifePayment.HttpApi
{
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class AccountController : AbpController
    {
        private readonly IAccountService _accountService;
        private readonly IWebClientInfoProvider _webClientInfoProvider;
        public AccountController(
               IAccountService accountService,
               IWebClientInfoProvider webClientInfoProvider
          )
        {
            _accountService = accountService;
            _webClientInfoProvider = webClientInfoProvider;
        }
        #region life pay
        /// <summary>
        /// life pay手机验证码登录
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        /// <exception cref="UserFriendlyException"></exception>
        [HttpPost]
        [AllowAnonymous]
        [ChannelFilter]
        public async Task<Guid> LifePayPhoneMesssageCodeLogin(LifePayPhoneMesssageCodeLoginInput input)
        {
            return await _accountService.LifePayPhoneMesssageCodeLogin(input);
        }
        #endregion
    }
}
LifePayment/LifePayment.HttpApi/LifePay/ChannelFilterAttribute.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
using LifePayment.Application.Contracts;
using LifePayment.Domain.Shared;
using Microsoft.AspNetCore.Mvc.Abstractions;
using Microsoft.AspNetCore.Mvc.Filters;
using System;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.AspNetCore.Mvc;
namespace LifePayment.HttpApi
{
    public class ChannelFilterAttribute : Attribute, IAsyncActionFilter
    {
        public ChannelFilterAttribute()
        {
        }
        public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
        {
            if (!context.ActionDescriptor.IsControllerAction())
            {
                await next();
                return;
            }
            var checkerService = context.GetRequiredService<ILifePayService>();
            foreach (var argument in context.ActionArguments)
            {
                // æ£€æŸ¥å‚数类型是否为 ChannelsBaseInput
                if (argument.Value is ChannelsBaseInput model)
                {
                    // èŽ·å– Channel å‚数的值
                    string channelValue = model.CheckChannelId;
                    if (!string.IsNullOrEmpty(channelValue))
                    {
                        var result = await checkerService.CheckChannelsStatus(channelValue);
                        if (result)
                        {
                            await next();
                        }
                        else
                        {
                            throw new UserFriendlyException("没有对应的渠道");
                        }
                    }
                }
            }
        }
    }
}
LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs
@@ -1,9 +1,7 @@
using LifePayment.Application.Contracts;
using LifePayment.Domain;
using LifePayment.Domain.Shared;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -11,12 +9,7 @@
using Volo.Abp;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.WebClientInfo;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.Identity;
using Volo.Abp.Uow;
using ZeroD.Util;
using ZeroD.Util.Fadd;
using LifePayment.Application.Contracts;
namespace LifePayment.HttpApi
{
@@ -42,9 +35,10 @@
        /// èŽ·å–ç”µè´¹é¢å€¼
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [HttpPost]
        [AllowAnonymous]
        public async Task<ElectricParValueResponse> GetElectricParValue()
        [ChannelFilter]
        public async Task<ElectricParValueResponse> GetElectricParValue(ChannelsBaseInput input)
        {
            return await _lifePayService.GetElectricParValue();
        }
@@ -53,9 +47,10 @@
        /// èŽ·å–ç”µè´¹å……å€¼åŒºåŸŸ
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [HttpPost]
        [AllowAnonymous]
        public async Task<ElectricSupportAreaResponse> GetElectricSupportArea()
        [ChannelFilter]
        public async Task<ElectricSupportAreaResponse> GetElectricSupportArea(ChannelsBaseInput input)
        {
            var aresResult = await _lifePayService.GetElectricSupportArea();
            var parValues = await _lifePayService.GetElectricParValue();
@@ -78,14 +73,39 @@
        /// èŽ·å–è¯è´¹é¢å€¼
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [HttpPost]
        [AllowAnonymous]
        public async Task<PhoneParValueResponse> GetPhoneParValue()
        [ChannelFilter]
        public async Task<PhoneParValueResponse> GetPhoneParValue(ChannelsBaseInput input)
        {
            return await _lifePayService.GetPhoneParValue();
        }
        /// <summary>
        /// èŽ·å–ç‡ƒæ°”é¢å€¼
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        [AllowAnonymous]
        [ChannelFilter]
        public async Task<GasParValueResponse> GetGasParValue(ChannelsBaseInput input)
        {
            return await _lifePayService.GetGasParValue();
        }
        /// <summary>
        /// èŽ·å–ç‡ƒæ°”æ”¯æŒå•†æˆ·
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        [AllowAnonymous]
        [ChannelFilter]
        public async Task<GasOrgTypeValueResponse> GetGasOrgType(ChannelsBaseInput input)
        {
            return await _lifePayService.GetGasOrgType();
        }
        /// <summary>
        /// èŽ·å–æŠ˜æ‰£
        /// </summary>
        /// <returns></returns>
@@ -125,21 +145,138 @@
        /// <returns></returns>
        [HttpPost]
        [AllowAnonymous]
        [ChannelFilter]
        public async Task<PageOutput<UserLifePayOrderOutput>> GetUserLifePayOrderPage(QueryLifePayOrderListInput input)
        {
            return await _lifePayService.GetUserLifePayOrderPage(input);
        }
        /// <summary>
        /// æ ¹æ®è®¢å•号获取支付状态
        /// èŽ·å–æˆ‘çš„è®¢å•è¯¦æƒ…
        /// </summary>
        /// <param name="orderNo"></param>
        /// <returns></returns>
        [HttpGet]
        [AllowAnonymous]
        public async Task<LifePayStatusEnum> GetPayStatusByOrderNo(string orderNo)
        public async Task<UserLifePayOrderOutput> GetUserLifePayOrderDetail(string orderNo)
        {
            return await _lifePayService.GetPayStatusByOrderNo(orderNo);
            return await _lifePayService.GetUserLifePayOrderDetail(orderNo);
        }
        /// <summary>
        /// æ ¹æ®è®¢å•号获取支付状态
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost]
        [AllowAnonymous]
        [ChannelFilter]
        public async Task<LifePayStatusEnum> GetPayStatusByOrderNo(GetPayStatusByOrderNoInput input)
        {
            return await _lifePayService.GetPayStatusByOrderNo(input.OrderNo);
        }
        /// <summary>
        /// èŽ·å–ç¼´è´¹æ¸ é“åˆ—è¡¨
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<PageOutput<CreateEditPayChannelsInput>> GetLifePayChannlesPage(PageInput input)
        {
            return await _lifePayService.GetLifePayChannlesPage(input);
        }
        /// <summary>
        /// èŽ·å–æ¸ é“è¯¦æƒ…
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [HttpGet]
        public async Task<CreateEditPayChannelsInput> GetLifePayChannlesDto(Guid id)
        {
            return await _lifePayService.GetLifePayChannlesDto(id);
        }
        /// <summary>
        /// ç”¨æˆ·æŸ¥çœ‹ç”Ÿæ´»ç¼´è´¹é€€æ¬¾å¤±è´¥è¯¦æƒ…
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        /// <exception cref="UserFriendlyException"></exception>
        [HttpGet]
        [AllowAnonymous]
        public async Task<UserLifePayOrderRefundOutput> GetUserLifePayOrderRefund(Guid id)
        {
            return await _lifePayService.GetUserLifePayOrderRefund(id);
        }
        /// <summary>
        /// èŽ·å–ç”¨æˆ·æˆ·å·åˆ†é¡µæ•°æ®
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<PageOutput<UserAccountOutput>> GetAccountPage(QueryUserAccountListInput input)
        {
            return await _lifePayService.GetAccountPage(input);
        }
        /// <summary>
        /// èŽ·å–æˆ‘çš„æˆ·å·åˆ—è¡¨
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost]
        [AllowAnonymous]
        [ChannelFilter]
        public async Task<PageOutput<UserAccountOutput>> GetUserAccountList(QueryUserAccountListInput input)
        {
            return await _lifePayService.GetUserAccountList(input);
        }
        /// <summary>
        /// èŽ·å–æˆ‘çš„å…¨éƒ¨æˆ·å·åˆ—è¡¨
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost]
        [AllowAnonymous]
        [ChannelFilter]
        public async Task<List<UserAccountOutput>> GetUserAccountAllList(QueryUserAccountAllListInput input)
        {
            return await _lifePayService.GetUserAccountAllList(input);
        }
        /// <summary>
        /// èŽ·å–æˆ‘çš„æˆ·å·è¯¦æƒ…
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [HttpGet]
        [AllowAnonymous]
        public async Task<UserAccountOutput> GetUserAccountDetail(Guid id)
        {
            return await _lifePayService.GetUserAccountDetail(id);
        }
        /// <summary>
        /// å¯¼å‡ºè®¢å•Excel
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<ActionResult> GetLifePayOrderPageExport(QueryLifePayOrderListInput input)
        {
            var data = await _lifePayService.GetLifePayOrderPageExport(input);
            if (data.Any())
            {
                var bytes = ExcelHelper.ListToByteForExcel(data, "xlsx");
                return File(bytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "订单管理" + ".xlsx");
            }
            return Json(default);
        }
        #endregion
@@ -153,6 +290,7 @@
        /// <returns></returns>
        [HttpPost]
        [AllowAnonymous]
        [ChannelFilter]
        public async Task<CreateLifePayOrderOutput> CreateLifePayPhoneOrder(CreateLifePayOrderInput<LifePhoneData> input)
        {
            return await _lifePayService.CreateLifePayPhoneOrder(input);
@@ -165,12 +303,26 @@
        /// <returns></returns>
        [HttpPost]
        [AllowAnonymous]
        [ChannelFilter]
        public async Task<CreateLifePayOrderOutput> CreateLifePayElectricOrder(CreateLifePayOrderInput<LifeElectricData> input)
        {
            return await _lifePayService.CreateLifePayElectricOrder(input);
        }
        /// <summary>
        /// åˆ›å»ºç”Ÿæ´»ç¼´è´¹ç‡ƒæ°”订单
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost]
        [AllowAnonymous]
        [ChannelFilter]
        public async Task<CreateLifePayOrderOutput> CreateLifePayGasOrder(CreateLifePayOrderInput<LifeGasData> input)
        {
            return await _lifePayService.CreateLifePayGasOrder(input);
        }
        /// <summary>
        /// é€€æ¬¾ç”Ÿæ´»ç¼´è´¹è®¢å•
        /// </summary>
        /// <param name="input"></param>
@@ -184,12 +336,104 @@
        }
        /// <summary>
        /// ç”¨æˆ·å‘起生活缴费退款
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        /// <exception cref="UserFriendlyException"></exception>
        [HttpPost]
        [AllowAnonymous]
        [ChannelFilter]
        public async Task<int> RefundUserLifePayOrder(RefundUserLifePayOrderInput input)
        {
            await _lifePayService.RefundUserLifePayOrder(input);
            return Constant.SUCCESS;
        }
        /// <summary>
        /// æ·»åŠ æˆ–ä¿®æ”¹æˆ‘çš„æˆ·å·
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost]
        [AllowAnonymous]
        [ChannelFilter]
        public async Task<int> AddUpdateUserAccount(AddUpdateUserAccountInput input)
        {
            await _lifePayService.AddUpdateUserAccount(input);
            return Constant.SUCCESS;
        }
        /// <summary>
        /// åˆ é™¤æˆ‘的户号
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [HttpPost]
        [AllowAnonymous]
        public async Task<int> DeleteUserAccount(Guid id)
        {
            await _lifePayService.DeleteUserAccount(id);
            return Constant.SUCCESS;
        }
        /// <summary>
        /// é€€æ¬¾é©³å›ž
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<int> RejectRefundLifePayOrder(RefundLifePayOrderInput input)
        {
            await _lifePayService.RejectRefundLifePayOrder(input);
            return Constant.SUCCESS;
        }
        /// <summary>
        /// æ¸ é“管理
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<int> CreateEditPayChannels(CreateEditPayChannelsInput input)
        {
            await _lifePayService.CreateEditPayChannels(input);
            return Constant.SUCCESS;
        }
        /// <summary>
        /// è®¾ç½®æ¸ é“启用状态
        /// </summary>
        /// <param name="id"></param>
        /// <param name="status"></param>
        /// <returns></returns>
        [HttpGet]
        public async Task<int> SetLifePayChannelsStatus(Guid id, LifePayChannelsStatsEnum status)
        {
            await _lifePayService.SetLifePayChannelsStatus(id, status);
            return Constant.SUCCESS;
        }
        /// <summary>
        /// æŠ˜æ‰£é…ç½®
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<int> CreateEditLifePayRate(List<LifePayRateInput> input)
        {
            await _lifePayService.CreateEditLifePayRate(input);
            return Constant.SUCCESS;
        }
        /// <summary>
        /// è®¾ç½®ç”Ÿæ´»ç¼´è´¹æ”¯ä»˜ç±»åž‹
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost]
        [AllowAnonymous]
        [ChannelFilter]
        public async Task<string> SetLifePayOrderPayType(SetLifePayOrderPayTypeInput input)
        {
@@ -203,6 +447,7 @@
        /// <returns></returns>
        [HttpPost]
        [AllowAnonymous]
        [ChannelFilter]
        public async Task<ModelPaymentMiniPay> GetPayOrderForJsAPI(GetPayOrderForJsAPIInput input)
        {
            return await _lifePayService.GetPayOrderForJsAPI(input, _webClientInfoProvider.ClientIpAddress);