From 5352dfc3db2200df3dc5348e913e108f678adf5e Mon Sep 17 00:00:00 2001
From: zhengyuxuan <zhengyuxuan1995>
Date: 星期二, 18 三月 2025 14:10:47 +0800
Subject: [PATCH] Merge branch 'master' of http://120.26.58.240:8888/r/LifePaymentApi

---
 LifePayment/LifePayment.Application.Contracts/Setting/OperateHistoryDto.cs          |   74 ++++++
 LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml          |   40 +++
 LifePayment/LifePayment.Host/Cert/CSR文件.csr                                         |   17 +
 LifePayment/LifePayment.Host/LifePaymentServiceHostModule.cs                        |    3 
 LifePayment/LifePayment.Domain.Shared/Enum/OperateHistory/OperateHistoryTypeEnum.cs |  153 +++++++++++++
 LifePayment/LifePayment.Domain/Common/OperateHistory.cs                             |   35 +++
 LifePayment/LifePayment.EntityFrameworkCore/LifePaymentServicesDbContext.cs         |    3 
 LifePayment/LifePayment.Host/Cert/alipayCertPublicKey_RSA2.crt                      |   43 +++
 LifePayment/LifePayment.Application/Setting/OperateHistoryService.cs                |   75 ++++++
 LifePayment/LifePayment.Application.Contracts/Setting/IOperateHistoryService.cs     |   17 +
 LifePayment/LifePayment.Host/LifePayment.Host.csproj                                |    9 
 LifePayment/LifePayment.HttpApi/LifePay/OperateHistoryController.cs                 |   46 ++++
 LifePayment/LifePayment.Host/Cert/appCertPublicKey_2021004171602214.crt             |   23 ++
 LifePayment/LifePayment.Host/Cert/alipayRootCert.crt                                |   88 ++++++++
 LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml                         |   14 +
 15 files changed, 639 insertions(+), 1 deletions(-)

diff --git a/LifePayment/LifePayment.Application.Contracts/Setting/IOperateHistoryService.cs b/LifePayment/LifePayment.Application.Contracts/Setting/IOperateHistoryService.cs
new file mode 100644
index 0000000..1276a73
--- /dev/null
+++ b/LifePayment/LifePayment.Application.Contracts/Setting/IOperateHistoryService.cs
@@ -0,0 +1,17 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp.Application.Services;
+using ZeroD.Util;
+
+namespace LifePayment.Application.Contracts
+{
+    public interface IOperateHistoryService : IApplicationService
+    {
+        Task<PageOutput<OperateHistoryDto>> GetOperateHistoryByRelationId(GetOperateHistoryInput input);
+
+        Task<PageOutput<OperateHistoryDto>> GetOperateHistoryByType(QueryOperateHistoryByTypeInput input);
+    }
+}
diff --git a/LifePayment/LifePayment.Application.Contracts/Setting/OperateHistoryDto.cs b/LifePayment/LifePayment.Application.Contracts/Setting/OperateHistoryDto.cs
new file mode 100644
index 0000000..2ec0153
--- /dev/null
+++ b/LifePayment/LifePayment.Application.Contracts/Setting/OperateHistoryDto.cs
@@ -0,0 +1,74 @@
+锘縰sing LifePayment.Domain.Shared;
+using System;
+using ZeroD.Util;
+
+namespace LifePayment.Application.Contracts
+{
+    public class OperateHistoryDto
+    {
+        /// <summary>
+        /// 鍏宠仈鍏崇郴ID
+        /// </summary>
+        public Guid RelationId { get; set; }
+
+        /// <summary>
+        /// 琛ㄥ悕
+        /// </summary>
+        public int? TableType { get; set; }
+
+        /// <summary>
+        /// 鎿嶄綔
+        /// </summary>
+        public string OperateName { get; set; }
+
+        /// <summary>
+        /// 鎿嶄綔鍐呭
+        /// </summary>
+        public string OperateContent { get; set; }
+
+        /// <summary>
+        /// 鎿嶄綔浜�
+        /// </summary>
+        public string CreatorName { get; set; }
+
+        /// <summary>
+        /// 鎿嶄綔鏃堕棿
+        /// </summary>
+        public DateTime CreationTime { get; set; }
+
+        /// <summary>
+        /// 鎿嶄綔缁嗚妭
+        /// </summary>
+        public string OperateDetail { get; set; }
+    }
+
+    public class GetOperateHistoryInput : PageInput
+    {
+        public Guid RelationId { get; set; }
+
+        public string OperateName { get; set; }
+    }
+
+    public class QueryOperateHistoryByTypeInput : PageInput
+    {
+        public Guid TypeId { get; set; }
+
+        public OperateHistoryTypeEnum OperateHistoryType { get; set; }
+    }
+
+    public class CreateOperateHistoryInput
+    {
+        /// <summary>
+        /// 鍏宠仈鍏崇郴ID
+        /// </summary>
+        public Guid RelationId { get; set; }
+
+        public int? TableType { get; set; }
+
+        public string OperateName { get; set; }
+
+        public string OperateContent { get; set; }
+
+        public string CreatorName { get; set; }
+    }
+}
diff --git a/LifePayment/LifePayment.Application/Setting/OperateHistoryService.cs b/LifePayment/LifePayment.Application/Setting/OperateHistoryService.cs
new file mode 100644
index 0000000..6832ba0
--- /dev/null
+++ b/LifePayment/LifePayment.Application/Setting/OperateHistoryService.cs
@@ -0,0 +1,75 @@
+锘縰sing LifePayment.Application.Contracts;
+using LifePayment.Domain.Models;
+using LifePayment.Domain.Shared;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Dynamic.Core;
+using System.Threading.Tasks;
+using Volo.Abp.Application.Services;
+using Volo.Abp.Domain.Repositories;
+using ZeroD.Util;
+
+namespace LifePayment.Application
+{
+    public class OperateHistoryService : ApplicationService, IOperateHistoryService
+    {
+        private readonly IRepository<OperateHistory, Guid> _operateHistory;
+
+        public OperateHistoryService(
+               IRepository<OperateHistory, Guid> operateHistory)
+        {
+            _operateHistory = operateHistory;
+        }
+
+        public async Task<PageOutput<OperateHistoryDto>> GetOperateHistoryByRelationId(GetOperateHistoryInput input)
+        {
+            var query = _operateHistory.Where(r => r.RelationId == input.RelationId)
+                                       .WhereIf(input.OperateName.IsNotNullOrEmpty(), r => r.OperateName == input.OperateName)
+                                       .Select(r => new OperateHistoryDto
+                                       {
+                                           OperateName = r.OperateName,
+                                           RelationId = r.RelationId,
+                                           CreationTime = r.CreationTime,
+                                           CreatorName = r.CreatorName,
+                                           OperateContent = r.OperateContent,
+                                           TableType = r.TableType
+                                       });
+            var result = await query.GetPageResult(input.PageModel);
+
+            return result;
+        }
+
+        public async Task<PageOutput<OperateHistoryDto>> GetOperateHistoryByType(QueryOperateHistoryByTypeInput input)
+        {
+            var query = _operateHistory.AsQueryable();
+
+            switch (input.OperateHistoryType)
+            {
+              
+                case OperateHistoryTypeEnum.AccountManage:
+                    query = query.Where(x => x.UserId == input.TypeId
+                                          && LifePaymentConstant.LogsSpecies.AccountManageOperateNameList.Contains(x.OperateName));
+
+                    break;
+                default:
+                    query = query.Where(x => x.RelationId == input.TypeId);
+
+                    break;
+            }
+
+            var result = await query.Select(r =>
+                                            new OperateHistoryDto
+                                            {
+                                                OperateName = r.OperateName,
+                                                RelationId = r.RelationId,
+                                                CreationTime = r.CreationTime,
+                                                CreatorName = r.CreatorName,
+                                                OperateContent = r.OperateContent,
+                                                TableType = r.TableType
+                                            })
+                                    .GetPageResult(input.PageModel);
+            return result;
+        }
+    }
+}
diff --git a/LifePayment/LifePayment.Domain.Shared/Enum/OperateHistory/OperateHistoryTypeEnum.cs b/LifePayment/LifePayment.Domain.Shared/Enum/OperateHistory/OperateHistoryTypeEnum.cs
new file mode 100644
index 0000000..d96037a
--- /dev/null
+++ b/LifePayment/LifePayment.Domain.Shared/Enum/OperateHistory/OperateHistoryTypeEnum.cs
@@ -0,0 +1,153 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace LifePayment.Domain.Shared;
+
+public enum OperateHistoryTypeEnum
+{
+    /// <summary>
+    /// 璁よ瘉鐢ㄦ埛鏃ュ織
+    /// </summary>
+    [Description("璁よ瘉鐢ㄦ埛鏃ュ織")]
+    CertifiedUser = 10,
+
+    /// <summary>
+    /// 骞冲彴鐢ㄦ埛鏃ュ織
+    /// </summary>
+    [Description("骞冲彴鐢ㄦ埛鏃ュ織")]
+    PlatformUser = 11,
+
+    /// <summary>
+    /// 鐢ㄦ埛璁よ瘉瀹℃牳鏃ュ織
+    /// </summary>
+    [Description("鐢ㄦ埛璁よ瘉瀹℃牳鏃ュ織")]
+    UserCertificationAudit = 12,
+
+    /// <summary>
+    /// 鍏憡鏃ュ織
+    /// </summary>
+    [Description("鍏憡鏃ュ織")]
+    SystemNotice = 13,
+
+    /// <summary>
+    /// 璧勮绠$悊鏃ュ織
+    /// </summary>
+    [Description("璧勮绠$悊鏃ュ織")]
+    InformationForManage = 14,
+
+    /// <summary>
+    /// 璧勮瀹℃牳鏃ュ織
+    /// </summary>
+    [Description("璧勮瀹℃牳鏃ュ織")]
+    InformationWaitForCheck = 15,
+
+    /// <summary>
+    /// 閽卞寘寮�鎴锋棩蹇�
+    /// </summary>
+    [Description("閽卞寘寮�鎴锋棩蹇�")]
+    WalletAccountOpen = 16,
+
+    /// <summary>
+    /// 杞处瀹℃牳瀵瑰崟鏃ュ織
+    /// </summary>
+    [Description("杞处瀹℃牳瀵瑰崟鏃ュ織")]
+    WalletSingleTransfer = 17,
+
+    /// <summary>
+    /// 鍏呭�煎鏍�
+    /// </summary>
+    [Description("鍏呭�煎鏍告棩蹇�")]
+    WalletRecharge = 18,
+
+    /// <summary>
+    /// 璐︽埛绠$悊
+    /// </summary>
+    [Description("璐︽埛绠$悊")]
+    AccountManage = 19,
+
+    /// <summary>
+    /// 璁よ瘉绠$悊
+    /// </summary>
+    [Description("璁よ瘉绠$悊")]
+    UserCertificationManage = 20,
+
+    /// <summary>
+    /// 鎵归噺杞处瀹℃牳鏃ュ織
+    /// </summary>
+    [Description("鎵归噺杞处瀹℃牳鏃ュ織")]
+    AuditWalletBatchTransfer = 21,
+
+    /// <summary>
+    /// 琛屼笟鏈烘瀯瀹℃牳鏃ュ織
+    /// </summary>
+    [Description("琛屼笟鏈烘瀯瀹℃牳鏃ュ織")]
+    IndustryBodyAudit = 22,
+
+    /// <summary>
+    /// 琛屼笟閰嶅瀹℃牳鏃ュ織
+    /// </summary>
+    [Description("琛屼笟閰嶅瀹℃牳鏃ュ織")]
+    IndustryMatingAudit = 23,
+
+    /// <summary>
+    /// 鐢叉柟浼佷笟瀹℃牳鏃ュ織
+    /// </summary>
+    [Description("鐢叉柟浼佷笟瀹℃牳鏃ュ織")]
+    FirstPartyCompanyAudit = 24,
+
+    /// <summary>
+    /// 浜鸿祫鍏徃瀹℃牳鏃ュ織
+    /// </summary>
+    [Description("浜鸿祫鍏徃瀹℃牳鏃ュ織")]
+    ParkOrHRAudit = 25,
+
+    /// <summary>
+    /// 琛屼笟鏈烘瀯绠$悊鏃ュ織
+    /// </summary>
+    [Description("琛屼笟鏈烘瀯绠$悊鏃ュ織")]
+    IndustryBodyManage = 26,
+
+    /// <summary>
+    /// 琛屼笟閰嶅绠$悊鏃ュ織
+    /// </summary>
+    [Description("琛屼笟閰嶅绠$悊鏃ュ織")]
+    IndustryMatingManage = 27,
+
+    /// <summary>
+    /// 鐢叉柟浼佷笟绠$悊鏃ュ織
+    /// </summary>
+    [Description("鐢叉柟浼佷笟绠$悊鏃ュ織")]
+    FirstPartyCompanyManage = 28,
+
+    /// <summary>
+    /// 浜鸿祫鍏徃绠$悊鏃ュ織
+    /// </summary>
+    [Description("浜鸿祫鍏徃绠$悊鏃ュ織")]
+    ParkOrHRManage = 29,
+
+    /// <summary>
+    /// 瀹㈡埛绠$悊鏃ュ織
+    /// </summary>
+    [Description("瀹㈡埛绠$悊鏃ュ織")]
+    CustomerManage = 30,
+
+    /// <summary>
+    /// 濂栧姳閰嶇疆鏃ュ織
+    /// </summary>
+    [Description("濂栧姳閰嶇疆鏃ュ織")]
+    ParkRewardManage = 31,
+
+    /// <summary>
+    /// 瀹㈡埛妯℃澘鎿嶄綔鏃ュ織
+    /// </summary>
+    [Description("瀹㈡埛妯℃澘鎿嶄綔鏃ュ織")]
+    CustomerContractTemplate = 32,
+
+    LifePayOrder = 40,
+
+    LifePayChannles = 42,
+}
diff --git a/LifePayment/LifePayment.Domain/Common/OperateHistory.cs b/LifePayment/LifePayment.Domain/Common/OperateHistory.cs
new file mode 100644
index 0000000..1f8c168
--- /dev/null
+++ b/LifePayment/LifePayment.Domain/Common/OperateHistory.cs
@@ -0,0 +1,35 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp.Domain.Entities.Auditing;
+
+namespace LifePayment.Domain.Models
+{
+    public class OperateHistory : CreationAuditedEntity<Guid>
+    {
+        /// <summary>
+        /// 鍏宠仈鍏崇郴ID
+        /// </summary>
+        public Guid RelationId { get; set; }
+
+        public int? TableType { get; set; }
+
+        public string OperateName { get; set; }
+
+        public string OperateContent { get; set; }
+
+        public string CreatorName { get; set; }
+
+        /// <summary>
+        /// 鎿嶄綔缁嗚妭
+        /// </summary>
+        public string OperateDetail { get; set; }
+
+        /// <summary>
+        /// 鐢ㄦ埛id
+        /// </summary>
+        public Guid? UserId { get; set; }
+    }
+}
diff --git a/LifePayment/LifePayment.EntityFrameworkCore/LifePaymentServicesDbContext.cs b/LifePayment/LifePayment.EntityFrameworkCore/LifePaymentServicesDbContext.cs
index 9fd8000..15260dc 100644
--- a/LifePayment/LifePayment.EntityFrameworkCore/LifePaymentServicesDbContext.cs
+++ b/LifePayment/LifePayment.EntityFrameworkCore/LifePaymentServicesDbContext.cs
@@ -28,8 +28,11 @@
 
         public virtual DbSet<Role> Roles { get; set; }
 
+
         public virtual DbSet<UserRole> UserRoles { get; set; }
 
+        public virtual DbSet<OperateHistory> OperateHistory { get; set; }
+
         public virtual DbSet<LifePayChannles> LifePayChannles { get; set; }
 
         public virtual DbSet<LifePayAccount> LifePayAccount { get; set; }
diff --git "a/LifePayment/LifePayment.Host/Cert/CSR\346\226\207\344\273\266.csr" "b/LifePayment/LifePayment.Host/Cert/CSR\346\226\207\344\273\266.csr"
new file mode 100644
index 0000000..77a8817
--- /dev/null
+++ "b/LifePayment/LifePayment.Host/Cert/CSR\346\226\207\344\273\266.csr"
@@ -0,0 +1,17 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIICsTCCAZkCAQAwbDEJMAcGA1UEBhMAMQkwBwYDVQQIEwAxCTAHBgNVBAcTADEz
+MDEGA1UECgwq5a6B5rOi5Yib6IOc5L+h5oGv5oqA5pyv5pyN5Yqh5pyJ6ZmQ5YWs
+5Y+4MQkwBwYDVQQLEwAxCTAHBgNVBAMTADCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAKA6zoXnrah5BNUWGjYaID/4h1VxLRmVuAPySZ8KSbPuni136V3/
+3nLssKZQ6YHPwV0lBJw2pLVMHHi1zvL3SH/IdMvMqlsGHYMwtMRC2KU66Ct3ZTYk
+oYFZFBHjF4vp9zIY6fTla6onoIAyN2BswwS2OFAFrFwnF5w/q/8SKU/JHlTLW/y6
+1Ji+Vy7wVXJ+TJCUwKHhbdfBEFzixTdfpXaWn/ZPosjNn24FwnOiJzUoBxkh2cIc
+5vbfnBqjXdY7v50DfZR8Cgg0DzJ+nKK9pbD9Z7BH6R6dr3XzRHXHFUkWQf5HbRc1
+xFKUxc58/Psytg9EWvgdBtZ0sbrPcbA9x5sCAwEAAaAAMA0GCSqGSIb3DQEBBAUA
+A4IBAQCcHGqNyh6q7iyImLTi1/VOhwyfphmwETsN/+KNjpkLZN+pUf9hcUsxRObV
+JdcYKdO/WTGGsghBINieKdXGtBlx0wyyM0MADURstr4SWBsktrwunwyyhzufuipx
+d4Wo7kC9hmtOxmJbgn/lXr6tZyTUzukWgEuU5Pxfi9DGPm58Z1fZjHdfuoboeD9n
+mgHPfd+YbuVNSa9wOilBskw35xSLXnUU8tL3PLthHElg43bnbpUOeBvSZ+5uJ9KU
+7zz/1HGOBMl7EY+wMwgpr/5WAKPoAucJU1NEOMKqSHwWfjUEtkeoq87Cij8B0zLt
++WRnGLDsL5vyunOz00uJccxhZlON
+-----END CERTIFICATE REQUEST-----
diff --git a/LifePayment/LifePayment.Host/Cert/alipayCertPublicKey_RSA2.crt b/LifePayment/LifePayment.Host/Cert/alipayCertPublicKey_RSA2.crt
new file mode 100644
index 0000000..a8b7118
--- /dev/null
+++ b/LifePayment/LifePayment.Host/Cert/alipayCertPublicKey_RSA2.crt
@@ -0,0 +1,43 @@
+-----BEGIN CERTIFICATE-----
+MIIDuDCCAqCgAwIBAgIQICQJCUhlwAIx+IQXPEEzhzANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE
+BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0
+aG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs
+YXNzIDIgUjEwHhcNMjQwOTA5MDYxMDM3WhcNMjkwOTA4MDYxMDM3WjCBmDELMAkGA1UEBhMCQ04x
+MzAxBgNVBAoMKuWugeazouWIm+iDnOS/oeaBr+aKgOacr+acjeWKoeaciemZkOWFrOWPuDEPMA0G
+A1UECwwGQWxpcGF5MUMwQQYDVQQDDDrmlK/ku5jlrp0o5Lit5Zu9Kee9kee7nOaKgOacr+aciemZ
+kOWFrOWPuC0yMDg4MDUwNTQyMDQyMzAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
+h3ymDiC0//upxAEwekcap2S/soSgtxZsT+W+a/nOg1yF/IpJshpiAcj246BqihSD6q3CEjAYj80c
+MnZJG/lfir/BRz1pGyCAKVWcyISj4DR+ADfehHa6XJh7BNMUhscKvB0SeFFL4HGUA/PgpnO/mEO5
+PKai3o8UzwQu/atEja5TCDUqSogrTkLrYq+Dlmjc8UQENuWUx0PlnwnLrYpx4hIC3PjzpDSy8FCO
+maHVG1JHyv+Nxng2//szWD9l2LGx4F1qe5jsYAgfE3aP2U5ryggZAgejBTKu6kBTMslsCFJIesG4
+8OC3OGk0ZafVujUaGSrFbYQHZtUQkdiU1oVVGwIDAQABoxIwEDAOBgNVHQ8BAf8EBAMCA/gwDQYJ
+KoZIhvcNAQELBQADggEBAG/AwOEBETOShrkCIW/ViAYf/UopgL6txP7laTbAbI/xLJyy657S/ESs
+MBLTqzuRt2e5kVdZZAq/8Bs4jscEYoiTpDB0vmWXtvjYumKyINeRuIBqn2PIESrm34WrJATkvLpj
+2QRioL+rU1eXq2rYBpryFa+QNkEPb7xU7uadYvnNsBrZB8OF8QVOssbhfCbRnIv8zaaQYd9iTXPa
+7TQXwkudtamLry1x9F7J+icmoPfxa9i/yMiBm4YOD30LLBvS3YRXZCcVRxjgtv7/HQ4l4vNS0BTb
+4Qj9k9X1IyjF2IJgfW5EoA/pvPs/ZXQzOgGzz0ncBMU4YqR3wlT/U3094UY=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIE4jCCAsqgAwIBAgIIYsSr5bKAMl8wDQYJKoZIhvcNAQELBQAwejELMAkGA1UEBhMCQ04xFjAU
+BgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MTEw
+LwYDVQQDDChBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFIxMB4XDTE4MDMy
+MjE0MzQxNVoXDTM3MTEyNjE0MzQxNVowgYIxCzAJBgNVBAYTAkNOMRYwFAYDVQQKDA1BbnQgRmlu
+YW5jaWFsMSAwHgYDVQQLDBdDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTE5MDcGA1UEAwwwQW50IEZp
+bmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBDbGFzcyAyIFIxMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAsLMfYaoRoPRbmDcAfXPCmKf43pWRN5yTXa/KJWO0l+mrgQvs89bA
+NEvbDUxlkGwycwtwi5DgBuBgVhLliXu+R9CYgr2dXs8D8Hx/gsggDcyGPLmVrDOnL+dyeauheARZ
+fA3du60fwEwwbGcVIpIxPa/4n3IS/ElxQa6DNgqxh8J9Xwh7qMGl0JK9+bALuxf7B541Gr4p0WEN
+G8fhgjBV4w4ut9eQLOoa1eddOUSZcy46Z7allwowwgt7b5VFfx/P1iKJ3LzBMgkCK7GZ2kiLrL7R
+iqV+h482J7hkJD+ardoc6LnrHO/hIZymDxok+VH9fVeUdQa29IZKrIDVj65THQIDAQABo2MwYTAf
+BgNVHSMEGDAWgBRfdLQEwE8HWurlsdsio4dBspzhATAdBgNVHQ4EFgQUSqHkYINtUSAtDPnS8Xoy
+oP9p7qEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIB
+AIQ8TzFy4bVIVb8+WhHKCkKNPcJe2EZuIcqvRoi727lZTJOfYy/JzLtckyZYfEI8J0lasZ29wkTt
+a1IjSo+a6XdhudU4ONVBrL70U8Kzntplw/6TBNbLFpp7taRALjUgbCOk4EoBMbeCL0GiYYsTS0mw
+7xdySzmGQku4GTyqutIGPQwKxSj9iSFw1FCZqr4VP4tyXzMUgc52SzagA6i7AyLedd3tbS6lnR5B
+L+W9Kx9hwT8L7WANAxQzv/jGldeuSLN8bsTxlOYlsdjmIGu/C9OWblPYGpjQQIRyvs4Cc/mNhrh+
+14EQgwuemIIFDLOgcD+iISoN8CqegelNcJndFw1PDN6LkVoiHz9p7jzsge8RKay/QW6C03KNDpWZ
+EUCgCUdfHfo8xKeR+LL1cfn24HKJmZt8L/aeRZwZ1jwePXFRVtiXELvgJuM/tJDIFj2KD337iV64
+fWcKQ/ydDVGqfDZAdcU4hQdsrPWENwPTQPfVPq2NNLMyIH9+WKx9Ed6/WzeZmIy5ZWpX1TtTolo6
+OJXQFeItMAjHxW/ZSZTok5IS3FuRhExturaInnzjYpx50a6kS34c5+c8hYq7sAtZ/CNLZmBnBCFD
+aMQqT8xFZJ5uolUaSeXxg7JFY1QsYp5RKvj4SjFwCGKJ2+hPPe9UyyltxOidNtxjaknOCeBHytOr
+-----END CERTIFICATE-----
diff --git a/LifePayment/LifePayment.Host/Cert/alipayRootCert.crt b/LifePayment/LifePayment.Host/Cert/alipayRootCert.crt
new file mode 100644
index 0000000..76417c5
--- /dev/null
+++ b/LifePayment/LifePayment.Host/Cert/alipayRootCert.crt
@@ -0,0 +1,88 @@
+-----BEGIN CERTIFICATE-----
+MIIBszCCAVegAwIBAgIIaeL+wBcKxnswDAYIKoEcz1UBg3UFADAuMQswCQYDVQQG
+EwJDTjEOMAwGA1UECgwFTlJDQUMxDzANBgNVBAMMBlJPT1RDQTAeFw0xMjA3MTQw
+MzExNTlaFw00MjA3MDcwMzExNTlaMC4xCzAJBgNVBAYTAkNOMQ4wDAYDVQQKDAVO
+UkNBQzEPMA0GA1UEAwwGUk9PVENBMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE
+MPCca6pmgcchsTf2UnBeL9rtp4nw+itk1Kzrmbnqo05lUwkwlWK+4OIrtFdAqnRT
+V7Q9v1htkv42TsIutzd126NdMFswHwYDVR0jBBgwFoAUTDKxl9kzG8SmBcHG5Yti
+W/CXdlgwDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFEwysZfZ
+MxvEpgXBxuWLYlvwl3ZYMAwGCCqBHM9VAYN1BQADSAAwRQIgG1bSLeOXp3oB8H7b
+53W+CKOPl2PknmWEq/lMhtn25HkCIQDaHDgWxWFtnCrBjH16/W3Ezn7/U/Vjo5xI
+pDoiVhsLwg==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIF0zCCA7ugAwIBAgIIH8+hjWpIDREwDQYJKoZIhvcNAQELBQAwejELMAkGA1UE
+BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5jaWFsIENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5IFIxMB4XDTE4MDMyMTEzNDg0MFoXDTM4MDIyODEzNDg0
+MFowejELMAkGA1UEBhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNV
+BAsMF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5j
+aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFIxMIICIjANBgkqhkiG9w0BAQEF
+AAOCAg8AMIICCgKCAgEAtytTRcBNuur5h8xuxnlKJetT65cHGemGi8oD+beHFPTk
+rUTlFt9Xn7fAVGo6QSsPb9uGLpUFGEdGmbsQ2q9cV4P89qkH04VzIPwT7AywJdt2
+xAvMs+MgHFJzOYfL1QkdOOVO7NwKxH8IvlQgFabWomWk2Ei9WfUyxFjVO1LVh0Bp
+dRBeWLMkdudx0tl3+21t1apnReFNQ5nfX29xeSxIhesaMHDZFViO/DXDNW2BcTs6
+vSWKyJ4YIIIzStumD8K1xMsoaZBMDxg4itjWFaKRgNuPiIn4kjDY3kC66Sl/6yTl
+YUz8AybbEsICZzssdZh7jcNb1VRfk79lgAprm/Ktl+mgrU1gaMGP1OE25JCbqli1
+Pbw/BpPynyP9+XulE+2mxFwTYhKAwpDIDKuYsFUXuo8t261pCovI1CXFzAQM2w7H
+DtA2nOXSW6q0jGDJ5+WauH+K8ZSvA6x4sFo4u0KNCx0ROTBpLif6GTngqo3sj+98
+SZiMNLFMQoQkjkdN5Q5g9N6CFZPVZ6QpO0JcIc7S1le/g9z5iBKnifrKxy0TQjtG
+PsDwc8ubPnRm/F82RReCoyNyx63indpgFfhN7+KxUIQ9cOwwTvemmor0A+ZQamRe
+9LMuiEfEaWUDK+6O0Gl8lO571uI5onYdN1VIgOmwFbe+D8TcuzVjIZ/zvHrAGUcC
+AwEAAaNdMFswCwYDVR0PBAQDAgEGMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFF90
+tATATwda6uWx2yKjh0GynOEBMB8GA1UdIwQYMBaAFF90tATATwda6uWx2yKjh0Gy
+nOEBMA0GCSqGSIb3DQEBCwUAA4ICAQCVYaOtqOLIpsrEikE5lb+UARNSFJg6tpkf
+tJ2U8QF/DejemEHx5IClQu6ajxjtu0Aie4/3UnIXop8nH/Q57l+Wyt9T7N2WPiNq
+JSlYKYbJpPF8LXbuKYG3BTFTdOVFIeRe2NUyYh/xs6bXGr4WKTXb3qBmzR02FSy3
+IODQw5Q6zpXj8prYqFHYsOvGCEc1CwJaSaYwRhTkFedJUxiyhyB5GQwoFfExCVHW
+05ZFCAVYFldCJvUzfzrWubN6wX0DD2dwultgmldOn/W/n8at52mpPNvIdbZb2F41
+T0YZeoWnCJrYXjq/32oc1cmifIHqySnyMnavi75DxPCdZsCOpSAT4j4lAQRGsfgI
+kkLPGQieMfNNkMCKh7qjwdXAVtdqhf0RVtFILH3OyEodlk1HYXqX5iE5wlaKzDop
+PKwf2Q3BErq1xChYGGVS+dEvyXc/2nIBlt7uLWKp4XFjqekKbaGaLJdjYP5b2s7N
+1dM0MXQ/f8XoXKBkJNzEiM3hfsU6DOREgMc1DIsFKxfuMwX3EkVQM1If8ghb6x5Y
+jXayv+NLbidOSzk4vl5QwngO/JYFMkoc6i9LNwEaEtR9PhnrdubxmrtM+RjfBm02
+77q3dSWFESFQ4QxYWew4pHE0DpWbWy/iMIKQ6UZ5RLvB8GEcgt8ON7BBJeMc+Dyi
+kT9qhqn+lw==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIICiDCCAgygAwIBAgIIQX76UsB/30owDAYIKoZIzj0EAwMFADB6MQswCQYDVQQG
+EwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UECwwXQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNpYWwgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkgRTEwHhcNMTkwNDI4MTYyMDQ0WhcNNDkwNDIwMTYyMDQ0
+WjB6MQswCQYDVQQGEwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UE
+CwwXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNp
+YWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRTEwdjAQBgcqhkjOPQIBBgUrgQQA
+IgNiAASCCRa94QI0vR5Up9Yr9HEupz6hSoyjySYqo7v837KnmjveUIUNiuC9pWAU
+WP3jwLX3HkzeiNdeg22a0IZPoSUCpasufiLAnfXh6NInLiWBrjLJXDSGaY7vaokt
+rpZvAdmjXTBbMAsGA1UdDwQEAwIBBjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBRZ
+4ZTgDpksHL2qcpkFkxD2zVd16TAfBgNVHSMEGDAWgBRZ4ZTgDpksHL2qcpkFkxD2
+zVd16TAMBggqhkjOPQQDAwUAA2gAMGUCMQD4IoqT2hTUn0jt7oXLdMJ8q4vLp6sg
+wHfPiOr9gxreb+e6Oidwd2LDnC4OUqCWiF8CMAzwKs4SnDJYcMLf2vpkbuVE4dTH
+Rglz+HGcTLWsFs4KxLsq7MuU+vJTBUeDJeDjdA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIDxTCCAq2gAwIBAgIUEMdk6dVgOEIS2cCP0Q43P90Ps5YwDQYJKoZIhvcNAQEF
+BQAwajELMAkGA1UEBhMCQ04xEzARBgNVBAoMCmlUcnVzQ2hpbmExHDAaBgNVBAsM
+E0NoaW5hIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMMH2lUcnVzQ2hpbmEgQ2xhc3Mg
+MiBSb290IENBIC0gRzMwHhcNMTMwNDE4MDkzNjU2WhcNMzMwNDE4MDkzNjU2WjBq
+MQswCQYDVQQGEwJDTjETMBEGA1UECgwKaVRydXNDaGluYTEcMBoGA1UECwwTQ2hp
+bmEgVHJ1c3QgTmV0d29yazEoMCYGA1UEAwwfaVRydXNDaGluYSBDbGFzcyAyIFJv
+b3QgQ0EgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOPPShpV
+nJbMqqCw6Bz1kehnoPst9pkr0V9idOwU2oyS47/HjJXk9Rd5a9xfwkPO88trUpz5
+4GmmwspDXjVFu9L0eFaRuH3KMha1Ak01citbF7cQLJlS7XI+tpkTGHEY5pt3EsQg
+wykfZl/A1jrnSkspMS997r2Gim54cwz+mTMgDRhZsKK/lbOeBPpWtcFizjXYCqhw
+WktvQfZBYi6o4sHCshnOswi4yV1p+LuFcQ2ciYdWvULh1eZhLxHbGXyznYHi0dGN
+z+I9H8aXxqAQfHVhbdHNzi77hCxFjOy+hHrGsyzjrd2swVQ2iUWP8BfEQqGLqM1g
+KgWKYfcTGdbPB1MCAwEAAaNjMGEwHQYDVR0OBBYEFG/oAMxTVe7y0+408CTAK8hA
+uTyRMB8GA1UdIwQYMBaAFG/oAMxTVe7y0+408CTAK8hAuTyRMA8GA1UdEwEB/wQF
+MAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBLnUTfW7hp
+emMbuUGCk7RBswzOT83bDM6824EkUnf+X0iKS95SUNGeeSWK2o/3ALJo5hi7GZr3
+U8eLaWAcYizfO99UXMRBPw5PRR+gXGEronGUugLpxsjuynoLQu8GQAeysSXKbN1I
+UugDo9u8igJORYA+5ms0s5sCUySqbQ2R5z/GoceyI9LdxIVa1RjVX8pYOj8JFwtn
+DJN3ftSFvNMYwRuILKuqUYSHc2GPYiHVflDh5nDymCMOQFcFG3WsEuB+EYQPFgIU
+1DHmdZcz7Llx8UOZXX2JupWCYzK1XhJb+r4hK5ncf/w8qGtYlmyJpxk3hr1TfUJX
+Yf4Zr0fJsGuv
+-----END CERTIFICATE-----
\ No newline at end of file
diff --git a/LifePayment/LifePayment.Host/Cert/appCertPublicKey_2021004171602214.crt b/LifePayment/LifePayment.Host/Cert/appCertPublicKey_2021004171602214.crt
new file mode 100644
index 0000000..5c51322
--- /dev/null
+++ b/LifePayment/LifePayment.Host/Cert/appCertPublicKey_2021004171602214.crt
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIIEpjCCA46gAwIBAgIQICQJGZ4C8uub1cYcy9fcxjANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE
+BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0
+aG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs
+YXNzIDEgUjEwHhcNMjQwOTE5MDE1NTU0WhcNMjkwOTE4MDE1NTU0WjBuMQswCQYDVQQGEwJDTjEz
+MDEGA1UECgwq5a6B5rOi5Yib6IOc5L+h5oGv5oqA5pyv5pyN5Yqh5pyJ6ZmQ5YWs5Y+4MQ8wDQYD
+VQQLDAZBbGlwYXkxGTAXBgNVBAMMEDIwODgwNTA1NDIwNDIzMDEwggEiMA0GCSqGSIb3DQEBAQUA
+A4IBDwAwggEKAoIBAQCgOs6F562oeQTVFho2GiA/+IdVcS0ZlbgD8kmfCkmz7p4td+ld/95y7LCm
+UOmBz8FdJQScNqS1TBx4tc7y90h/yHTLzKpbBh2DMLTEQtilOugrd2U2JKGBWRQR4xeL6fcyGOn0
+5WuqJ6CAMjdgbMMEtjhQBaxcJxecP6v/EilPyR5Uy1v8utSYvlcu8FVyfkyQlMCh4W3XwRBc4sU3
+X6V2lp/2T6LIzZ9uBcJzoic1KAcZIdnCHOb235wao13WO7+dA32UfAoINA8yfpyivaWw/WewR+ke
+na9180R1xxVJFkH+R20XNcRSlMXOfPz7MrYPRFr4HQbWdLG6z3GwPcebAgMBAAGjggEpMIIBJTAf
+BgNVHSMEGDAWgBRxB+IEYRbk5fJl6zEPyeD0PJrVkTAdBgNVHQ4EFgQULdtiYUNb4gMQ6z6BVDjw
+ZeUYthwwQAYDVR0gBDkwNzA1BgdggRwBbgEBMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9jYS5hbGlw
+YXkuY29tL2Nwcy5wZGYwDgYDVR0PAQH/BAQDAgbAMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9j
+YS5hbGlwYXkuY29tL2NybDkzLmNybDBgBggrBgEFBQcBAQRUMFIwKAYIKwYBBQUHMAKGHGh0dHA6
+Ly9jYS5hbGlwYXkuY29tL2NhNi5jZXIwJgYIKwYBBQUHMAGGGmh0dHA6Ly9jYS5hbGlwYXkuY29t
+OjgzNDAvMA0GCSqGSIb3DQEBCwUAA4IBAQBzK7WLZwwHwEPZXm6VHNaO6PfLEqJDEf6zz15VPBr/
+/yUGGHXReyfK5pHTh9EaFvNJTCWH/DHaUr0sf05w2bfxY3ZWCGFf6+qS+FqOq6V3AfXDphWlNSK9
+jS5/tJc89Hr33HW4btsLwpcEqTweN16l3n5oIaJ9Zfi7zRQtPyUaVrtKAyMt8WeZ1gq1qjAAMmjG
+RHy9/LpihPemAhuKuPHpFPvksO7RAaKGlY42pg+LxdXLNECJR57rKiWKrrITDM16xJAOTBFK8caH
+MdkDrdiA6z/LsrGwiNBYb7N7t40gPdCJoVIlP0qkrzpqGg+KxwYDLmYX5LlpPdP9Tfz5y/t9
+-----END CERTIFICATE-----
\ No newline at end of file
diff --git a/LifePayment/LifePayment.Host/LifePayment.Host.csproj b/LifePayment/LifePayment.Host/LifePayment.Host.csproj
index 225879d..1969978 100644
--- a/LifePayment/LifePayment.Host/LifePayment.Host.csproj
+++ b/LifePayment/LifePayment.Host/LifePayment.Host.csproj
@@ -76,6 +76,15 @@
   </ItemGroup>
 
   <ItemGroup>
+    <None Update="Cert\alipayCertPublicKey_RSA2.crt">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Update="Cert\alipayRootCert.crt">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Update="Cert\appCertPublicKey_2021004171602214.crt">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
     <None Update="LifePaymentServices.Application.Contracts.xml">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>
diff --git a/LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml b/LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml
index 5211c0f..882aa48 100644
--- a/LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml
+++ b/LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml
@@ -278,6 +278,20 @@
             <param name="input"></param>
             <returns></returns>
         </member>
+        <member name="M:LifePayment.HttpApi.OperateHistoryController.GetOperateHistoryByRelationId(LifePayment.Application.Contracts.GetOperateHistoryInput)">
+            <summary>
+            鏌ヨ鏃ュ織
+            </summary>
+            <param name="input"></param>
+            <returns></returns>
+        </member>
+        <member name="M:LifePayment.HttpApi.OperateHistoryController.GetOperateHistoryByType(LifePayment.Application.Contracts.QueryOperateHistoryByTypeInput)">
+            <summary>
+            鏍规嵁type鏌ヨ鏃ュ織
+            </summary>
+            <param name="input"></param>
+            <returns></returns>
+        </member>
         <member name="M:LifePayment.HttpApi.UserRoleController.CreateBackClientUser(LifePayment.Application.Contracts.CreateBackClientUserInput)">
             <summary>
             鏂板鍚庡彴绠$悊璐︽埛
diff --git a/LifePayment/LifePayment.Host/LifePaymentServiceHostModule.cs b/LifePayment/LifePayment.Host/LifePaymentServiceHostModule.cs
index f29bd19..332f441 100644
--- a/LifePayment/LifePayment.Host/LifePaymentServiceHostModule.cs
+++ b/LifePayment/LifePayment.Host/LifePaymentServiceHostModule.cs
@@ -54,7 +54,7 @@
 
             //Configure<AliYunSMSSettingOptions>(configuration.GetSection("AliYunSMSSetting"));
             context.Services.AddAutoMapperObjectMapper();
-            
+            ConfigurePays(context, configuration);
             context.Services.AddAuthentication("Bearer").AddIdentityServerAuthentication(options =>
             {
                 options.Authority = configuration["AuthServer:Authority"];
@@ -150,6 +150,7 @@
                 cacheOptions.GlobalCacheEntryOptions.SlidingExpiration = TimeSpan.FromMinutes(20);
             });
             this.Configure<ACOOLYOption>(configuration.GetSection("ACOOLY"));
+            this.Configure<InformationOption>(configuration.GetSection("WeiXinCgi"));
         }
 
         public override void OnApplicationInitialization(ApplicationInitializationContext context)
diff --git a/LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml b/LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml
index 0e1ce92..5ce8457 100644
--- a/LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml
+++ b/LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml
@@ -1298,6 +1298,46 @@
             绾夸笅鏀粯姹囨鏈�鏅氭椂闂�
             </summary>
         </member>
+        <member name="P:LifePayment.Application.Contracts.OperateHistoryDto.RelationId">
+            <summary>
+            鍏宠仈鍏崇郴ID
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.OperateHistoryDto.TableType">
+            <summary>
+            琛ㄥ悕
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.OperateHistoryDto.OperateName">
+            <summary>
+            鎿嶄綔
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.OperateHistoryDto.OperateContent">
+            <summary>
+            鎿嶄綔鍐呭
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.OperateHistoryDto.CreatorName">
+            <summary>
+            鎿嶄綔浜�
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.OperateHistoryDto.CreationTime">
+            <summary>
+            鎿嶄綔鏃堕棿
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.OperateHistoryDto.OperateDetail">
+            <summary>
+            鎿嶄綔缁嗚妭
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.CreateOperateHistoryInput.RelationId">
+            <summary>
+            鍏宠仈鍏崇郴ID
+            </summary>
+        </member>
         <member name="P:LifePayment.Application.Contracts.CreateBackClientUserInput.Name">
             <summary>
             鍚嶇О
diff --git a/LifePayment/LifePayment.HttpApi/LifePay/OperateHistoryController.cs b/LifePayment/LifePayment.HttpApi/LifePay/OperateHistoryController.cs
new file mode 100644
index 0000000..96e2d8f
--- /dev/null
+++ b/LifePayment/LifePayment.HttpApi/LifePay/OperateHistoryController.cs
@@ -0,0 +1,46 @@
+锘縰sing LifePayment.Application.Contracts;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using System.Threading.Tasks;
+using Volo.Abp.AspNetCore.Mvc;
+using Volo.Abp.Uow;
+using ZeroD.Util;
+
+namespace LifePayment.HttpApi
+{
+    [Route("api/[controller]/[action]")]
+    [ApiController]
+    [Authorize]
+    public class OperateHistoryController : AbpController
+    {
+        private readonly IOperateHistoryService _operateHistoryService;
+        public OperateHistoryController(
+               IOperateHistoryService operateHistoryService)
+        {
+            _operateHistoryService = operateHistoryService;
+        }
+        /// <summary>
+        /// 鏌ヨ鏃ュ織
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [UnitOfWork(IsDisabled = true)]
+        public async Task<PageOutput<OperateHistoryDto>> GetOperateHistoryByRelationId(GetOperateHistoryInput input)
+        {
+            return await _operateHistoryService.GetOperateHistoryByRelationId(input);
+        }
+
+        /// <summary>
+        /// 鏍规嵁type鏌ヨ鏃ュ織
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [UnitOfWork(IsDisabled = true)]
+        public async Task<PageOutput<OperateHistoryDto>> GetOperateHistoryByType(QueryOperateHistoryByTypeInput input)
+        {
+            return await _operateHistoryService.GetOperateHistoryByType(input);
+        }
+    }
+}

--
Gitblit v1.9.1