using Alipay.AopSdk.F2FPay.Model; using LifePayment.Application.Contracts; using LifePayment.Application.LifePay; using LifePayment.Domain.Common; using LifePayment.Domain.Shared; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.WebClientInfo; using ZeroD.Util; namespace LifePayment.HttpApi { [Route("api/[controller]/[action]")] [ApiController] [Authorize] public class LifePayController : AbpController { private readonly ILifePayService _lifePayService; private readonly IStatisticsService _statisticsService; private readonly IWebClientInfoProvider _webClientInfoProvider; private readonly ICommonService _commonService; private readonly ILifePayOrderService _lifePayOrderService; private readonly ILogger<LifePayController> _logger; public LifePayController( ILifePayService lifePayService, IStatisticsService statisticsService, IWebClientInfoProvider webClientInfoProvider, ICommonService commonService, ILifePayOrderService lifePayOrderService, ILogger<LifePayController> logger ) { _lifePayService = lifePayService; _statisticsService = statisticsService; _webClientInfoProvider = webClientInfoProvider; _commonService = commonService; _lifePayOrderService = lifePayOrderService; _logger = logger; } #region 查询 /// <summary> /// 获å–é¡¶éƒ¨ç»Ÿè®¡æ•°æ® /// </summary> /// <returns></returns> [HttpGet] [AllowAnonymous] public async Task<TopStatisticsOutput> GetTopStatistics(string channleId = "") { return await _statisticsService.GetTopStatistics(channleId); } /// <summary> /// 获å–电费é¢å€¼ /// </summary> /// <returns></returns> [HttpPost] [AllowAnonymous] [ChannelFilter] public async Task<ElectricParValueResponse> GetElectricParValue(ChannelsBaseInput input) { return await _lifePayService.GetElectricParValue(); } /// <summary> /// 获å–电费充值区域 /// </summary> /// <returns></returns> [HttpPost] [AllowAnonymous] [ChannelFilter] public async Task<ElectricSupportAreaResponse> GetElectricSupportArea(ChannelsBaseInput input) { var aresResult = await _lifePayService.GetElectricSupportArea(); var parValues = await _lifePayService.GetElectricParValue(); CheckExtensions.IfTrueThrowUserFriendlyException(aresResult == null, "电费充值区域ä¸å˜åœ¨"); CheckExtensions.IfTrueThrowUserFriendlyException(parValues == null, "电费é¢é¢ä¸å˜åœ¨"); foreach (var item in aresResult.ElectricAreaList) { var paritem = parValues.ElectricParValue.Where(r => r.AreaName == item.CityName).FirstOrDefault(); if (paritem != null) { item.ElectricType = paritem.ElectricType; item.ParValue = paritem.ParValue; item.Rate = paritem.Rate; } } return aresResult; } /// <summary> /// 获å–è¯è´¹é¢å€¼ /// </summary> /// <returns></returns> [HttpPost] [AllowAnonymous] [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> [HttpPost] [AllowAnonymous] public async Task<int> AddLogger(LogErrorInput input) { Logger.LogError("å‰ç«¯é”™è¯¯ï¼š" + input.Error); return Constant.SUCCESS; } /// <summary> /// èŽ·å–æŠ˜æ‰£ /// </summary> /// <returns></returns> [HttpGet] [AllowAnonymous] public async Task<List<LifePayRateListOutput>> GetRate() { return await _lifePayService.GetRate(); } /// <summary> /// èŽ·å–æ¸ é“æŠ˜æ‰£ /// </summary> /// <returns></returns> [HttpPost] [AllowAnonymous] public async Task<ChannelRateOutput> GetChannelRate(ChannelsBaseInput input) { return await _lifePayService.GetChannelRate(input); } /// <summary> /// èŽ·å–æ‰‹ç»è´¹è´¹çއ /// </summary> /// <returns></returns> [HttpGet] [AllowAnonymous] public async Task<List<LifePayPremiumListOutput>> GetPremium() { return await _lifePayService.GetPremium(); } /// <summary> /// 获å–须知 /// </summary> /// <returns></returns> [HttpGet] [AllowAnonymous] public async Task<List<LifePayIntroInfoOutput>> GetIntroInfo(LifePayOrderTypeEnum type) { return await _lifePayService.GetIntroInfo(type); } /// <summary> /// 获å–åœ¨çº¿å®¢æœ /// </summary> /// <returns></returns> [HttpGet] [AllowAnonymous] public async Task<string> GetOnlineService() { return await _commonService.GetOnlineService(); } /// <summary> /// 获å–ç”¨æˆ·åˆ†é¡µæ•°æ® /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost] public async Task<PageOutput<UserListOutput>> GetUserPage(QueryUserPageInput input) { return await _lifePayService.GetUserPage(input); } /// <summary> /// 获å–订å•åˆ†é¡µæ•°æ® /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost] public async Task<PageOutput<LifePayOrderListOutput>> GetLifePayOrderPage(QueryLifePayOrderListInput input) { return await _lifePayService.GetLifePayOrderPage(input); } /// <summary> /// 获å–退款订å•åˆ†é¡µæ•°æ® /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost] public async Task<PageOutput<LifePayOrderListOutput>> GetLifePayRefundOrderPage(QueryLifePayRefundOrderListInput input) { return await _lifePayService.GetLifePayRefundOrderPage(input); } /// <summary> /// 获å–订å•详情 /// </summary> /// <param name="orderNo"></param> /// <returns></returns> [HttpGet] public async Task<LifePayOrderOutput> GetLifePayOrderDetail(string orderNo) { return await _lifePayService.GetLifePayOrderDetail(orderNo); } /// <summary> /// 获å–退款订å•详情 /// </summary> /// <param name="orderNo"></param> /// <returns></returns> [HttpGet] public async Task<LifePayRefundOrderOutput> GetLifePayRefundOrderDetail(string orderNo) { return await _lifePayService.GetLifePayRefundOrderDetail(orderNo); } /// <summary> /// èŽ·å–æˆ‘的订å•åˆ†é¡µæ•°æ® /// </summary> /// <param name="input"></param> /// <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<UserLifePayOrderOutput> GetUserLifePayOrderDetail(string 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> [HttpGet] public async Task<List<CreateEditPayChannelsInput>> GetLifePayChannlesAllList() { return await _lifePayService.GetLifePayChannlesAllList(); } /// <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); } /// <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) { var data = await _lifePayService.GetBillErceiptExport(orderNo); return data; } /// <summary> /// 获å–å……å€¼æµæ°´åˆ†é¡µæ•°æ® /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost] public async Task<PageOutput<LifePayRechargeReceiptsListOutput>> GetLifePayRechargeReceiptsPage(LifePayRechargeReceiptsPageInput input) { return await _lifePayOrderService.GetLifePayRechargeReceiptsPage(input); } /// <summary> /// èŽ·å–æ¸ é“分佣分页列表 /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost] public async Task<PageOutput<LifePayChannlesRakeListOutput>> GetLifePayChannlesRakePage(LifePayChannlesRakePageInput input) { return await _lifePayOrderService.GetLifePayChannlesRakePage(input); } /// <summary> /// èŽ·å–æ”¶æ”¯æµæ°´åˆ†é¡µæ•°æ® /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost] public async Task<PageOutput<LifePayExpensesReceiptsListOutput>> GetLifePayExpensesReceiptsPage(LifePayExpensesReceiptsPageInput input) { return await _lifePayOrderService.GetLifePayExpensesReceiptsPage(input); } /// <summary> /// æŸ¥è¯¢æ”¯ä»˜å®æ”¯ä»˜è®¢å•ä¿¡æ¯ /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost] [AllowAnonymous] public async Task<Alipay.EasySDK.Payment.Common.Models.AlipayTradeQueryResponse> QueryAlipayTrade(OrderInQuiryInput input) { var res = await _lifePayService.QueryAlipayTrade(input); //await _lifePayOrderService.AddLifePayExpensesReceipts(new AddLifePayExpensesReceiptsInput() //{ // OrderNo = input.OutTradeNo, // OutOrderNo = res.TradeNo, // LifePayType = LifePayTypeEnum.AliPay, // ExpensesReceiptsType = ExpensesReceiptsTypeEnum.Expenses, // Amount = Convert.ToDecimal(res.ReceiptAmount) //}); return res; } /// <summary> /// 查询支付å®é€€æ¬¾è®¢å•ä¿¡æ¯ /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost] [AllowAnonymous] public async Task<Alipay.EasySDK.Payment.Common.Models.AlipayTradeFastpayRefundQueryResponse> QueryAlipayTradeRefund(OrderInQuiryInput input) { return await _lifePayService.QueryAlipayTradeRefund(input); } /// <summary> /// æŸ¥è¯¢å¾®ä¿¡é€€æ¬¾ä¿¡æ¯ /// </summary> /// <param name="outTradeNo"></param> /// <returns></returns> [HttpGet] [AllowAnonymous] public async Task<WxPayDomesticRefundsQueryReponse> WxPayDomesticRefundsQuery(string outTradeNo) { var res = await _lifePayService.WxPayDomesticRefundsQuery(outTradeNo); await _lifePayOrderService.AddLifePayExpensesReceipts(new AddLifePayExpensesReceiptsInput() { OrderNo = res.OutTradeNo, OutOrderNo = res.TransactionId, LifePayType = LifePayTypeEnum.WxPay, ExpensesReceiptsType = ExpensesReceiptsTypeEnum.Expenses, Amount = Convert.ToDecimal(res.Amount.Total) }); return res; } /// <summary> /// 查询微信订å•ä¿¡æ¯ /// </summary> /// <param name="outTradeNo"></param> /// <returns></returns> [HttpGet] [AllowAnonymous] public async Task<WxPayTradeQueryReponse> WxPayTradeQuery(string outTradeNo) { var res = await _lifePayService.WxPayTradeQuery(outTradeNo); await _lifePayOrderService.AddLifePayExpensesReceipts(new AddLifePayExpensesReceiptsInput() { OrderNo = res.OutTradeNo, OutOrderNo = res.TransactionId, LifePayType = LifePayTypeEnum.WxPay, ExpensesReceiptsType = ExpensesReceiptsTypeEnum.Expenses, Amount = Convert.ToDecimal(res.Amount.Total) }); return res; } /// <summary> /// åŒæ¥è®¢å•æ”¶æ”¯ä¿¡æ¯ /// </summary> /// <returns></returns> [HttpGet] [AllowAnonymous] public async Task GetAllLifePayExpensesReceipts() { await _lifePayOrderService.GetAllLifePayExpensesReceipts(); } /// <summary> /// åŒæ¥è®¢å• /// </summary> /// <returns></returns> [HttpGet] [AllowAnonymous] public async Task GetAllChannlesRake() { await _lifePayOrderService.GetAllChannlesRake(); } #endregion #region æ“作 /// <summary> /// 创建生活缴费è¯è´¹è®¢å• /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost] [AllowAnonymous] [ChannelFilter] public async Task<CreateLifePayOrderOutput> CreateLifePayPhoneOrder(CreateLifePayOrderInput<LifePhoneData> input) { return await _lifePayService.CreateLifePayPhoneOrder(input); } /// <summary> /// åˆ›å»ºç”Ÿæ´»ç¼´è´¹ç”µè´¹è®¢å• /// </summary> /// <param name="input"></param> /// <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> /// <returns></returns> [HttpPost] public async Task<int> UpdateLifePayOrderActualReceivedAmount(UpdateLifePayOrderInput input) { return await _lifePayService.UpdateLifePayOrderActualReceivedAmount(input); } /// <summary> /// é€€æ¬¾ç”Ÿæ´»ç¼´è´¹è®¢å• /// </summary> /// <param name="input"></param> /// <returns></returns> /// <exception cref="UserFriendlyException"></exception> [HttpPost] public async Task<int> RefundLifePayOrder(RefundLifePayOrderInput input) { await _lifePayService.RefundLifePayOrder(input); return Constant.SUCCESS; } /// <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] public async Task<int> CreateEditLifePayPremium(List<LifePayPremiumInput> input) { await _lifePayService.CreateEditLifePayPremium(input); return Constant.SUCCESS; } /// <summary> /// 须知é…ç½® /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost] public async Task<int> EditIntroInfo(LifePayIntroInfoInput input) { await _lifePayService.EditIntroInfo(input); return Constant.SUCCESS; } /// <summary> /// 在线客æœé…ç½® /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost] public async Task<int> UpdateOnlineService(OnlineServiceInput input) { await _commonService.UpdateOnlineService(input); return Constant.SUCCESS; } /// <summary> /// ä¸Šä¼ å……å€¼æµæ°´ /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost] public async Task<int> AddUpdatePayRechargeReceipts(AddUpdatePayRechargeReceiptsInput input) { await _lifePayOrderService.AddUpdatePayRechargeReceipts(input); return Constant.SUCCESS; } /// <summary> /// 设置生活缴费支付类型 /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost] [AllowAnonymous] [ChannelFilter] public async Task<string> SetLifePayOrderPayType(SetLifePayOrderPayTypeInput input) { return await _lifePayService.SetLifePayOrderPayType(input, _webClientInfoProvider.ClientIpAddress); } /// <summary> /// 获å–微信支付的JSAPI /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost] [AllowAnonymous] [ChannelFilter] public async Task<ModelPaymentMiniPay> GetPayOrderForJsAPI(GetPayOrderForJsAPIInput input) { return await _lifePayService.GetPayOrderForJsAPI(input, _webClientInfoProvider.ClientIpAddress); } #endregion } }