From ecc217f694e03e660ef54bbada24fcb4ee59a728 Mon Sep 17 00:00:00 2001 From: zhengyuxuan <zhengyuxuan1995> Date: 星期五, 21 三月 2025 09:33:12 +0800 Subject: [PATCH] 回单下载 --- LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml | 74 ++++++++++++++++++ LifePayment/LifePayment.Domain/WeChat/WxClient.cs | 2 LifePayment/LifePayment.Domain/WeChat/IWxPayApi.cs | 4 + LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs | 9 ++ LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs | 2 LifePayment/LifePayment.Domain/Ali/AliPayApi.cs | 2 LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml | 6 + LifePayment/LifePayment.Domain/WeChat/WxPayApi.cs | 14 +++ LifePayment/LifePayment.Application/LifePay/LifePayService.cs | 51 ++++++++++++ LifePayment/LifePayment.Domain.Shared/LifePaymentConstant.cs | 4 + LifePayment/LifePayment.Domain.Shared/WeChat/WxPayPostBaseModel.cs | 31 +++++++ 11 files changed, 195 insertions(+), 4 deletions(-) diff --git a/LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs b/LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs index 82c7994..604b07b 100644 --- a/LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs +++ b/LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs @@ -250,6 +250,8 @@ Task<List<LifePayOrderListTemplate>> GetLifePayOrderPageExport(QueryLifePayOrderListInput input); + Task<string> GetBillErceiptExport(string orderNo); + /// <summary> /// 璁剧疆鐢熸椿缂磋垂鏀粯绫诲瀷 /// </summary> diff --git a/LifePayment/LifePayment.Application/LifePay/LifePayService.cs b/LifePayment/LifePayment.Application/LifePay/LifePayService.cs index 00a0bf7..a06be30 100644 --- a/LifePayment/LifePayment.Application/LifePay/LifePayService.cs +++ b/LifePayment/LifePayment.Application/LifePay/LifePayService.cs @@ -25,6 +25,7 @@ using Nest; using Volo.Abp.Domain.Entities; using Volo.Abp.ObjectMapping; +using NPOI.SS.Formula.Functions; namespace LifePayment.Application; @@ -45,6 +46,7 @@ private readonly IDataFilter dataFilter; private readonly IChannelFilter _channelFilter; private readonly IAliPayApi _aliPayApi; + private readonly IAlipayInterfaceManager _alipayInterfaceManager; private readonly IWxPayApi _wxPayApi; private readonly WxPayOption _wxPayOptions; @@ -61,6 +63,7 @@ IRepository<DallyStatistics, Guid> dallyStatisticsRepository, IRepository<OperateHistory, Guid> operateHistory, IAliPayApi aliPayApi, + IAlipayInterfaceManager aliPayInterfaceManager, IWxPayApi wxPayApi, IOptions<WxPayOption> wxPayOptions, IRepository<LifePayChannles, Guid> lifePayChannlesRep, @@ -77,6 +80,7 @@ _lifePayIntroInfoRepository = lifePayIntroInfoRepository; _dallyStatisticsRepository = dallyStatisticsRepository; _aliPayApi = aliPayApi; + _alipayInterfaceManager = aliPayInterfaceManager; _wxPayApi = wxPayApi; _wxPayOptions = wxPayOptions.Value; _distributedEventBus = distributedEventBus; @@ -663,7 +667,54 @@ }); return result; } + public async Task<string> GetBillErceiptExport(string orderNo) + { + try + { + var order = await _lifePayOrderRepository.Where(x => x.OrderNo == orderNo).FirstOrDefaultAsync(); + CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "鏈壘鍒拌鍗曚俊鎭�"); + if (order.LifePayType == LifePayTypeEnum.AliPay) + { + var elecInfoInput = new DataBillErceiptApplyInput + { + Type = "FUND_DETAIL", + Key = orderNo + }; + + var elecInfoOutput = await _alipayInterfaceManager.DataBillErceiptApply(elecInfoInput); + if (elecInfoOutput != null) + { + var elecFileInput = new DataBillEreceiptQueryInput + { + FileId = elecInfoOutput.FileId, + }; + var elecFileOutput = await _alipayInterfaceManager.DataBillEreceiptQuery(elecFileInput); + if (!string.IsNullOrEmpty(elecFileOutput.DownloadUrl)) + { + return elecFileOutput.DownloadUrl; + } + return ""; + } + return ""; + } + else + { + WxPayTradeBillApplyRequest req = new WxPayTradeBillApplyRequest + { + OutBillNo = order.OutOrderNo, + }; + + var res = await _wxPayApi.WxPayTradeBillApply(req); + return ""; + } + } + catch (Exception ex) + { + _logger.LogError("鑾峰彇璁㈠崟鍙蜂负{0}鐢靛瓙鍥炲崟鍑虹幇閿欒锛歿1}", orderNo, ex.Message); + return ""; + } + } #endregion #region 鎿嶄綔 diff --git a/LifePayment/LifePayment.Domain.Shared/LifePaymentConstant.cs b/LifePayment/LifePayment.Domain.Shared/LifePaymentConstant.cs index b093ed8..f626839 100644 --- a/LifePayment/LifePayment.Domain.Shared/LifePaymentConstant.cs +++ b/LifePayment/LifePayment.Domain.Shared/LifePaymentConstant.cs @@ -55,6 +55,10 @@ public const string WxPayDomesticRefunds = "/v3/refund/domestic/refunds"; + public const string WxPayTradeBillApply = "/v3/fund-app/mch-transfer/elecsign/out-bill-no"; + + public const string WxPayTradeBillQuery = "/v3/fund-app/mch-transfer/elecsign/out-bill-no/{out_bill_no}"; + public const string WxRechargeNotifySectionUrl = "/api/WxPayNotify/WxRechargeNotify"; public const string WxPayDomesticRefundsNotifySectionUrl = "/api/WxPayNotify/WxPayDomesticRefundsNotify"; diff --git a/LifePayment/LifePayment.Domain.Shared/WeChat/WxPayPostBaseModel.cs b/LifePayment/LifePayment.Domain.Shared/WeChat/WxPayPostBaseModel.cs index d9e2d8b..4c235b5 100644 --- a/LifePayment/LifePayment.Domain.Shared/WeChat/WxPayPostBaseModel.cs +++ b/LifePayment/LifePayment.Domain.Shared/WeChat/WxPayPostBaseModel.cs @@ -763,5 +763,36 @@ } + public class WxPayTradeBillApplyRequest + { + /// <summary> + /// 寰俊鏀粯璁㈠崟鍙� + /// </summary> + [JsonProperty("out_bill_no")] + public string OutBillNo { get; set; } + } + public class WxPayTradeBillApplyReponse + { + /// <summary> + /// 寰俊鏀粯璁㈠崟鍙� + /// </summary> + [JsonProperty("transfer_bill_no")] + public string TransferBillNo { get; set; } + } + + public class WxPayTradeBillQueryRequest + { + /// <summary> + /// 寰俊鏀粯璁㈠崟鍙� + /// </summary> + [JsonProperty("transfer_bill_no")] + public string TransferBillNo { get; set; } + } + + public class WxPayTradeBillQueryReponse + { + [JsonProperty("download_url")] + public string DownloadUrl { get; set; } + } } \ No newline at end of file diff --git a/LifePayment/LifePayment.Domain/Ali/AliPayApi.cs b/LifePayment/LifePayment.Domain/Ali/AliPayApi.cs index a64cc72..daf94ef 100644 --- a/LifePayment/LifePayment.Domain/Ali/AliPayApi.cs +++ b/LifePayment/LifePayment.Domain/Ali/AliPayApi.cs @@ -4,6 +4,7 @@ using Alipay.EasySDK.Payment.FaceToFace.Models; using LifePayment.Domain.Shared; using Microsoft.Extensions.Options; +using Nest; using System.Threading.Tasks; namespace LifePayment.Domain @@ -39,5 +40,6 @@ AlipayTradeRefundResponse response = Factory.Payment.Common().Refund(input.OutTradeNo,input.RefundAmount); return response; } + } } \ No newline at end of file diff --git a/LifePayment/LifePayment.Domain/WeChat/IWxPayApi.cs b/LifePayment/LifePayment.Domain/WeChat/IWxPayApi.cs index 3b34e5d..805ecfc 100644 --- a/LifePayment/LifePayment.Domain/WeChat/IWxPayApi.cs +++ b/LifePayment/LifePayment.Domain/WeChat/IWxPayApi.cs @@ -23,5 +23,9 @@ string GeneratePaySignByKey(string message); Task<WxPayDomesticRefundsReponse> WxPayDomesticRefunds(WxPayDomesticRefundsRequest input); + + Task<WxPayTradeBillApplyReponse> WxPayTradeBillApply(WxPayTradeBillApplyRequest input); + + Task<WxPayTradeBillQueryReponse> WxPayTradeBillQuery(WxPayTradeBillQueryRequest input); } } \ No newline at end of file diff --git a/LifePayment/LifePayment.Domain/WeChat/WxClient.cs b/LifePayment/LifePayment.Domain/WeChat/WxClient.cs index 4d30661..61f6131 100644 --- a/LifePayment/LifePayment.Domain/WeChat/WxClient.cs +++ b/LifePayment/LifePayment.Domain/WeChat/WxClient.cs @@ -40,7 +40,7 @@ return result; } - public async Task<TResult> RefundsPostAsync<TInput, TResult>(TInput input, string function) + public async Task<TResult> NomalPostAsync<TInput, TResult>(TInput input, string function) { var client = HttpClientFactory.CreateClient(LifePaymentConstant.WxPayHttpClientName); var body = JsonConvert.SerializeObject(input); diff --git a/LifePayment/LifePayment.Domain/WeChat/WxPayApi.cs b/LifePayment/LifePayment.Domain/WeChat/WxPayApi.cs index c26f1e6..090020c 100644 --- a/LifePayment/LifePayment.Domain/WeChat/WxPayApi.cs +++ b/LifePayment/LifePayment.Domain/WeChat/WxPayApi.cs @@ -31,7 +31,19 @@ public async Task<WxPayDomesticRefundsReponse> WxPayDomesticRefunds(WxPayDomesticRefundsRequest input) { - var result = await RefundsPostAsync<WxPayDomesticRefundsRequest, WxPayDomesticRefundsReponse>(input, LifePaymentConstant.WxPayDomesticRefunds); + var result = await NomalPostAsync<WxPayDomesticRefundsRequest, WxPayDomesticRefundsReponse>(input, LifePaymentConstant.WxPayDomesticRefunds); + return result; + } + + public async Task<WxPayTradeBillApplyReponse> WxPayTradeBillApply(WxPayTradeBillApplyRequest input) + { + var result = await NomalPostAsync<WxPayTradeBillApplyRequest, WxPayTradeBillApplyReponse>(input, LifePaymentConstant.WxPayTradeBillApply); + return result; + } + + public async Task<WxPayTradeBillQueryReponse> WxPayTradeBillQuery(WxPayTradeBillQueryRequest input) + { + var result = await NomalPostAsync<WxPayTradeBillQueryRequest, WxPayTradeBillQueryReponse>(input, LifePaymentConstant.WxPayTradeBillQuery); return result; } } diff --git a/LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml b/LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml index ba6111d..1a8cd0d 100644 --- a/LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml +++ b/LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml @@ -56,6 +56,12 @@ </summary> <returns></returns> </member> + <member name="M:LifePayment.HttpApi.LifePayController.GetTopStatistics"> + <summary> + 鑾峰彇椤堕儴缁熻鏁版嵁 + </summary> + <returns></returns> + </member> <member name="M:LifePayment.HttpApi.LifePayController.GetElectricParValue(LifePayment.Domain.Shared.ChannelsBaseInput)"> <summary> 鑾峰彇鐢佃垂闈㈠�� diff --git a/LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml b/LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml index fa1a781..60c75bb 100644 --- a/LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml +++ b/LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml @@ -845,6 +845,11 @@ 璁㈠崟绫诲瀷 </summary> </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.RefundOrderNo"> + <summary> + 閫�娆捐鍗曞彿 + </summary> + </member> <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.OrderNo"> <summary> 璁㈠崟鍙� @@ -875,7 +880,7 @@ 鏀粯鐘舵�� </summary> </member> - <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.LifePayOrderStatus"> + <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.Status"> <summary> 璁㈠崟鐘舵�� </summary> @@ -908,6 +913,16 @@ <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.RefundCredentialsImgUrl"> <summary> 閫�娆惧嚟璇� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.RefundApplyRemark"> + <summary> + 閫�娆惧師鍥� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.RefundCheckRemark"> + <summary> + 椹冲洖鍘熷洜 </summary> </member> <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.ACOOLYOrderNo"> @@ -1015,7 +1030,7 @@ 鏀粯鐘舵�� </summary> </member> - <member name="P:LifePayment.Application.Contracts.LifePayRefundOrderOutput.LifePayOrderStatus"> + <member name="P:LifePayment.Application.Contracts.LifePayRefundOrderOutput.Status"> <summary> 璁㈠崟鐘舵�� </summary> @@ -1043,6 +1058,26 @@ <member name="P:LifePayment.Application.Contracts.LifePayRefundOrderOutput.RefundCredentialsImgUrl"> <summary> 閫�娆惧嚟璇� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayRefundOrderOutput.RefundApplyRemark"> + <summary> + 閫�娆剧敵璇峰師鍥� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayRefundOrderOutput.RefundApplyTime"> + <summary> + 閫�娆剧敵璇锋椂闂� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayRefundOrderOutput.RefundCheckRemark"> + <summary> + 閫�娆鹃┏鍥炲師鍥� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayRefundOrderOutput.RefundOrderNo"> + <summary> + 閫�娆捐鍗曞彿 </summary> </member> <member name="P:LifePayment.Application.Contracts.LifePayRefundOrderOutput.ACOOLYOrderNo"> @@ -1140,6 +1175,41 @@ 绱鏀舵 </summary> </member> + <member name="P:LifePayment.Application.Contracts.TopStatisticsOutput.ReceiptsYesterda"> + <summary> + 鏄ㄦ棩鏀舵 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.TopStatisticsOutput.AccumulatedOrders"> + <summary> + 绱涓嬪崟 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.TopStatisticsOutput.OrdersNumYesterda"> + <summary> + 鏄ㄦ棩涓嬪崟 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.TopStatisticsOutput.YesterdaSuccess"> + <summary> + 鏄ㄦ棩鎴愬姛 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.TopStatisticsOutput.YesterdaFail"> + <summary> + 鏄ㄦ棩澶辫触 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.TopStatisticsOutput.AccumulatedUsers"> + <summary> + 绱鐢ㄦ埛 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.TopStatisticsOutput.YesterdayActiveUsers"> + <summary> + 鏄ㄦ棩娲昏穬鐢ㄦ埛 + </summary> + </member> <member name="P:LifePayment.Application.Contracts.RecordOperateHistoryEto.RelationId"> <summary> 鍏宠仈鍏崇郴ID diff --git a/LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs b/LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs index 893a7e7..856ba52 100644 --- a/LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs +++ b/LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs @@ -363,6 +363,15 @@ return Json(default); } + [HttpGet] + public async Task<ActionResult> GetBillErceiptExport(string orderNo) + { + var data = await _lifePayService.GetBillErceiptExport(orderNo); + + + return Json(default); + } + #endregion #region 鎿嶄綔 -- Gitblit v1.9.1