From 70c08d5a565139b440b73d8b9d9c8c20c7942cd6 Mon Sep 17 00:00:00 2001 From: lingling <kety1122@163.com> Date: 星期五, 14 三月 2025 15:11:23 +0800 Subject: [PATCH] 添加逻辑 --- LifePayment/LifePayment.Domain/LifePay/LifePayChannles.cs | 25 LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml | 307 +++++++++ LifePayment/LifePayment.Domain/ACOOLY/IACOOLYManager.cs | 12 LifePayment/LifePayment.Domain.Shared/ACOOLY/ACOOLYInput.cs | 37 LifePayment/LifePayment.Domain.Shared/ACOOLY/ACOOLYOutput.cs | 28 LifePayment/LifePayment.EntityFrameworkCore/LifePaymentServicesDbContext.cs | 6 LifePayment/LifePayment.Application.Contracts/LifePay/LifePayInput.cs | 181 +++++ LifePayment/LifePayment.Domain/LifePay/LifePayOrder.cs | 19 LifePayment/LifePayment.Domain.Shared/ACOOLY/ACOOLYOption.cs | 8 LifePayment/LifePayment.Domain/ACOOLY/ACOOLYClient.cs | 12 LifePayment/LifePayment.Domain/LifePay/LifePayAccount.cs | 53 + LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs | 227 +++++++ LifePayment/LifePayment.Domain.Shared/ACOOLY/ACOOLYConstant.cs | 13 LifePayment/LifePayment.Domain/ACOOLY/ACOOLYManager.cs | 18 LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs | 112 +++ LifePayment/LifePayment.Domain.Shared/Enum/LifePay/LifePayEnum.cs | 64 + LifePayment/LifePayment.Application/LifePay/LifePayService.cs | 721 ++++++++++++++++++++++- LifePayment/LifePayment.Domain.Shared/LifePaymentConstant.cs | 8 18 files changed, 1,719 insertions(+), 132 deletions(-) diff --git a/LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs b/LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs index 872a25d..93d2726 100644 --- a/LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs +++ b/LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs @@ -1,18 +1,10 @@ -锘縰sing LifePayment.Application.Contracts; -using LifePayment.Domain; -using LifePayment.Domain.Shared; -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.Logging; +锘縰sing LifePayment.Domain.Shared; using System; using System.Collections.Generic; -using System.Linq; using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.Application.Services; -using Volo.Abp.Domain.Repositories; -using Volo.Abp.EventBus.Distributed; using ZeroD.Util; -using static LifePayment.Domain.Shared.LifePaymentConstant; namespace LifePayment.Application.Contracts; @@ -35,6 +27,18 @@ /// </summary> /// <returns></returns> Task<PhoneParValueResponse> GetPhoneParValue(); + + /// <summary> + /// 鑾峰彇鐕冩皵闈㈠�� + /// </summary> + /// <returns></returns> + Task<GasParValueResponse> GetGasParValue(); + + /// <summary> + /// 鑾峰彇鐕冩皵鏀寔鍟嗘埛 + /// </summary> + /// <returns></returns> + Task<GasOrgTypeValueResponse> GetGasOrgType(); /// <summary> /// 鏀粯鎴愬姛鍥炶皟澶勭悊 @@ -68,12 +72,48 @@ Task<CreateLifePayOrderOutput> CreateLifePayElectricOrder(CreateLifePayOrderInput<LifeElectricData> input); /// <summary> + /// 鍒涘缓鐢熸椿缂磋垂鐕冩皵璁㈠崟 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + Task<CreateLifePayOrderOutput> CreateLifePayGasOrder(CreateLifePayOrderInput<LifeGasData> input); + + /// <summary> /// 閫�娆剧敓娲荤即璐硅鍗� /// </summary> /// <param name="input"></param> /// <returns></returns> /// <exception cref="UserFriendlyException"></exception> Task RefundLifePayOrder(RefundLifePayOrderInput input); + + /// <summary> + /// 鐢ㄦ埛鍙戣捣鐢熸椿缂磋垂閫�娆� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + Task RefundUserLifePayOrder(RefundUserLifePayOrderInput input); + + /// <summary> + /// 鐢ㄦ埛淇敼鎴峰彿淇℃伅 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + Task<int> AddUpdateUserAccount(AddUpdateUserAccountInput input); + + /// <summary> + /// 鍒犻櫎鐢ㄦ埛鎴峰彿 + /// </summary> + /// <param name="id"></param> + /// <returns></returns> + Task<int> DeleteUserAccount(Guid id); + + Task RejectRefundLifePayOrder(RefundLifePayOrderInput input); + + Task CreateEditPayChannels(CreateEditPayChannelsInput input); + + Task SetLifePayChannelsStatus(Guid id, LifePayChannelsStatsEnum status); + + Task CreateEditLifePayRate(List<LifePayRateInput> input); /// <summary> /// 鑾峰彇鎶樻墸 @@ -89,11 +129,26 @@ Task<PageOutput<UserLifePayOrderOutput>> GetUserLifePayOrderPage(QueryLifePayOrderListInput input); /// <summary> + /// 鑾峰彇鎴戠殑璁㈠崟璇︽儏 + /// </summary> + /// <param name="orderNo"></param> + /// <returns></returns> + Task<UserLifePayOrderOutput> GetUserLifePayOrderDetail(string orderNo); + + /// <summary> /// 鑾峰彇鐢ㄦ埛鍒嗛〉鏁版嵁 /// </summary> /// <param name="input"></param> /// <returns></returns> Task<PageOutput<UserListOutput>> GetUserPage(PageInput input); + + + /// <summary> + /// 鑾峰彇鐢ㄦ埛鎴峰彿鍒嗛〉鏁版嵁 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + Task<PageOutput<UserAccountOutput>> GetAccountPage(QueryUserAccountListInput input); /// <summary> /// 鑾峰彇璁㈠崟鍒嗛〉鏁版嵁 @@ -108,6 +163,43 @@ /// <param name="orderNo"></param> /// <returns></returns> Task<LifePayStatusEnum> GetPayStatusByOrderNo(string orderNo); + + /// <summary> + /// 鑾峰彇娓犻亾鍒嗛〉 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + Task<PageOutput<CreateEditPayChannelsInput>> GetLifePayChannlesPage(PageInput input); + + Task<CreateEditPayChannelsInput> GetLifePayChannlesDto(Guid id); + + + Task<CreateEditPayChannelsInput> GetLifePayChannlesDtoByNum(string channlesNum); + + Task<UserLifePayOrderRefundOutput> GetUserLifePayOrderRefund(Guid id); + + /// <summary> + /// 鑾峰彇鎴戠殑鎴峰彿鍒楄〃 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + Task<PageOutput<UserAccountOutput>> GetUserAccountList(QueryUserAccountListInput input); + + /// <summary> + /// 鑾峰彇鎴戠殑鍏ㄩ儴鎴峰彿鍒楄〃 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + Task<List<UserAccountOutput>> GetUserAccountAllList(QueryUserAccountAllListInput input); + + /// <summary> + /// 鑾峰彇鎴戠殑鎴峰彿璇︽儏 + /// </summary> + /// <param name="id"></param> + /// <returns></returns> + Task<UserAccountOutput> GetUserAccountDetail(Guid id); + + Task<List<LifePayOrderListTemplate>> GetLifePayOrderPageExport(QueryLifePayOrderListInput input); /// <summary> /// 璁剧疆鐢熸椿缂磋垂鏀粯绫诲瀷 @@ -134,4 +226,6 @@ /// <returns></returns> /// <exception cref="UserFriendlyException"></exception> Task<string> GetPayQRCode(LifePayTypeEnum payType, string outTradeNo, string description, decimal amount, string ip, string h5Type); + + Task<bool> CheckChannelsStatus(string channlesId); } \ No newline at end of file diff --git a/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayInput.cs b/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayInput.cs index ff0ce6d..bb116ab 100644 --- a/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayInput.cs +++ b/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayInput.cs @@ -1,18 +1,21 @@ 锘縰sing LifePayment.Domain.Shared; using Newtonsoft.Json; using System; -using System.Collections.Generic; using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using ZeroD.Util; +using static LifePayment.Domain.Shared.LifePaymentConstant; namespace LifePayment.Application.Contracts; -public class CreateLifePayOrderInput<T> where T : class +public class CreateLifePayOrderInput<T> : ChannelsBaseInput where T : class { public Guid UserId { get; set; } + + /// <summary> + /// 娓犻亾鍚嶇О + /// </summary> + public string ChannelId { get; set; } + + //public string CheckChannelId { get; set; } ///// <summary> ///// 鐢熸椿缂磋垂鏀粯绫诲瀷 @@ -42,6 +45,7 @@ /// 鎵嬫満鍙枫�� /// </summary> [Required(ErrorMessage = "鎵嬫満鍙锋槸蹇呭~椤广��")] + [RegularExpression(RegularExpression.PhoneNumberRegEx, ErrorMessage = "鎵嬫満鍙锋牸寮忎笉姝g‘")] [JsonProperty("phone")] public string Phone { get; set; } @@ -77,7 +81,7 @@ /// 鐢佃垂鎴峰彿銆� /// </summary> [Required(ErrorMessage = "鐢佃垂鎴峰彿鏄繀濉」銆�")] - [StringLength(50, ErrorMessage = "鐢佃垂鎴峰彿闀垮害涓嶈兘瓒呰繃50涓瓧绗︺��")] + [RegularExpression(RegularExpression.ElectricAccountRegEx, ErrorMessage = "璇疯緭鍏�13浣嶇數缃戞埛鍙�")] public string ElectricAccount { get; set; } /// <summary> @@ -98,6 +102,42 @@ /// 瀹㈡埛韬唤璇佸悗6浣嶏紝鍗楃綉蹇呬紶銆� /// </summary> public string SixID { get; set; } +} +public class LifeGasData +{ + /// <summary> + /// 鍏呭�奸潰棰濓紝鍗曚綅涓哄厓銆� + /// </summary> + [Required(ErrorMessage = "鍏呭�奸潰棰濇槸蹇呭~椤广��")] + public decimal ParValue { get; set; } + + /// <summary> + /// 澶╃劧姘斿叕鍙哥被鍨嬶紝"zhong_ran"浠h〃涓噧鐕冩皵锛�"bei_jing"浠h〃鍖椾含鐕冩皵銆� + /// </summary> + [Required(ErrorMessage = "鐕冩皵绫诲瀷鏄繀濉」銆�")] + public string GasOrgType { get; set; } + + + /// <summary> + /// 鐕冩皵鎴峰彿 + /// </summary> + [Required(ErrorMessage = "鐕冩皵鎴峰彿鏄繀濉」銆�")] + public string GasAccount { get; set; } + + /// <summary> + /// 鐪佷唤 + /// </summary> + [Required(ErrorMessage = "鐪佷唤鏄繀濉」銆�")] + [StringLength(20, ErrorMessage = "鐪佷唤闀垮害涓嶈兘瓒呰繃20涓瓧绗︺��")] + public string Province { get; set; } + + /// <summary> + /// 鍩庡競 + /// </summary> + //[Required(ErrorMessage = "鍩庡競鏄繀濉」銆�")] + [StringLength(20, ErrorMessage = "鍩庡競闀垮害涓嶈兘瓒呰繃20涓瓧绗︺��")] + public string City { get; set; } + } public class CreateLifePayOrderInput @@ -174,14 +214,34 @@ /// </summary> public string OrderParamDetailJsonStr { get; set; } + /// <summary> + /// 涓嬪崟娓犻亾 + /// </summary> + public Guid? ChannelId { get; set; } + } -public class QueryLifePayOrderListInput : PageInput +//public class ChannelsBaseInput : PageInput +//{ +// public string CheckChannelId { get; set; } +//} + +public class GetPayStatusByOrderNoInput : ChannelsBaseInput +{ + public string OrderNo { get; set; } +} + +public class QueryLifePayOrderListInput : ChannelsBaseInput { /// <summary> /// 璁㈠崟绫诲瀷 /// </summary> public LifePayOrderTypeEnum? LifePayOrderType { get; set; } + + /// <summary> + /// 鐢熸椿缂磋垂鏀粯绫诲瀷 + /// </summary> + public LifePayTypeEnum? LifePayType { get; set; } /// <summary> /// 寮�濮嬫敮浠樻椂闂� @@ -217,6 +277,12 @@ /// 鐢ㄦ埛Id /// </summary> public Guid? UserId { get; set; } + + /// <summary> + /// 鎼滅储鍏抽敭璇� + /// </summary> + public string KeyWords { get; set; } + } public class RefundLifePayOrderInput @@ -224,4 +290,103 @@ public Guid Id { get; set; } public string RefundCredentialsImgUrl { get; set; } + + public string RefundCheckRemark { get; set; } +} +public class RefundUserLifePayOrderInput : ChannelsBaseInput +{ + public Guid Id { get; set; } + + /// <summary> + /// 鐢ㄦ埛Id + /// </summary> + public Guid? UserId { get; set; } + + public string RefundApplyRemark { get; set; } +} + +public class CreateEditPayChannelsInput +{ + public Guid? Id { get; set; } + + public string ChannlesName { get; set; } + + public string ChannlesNum { get; set; } + + public decimal ChannlesRate { get; set; } + + public LifePaySwitchTypeEnum SwitchType { get; set; } + + public LifePayChannelsStatsEnum Status { get; set; } + + public LifePayChannlesTypeEnum ChannlesType { get; set; } + +} + +public class QueryUserAccountListInput : ChannelsBaseInput +{ + /// <summary> + /// 鐢ㄦ埛Id + /// </summary> + public Guid? UserId { get; set; } + + + public LifePayOrderTypeEnum? LifePayOrderType { get; set; } +} + +public class QueryUserAccountAllListInput : ChannelsBaseInput +{ + /// <summary> + /// 鐢ㄦ埛Id + /// </summary> + public Guid? UserId { get; set; } + + public LifePayOrderTypeEnum? LifePayOrderType { get; set; } +} + +public class AddUpdateUserAccountInput : ChannelsBaseInput +{ + public Guid? Id { get; set; } + + /// <summary> + /// 鐢ㄦ埛缂栧彿 + /// </summary> + public Guid UserId { get; set; } + + /// <summary> + /// 鐢熸椿缂磋垂绫诲瀷 + /// </summary> + public LifePayOrderTypeEnum LifePayType { get; set; } + + /// <summary> + /// 杩愯惀鍟� + /// </summary> + [Required(ErrorMessage = "杩愯惀鍟嗕笉鑳戒负绌猴紱")] + public string Operators { get; set; } + + /// <summary> + /// 鎵嬫満鍙�/鎴峰彿 + /// </summary> + public string Content { get; set; } + + /// <summary> + /// 鐪� + /// </summary> + public string Province { get; set; } + + /// <summary> + /// 甯� + /// </summary> + public string City { get; set; } + + /// <summary> + /// 鎷撳睍瀛楁锛堢數璐圭被鍨嬶級 + /// </summary> + public string ExtraProperties { get; set; } + + /// <summary> + /// 澶囨敞 + /// </summary> + [StringLength(30, ErrorMessage = "澶囨敞淇℃伅浠呮敮鎸佸~鍐�30涓瓧绗︺��")] + public string Remark { get; set; } = string.Empty; } \ No newline at end of file diff --git a/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs b/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs index 62aed58..2a06944 100644 --- a/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs +++ b/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs @@ -1,10 +1,6 @@ 锘縰sing LifePayment.Domain.Shared; using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using ZeroD.Util; +using ZeroD.Base.Web.Models; namespace LifePayment.Application.Contracts; @@ -13,6 +9,17 @@ public LifePayRateTypeEnum RateType { get; set; } public decimal Rate { get; set; } + + public Guid Id { get; set; } +} + +public class LifePayRateInput +{ + public LifePayRateTypeEnum RateType { get; set; } + + public decimal Rate { get; set; } + + public Guid? Id { get; set; } } public class UserListOutput @@ -44,6 +51,11 @@ /// 鐢熸椿缂磋垂鏀粯绫诲瀷 /// </summary> public LifePayTypeEnum? LifePayType { get; set; } + + /// <summary> + /// 娓犻亾鍚嶇О + /// </summary> + public string ChannelName { get; set; } /// <summary> /// 璁㈠崟绫诲瀷 @@ -104,6 +116,120 @@ /// 涓嬪崟鏃堕棿 /// </summary> public DateTime CreationTime { get; set; } + + /// <summary> + /// 閫�娆炬椂闂� + /// </summary> + public DateTime? RefundTime { get; set; } + + + public string RefundApplyRemark { get; set; } + + public string RefundCheckRemark { get; set; } + + public string ACOOLYOrderNo { get; set; } + +} + +public class LifePayOrderListTemplate +{ + + [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> + public DateTime CreationTime { get; set; } + + [Name("涓嬪崟鏃堕棿")] + public string CreationTimeStr { get; set; } + + [Name("骞冲彴璁㈠崟鍙�")] + public string OrderNo { get; set; } + + /// <summary> + /// 鍏呭�奸噾棰� + /// </summary> + public decimal RechargeAmount { get; set; } + + [Name("鍏呭�奸噾棰�")] + public string RechargeAmountStr { get; set; } + + /// <summary> + /// 浼樻儬閲戦 + /// </summary> + public decimal DiscountAmount { get; set; } + + /// <summary> + /// 瀹炰粯閲戦 + /// </summary> + public decimal PayAmount { get; set; } + + [Name("瀹炰粯閲戦")] + public string PayAmountStr { get; set; } + + /// <summary> + /// 鏀粯鏃堕棿 + /// </summary> + public DateTime? PayTime { get; set; } + + [Name("鏀粯鏃堕棿")] + public string PayTimeStr { get; set; } + + [Name("鏀粯娓犻亾")] + public string LifePayTypeStr { get; set; } + + [Name("澶栭儴璁㈠崟鍙�")] + public string ACOOLYOrderNo { get; set; } + + /// <summary> + /// 鏀粯鐘舵�� + /// </summary> + public LifePayStatusEnum PayStatus { get; set; } + + [Name("鏀粯鐘舵��")] + public string PayStatusStr { get; set; } + + [Name("鏀粯娓犻亾娴佹按鍙�")] + public string OutOrderNo { get; set; } + + [Name("閫�娆剧敵璇�")] + public string RefundApplyRemark { get; set; } + + /// <summary> + /// 璁㈠崟鐘舵�� + /// </summary> + public LifePayOrderStatusEnum LifePayOrderStatus { get; set; } + + [Name("璁㈠崟鐘舵��")] + public string LifePayOrderStatusStr { get; set; } + + /// <summary> + /// 瀹屾垚鏃堕棿 + /// </summary> + public DateTime? FinishTime { get; set; } + + [Name("瀹屾垚鏃堕棿")] + public string FinishTimeStr { get; set; } + + + + + } public class UserLifePayOrderOutput @@ -174,9 +300,100 @@ /// 閫�娆炬椂闂� /// </summary> public DateTime? RefundTime { get; set; } + + /// <summary> + /// 閫�娆惧嚟璇� + /// </summary> + public string RefundCredentialsImgUrl { get; set; } + + + public string RefundApplyRemark { get; set; } + + public string RefundCheckRemark { get; set; } + /// <summary> + /// 娓犻亾娴佹按鍙� + /// </summary> + public string ACOOLYOrderNo { get; set; } } public class CreateLifePayOrderOutput { public string OrderNo { get; set; } +} + +public class UserLifePayOrderRefundOutput +{ + /// <summary> + /// 璁㈠崟缂栧彿 + /// </summary> + public Guid Id { get; set; } + + /// <summary> + /// 璁㈠崟鍙� + /// </summary> + public string OrderNo { get; set; } + + /// <summary> + /// 閫�娆惧師鍥� + /// </summary> + public string RefundApplyRemark { get; set; } + + /// <summary> + /// 鍚庡彴濉啓鐨勯┏鍥炲師鍥� + /// </summary> + public string RefundCheckRemark { get; set; } + + /// <summary> + /// 璁㈠崟鐘舵�� + /// </summary> + public LifePayOrderStatusEnum LifePayOrderStatus { get; set; } +} + +public class UserAccountOutput +{ + + public Guid Id { get; set; } + + + /// <summary> + /// 鐢熸椿缂磋垂绫诲瀷 + /// </summary> + public LifePayOrderTypeEnum LifePayType { get; set; } + + /// <summary> + /// 杩愯惀鍟� + /// </summary> + public string Operators { get; set; } + + /// <summary> + /// 鎵嬫満鍙�/鎴峰彿 + /// </summary> + public string Content { get; set; } + + /// <summary> + /// 鐪� + /// </summary> + public string Province { get; set; } + + /// <summary> + /// 甯� + /// </summary> + public string City { get; set; } + + /// <summary> + /// 鎷撳睍瀛楁锛堢數璐圭被鍨嬶級 + /// </summary> + public string ExtraProperties { get; set; } + + /// <summary> + /// 澶囨敞 + /// </summary> + public string Remark { get; set; } + + /// <summary> + /// 鍒涘缓鏃堕棿 + /// </summary> + public DateTime CreationTime { get; set; } + + public bool IsDeleted { get; set; } } \ No newline at end of file diff --git a/LifePayment/LifePayment.Application/LifePay/LifePayService.cs b/LifePayment/LifePayment.Application/LifePay/LifePayService.cs index 8f950fe..fc3e010 100644 --- a/LifePayment/LifePayment.Application/LifePay/LifePayService.cs +++ b/LifePayment/LifePayment.Application/LifePay/LifePayService.cs @@ -26,6 +26,8 @@ using ZeroD.Util.Fadd; using static LifePayment.Domain.Shared.LifePaymentConstant; using static IdentityServer4.Models.IdentityResources; +using Volo.Abp.Data; +using Z.EntityFramework.Plus; namespace LifePayment.Application; @@ -37,6 +39,9 @@ private readonly IRepository<LifePayRate, Guid> _lifePayRateRepository; private readonly IRepository<LifePayOrder, Guid> _lifePayOrderRepository; private readonly IRepository<LifePayUser, Guid> _lifePayUserRepository; + private readonly IRepository<LifePayChannles, Guid> _lifePayChannlesRep; + private readonly IRepository<LifePayAccount, Guid> _lifePayAccount; + private readonly IDataFilter dataFilter; private readonly IAliPayApi _aliPayApi; private readonly IWxPayApi _wxPayApi; @@ -52,7 +57,10 @@ IRepository<LifePayUser, Guid> lifePayUserRepository, IAliPayApi aliPayApi, IWxPayApi wxPayApi, - IOptions<WxPayOption> wxPayOptions) + IOptions<WxPayOption> wxPayOptions, + IRepository<LifePayChannles, Guid> lifePayChannlesRep, + IRepository<LifePayAccount, Guid> lifePayAccount, + IDataFilter dataFilter) { _logger = logger; _aCOOLYManager = aCOOLYManager; @@ -63,6 +71,9 @@ _wxPayApi = wxPayApi; _wxPayOptions = wxPayOptions.Value; _distributedEventBus = distributedEventBus; + _lifePayChannlesRep = lifePayChannlesRep; + _lifePayAccount = lifePayAccount; + this.dataFilter = dataFilter; } #region 鏌ヨ @@ -97,12 +108,31 @@ } /// <summary> + /// 鑾峰彇璇濊垂闈㈠�� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + public async Task<GasParValueResponse> GetGasParValue() + { + return await _aCOOLYManager.GasParValue(new GasParValueRequestInput()); + } + + /// <summary> + /// 鑾峰彇鐕冩皵鏀寔鍟嗘埛 + /// </summary> + /// <returns></returns> + public async Task<GasOrgTypeValueResponse> GetGasOrgType() + { + return await _aCOOLYManager.GasOrgType(new GasOrgTypeRequestInput()); + } + + /// <summary> /// 鑾峰彇鎶樻墸 /// </summary> /// <returns></returns> public async Task<List<LifePayRateListOutput>> GetRate() { - return await _lifePayRateRepository.Select(x => new LifePayRateListOutput() { Rate = x.Rate, RateType = x.RateType }) + return await _lifePayRateRepository.Where(x => x.IsDeleted == false).Select(x => new LifePayRateListOutput() { Id = x.Id, Rate = x.Rate, RateType = x.RateType }) .ToListAsync(); } @@ -125,42 +155,82 @@ } /// <summary> + /// 鑾峰彇鐢ㄦ埛鎴峰彿鍒嗛〉鏁版嵁 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + public async Task<PageOutput<UserAccountOutput>> GetAccountPage(QueryUserAccountListInput input) + { + using (dataFilter.Disable<ISoftDelete>()) + { + return await _lifePayAccount.Where(x => x.UserId == input.UserId) + .WhereIf(input.LifePayOrderType.HasValue, x => x.LifePayType == input.LifePayOrderType) + .OrderByDescending(x => x.CreationTime) + .Select(x => + new UserAccountOutput + { + Id = x.Id, + LifePayType = x.LifePayType, + Content = x.Content, + CreationTime = x.CreationTime, + Remark = x.Remark, + Operators = x.Operators, + Province = x.Province, + City = x.City, + ExtraProperties = x.ExtraProperties, + IsDeleted = x.IsDeleted + }) + .GetPageResult(input.PageModel); + } + + } + + /// <summary> /// 鑾峰彇璁㈠崟鍒嗛〉鏁版嵁 /// </summary> /// <param name="input"></param> /// <returns></returns> public async Task<PageOutput<LifePayOrderListOutput>> GetLifePayOrderPage(QueryLifePayOrderListInput input) { - return await _lifePayOrderRepository.Where(x => x.PayStatus != LifePayStatusEnum.鏈敮浠�) - .WhereIf(input.BeginFinishTime.HasValue, x => x.FinishTime >= input.BeginFinishTime) + var result = await (from a in _lifePayOrderRepository.Where(x => x.PayStatus != LifePayStatusEnum.鏈敮浠�) + .WhereIf(input.BeginFinishTime.HasValue, x => x.FinishTime >= input.BeginFinishTime) .WhereIf(input.EndFinishTime.HasValue, x => x.FinishTime <= input.EndFinishTime) .WhereIf(input.BeginPayTime.HasValue, x => x.PayTime >= input.BeginPayTime) + .WhereIf(input.LifePayType.HasValue, x => x.LifePayType == input.LifePayType) .WhereIf(input.EndPayTime.HasValue, x => x.PayTime <= input.EndPayTime) .WhereIf(input.LifePayOrderStatus.HasValue, x => x.LifePayOrderStatus == input.LifePayOrderStatus.Value) .WhereIf(input.PayStatus.HasValue, x => x.PayStatus == input.PayStatus.Value) .WhereIf(input.LifePayOrderType.HasValue, x => x.LifePayOrderType == input.LifePayOrderType.Value) .WhereIf(input.UserId.HasValue, x => x.UserId == input.UserId.Value) - .Select(x => - new LifePayOrderListOutput - { - DiscountAmount = x.DiscountAmount, - FinishTime = x.FinishTime, - Id = x.Id, - LifePayOrderStatus = x.LifePayOrderStatus, - LifePayOrderType = x.LifePayOrderType, - LifePayType = x.LifePayType, - OrderNo = x.OrderNo, - PayAmount = x.PayAmount, - PhoneNumber = x.PhoneNumber, - RechargeAmount = x.RechargeAmount, - UserId = x.UserId, - OutOrderNo = x.OutOrderNo, - PayStatus = x.PayStatus, - PayTime = x.PayTime, - RefundCredentialsImgUrl = x.RefundCredentialsImgUrl, - CreationTime = x.CreationTime - }) - .GetPageResult(input.PageModel); + .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.Id 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, + RefundTime = a.RefundTime, + ChannelName = b.ChannlesName + }).GetPageResult(input.PageModel); + + return result; } /// <summary> @@ -199,10 +269,45 @@ PayStatus = x.PayStatus, PayTime = x.PayTime, OrderParamDetailJsonStr = x.OrderParamDetailJsonStr, + RefundCredentialsImgUrl = x.RefundCredentialsImgUrl.GetOssPath(), CreationTime = x.CreationTime, - RefundTime = x.RefundTime + RefundCheckRemark = x.RefundCheckRemark, + RefundApplyRemark = x.RefundApplyRemark, + RefundTime = x.RefundTime, + ACOOLYOrderNo = x.ACOOLYOrderNo, }) .GetPageResult(input.PageModel); + } + + public async Task<UserLifePayOrderOutput> GetUserLifePayOrderDetail(string orderNo) + { + var result = await _lifePayOrderRepository.Where(x => x.OrderNo == orderNo) + .Select(x => + new UserLifePayOrderOutput + { + DiscountAmount = x.DiscountAmount, + FinishTime = x.FinishTime, + Id = x.Id, + LifePayOrderStatus = x.LifePayOrderStatus, + LifePayOrderType = x.LifePayOrderType, + LifePayType = x.LifePayType, + OrderNo = x.OrderNo, + PayAmount = x.PayAmount, + RechargeAmount = x.RechargeAmount, + PayStatus = x.PayStatus, + PayTime = x.PayTime, + OrderParamDetailJsonStr = x.OrderParamDetailJsonStr, + RefundCredentialsImgUrl = x.RefundCredentialsImgUrl.GetOssPath(), + CreationTime = x.CreationTime, + RefundCheckRemark = x.RefundCheckRemark, + RefundApplyRemark = x.RefundApplyRemark, + RefundTime = x.RefundTime, + ACOOLYOrderNo = x.ACOOLYOrderNo, + }) + .FirstOrDefaultAsync(); + CheckExtensions.IfTrueThrowUserFriendlyException(result == null, "璁㈠崟涓嶅瓨鍦�"); + + return result; } /// <summary> @@ -217,6 +322,184 @@ .FirstOrDefaultAsync(); } + public async Task<PageOutput<CreateEditPayChannelsInput>> GetLifePayChannlesPage(PageInput input) + { + + return await _lifePayChannlesRep.Select(x => + new CreateEditPayChannelsInput + { + Id = x.Id, + ChannlesRate = x.ChannlesRate, + ChannlesName = x.ChannlesName, + ChannlesNum = x.ChannlesNum, + Status = x.Status, + SwitchType = x.SwitchType, + ChannlesType = x.ChannlesType, + }) + .GetPageResult(input.PageModel); + } + + public async Task<CreateEditPayChannelsInput> GetLifePayChannlesDto(Guid id) + { + return await _lifePayChannlesRep.Where(x => x.Id == id).Select(x => + new CreateEditPayChannelsInput + { + Id = x.Id, + ChannlesRate = x.ChannlesRate, + ChannlesName = x.ChannlesName, + ChannlesNum = x.ChannlesNum, + Status = x.Status, + SwitchType = x.SwitchType, + ChannlesType = x.ChannlesType, + }).FirstOrDefaultAsync(); + } + + public async Task<CreateEditPayChannelsInput> GetLifePayChannlesDtoByNum(string channlesNum) + { + var result = await _lifePayChannlesRep.Where(x => x.ChannlesNum == channlesNum && x.Status == LifePayChannelsStatsEnum.鍚敤).Select(x => + new CreateEditPayChannelsInput + { + Id = x.Id, + ChannlesRate = x.ChannlesRate, + ChannlesName = x.ChannlesName, + ChannlesNum = x.ChannlesNum, + Status = x.Status, + SwitchType = x.SwitchType, + ChannlesType = x.ChannlesType, + }).FirstOrDefaultAsync(); + return result; + } + + public async Task<UserLifePayOrderRefundOutput> GetUserLifePayOrderRefund(Guid id) + { + var order = await _lifePayOrderRepository.Where(x => x.Id == id).Select(x => + new UserLifePayOrderRefundOutput + { + Id = x.Id, + OrderNo = x.OrderNo, + RefundCheckRemark = x.RefundCheckRemark, + RefundApplyRemark = x.RefundApplyRemark, + LifePayOrderStatus = x.LifePayOrderStatus, + }).FirstOrDefaultAsync(); + + CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "鏈壘鍒拌鍗曚俊鎭�"); + + return order; + } + + public async Task<PageOutput<UserAccountOutput>> GetUserAccountList(QueryUserAccountListInput input) + { + if (!input.UserId.HasValue) + { + return new PageOutput<UserAccountOutput>(); + } + + var result = await _lifePayAccount.Where(x => x.UserId == input.UserId && x.IsDeleted == false) + .WhereIf(input.LifePayOrderType.HasValue, x => x.LifePayType == input.LifePayOrderType) + .OrderByDescending(x => x.CreationTime) + .Select(x => + new UserAccountOutput + { + Id = x.Id, + LifePayType = x.LifePayType, + Content = x.Content, + CreationTime = x.CreationTime, + Remark = x.Remark, + Operators = x.Operators, + Province = x.Province, + City = x.City, + ExtraProperties = x.ExtraProperties, + }) + .GetPageResult(input.PageModel); + return result; + } + + public async Task<List<UserAccountOutput>> GetUserAccountAllList(QueryUserAccountAllListInput input) + { + if (!input.UserId.HasValue) + { + return new List<UserAccountOutput>(); + } + + var result = await _lifePayAccount.Where(x => x.UserId == input.UserId && x.IsDeleted == false) + .WhereIf(input.LifePayOrderType.HasValue, x => x.LifePayType == input.LifePayOrderType) + .OrderByDescending(x => x.CreationTime) + .Select(x => + new UserAccountOutput + { + Id = x.Id, + LifePayType = x.LifePayType, + Content = x.Content, + CreationTime = x.CreationTime, + Remark = x.Remark, + Operators = x.Operators, + Province = x.Province, + City = x.City, + ExtraProperties = x.ExtraProperties, + }).ToListAsync(); + return result; + } + + public async Task<UserAccountOutput> GetUserAccountDetail(Guid id) + { + var result = await _lifePayAccount.Where(x => x.Id == id) + .OrderByDescending(x => x.CreationTime) + .Select(x => + new UserAccountOutput + { + Id = x.Id, + LifePayType = x.LifePayType, + Content = x.Content, + CreationTime = x.CreationTime, + Remark = x.Remark, + Operators = x.Operators, + Province = x.Province, + City = x.City, + ExtraProperties = x.ExtraProperties, + }).FirstOrDefaultAsync(); + + CheckExtensions.IfTrueThrowUserFriendlyException(result == null, "鏈壘鍒版埛鍙蜂俊鎭�"); + return result; + } + + public async Task<List<LifePayOrderListTemplate>> GetLifePayOrderPageExport(QueryLifePayOrderListInput input) + { + var result = await (await GetLifePayOrderListFilter(input)).Select(x => new LifePayOrderListTemplate + { + DiscountAmount = x.DiscountAmount, + FinishTime = x.FinishTime, + LifePayOrderStatus = x.LifePayOrderStatus, + LifePayOrderType = x.LifePayOrderType, + LifePayType = x.LifePayType, + OrderNo = x.OrderNo, + PayAmount = x.PayAmount, + PhoneNumber = x.PhoneNumber, + RechargeAmount = x.RechargeAmount, + OutOrderNo = x.OutOrderNo, + PayStatus = x.PayStatus, + PayTime = x.PayTime, + ACOOLYOrderNo = x.ACOOLYOrderNo, + CreationTime = x.CreationTime, + RefundApplyRemark = x.RefundApplyRemark, + ChannelName = x.ChannelName + }).OrderByDescending(r => r.CreationTime).ToListAsync(); + var i = 0; + result.ForEach(s => + { + s.SerialNumber = ++i; + s.LifePayOrderTypeStr = s.LifePayOrderType.GetDescription(); + s.CreationTimeStr = s.CreationTime.ToString(LifePaymentConstant.DateTimeFormatStr.yyyyMMddHHmm); + s.RechargeAmountStr = s.RechargeAmount.ToString("F2"); + s.PayAmountStr = s.PayAmount.ToString("F2"); + s.PayTimeStr = !s.PayTime.HasValue ? string.Empty : s.PayTime.Value.ToString(LifePaymentConstant.DateTimeFormatStr.yyyyMMddHHmm); + s.LifePayTypeStr = s.LifePayType.GetDescription(); + s.PayStatusStr = s.PayStatus.GetDescription(); + s.LifePayOrderStatusStr = s.LifePayOrderStatus.GetDescription(); + s.FinishTimeStr = !s.FinishTime.HasValue ? string.Empty : s.FinishTime.Value.ToString(LifePaymentConstant.DateTimeFormatStr.yyyyMMddHHmm); + }); + return result; + } + #endregion #region 鎿嶄綔 @@ -228,8 +511,14 @@ /// <returns></returns> public async Task<CreateLifePayOrderOutput> CreateLifePayPhoneOrder(CreateLifePayOrderInput<LifePhoneData> input) { + CheckExtensions.IfTrueThrowUserFriendlyException(input.ProductData.IspCode == "dianxin" && string.IsNullOrEmpty(input.ProductData.Name), "鐢典俊鎵嬫満鍙峰繀濉満涓诲悕"); + + var user = await _lifePayUserRepository.FirstOrDefaultAsync(x => x.Id == input.UserId); CheckExtensions.IfTrueThrowUserFriendlyException(user == null, "鐢ㄦ埛涓嶅瓨鍦紝璇峰厛鐧诲綍鍐嶆搷浣�"); + + var channle = await GetLifePayChannlesDtoByNum(input.ChannelId); + CheckExtensions.IfTrueThrowUserFriendlyException(channle == null, "娓犻亾涓嶅瓨鍦�"); var rate = await GetRate(); CheckExtensions.IfTrueThrowUserFriendlyException(rate.IsNullOrEmpty(), "鏈厤缃姌鎵�"); @@ -249,6 +538,7 @@ PayAmount = amount.PayAmont, DiscountAmount = amount.DiscountAmount, RechargeAmount = amount.RechargeAmount, + ChannelId = channle.Id }; await CreateLifePayOrder(orderInput); @@ -270,6 +560,10 @@ var user = await _lifePayUserRepository.FirstOrDefaultAsync(x => x.Id == input.UserId); CheckExtensions.IfTrueThrowUserFriendlyException(user == null, "鐢ㄦ埛涓嶅瓨鍦紝璇峰厛鐧诲綍鍐嶆搷浣�"); + var channle = await GetLifePayChannlesDtoByNum(input.ChannelId); + CheckExtensions.IfTrueThrowUserFriendlyException(channle == null, "娓犻亾涓嶅瓨鍦�"); + CheckExtensions.IfTrueThrowUserFriendlyException(channle.Status == LifePayChannelsStatsEnum.绂佺敤, "娓犻亾宸茶绂佺敤"); + var rate = await GetRate(); CheckExtensions.IfTrueThrowUserFriendlyException(rate.IsNullOrEmpty(), "鏈厤缃姌鎵�"); @@ -288,6 +582,51 @@ PayAmount = amount.PayAmont, DiscountAmount = amount.DiscountAmount, RechargeAmount = amount.RechargeAmount, + ChannelId = channle.Id + }; + + await CreateLifePayOrder(orderInput); + + var result = new CreateLifePayOrderOutput() + { + OrderNo = orderInput.OrderNo, + }; + return result; + } + + /// <summary> + /// 鍒涘缓鐢熸椿缂磋垂鐕冩皵璁㈠崟 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + public async Task<CreateLifePayOrderOutput> CreateLifePayGasOrder(CreateLifePayOrderInput<LifeGasData> input) + { + var user = await _lifePayUserRepository.FirstOrDefaultAsync(x => x.Id == input.UserId); + CheckExtensions.IfTrueThrowUserFriendlyException(user == null, "鐢ㄦ埛涓嶅瓨鍦紝璇峰厛鐧诲綍鍐嶆搷浣�"); + + var channle = await GetLifePayChannlesDtoByNum(input.ChannelId); + CheckExtensions.IfTrueThrowUserFriendlyException(channle == null, "娓犻亾涓嶅瓨鍦�"); + CheckExtensions.IfTrueThrowUserFriendlyException(channle.Status == LifePayChannelsStatsEnum.绂佺敤, "娓犻亾宸茶绂佺敤"); + + var rate = await GetRate(); + CheckExtensions.IfTrueThrowUserFriendlyException(rate.IsNullOrEmpty(), "鏈厤缃姌鎵�"); + + var amount = CalculateAmount(input.ProductData.ParValue, rate.FirstOrDefault(x => x.RateType == LifePayRateTypeEnum.榛樿鐕冩皵鎶樻墸).Rate); + + var orderInput = new CreateLifePayOrderInput + { + OrderNo = CreateOrderNo(), + LifePayOrderStatus = LifePayOrderStatusEnum.寰呯‘璁�, + LifePayOrderType = LifePayOrderTypeEnum.鐕冩皵璁㈠崟, + // LifePayType = input.LifePayType, + OrderParamDetailJsonStr = JsonConvert.SerializeObject(input.ProductData), + UserId = user.Id, + PayStatus = LifePayStatusEnum.鏈敮浠�, + PhoneNumber = user.PhoneNumber, + PayAmount = amount.PayAmont, + DiscountAmount = amount.DiscountAmount, + RechargeAmount = amount.RechargeAmount, + ChannelId = channle.Id }; await CreateLifePayOrder(orderInput); @@ -363,6 +702,9 @@ case LifePayOrderTypeEnum.鐢佃垂璁㈠崟: desc += "鐢佃垂"; break; + case LifePayOrderTypeEnum.鐕冩皵璁㈠崟: + desc += "鐕冩皵"; + break; default: break; } @@ -373,12 +715,10 @@ // var result = await PayTransactionsJsAPI(input.OpenId, input.Attach, order.PayAmount, input.OrderNo, desc); - var result = await PayTransactionsJsAPI(input.OpenId, input.Attach, order.PayAmount, input.OrderNo, desc); + var result = await PayTransactionsJsAPI(input.OpenId, input.PayAppId, input.Attach, order.PayAmount, input.OrderNo, desc); return result; //var payUrl = await GetPayQRCode(order.LifePayType.Value, order.OrderNo, desc, 0.01m, ip, input.H5Type); //var payUrl = await GetPayQRCode(order.LifePayType.Value, order.OrderNo, desc, order.PayAmount, ip, input.H5Type); - - } @@ -454,14 +794,46 @@ return (result.Code, requestInput.RequestNo, result.ElectricChargeOrder.BusiOrderNo); } - public async Task<ModelPaymentMiniPay> PayTransactionsJsAPI(string openid, string order_guid, decimal amount, string outTradeNo, string description) + /// <summary> + /// 鍒涘缓ACOOLY鐕冩皵璁㈠崟 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + public async Task<(string Code, string RequestNo, string ACOOLYOrderNo)> CreateACOOLYGasOrder(LifeGasData input, string orderNo) { - string time_expire = DateTime.Now.AddMinutes(5).ToString("yyyy-MM-ddTHH:mm:ss") + "+08:00";//璁㈠崟澶辨晥鏃堕棿 + var requestInput = new ConfirmGasOrderRequestInput() + { + GasOrgType = input.GasOrgType, + ParValue = input.ParValue, + GasAccount = input.GasAccount, + OutOrderNo = orderNo, + AreaName = input.Province + "-" + input.City + }; + var result = await _aCOOLYManager.ConfirmGasOrder(requestInput); +#if DEBUG + + _logger.LogInformation($"CreateACOOLYGasOrder:{JsonConvert.SerializeObject(result)}"); + +#endif + + CheckExtensions.IfTrueThrowUserFriendlyException(!result.Success || (result.Code != ACOOLYConstant.Code.SUCCESS && result.Code != ACOOLYConstant.Code.PROCESSING), + "璋冪敤ACOOLY鎺ュ彛ConfirmElectricOrder杩斿洖閿欒:" + JsonConvert.SerializeObject(result)); + + return (result.Code, requestInput.RequestNo, result.GasChargeOrder.BusiOrderNo); + } + + public async Task<ModelPaymentMiniPay> PayTransactionsJsAPI(string openid, string appId, string order_guid, decimal amount, string outTradeNo, string description) + { + string time_expire = DateTime.Now.AddMinutes(5).ToString("yyyy-MM-ddTHH:mm:ss") + "+08:00"; /// 璁㈠崟澶辨晥鏃堕棿 + if (string.IsNullOrEmpty(appId)) + { + appId = _wxPayOptions.AppID; + } + ModelMiniPayRequest req = new ModelMiniPayRequest { - TimeExpire = time_expire, - Appid = _wxPayOptions.AppID, + Appid = appId, Mchid = _wxPayOptions.Mchid, Attach = order_guid, Description = description, @@ -486,7 +858,7 @@ if (res != null) { - string paytext = BuildSignByPay(_wxPayOptions.AppID, timestamp, nonce, package); + string paytext = BuildSignByPay(appId, timestamp, nonce, package); string paysign = _wxPayApi.GeneratePaySignByKey(paytext); info.Timestamp = timestamp.ToString(); @@ -542,6 +914,9 @@ break; case LifePayOrderTypeEnum.鐢佃垂璁㈠崟: result = await CreateACOOLYElectricOrder(JsonConvert.DeserializeObject<LifeElectricData>(order.OrderParamDetailJsonStr), order.OrderNo); + break; + case LifePayOrderTypeEnum.鐕冩皵璁㈠崟: + result = await CreateACOOLYGasOrder(JsonConvert.DeserializeObject<LifeGasData>(order.OrderParamDetailJsonStr), order.OrderNo); break; default: break; @@ -613,14 +988,17 @@ return; } - if (order.LifePayOrderStatus != LifePayOrderStatusEnum.宸插け璐� && order.PayStatus != LifePayStatusEnum.寰呴��娆�) + if (order.LifePayOrderStatus != LifePayOrderStatusEnum.宸插け璐� && order.PayStatus != LifePayStatusEnum.寰呴��娆� && order.LifePayOrderStatus != LifePayOrderStatusEnum.閫�娆惧緟瀹℃牳) { throw new UserFriendlyException("褰撳墠璁㈠崟鐘舵�佹棤娉曢��娆�"); } order.PayStatus = LifePayStatusEnum.宸查��娆�; + order.LifePayOrderStatus = LifePayOrderStatusEnum.宸查��娆�; order.RefundCredentialsImgUrl = input.RefundCredentialsImgUrl; + order.RefundCheckRemark = input.RefundCheckRemark; order.RefundTime = DateTime.Now; + order.RefundCheckUserId = CurrentUser.Id; await _lifePayOrderRepository.UpdateAsync(order); @@ -631,6 +1009,227 @@ #endregion } + + /// <summary> + /// 鐢ㄦ埛鍙戣捣鐢熸椿缂磋垂閫�娆� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + /// <exception cref="UserFriendlyException"></exception> + public async Task RefundUserLifePayOrder(RefundUserLifePayOrderInput input) + { + var order = await _lifePayOrderRepository.FirstOrDefaultAsync(x => x.Id == input.Id); + CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "璁㈠崟涓嶅瓨鍦�"); + if (order.UserId != input.UserId) + { + throw new UserFriendlyException("闈炵敤鎴锋湰浜洪��娆�"); + } + + if (order.PayStatus == LifePayStatusEnum.宸查��娆�) + { + return; + } + + if (order.LifePayOrderStatus != LifePayOrderStatusEnum.寰呯‘璁� && order.LifePayOrderStatus != LifePayOrderStatusEnum.宸插け璐� + && order.PayStatus != LifePayStatusEnum.宸叉敮浠�) + { + throw new UserFriendlyException("褰撳墠璁㈠崟鐘舵�佹棤娉曠敵璇烽��娆�"); + } + + order.LifePayOrderStatus = LifePayOrderStatusEnum.閫�娆惧緟瀹℃牳; + order.RefundApplyRemark = input.RefundApplyRemark; + order.RefundTime = DateTime.Now; + + await _lifePayOrderRepository.UpdateAsync(order); + } + + public async Task<int> AddUpdateUserAccount(AddUpdateUserAccountInput input) + { + if (input.Id.HasValue) + { + var userAccount = await _lifePayAccount.Where(x => x.UserId == input.UserId && x.Id == input.Id) + .FirstOrDefaultAsync(); + CheckExtensions.IfTrueThrowUserFriendlyException(userAccount == null, "鎴峰彿涓嶅瓨鍦�"); + var repeatAccountContent = await _lifePayAccount.Where(x => x.UserId == input.UserId && x.LifePayType == input.LifePayType && x.Content == input.Content && x.Id != input.Id) + .FirstOrDefaultAsync(); + CheckExtensions.IfTrueThrowUserFriendlyException(repeatAccountContent != null, "鎴峰彿宸插瓨鍦�"); + + userAccount.LifePayType = input.LifePayType; + userAccount.Content = input.Content; + userAccount.Province = input.Province; + userAccount.City = input.City; + userAccount.Remark = input.Remark; + userAccount.Operators = input.Operators; + userAccount.ExtraProperties = input.ExtraProperties; + } + else + { + + var repeatAccountContent = await _lifePayAccount.Where(x => x.UserId == input.UserId && x.LifePayType == input.LifePayType && x.Content == input.Content) + .FirstOrDefaultAsync(); + CheckExtensions.IfTrueThrowUserFriendlyException(repeatAccountContent != null, "鎴峰彿宸插瓨鍦�"); + var userAccount = new LifePayAccount + { + Id = Guid.NewGuid(), + UserId = input.UserId, + Content = input.Content, + Province = input.Province, + LifePayType = input.LifePayType, + City = input.City, + Remark = input.Remark, + Operators = input.Operators, + ExtraProperties = input.ExtraProperties, + }; + await _lifePayAccount.InsertAsync(userAccount); + } + + return Constant.SUCCESS; + } + + /// <summary> + /// 鐢ㄦ埛鍒犻櫎鎴峰彿淇℃伅 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + public async Task<int> DeleteUserAccount(Guid id) + { + var userAccount = await _lifePayAccount.Where(x => x.Id == id) + .FirstOrDefaultAsync(); + CheckExtensions.IfTrueThrowUserFriendlyException(userAccount == null, "鎴峰彿涓嶅瓨鍦�"); + userAccount.DeleterId = userAccount.UserId; + userAccount.DeletionTime = DateTime.Now; + userAccount.IsDeleted = true; + return Constant.SUCCESS; + } + + /// <summary> + /// 閫�娆鹃┏鍥� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + /// <exception cref="UserFriendlyException"></exception> + public async Task RejectRefundLifePayOrder(RefundLifePayOrderInput input) + { + var order = await _lifePayOrderRepository.FirstOrDefaultAsync(x => x.Id == input.Id); + CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "璁㈠崟涓嶅瓨鍦�"); + + if (order.PayStatus == LifePayStatusEnum.宸查��娆�) + { + return; + } + + if ((order.LifePayOrderStatus == LifePayOrderStatusEnum.宸插け璐� && order.PayStatus == LifePayStatusEnum.寰呴��娆�) || + order.LifePayOrderStatus == LifePayOrderStatusEnum.閫�娆惧緟瀹℃牳 || order.LifePayOrderStatus == LifePayOrderStatusEnum.寰呯‘璁�) + { + order.LifePayOrderStatus = LifePayOrderStatusEnum.閫�娆惧け璐�; + order.RefundCheckRemark = input.RefundCheckRemark; + order.RefundCheckUserId = CurrentUser.Id; + + await _lifePayOrderRepository.UpdateAsync(order); + + #region 璁板綍鏃ュ織 + + await PublishLifePayOrderHistoryEvent("閫�娆鹃┏鍥�", "閫�娆�", order.Id); + + #endregion + } + else + { + throw new UserFriendlyException("褰撳墠璁㈠崟鐘舵�佹棤娉曢��娆�"); + } + + + } + + public async Task CreateEditPayChannels(CreateEditPayChannelsInput input) + { + if (input.Id.HasValue) + { + var dto = await _lifePayChannlesRep.FirstOrDefaultAsync(r => r.Id == input.Id.Value); + CheckExtensions.IfTrueThrowUserFriendlyException(dto == null, "鏈幏鍙栧埌娓犻亾鎶樻墸鏁版嵁"); + dto.ChannlesName = input.ChannlesName; + dto.ChannlesNum = input.ChannlesNum; + dto.ChannlesRate = input.ChannlesRate; + dto.SwitchType = input.SwitchType; + dto.ChannlesType = input.ChannlesType; + dto.Status = input.Status; + #region 璁板綍鏃ュ織 + + await PublishLifePayOrderHistoryEvent("娓犻亾绠$悊", "缂栬緫", input.Id.Value, TableType.LifePayChannles); + + #endregion + } + else + { + CheckExtensions.IfTrueThrowUserFriendlyException(input.ChannlesRate < 0.01m, "娓犻亾鎶樻墸璁剧疆閿欒"); + input.Id = Guid.NewGuid(); + var entity = ObjectMapper.Map<CreateEditPayChannelsInput, LifePayChannles>(input); + await _lifePayChannlesRep.InsertAsync(entity); + + #region 璁板綍鏃ュ織 + + await PublishLifePayOrderHistoryEvent("娓犻亾绠$悊", "鏂板", input.Id.Value, TableType.LifePayChannles); + + #endregion + } + + + } + + public async Task SetLifePayChannelsStatus(Guid id, LifePayChannelsStatsEnum status) + { + await _lifePayChannlesRep.Where(r => r.Id == id).UpdateAsync(r => new LifePayChannles + { + Status = status, + }); + + #region 璁板綍鏃ュ織 + + await PublishLifePayOrderHistoryEvent("娓犻亾绠$悊", status.GetDescription(), id, TableType.LifePayChannles); + + #endregion + } + + public async Task<bool> CheckChannelsStatus(string channlesId) + { + var dto = await _lifePayChannlesRep.FirstOrDefaultAsync(r => r.ChannlesNum == channlesId); + CheckExtensions.IfTrueThrowUserFriendlyException(dto == null, "褰撳墠娓犻亾鍟嗕笉瀛樺湪"); + CheckExtensions.IfTrueThrowUserFriendlyException(dto.Status == LifePayChannelsStatsEnum.绂佺敤, "褰撳墠娓犻亾鍟嗗凡绂佺敤"); + return true; + } + public async Task CreateEditLifePayRate(List<LifePayRateInput> input) + { + CheckExtensions.IfTrueThrowUserFriendlyException(input.Where(r => r.Rate <= 0).Any(), "鎶樻墸涓嶅緱灏忎簬绛変簬0"); + var baseRate = input.FirstOrDefault(r => r.RateType == LifePayRateTypeEnum.渚涘簲鍟嗘姌鎵d环)?.Rate; + var listData = new List<LifePayRate>(); + foreach (var item in input) + { + CheckExtensions.IfTrueThrowUserFriendlyException(item.Rate < (baseRate ?? 0), "鎶樻墸涓嶅緱灏忎簬渚涘簲鍟嗘姌鎵�"); + var tmpDto = await _lifePayRateRepository.FirstOrDefaultAsync(r => r.RateType == item.RateType); + if (tmpDto != null) + { + tmpDto.Rate = item.Rate; + } + else + { + listData.Add(new LifePayRate + { + CreationTime = DateTime.Now, + Rate = item.Rate, + RateType = item.RateType, + Id = Guid.NewGuid(), + }); + } + } + + if (listData.Any()) + { + await _lifePayRateRepository.InsertManyAsync(listData); + } + + } + + #endregion @@ -643,7 +1242,12 @@ private (decimal PayAmont, decimal DiscountAmount, decimal RechargeAmount) CalculateAmount(decimal amount, decimal rate) { - var payAmount = decimal.Round(amount * rate, 2, MidpointRounding.AwayFromZero); + /// 姝e父鏀粯 + var payAmount = decimal.Round(amount * rate / 100, 2, MidpointRounding.AwayFromZero); + + /// 1鍒嗛挶鏀粯 + //decimal payAmount = 0.01m; + CheckExtensions.IfTrueThrowUserFriendlyException(payAmount < 0.01m, "鏀粯閲戦閿欒"); return (payAmount, amount - payAmount, amount); @@ -697,9 +1301,6 @@ { var codeUrl = string.Empty; switch (payType) - - - { case LifePayTypeEnum.AliPay: codeUrl = await GetAliPayQRCode(outTradeNo, description, amount); @@ -834,5 +1435,47 @@ } + private async Task<IQueryable<LifePayOrderListOutput>> GetLifePayOrderListFilter(QueryLifePayOrderListInput input) + { + var result = (from a in _lifePayOrderRepository.Where(x => x.PayStatus != LifePayStatusEnum.鏈敮浠�) + .WhereIf(input.BeginFinishTime.HasValue, x => x.FinishTime >= input.BeginFinishTime) + .WhereIf(input.EndFinishTime.HasValue, x => x.FinishTime <= input.EndFinishTime) + .WhereIf(input.BeginPayTime.HasValue, x => x.PayTime >= input.BeginPayTime) + .WhereIf(input.EndPayTime.HasValue, x => x.PayTime <= input.EndPayTime) + .WhereIf(input.LifePayOrderStatus.HasValue, x => x.LifePayOrderStatus == input.LifePayOrderStatus.Value) + .WhereIf(input.PayStatus.HasValue, x => x.PayStatus == input.PayStatus.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.Id 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, + RefundTime = a.RefundTime, + ChannelName = b.ChannlesName + }); + return result; + } + + #endregion } diff --git a/LifePayment/LifePayment.Domain.Shared/ACOOLY/ACOOLYConstant.cs b/LifePayment/LifePayment.Domain.Shared/ACOOLY/ACOOLYConstant.cs index 3c6984d..8d96436 100644 --- a/LifePayment/LifePayment.Domain.Shared/ACOOLY/ACOOLYConstant.cs +++ b/LifePayment/LifePayment.Domain.Shared/ACOOLY/ACOOLYConstant.cs @@ -1,11 +1,4 @@ -锘縰sing Nest; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace LifePayment.Domain.Shared; +锘縩amespace LifePayment.Domain.Shared; public static class ACOOLYConstant { @@ -24,6 +17,10 @@ /// 鎻愪氦鐕冩皵璁㈠崟 /// </summary> public const string ConfirmGasOrder = "confirmGasOrder"; + /// <summary> + /// 鏌ヨ鐕冩皵鏀寔鍟嗘埛 + /// </summary> + public const string QueryGasOrgType = "queryGasOrgType"; /// <summary> /// 鑾峰彇鐢佃垂闈㈠�� diff --git a/LifePayment/LifePayment.Domain.Shared/ACOOLY/ACOOLYInput.cs b/LifePayment/LifePayment.Domain.Shared/ACOOLY/ACOOLYInput.cs index a55ccd9..84e4b6d 100644 --- a/LifePayment/LifePayment.Domain.Shared/ACOOLY/ACOOLYInput.cs +++ b/LifePayment/LifePayment.Domain.Shared/ACOOLY/ACOOLYInput.cs @@ -1,10 +1,7 @@ 锘縰sing Newtonsoft.Json; using System; -using System.Collections.Generic; using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using ZeroD.Util; namespace LifePayment.Domain.Shared; @@ -85,6 +82,21 @@ [JsonProperty("gasOrgType")] public string GasOrgType { get; set; } +} + +public class GasOrgTypeRequestInput : ACOOLYRequestBaseInput +{ + /// <summary> + /// 澶栭儴鍟嗘埛璁㈠崟鍙� + /// </summary> + [JsonProperty("outOrderNo")] + public string OutOrderNo { get; set; } + + /// <summary> + /// 骞冲彴璁㈠崟鍙� + /// </summary> + [JsonProperty("busiOrderNo")] + public string BusiOrderNo { get; set; } } /// <summary> @@ -231,8 +243,11 @@ [JsonProperty("name")] public string Name { get; set; } } - -public class SetLifePayOrderPayTypeInput +public class ChannelsBaseInput : PageInput +{ + public string CheckChannelId { get; set; } +} +public class SetLifePayOrderPayTypeInput : ChannelsBaseInput { [Required(ErrorMessage = "璁㈠崟鍙蜂笉鍙负绌�")] public string OrderNo { get; set; } @@ -252,9 +267,10 @@ /// </summary> public string Attach { get; set; } + } -public class GetPayOrderForJsAPIInput +public class GetPayOrderForJsAPIInput : ChannelsBaseInput { [Required(ErrorMessage = "璁㈠崟鍙蜂笉鍙负绌�")] public string OrderNo { get; set; } @@ -272,4 +288,11 @@ /// </summary> public string Attach { get; set; } + /// <summary> + /// 鏀粯搴旂敤鐨刟ppId + /// </summary> + public string PayAppId { get; set; } + + //public string CheckChannelId { get; set; } + } \ No newline at end of file diff --git a/LifePayment/LifePayment.Domain.Shared/ACOOLY/ACOOLYOption.cs b/LifePayment/LifePayment.Domain.Shared/ACOOLY/ACOOLYOption.cs index be26f3c..8dbee6c 100644 --- a/LifePayment/LifePayment.Domain.Shared/ACOOLY/ACOOLYOption.cs +++ b/LifePayment/LifePayment.Domain.Shared/ACOOLY/ACOOLYOption.cs @@ -1,10 +1,4 @@ -锘縰sing System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace LifePayment.Domain.Shared; +锘縩amespace LifePayment.Domain.Shared; public class ACOOLYOption { diff --git a/LifePayment/LifePayment.Domain.Shared/ACOOLY/ACOOLYOutput.cs b/LifePayment/LifePayment.Domain.Shared/ACOOLY/ACOOLYOutput.cs index c8c348d..3375781 100644 --- a/LifePayment/LifePayment.Domain.Shared/ACOOLY/ACOOLYOutput.cs +++ b/LifePayment/LifePayment.Domain.Shared/ACOOLY/ACOOLYOutput.cs @@ -1,10 +1,5 @@ 锘縰sing Newtonsoft.Json; -using System; using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace LifePayment.Domain.Shared; @@ -136,10 +131,31 @@ /// 澶╃劧姘斿叕鍙哥被鍨� /// </summary> [JsonProperty("gasParValue")] - public GasParValueOutput GasParValue { get; set; } + public List<GasParValueOutput> GasParValue { get; set; } + +} +public class GasOrgTypeValueResponse : ACOOLYRequestBaseResponse +{ + /// <summary> + /// 澶╃劧姘斿叕鍙哥被鍨� + /// </summary> + [JsonProperty("gasSupportMerchantInfos")] + public List<GasSupportMerchantInfos> GasSupportMerchantInfos { get; set; } } +public class GasSupportMerchantInfos +{ + /// <summary> + /// 鐕冩皵鏀寔鍟嗘埛缂栫爜 + /// </summary> + public string gasOrgTypeCode { get; set; } + + /// <summary> + /// 鐕冩皵鏀寔鍟嗘埛鍚嶇О + /// </summary> + public string gasOrgTypeName { get; set; } +} /// <summary> /// 鐕冩皵闈㈠�兼暟鎹� /// </summary> diff --git a/LifePayment/LifePayment.Domain.Shared/Enum/LifePay/LifePayEnum.cs b/LifePayment/LifePayment.Domain.Shared/Enum/LifePay/LifePayEnum.cs index bddbf34..78394fa 100644 --- a/LifePayment/LifePayment.Domain.Shared/Enum/LifePay/LifePayEnum.cs +++ b/LifePayment/LifePayment.Domain.Shared/Enum/LifePay/LifePayEnum.cs @@ -1,51 +1,95 @@ -锘縰sing System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +锘縰sing System.ComponentModel; namespace LifePayment.Domain.Shared; public enum LifePayTypeEnum { + [Description("寰俊鏀粯")] WxPay = 10, + [Description("鏀粯瀹濇敮浠�")] AliPay = 20 } public enum LifePayOrderTypeEnum { + [Description("璇濊垂璁㈠崟")] 璇濊垂璁㈠崟 = 10, + [Description("鐢佃垂璁㈠崟")] 鐢佃垂璁㈠崟 = 20, + + [Description("鐕冩皵璁㈠崟")] + 鐕冩皵璁㈠崟 = 30, } public enum LifePayStatusEnum { - + [Description("鏈敮浠�")] 鏈敮浠� = 10, + [Description("宸叉敮浠�")] 宸叉敮浠� = 20, + [Description("寰呴��娆�")] 寰呴��娆� = 30, - 宸查��娆� = 40 + [Description("宸查��娆�")] + 宸查��娆� = 40, } public enum LifePayOrderStatusEnum { + [Description("寰呯‘璁�")] 寰呯‘璁� = 10, + [Description("宸插け璐�")] 宸插け璐� = 20, - 宸插畬鎴� = 30 + [Description("鏀粯瀹濇敮浠�")] + 宸插畬鎴� = 30, + + [Description("閫�娆惧緟瀹℃牳")] + 閫�娆惧緟瀹℃牳 = 40, + + [Description("宸查��娆�")] + 宸查��娆� = 50, + + [Description("閫�娆惧け璐�")] + 閫�娆惧け璐� = 60, } public enum LifePayRateTypeEnum { 榛樿璇濊垂鎶樻墸=10, - 榛樿鐢佃垂鎶樻墸=20 + 榛樿鐢佃垂鎶樻墸=20, + + 榛樿鐕冩皵鎶樻墸=30, + + 渚涘簲鍟嗘姌鎵d环=40, } + +public enum LifePaySwitchTypeEnum +{ + H5 = 10, + + 寰俊灏忕▼搴� = 20, + + 寰俊鍏紬鍙� = 30, +} + +public enum LifePayChannelsStatsEnum +{ + 鍚敤 = 10, + + 绂佺敤 = 20, +} + +public enum LifePayChannlesTypeEnum +{ + 鍐呴儴娓犻亾 = 10, + + 澶栭儴娓犻亾 = 20, +} \ No newline at end of file diff --git a/LifePayment/LifePayment.Domain.Shared/LifePaymentConstant.cs b/LifePayment/LifePayment.Domain.Shared/LifePaymentConstant.cs index f7252d6..747fde5 100644 --- a/LifePayment/LifePayment.Domain.Shared/LifePaymentConstant.cs +++ b/LifePayment/LifePayment.Domain.Shared/LifePaymentConstant.cs @@ -725,6 +725,8 @@ public const int LgGigWorkerSignFreeSetting = 151; public const int LifePayOrder = 200; + + public const int LifePayChannles = 210; } public static class LogsSpecies @@ -1022,6 +1024,7 @@ /// </summary> public const string PhoneNumberRegEx = @"^1[3-9]\d{9}$"; + /// <summary> /// 鎵嬫満鍙风爜+搴ф満姝e垯琛ㄨ揪寮� /// </summary> @@ -1051,6 +1054,11 @@ /// 鐢ㄦ埛璐﹀彿姝e垯琛ㄨ揪寮� /// </summary> public const string UserNameEx = @"^[A-Za-z0-9]{8,13}$"; + + /// <summary> + /// 鐢佃垂鎴峰彿姝e垯琛ㄨ揪寮� + /// </summary> + public const string ElectricAccountRegEx = @"^.{13}$"; } public static class ResponseCode diff --git a/LifePayment/LifePayment.Domain/ACOOLY/ACOOLYClient.cs b/LifePayment/LifePayment.Domain/ACOOLY/ACOOLYClient.cs index 1c0c8fe..9d23a71 100644 --- a/LifePayment/LifePayment.Domain/ACOOLY/ACOOLYClient.cs +++ b/LifePayment/LifePayment.Domain/ACOOLY/ACOOLYClient.cs @@ -1,24 +1,14 @@ -锘縰sing LifePayment.Application.Contracts; -using LifePayment.Domain.Shared; +锘縰sing LifePayment.Domain.Shared; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Newtonsoft.Json; using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; using System.Linq; using System.Net.Http; -using System.Reflection; using System.Security.Cryptography; -using System.Security.Policy; using System.Text; using System.Threading.Tasks; -using System.Web; -using Volo.Abp.Application.Services; using Volo.Abp.Domain.Services; -using ZeroD.Util; -using ZeroD.Util.Fadd; namespace LifePayment.Domain { diff --git a/LifePayment/LifePayment.Domain/ACOOLY/ACOOLYManager.cs b/LifePayment/LifePayment.Domain/ACOOLY/ACOOLYManager.cs index be502bc..16b7128 100644 --- a/LifePayment/LifePayment.Domain/ACOOLY/ACOOLYManager.cs +++ b/LifePayment/LifePayment.Domain/ACOOLY/ACOOLYManager.cs @@ -1,17 +1,7 @@ -锘縰sing LifePayment.Application; -using LifePayment.Application.Contracts; -using LifePayment.Domain.Shared; -using Microsoft.AspNetCore.Components.Forms; +锘縰sing LifePayment.Domain.Shared; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using System.Threading.Tasks; -using Volo.Abp.Domain.Services; -using Volo.Abp.Users; -using ZeroD.Util.Fadd; namespace LifePayment.Domain; @@ -39,6 +29,12 @@ return await PostAsync<GasParValueRequestInput, GasParValueResponse>(input); } + public async Task<GasOrgTypeValueResponse> GasOrgType(GasOrgTypeRequestInput input) + { + SetBaseInfo(input, ACOOLYConstant.Sevice.QueryGasOrgType); + return await PostAsync<GasOrgTypeRequestInput, GasOrgTypeValueResponse>(input); + } + /// <summary> /// 鎻愪氦鐕冩皵璁㈠崟 /// </summary> diff --git a/LifePayment/LifePayment.Domain/ACOOLY/IACOOLYManager.cs b/LifePayment/LifePayment.Domain/ACOOLY/IACOOLYManager.cs index f5e865b..4ee1455 100644 --- a/LifePayment/LifePayment.Domain/ACOOLY/IACOOLYManager.cs +++ b/LifePayment/LifePayment.Domain/ACOOLY/IACOOLYManager.cs @@ -1,10 +1,5 @@ 锘縰sing LifePayment.Domain.Shared; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using System.Threading.Tasks; -using Volo.Abp.Domain.Services; namespace LifePayment.Domain; @@ -21,6 +16,13 @@ Task<GasParValueResponse> GasParValue(GasParValueRequestInput input); /// <summary> + /// 鑾峰彇鐕冩皵鏀寔鍟嗘埛 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + Task<GasOrgTypeValueResponse> GasOrgType(GasOrgTypeRequestInput input); + + /// <summary> /// 鎻愪氦鐕冩皵璁㈠崟 /// </summary> /// <param name="input"></param> diff --git a/LifePayment/LifePayment.Domain/LifePay/LifePayAccount.cs b/LifePayment/LifePayment.Domain/LifePay/LifePayAccount.cs new file mode 100644 index 0000000..e2db0a5 --- /dev/null +++ b/LifePayment/LifePayment.Domain/LifePay/LifePayAccount.cs @@ -0,0 +1,53 @@ +锘縰sing LifePayment.Domain.Shared; +using System; +using Volo.Abp; +using Volo.Abp.Domain.Entities.Auditing; + +namespace LifePayment.Domain.Models +{ + public partial class LifePayAccount : FullAuditedEntity<Guid>, IDataUserFilter + { + public LifePayAccount() + { + } + /// <summary> + /// 鐢ㄦ埛缂栧彿 + /// </summary> + public Guid UserId { get; set; } + + /// <summary> + /// 鐢熸椿缂磋垂绫诲瀷 + /// </summary> + public LifePayOrderTypeEnum LifePayType { get; set; } + + /// <summary> + /// 杩愯惀鍟� + /// </summary> + public string Operators { get; set; } + + /// <summary> + /// 鎵嬫満鍙�/鎴峰彿 + /// </summary> + public string Content { get; set; } + + /// <summary> + /// 鐪� + /// </summary> + public string Province { get; set; } + + /// <summary> + /// 甯� + /// </summary> + public string City { get; set; } + + /// <summary> + /// 鎷撳睍瀛楁锛堢數璐圭被鍨嬶級 + /// </summary> + public string ExtraProperties { get; set; } + + /// <summary> + /// 澶囨敞 + /// </summary> + public string Remark { get; set; } + } +} \ No newline at end of file diff --git a/LifePayment/LifePayment.Domain/LifePay/LifePayChannles.cs b/LifePayment/LifePayment.Domain/LifePay/LifePayChannles.cs new file mode 100644 index 0000000..64ee759 --- /dev/null +++ b/LifePayment/LifePayment.Domain/LifePay/LifePayChannles.cs @@ -0,0 +1,25 @@ +锘縰sing LifePayment.Domain.Shared; +using System; +using Volo.Abp; +using Volo.Abp.Domain.Entities.Auditing; + +namespace LifePayment.Domain; + +public partial class LifePayChannles : FullAuditedEntity<Guid>, IDataUserFilter +{ + public LifePayChannles() + { + } + + public string ChannlesName { get; set; } + + public string ChannlesNum { get; set; } + + public decimal ChannlesRate { get; set; } + + public LifePaySwitchTypeEnum SwitchType { get; set; } + + public LifePayChannelsStatsEnum Status { get; set; } + + public LifePayChannlesTypeEnum ChannlesType { get; set; } +} \ No newline at end of file diff --git a/LifePayment/LifePayment.Domain/LifePay/LifePayOrder.cs b/LifePayment/LifePayment.Domain/LifePay/LifePayOrder.cs index 592a574..f5336a2 100644 --- a/LifePayment/LifePayment.Domain/LifePay/LifePayOrder.cs +++ b/LifePayment/LifePayment.Domain/LifePay/LifePayOrder.cs @@ -1,5 +1,4 @@ 锘縰sing LifePayment.Domain.Shared; -using Org.BouncyCastle.Bcpg.OpenPgp; using System; using Volo.Abp; using Volo.Abp.Domain.Entities.Auditing; @@ -65,6 +64,11 @@ public string OutOrderNo { get; set; } /// <summary> + /// 娓犻亾娴佹按鍙� + /// </summary> + public string ACOOLYOrderNo { get; set; } + + /// <summary> /// 璁㈠崟鐘舵�� /// </summary> public LifePayOrderStatusEnum LifePayOrderStatus { get; set; } @@ -90,13 +94,16 @@ public string OutRequestNo { get; set; } /// <summary> - /// ACOOLY璁㈠崟鍙� - /// </summary> - public string ACOOLYOrderNo { get; set; } - - /// <summary> /// 閫�娆炬椂闂� /// </summary> public DateTime? RefundTime { get; set; } + + public string RefundApplyRemark { get; set; } + + public string RefundCheckRemark { get; set; } + + public Guid? RefundCheckUserId { get; set; } + + public Guid? ChannelId { get; set; } } } \ No newline at end of file diff --git a/LifePayment/LifePayment.EntityFrameworkCore/LifePaymentServicesDbContext.cs b/LifePayment/LifePayment.EntityFrameworkCore/LifePaymentServicesDbContext.cs index 5b0d428..24e64e5 100644 --- a/LifePayment/LifePayment.EntityFrameworkCore/LifePaymentServicesDbContext.cs +++ b/LifePayment/LifePayment.EntityFrameworkCore/LifePaymentServicesDbContext.cs @@ -22,6 +22,12 @@ public virtual DbSet<LifePayRate> LifePayRate { get; set; } + + + public virtual DbSet<LifePayChannles> LifePayChannles { get; set; } + + public virtual DbSet<LifePayAccount> LifePayAccount { get; set; } + [UnitOfWork] protected override void OnModelCreating(ModelBuilder builder) { diff --git a/LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml b/LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml index 701d5bf..96ce053 100644 --- a/LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml +++ b/LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml @@ -22,6 +22,18 @@ </summary> <returns></returns> </member> + <member name="M:LifePayment.Application.Contracts.ILifePayService.GetGasParValue"> + <summary> + 鑾峰彇鐕冩皵闈㈠�� + </summary> + <returns></returns> + </member> + <member name="M:LifePayment.Application.Contracts.ILifePayService.GetGasOrgType"> + <summary> + 鑾峰彇鐕冩皵鏀寔鍟嗘埛 + </summary> + <returns></returns> + </member> <member name="M:LifePayment.Application.Contracts.ILifePayService.LifePaySuccessHandler(System.String,System.String)"> <summary> 鏀粯鎴愬姛鍥炶皟澶勭悊 @@ -53,6 +65,13 @@ <param name="input"></param> <returns></returns> </member> + <member name="M:LifePayment.Application.Contracts.ILifePayService.CreateLifePayGasOrder(LifePayment.Application.Contracts.CreateLifePayOrderInput{LifePayment.Application.Contracts.LifeGasData})"> + <summary> + 鍒涘缓鐢熸椿缂磋垂鐕冩皵璁㈠崟 + </summary> + <param name="input"></param> + <returns></returns> + </member> <member name="M:LifePayment.Application.Contracts.ILifePayService.RefundLifePayOrder(LifePayment.Application.Contracts.RefundLifePayOrderInput)"> <summary> 閫�娆剧敓娲荤即璐硅鍗� @@ -60,6 +79,27 @@ <param name="input"></param> <returns></returns> <exception cref="T:Volo.Abp.UserFriendlyException"></exception> + </member> + <member name="M:LifePayment.Application.Contracts.ILifePayService.RefundUserLifePayOrder(LifePayment.Application.Contracts.RefundUserLifePayOrderInput)"> + <summary> + 鐢ㄦ埛鍙戣捣鐢熸椿缂磋垂閫�娆� + </summary> + <param name="input"></param> + <returns></returns> + </member> + <member name="M:LifePayment.Application.Contracts.ILifePayService.AddUpdateUserAccount(LifePayment.Application.Contracts.AddUpdateUserAccountInput)"> + <summary> + 鐢ㄦ埛淇敼鎴峰彿淇℃伅 + </summary> + <param name="input"></param> + <returns></returns> + </member> + <member name="M:LifePayment.Application.Contracts.ILifePayService.DeleteUserAccount(System.Guid)"> + <summary> + 鍒犻櫎鐢ㄦ埛鎴峰彿 + </summary> + <param name="id"></param> + <returns></returns> </member> <member name="M:LifePayment.Application.Contracts.ILifePayService.GetRate"> <summary> @@ -74,9 +114,23 @@ <param name="input"></param> <returns></returns> </member> + <member name="M:LifePayment.Application.Contracts.ILifePayService.GetUserLifePayOrderDetail(System.String)"> + <summary> + 鑾峰彇鎴戠殑璁㈠崟璇︽儏 + </summary> + <param name="orderNo"></param> + <returns></returns> + </member> <member name="M:LifePayment.Application.Contracts.ILifePayService.GetUserPage(ZeroD.Util.PageInput)"> <summary> 鑾峰彇鐢ㄦ埛鍒嗛〉鏁版嵁 + </summary> + <param name="input"></param> + <returns></returns> + </member> + <member name="M:LifePayment.Application.Contracts.ILifePayService.GetAccountPage(LifePayment.Application.Contracts.QueryUserAccountListInput)"> + <summary> + 鑾峰彇鐢ㄦ埛鎴峰彿鍒嗛〉鏁版嵁 </summary> <param name="input"></param> <returns></returns> @@ -93,6 +147,34 @@ 鏍规嵁璁㈠崟鍙疯幏鍙栨敮浠樼姸鎬� </summary> <param name="orderNo"></param> + <returns></returns> + </member> + <member name="M:LifePayment.Application.Contracts.ILifePayService.GetLifePayChannlesPage(ZeroD.Util.PageInput)"> + <summary> + 鑾峰彇娓犻亾鍒嗛〉 + </summary> + <param name="input"></param> + <returns></returns> + </member> + <member name="M:LifePayment.Application.Contracts.ILifePayService.GetUserAccountList(LifePayment.Application.Contracts.QueryUserAccountListInput)"> + <summary> + 鑾峰彇鎴戠殑鎴峰彿鍒楄〃 + </summary> + <param name="input"></param> + <returns></returns> + </member> + <member name="M:LifePayment.Application.Contracts.ILifePayService.GetUserAccountAllList(LifePayment.Application.Contracts.QueryUserAccountAllListInput)"> + <summary> + 鑾峰彇鎴戠殑鍏ㄩ儴鎴峰彿鍒楄〃 + </summary> + <param name="input"></param> + <returns></returns> + </member> + <member name="M:LifePayment.Application.Contracts.ILifePayService.GetUserAccountDetail(System.Guid)"> + <summary> + 鑾峰彇鎴戠殑鎴峰彿璇︽儏 + </summary> + <param name="id"></param> <returns></returns> </member> <member name="M:LifePayment.Application.Contracts.ILifePayService.SetLifePayOrderPayType(LifePayment.Domain.Shared.SetLifePayOrderPayTypeInput,System.String)"> @@ -120,6 +202,11 @@ <param name="amount"></param> <returns></returns> <exception cref="T:Volo.Abp.UserFriendlyException"></exception> + </member> + <member name="P:LifePayment.Application.Contracts.CreateLifePayOrderInput`1.ChannelId"> + <summary> + 娓犻亾鍚嶇О + </summary> </member> <member name="P:LifePayment.Application.Contracts.LifePhoneData.IspCode"> <summary> @@ -174,6 +261,31 @@ <member name="P:LifePayment.Application.Contracts.LifeElectricData.SixID"> <summary> 瀹㈡埛韬唤璇佸悗6浣嶏紝鍗楃綉蹇呬紶銆� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifeGasData.ParValue"> + <summary> + 鍏呭�奸潰棰濓紝鍗曚綅涓哄厓銆� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifeGasData.GasOrgType"> + <summary> + 澶╃劧姘斿叕鍙哥被鍨嬶紝"zhong_ran"浠h〃涓噧鐕冩皵锛�"bei_jing"浠h〃鍖椾含鐕冩皵銆� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifeGasData.GasAccount"> + <summary> + 鐕冩皵鎴峰彿 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifeGasData.Province"> + <summary> + 鐪佷唤 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifeGasData.City"> + <summary> + 鍩庡競 </summary> </member> <member name="P:LifePayment.Application.Contracts.CreateLifePayOrderInput.PhoneNumber"> @@ -241,9 +353,19 @@ 璁㈠崟鍙傛暟璇︽儏 </summary> </member> + <member name="P:LifePayment.Application.Contracts.CreateLifePayOrderInput.ChannelId"> + <summary> + 涓嬪崟娓犻亾 + </summary> + </member> <member name="P:LifePayment.Application.Contracts.QueryLifePayOrderListInput.LifePayOrderType"> <summary> 璁㈠崟绫诲瀷 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.QueryLifePayOrderListInput.LifePayType"> + <summary> + 鐢熸椿缂磋垂鏀粯绫诲瀷 </summary> </member> <member name="P:LifePayment.Application.Contracts.QueryLifePayOrderListInput.BeginPayTime"> @@ -281,6 +403,66 @@ 鐢ㄦ埛Id </summary> </member> + <member name="P:LifePayment.Application.Contracts.QueryLifePayOrderListInput.KeyWords"> + <summary> + 鎼滅储鍏抽敭璇� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.RefundUserLifePayOrderInput.UserId"> + <summary> + 鐢ㄦ埛Id + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.QueryUserAccountListInput.UserId"> + <summary> + 鐢ㄦ埛Id + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.QueryUserAccountAllListInput.UserId"> + <summary> + 鐢ㄦ埛Id + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.AddUpdateUserAccountInput.UserId"> + <summary> + 鐢ㄦ埛缂栧彿 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.AddUpdateUserAccountInput.LifePayType"> + <summary> + 鐢熸椿缂磋垂绫诲瀷 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.AddUpdateUserAccountInput.Operators"> + <summary> + 杩愯惀鍟� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.AddUpdateUserAccountInput.Content"> + <summary> + 鎵嬫満鍙�/鎴峰彿 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.AddUpdateUserAccountInput.Province"> + <summary> + 鐪� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.AddUpdateUserAccountInput.City"> + <summary> + 甯� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.AddUpdateUserAccountInput.ExtraProperties"> + <summary> + 鎷撳睍瀛楁锛堢數璐圭被鍨嬶級 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.AddUpdateUserAccountInput.Remark"> + <summary> + 澶囨敞 + </summary> + </member> <member name="P:LifePayment.Application.Contracts.UserListOutput.PhoneNumber"> <summary> 鐢ㄦ埛鎵嬫満鍙� @@ -294,6 +476,11 @@ <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.LifePayType"> <summary> 鐢熸椿缂磋垂鏀粯绫诲瀷 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.ChannelName"> + <summary> + 娓犻亾鍚嶇О </summary> </member> <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.LifePayOrderType"> @@ -354,6 +541,51 @@ <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.CreationTime"> <summary> 涓嬪崟鏃堕棿 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.RefundTime"> + <summary> + 閫�娆炬椂闂� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderListTemplate.CreationTime"> + <summary> + 涓嬪崟鏃堕棿 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderListTemplate.RechargeAmount"> + <summary> + 鍏呭�奸噾棰� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderListTemplate.DiscountAmount"> + <summary> + 浼樻儬閲戦 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderListTemplate.PayAmount"> + <summary> + 瀹炰粯閲戦 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderListTemplate.PayTime"> + <summary> + 鏀粯鏃堕棿 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderListTemplate.PayStatus"> + <summary> + 鏀粯鐘舵�� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderListTemplate.LifePayOrderStatus"> + <summary> + 璁㈠崟鐘舵�� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderListTemplate.FinishTime"> + <summary> + 瀹屾垚鏃堕棿 </summary> </member> <member name="P:LifePayment.Application.Contracts.UserLifePayOrderOutput.LifePayType"> @@ -421,6 +653,81 @@ 閫�娆炬椂闂� </summary> </member> + <member name="P:LifePayment.Application.Contracts.UserLifePayOrderOutput.RefundCredentialsImgUrl"> + <summary> + 閫�娆惧嚟璇� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.UserLifePayOrderOutput.ACOOLYOrderNo"> + <summary> + 娓犻亾娴佹按鍙� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.UserLifePayOrderRefundOutput.Id"> + <summary> + 璁㈠崟缂栧彿 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.UserLifePayOrderRefundOutput.OrderNo"> + <summary> + 璁㈠崟鍙� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.UserLifePayOrderRefundOutput.RefundApplyRemark"> + <summary> + 閫�娆惧師鍥� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.UserLifePayOrderRefundOutput.RefundCheckRemark"> + <summary> + 鍚庡彴濉啓鐨勯┏鍥炲師鍥� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.UserLifePayOrderRefundOutput.LifePayOrderStatus"> + <summary> + 璁㈠崟鐘舵�� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.UserAccountOutput.LifePayType"> + <summary> + 鐢熸椿缂磋垂绫诲瀷 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.UserAccountOutput.Operators"> + <summary> + 杩愯惀鍟� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.UserAccountOutput.Content"> + <summary> + 鎵嬫満鍙�/鎴峰彿 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.UserAccountOutput.Province"> + <summary> + 鐪� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.UserAccountOutput.City"> + <summary> + 甯� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.UserAccountOutput.ExtraProperties"> + <summary> + 鎷撳睍瀛楁锛堢數璐圭被鍨嬶級 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.UserAccountOutput.Remark"> + <summary> + 澶囨敞 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.UserAccountOutput.CreationTime"> + <summary> + 鍒涘缓鏃堕棿 + </summary> + </member> <member name="P:LifePayment.Application.Contracts.RecordOperateHistoryEto.RelationId"> <summary> 鍏宠仈鍏崇郴ID -- Gitblit v1.9.1