From 17308f6494c81fb5a5ee035724a414ec7da11936 Mon Sep 17 00:00:00 2001
From: username@email.com <yzy2002yzy@163.com>
Date: 星期四, 22 八月 2024 08:38:45 +0800
Subject: [PATCH] Merge branch 'master' of http://47.108.235.38:8080/r/cylsg

---
 cylsg/EzUpFile/EzUpFile.csproj                           |   17 
 cylsg/EzWechat/WechatConfig.json                         |    9 
 cylsg/EzTencentCloud/ITencentCloudService.cs             |   44 ++
 .gitignore                                               |    4 
 cylsg/cylsg.Model/UserModel/UserWorker.cs                |   27 +
 cylsg/cylsg.Web.Core/cylsg.Web.Core.csproj               |    1 
 cylsg/EzTencentCloud/TencentCloudConfig.json             |   10 
 cylsg/EzWechat/WechatService.cs                          |   12 
 cylsg/cylsg.Application/applicationsettings.json         |    8 
 cylsg/cylsg.Authorization/cylsg.Authorization.csproj     |    1 
 cylsg/EzUpFile/UpFileConfig.json                         |   29 +
 cylsg/EzUpFile/EzFileUploadService.cs                    |  531 +++++++++++++++++++++++++
 /dev/null                                                |    7 
 cylsg/cylsg.Application/System/Services/SystemService.cs |    2 
 cylsg/cylsg.Application/LogoInController.cs              |    3 
 cylsg/cylsg.Web.Entry/appsettings.json                   |    1 
 cylsg/EzUpFile/UpFileController.cs                       |  187 ++++++++
 cylsg/EzWechat/WecharPayServicecs.cs                     |   43 ++
 cylsg/EzWechat/EzWechat.csproj                           |    1 
 cylsg/EzTencentCloud/TencentCloudService.cs              |  213 +++++++++
 cylsg/EzWechat/IWecharPayServicecs.cs                    |   19 
 cylsg/cylsg.Application/cylsg.Application.csproj         |    1 
 cylsg/EzUpFile/IEzFileUploadService.cs                   |   67 +++
 23 files changed, 1,217 insertions(+), 20 deletions(-)

diff --git a/.gitignore b/.gitignore
index f80bbf4..324afb0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -23,3 +23,7 @@
 cylsg/EzTencentCloud/bin/
 cylsg/EzTencentCloud/obj/
 cylsg/EzUpFile/obj/
+cylsg/cylsg.services/bin/
+cylsg/EzUpFile/bin/
+cylsg/cylsg.Web.Entry/wwwroot/wechartKey/
+cylsg/cylsg.Web.Entry/wwwroot/1669018589_20240820_cert.zip
diff --git a/cylsg/EzTencentCloud/Class1.cs b/cylsg/EzTencentCloud/Class1.cs
deleted file mode 100644
index 5238cf9..0000000
--- a/cylsg/EzTencentCloud/Class1.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-锘縩amespace EzTencentCloud
-{
-    public class Class1
-    {
-
-    }
-}
diff --git a/cylsg/EzTencentCloud/ITencentCloudService.cs b/cylsg/EzTencentCloud/ITencentCloudService.cs
index 8a43e16..da37eff 100644
--- a/cylsg/EzTencentCloud/ITencentCloudService.cs
+++ b/cylsg/EzTencentCloud/ITencentCloudService.cs
@@ -4,6 +4,7 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using TencentCloud.Iai.V20200303.Models;
 using TencentCloud.Ocr.V20181119.Models;
 
 namespace EzTencentCloud
@@ -13,10 +14,11 @@
     /// </summary>
     public interface ITencentCloudService: IScoped
     {
+        #region orc 鍥炬枃璇嗗埆
         /// <summary>
         /// 韬唤璇佽瘑鍒紝骞跺壀瑁�
         /// </summary>
-        /// <param name="ImageBase64"></param>
+        /// <param name="ImageBase64">鍥剧墖base64</param>
         /// <param name="isFRONT"></param>
         /// <returns></returns>
         IDCardOCRResponse IdCord(string ImageBase64, bool isFRONT);
@@ -25,5 +27,45 @@
         /// </summary>
         /// <returns></returns>
         string GetIdCordImg();
+        /// <summary>
+        /// 钀ヤ笟鎵х収璁よ瘉
+        /// </summary>
+        /// <param name="ImageBase64"> 鍥剧墖base64</param>
+        /// <returns></returns>
+        BizLicenseOCRResponse BizLicenseOCR(string ImageBase64);
+        #endregion
+        #region iai 浜鸿劯璇嗗埆
+        /// <summary>
+        /// 鍒涘缓浜鸿劯搴擄紝涓�鑸竴涓簯璐﹀彿鍙渶瑕佸垱寤轰竴娆�
+        /// </summary>
+        public void IaiCreatGroup();
+        /// <summary>
+        /// 浜鸿劯楠岃瘉 涓�鑸垎鏁拌秴杩�50 鍒嗚瘑鍒负涓�涓汉
+        /// </summary>
+        /// <param name="img64"></param>
+        /// <param name="PersonNameId"></param>
+        /// <returns></returns>
+        public VerifyFaceResponse VerifyFace(string img64, string PersonNameId);
+        /// <summary>
+        /// 澧炲姞涓�涓汉鐨勪汉鑴稿浘鐗囩壒寰侊紝涓�涓渶澶氬彧鍏佽鏈変簲涓汉鑴哥壒杩�
+        /// </summary>
+        /// <param name="img64"></param>
+        /// <param name="PersonNameId"></param>
+        /// <param name="PersonName"></param>
+        /// <param name="PersonGender"></param>
+        /// <returns></returns>
+        public bool IaiAddPersoImg(string img64, string PersonNameId, string PersonName, int PersonGender);
+
+        /// <summary>
+        /// 澧炲姞涓�涓汉
+        /// </summary>
+        /// <param name="img64">浜鸿劯鐓�</param>
+        /// <param name="PersonNameId">浜鸿劯ID 涓�涓簯璐︽埛涓敮涓�</param>
+        /// <param name="PersonName">濮撳悕</param>
+        /// <param name="PersonGender">鎬у埆    0浠h〃鏈~鍐欙紝1浠h〃鐢锋�э紝2浠h〃濂虫�с��</param>
+        /// <returns></returns>
+        public bool IaiAddPerso(string img64, string PersonNameId, string PersonName, int  PersonGender);
+        #endregion
+
     }
 }
diff --git a/cylsg/EzTencentCloud/TencentCloudConfig.json b/cylsg/EzTencentCloud/TencentCloudConfig.json
index e52425a..0623d8f 100644
--- a/cylsg/EzTencentCloud/TencentCloudConfig.json
+++ b/cylsg/EzTencentCloud/TencentCloudConfig.json
@@ -1,6 +1,12 @@
 {
   "TencentCloud": {
-    "SecretId":    "AKIDIPFp9CyThfMmvoQlpeCl34pKYVBahY9T",
-    "SecretKey":   "4rNcaHhrkMhmb9QQ9bmgKipfFZcOt86n"
+    "SecretId": "AKIDIPFp9CyThfMmvoQlpeCl34pKYVBahY9T",
+    "SecretKey": "4rNcaHhrkMhmb9QQ9bmgKipfFZcOt86n"
+  },
+  //浜鸿劯搴撶浉鍏抽厤缃�
+  "IAIGroupSet": {
+    "ID": "cylsg",
+    "Name": "宸濆嵃涓存椂宸�"
   }
+
 }
diff --git a/cylsg/EzTencentCloud/TencentCloudService.cs b/cylsg/EzTencentCloud/TencentCloudService.cs
index 5d2919d..ceafd97 100644
--- a/cylsg/EzTencentCloud/TencentCloudService.cs
+++ b/cylsg/EzTencentCloud/TencentCloudService.cs
@@ -12,11 +12,25 @@
 using TencentCloud.Common.Profile;
 using Furion.DependencyInjection;
 using Furion;
+using TencentCloud.Iai.V20200303;
+using TencentCloud.Iai.V20200303.Models;
+
+
+
 
 namespace EzTencentCloud
 {
     public class TencentCloudService: ITencentCloudService, IScoped
     {
+
+       
+
+
+        public   TencentCloudService()
+        {
+           
+        }
+        #region orc 鍥炬枃璇嗗埆
         /// <summary>
         /// 鍓鍚庣殑韬唤璇佸浘鐗�
         /// </summary>
@@ -31,13 +45,14 @@
 
         }
 
-        public   IDCardOCRResponse IdCord(string ImageBase64, bool isFRONT)
+        public IDCardOCRResponse IdCord(string ImageBase64, bool isFRONT)
         {
             try
             {
+
                 Credential cred = new Credential
                 {
-                    SecretId = App.Configuration["TencentCloud:SecretId"] ??"AKIDIPFp9CyThfMmvoQlpeCl34pKYVBahY9T",
+                    SecretId = App.Configuration["TencentCloud:SecretId"] ?? "AKIDIPFp9CyThfMmvoQlpeCl34pKYVBahY9T",
                     SecretKey = App.Configuration["TencentCloud:SecretKey"] ?? "4rNcaHhrkMhmb9QQ9bmgKipfFZcOt86n"
                 };
 
@@ -48,7 +63,8 @@
                 httpProfile.Endpoint = ("ocr.tencentcloudapi.com");
                 clientProfile.HttpProfile = httpProfile;
 
-                OcrClient client = new OcrClient(cred, "ap-beijing", clientProfile);
+                var _ocrClient = new OcrClient(cred, "ap-shanghai", clientProfile);
+
                 IDCardOCRRequest req = new IDCardOCRRequest();
                 if (isFRONT)
                     req.CardSide = "FRONT";
@@ -73,7 +89,7 @@
                     Quality = true,
 
                 });
-                IDCardOCRResponse resp =  client.IDCardOCRSync(req);
+                IDCardOCRResponse resp = _ocrClient.IDCardOCRSync(req);
 
                 if (resp == null)
                     throw new Exception("鍥剧墖鏃犳硶璇嗗埆锛岃閲嶆柊閫夋嫨韬唤璇佸浘鐗�");
@@ -103,6 +119,195 @@
         }
 
 
+
+        public BizLicenseOCRResponse BizLicenseOCR(string ImageBase64)
+        {
+            try
+            {
+
+                Credential cred = new Credential
+                {
+                    SecretId = App.Configuration["TencentCloud:SecretId"] ?? "AKIDIPFp9CyThfMmvoQlpeCl34pKYVBahY9T",
+                    SecretKey = App.Configuration["TencentCloud:SecretKey"] ?? "4rNcaHhrkMhmb9QQ9bmgKipfFZcOt86n"
+                };
+
+                ClientProfile clientProfile = new ClientProfile();
+                HttpProfile httpProfile = new HttpProfile();
+
+
+                httpProfile.Endpoint = ("ocr.tencentcloudapi.com");
+                clientProfile.HttpProfile = httpProfile;
+
+                var _ocrClient = new OcrClient(cred, "ap-chengdu", clientProfile);
+          
+                var ret = _ocrClient.BizLicenseOCRSync(new BizLicenseOCRRequest()
+                {
+                     ImageBase64 = ImageBase64, 
+                });
+               
+                return ret;
+            }
+            catch (Exception)
+            {
+                throw;
+            }
+
+
+        }
+
+
+        #endregion
+
+        #region iai 浜鸿劯璇嗗埆
+        public void  IaiCreatGroup()
+        {
+
+            Credential cred = new Credential
+            {
+                SecretId = App.Configuration["TencentCloud:SecretId"] ?? "AKIDIPFp9CyThfMmvoQlpeCl34pKYVBahY9T",
+                SecretKey = App.Configuration["TencentCloud:SecretKey"] ?? "4rNcaHhrkMhmb9QQ9bmgKipfFZcOt86n"
+            };
+
+            ClientProfile clientProfile = new ClientProfile();
+            HttpProfile httpProfile = new HttpProfile();
+
+
+            httpProfile.Endpoint = ("iai.tencentcloudapi.com");
+            clientProfile.HttpProfile = httpProfile;
+
+            var iaiClient = new IaiClient(cred, "ap-shanghai", clientProfile);
+            try
+            {
+                var retinfo = iaiClient.GetGroupInfoSync(new GetGroupInfoRequest
+                {
+                    GroupId = App.Configuration["IAIGroupSet:ID"] ?? "",
+                });
+            }
+            catch (TencentCloudSDKException e)
+            {
+                if (e.ErrorCode == "InvalidParameterValue.GroupIdNotExist")
+
+                {
+                    CreateGroupRequest request = new CreateGroupRequest()
+                    {
+                        GroupId = App.Configuration["IAIGroupSet:ID"],
+                        GroupName= App.Configuration["IAIGroupSet:Name"],
+                       
+
+                    };
+                    var aia = iaiClient.CreateGroupSync(request);
+                }
+            }
+       
+          
+       
+        }
+
+
+        public bool IaiAddPerso( string img64,string PersonNameId,string PersonName,  int PersonGender)
+        {
+
+            Credential cred = new Credential
+            {
+                SecretId = App.Configuration["TencentCloud:SecretId"] ?? "AKIDIPFp9CyThfMmvoQlpeCl34pKYVBahY9T",
+                SecretKey = App.Configuration["TencentCloud:SecretKey"] ?? "4rNcaHhrkMhmb9QQ9bmgKipfFZcOt86n"
+            };
+
+            ClientProfile clientProfile = new ClientProfile();
+            HttpProfile httpProfile = new HttpProfile();
+
+
+            httpProfile.Endpoint = ("iai.tencentcloudapi.com");
+            clientProfile.HttpProfile = httpProfile;
+
+            var iaiClient = new IaiClient(cred, "ap-shanghai", clientProfile);
+           var ret=  iaiClient.CreatePerson(new TencentCloud.Iai.V20200303.Models.CreatePersonRequest
+            {
+                GroupId = App.Configuration["IAIGroupSet:ID"],
+                Image = img64,
+                 PersonId= PersonNameId,
+                PersonName= PersonName,
+                Gender=PersonGender,
+
+            });
+
+            if(ret.IsFaulted)
+            return false;
+            else
+            return true;
+
+
+
+        }
+
+
+        public bool IaiAddPersoImg(string img64, string PersonNameId, string PersonName, int PersonGender)
+        {
+
+            Credential cred = new Credential
+            {
+                SecretId = App.Configuration["TencentCloud:SecretId"] ?? "AKIDIPFp9CyThfMmvoQlpeCl34pKYVBahY9T",
+                SecretKey = App.Configuration["TencentCloud:SecretKey"] ?? "4rNcaHhrkMhmb9QQ9bmgKipfFZcOt86n"
+            };
+
+            ClientProfile clientProfile = new ClientProfile();
+            HttpProfile httpProfile = new HttpProfile();
+
+
+            httpProfile.Endpoint = ("iai.tencentcloudapi.com");
+            clientProfile.HttpProfile = httpProfile;
+            var iaiClient = new IaiClient(cred, "ap-chengdu", clientProfile);
+            var ret = iaiClient.CreateFace( new TencentCloud.Iai.V20200303.Models.CreateFaceRequest
+            {
+              
+                PersonId = PersonNameId,
+                Images = [img64],
+                 
+        
+
+            });
+
+            if (ret.IsFaulted)
+                return false;
+            else
+                return true;
+
+
+
+        }
+
+
+        public VerifyFaceResponse VerifyFace(string img64, string PersonNameId)
+        {
+            Credential cred = new Credential
+            {
+                SecretId = App.Configuration["TencentCloud:SecretId"] ?? "AKIDIPFp9CyThfMmvoQlpeCl34pKYVBahY9T",
+                SecretKey = App.Configuration["TencentCloud:SecretKey"] ?? "4rNcaHhrkMhmb9QQ9bmgKipfFZcOt86n"
+            };
+
+            ClientProfile clientProfile = new ClientProfile();
+            HttpProfile httpProfile = new HttpProfile();
+
+
+            httpProfile.Endpoint = ("iai.tencentcloudapi.com");
+            clientProfile.HttpProfile = httpProfile;
+            var iaiClient = new IaiClient(cred, "ap-chengdu", clientProfile);
+            var ret = iaiClient.VerifyFaceSync(new  TencentCloud.Iai.V20200303.Models.VerifyFaceRequest
+            {
+
+                PersonId = PersonNameId,
+                 Image= img64
+
+
+
+            });
+            return ret;
+
+
+
+        }
+        #endregion
+
     }
 
     //杩斿洖鎵╁睍鍙傛暟
diff --git a/cylsg/EzUpFile/Class1.cs b/cylsg/EzUpFile/Class1.cs
deleted file mode 100644
index 2d366e9..0000000
--- a/cylsg/EzUpFile/Class1.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-锘縩amespace EzUpFile
-{
-    public class Class1
-    {
-
-    }
-}
diff --git a/cylsg/EzUpFile/EzFileUploadService.cs b/cylsg/EzUpFile/EzFileUploadService.cs
new file mode 100644
index 0000000..da61bfd
--- /dev/null
+++ b/cylsg/EzUpFile/EzFileUploadService.cs
@@ -0,0 +1,531 @@
+锘�
+using Aliyun.OSS;
+using Aliyun.OSS.Util;
+using cylsg.utility;
+using cylsg.utility.Extend;
+using EzTencentCloud;
+using Furion;
+using Furion.DependencyInjection;
+using Furion.FriendlyException;
+using Microsoft.AspNetCore.Http;
+
+using SqlSugar;
+using System;
+using System.Buffers.Text;
+using System.Drawing;
+using System.Globalization;
+using System.Security.Policy;
+using TencentCloud.Ocr.V20181119.Models;
+using TencentCloud.Teo.V20220901.Models;
+using Task = System.Threading.Tasks.Task;
+namespace EzUpFile
+{
+    /// <summary>
+    /// 闄勪欢鏈嶅姟绋嬪簭
+    /// </summary>
+    public class EzFileUploadService : IEzFileUploadService, IScoped
+    {
+
+        private readonly HttpRequest? _request;
+        private readonly ISqlSugarClient _sqlSugarClient;
+        private readonly ITencentCloudService _tcs;
+        public EzFileUploadService(IHttpContextAccessor httpContext, ISqlSugarClient sqlSugarClient,ITencentCloudService tencentCloudService)
+        {
+
+            _request = httpContext.HttpContext?.Request ?? null;
+            _sqlSugarClient = sqlSugarClient;
+            _tcs= tencentCloudService;
+        }
+
+        /// <summary>
+        /// 涓婁紶闄勪欢
+        /// </summary>
+        /// <returns></returns>
+        public async Task<string> UploadFiles()
+        {
+
+
+            var maxSize = 1024 * 1024 * 5; //涓婁紶澶у皬5M
+
+            var file = _request?.Form?.Files["file"];
+            if (file == null)
+            {
+                throw Oops.Oh("浣犳病鏈夐�夋嫨鏂囦欢");
+            }
+
+            var fileName = file.FileName;
+            var fileExt = Path.GetExtension(fileName).ToLowerInvariant();
+
+            //妫�鏌ュぇ灏�
+            if (file.Length > maxSize)
+            {
+                throw Oops.Oh("鏂囦欢澶т簬璁剧疆鏂囦欢");
+            }
+
+            ////妫�鏌ユ枃浠舵墿灞曞悕
+            //if (string.IsNullOrEmpty(fileExt) || Array.IndexOf(op.AttachmentSaveFileExtName?.Split(',') ?? new string[] { "" }, fileExt.Substring(1).ToLower()) == -1)
+            //{
+            //    throw Oops.Oh("涓婁紶鏂囦欢鎵╁睍鍚嶆槸涓嶅厑璁哥殑鎵╁睍鍚�,璇蜂笂浼犲悗缂�鍚嶄负锛�" + op.AttachmentSaveFileExtName);
+
+            //}
+
+            string url = string.Empty;
+
+
+            url = await UpLoadFileForAliYunOSS(fileExt, file);
+
+
+            return url;
+
+
+        }
+
+        /// <summary>
+        /// 涓婁紶base64
+        /// </summary>
+        /// <param name="base64"></param>
+        /// <returns></returns>
+        public async Task<string> UploadFilesFByBase64(string base64)
+        {
+
+            if (string.IsNullOrEmpty(base64))
+            {
+                throw Oops.Oh("娌℃湁鍐呭");
+            }
+
+            //妫�鏌ヤ笂浼犲ぇ灏�
+            if (!CommonHelper.CheckBase64Size(base64, 5))
+            {
+                throw Oops.Oh("涓婁紶鏂囦欢澶у皬瓒呰繃闄愬埗锛屾渶澶у厑璁镐笂浼�" + "5" + "M");
+
+            }
+
+            base64 = base64.Replace("data:image/png;base64,", "").Replace("data:image/jgp;base64,", "").Replace("data:image/jpg;base64,", "").Replace("data:image/jpeg;base64,", "");//灏哹ase64澶撮儴淇℃伅鏇挎崲
+            byte[] bytes = Convert.FromBase64String(base64);
+            MemoryStream memStream = new MemoryStream(bytes);
+
+            string url = string.Empty;
+
+            url = await UpLoadBase64ForAliYunOSS(memStream);
+
+
+
+            return url;
+        }
+
+        /// <summary>
+        /// 鍒犻櫎鏂囦欢
+        /// </summary>
+        /// <param name="Path"></param>
+        /// <returns></returns>
+        public async Task<bool> DelFile(string Path)
+        {
+
+
+            var ret = await DelFileForAliYunOSS(Path);
+
+
+
+            return ret;
+        }
+
+
+
+        #region 闃块噷浜戜笂浼犳柟娉曪紙File锛�
+        /// <summary>
+        /// 闃块噷浜戜笂浼犳柟娉曪紙File锛�
+        /// </summary>
+        /// <param name="options"></param>
+        /// <param name="fileExt"></param>
+        /// <param name="file"></param>
+        /// <returns></returns>
+        public async Task<string> UpLoadFileForAliYunOSS(string fileExt, IFormFile file)
+        {
+
+
+            var newFileName = DateTime.Now.ToString("yyyyMMddHHmmss_ffff", DateTimeFormatInfo.InvariantInfo) + fileExt;
+            var today = DateTime.Now.ToString("yyyyMMdd");
+
+            //涓婁紶鍒伴樋閲屼簯
+            await using var fileStream = file.OpenReadStream();
+            var md5 = OssUtils.ComputeContentMd5(fileStream, file.Length);
+
+            var filePath = App.Configuration["FileUploadOptions:SavePath"] + today + "/" + newFileName; //浜戞枃浠朵繚瀛樿矾寰�
+            //鍒濆鍖栭樋閲屼簯閰嶇疆--澶栫綉Endpoint銆佽闂甀D銆佽闂畃assword
+            var aliYun = new OssClient(App.Configuration["FileUploadOptions:AliOSSEndpoint"], App.Configuration["FileUploadOptions:AliOSSAccessKeyID"], App.Configuration["FileUploadOptions:AliOSSAccessKeySecret"]);
+            //灏嗘枃浠秏d5鍊艰祴鍊肩粰meat澶翠俊鎭紝鏈嶅姟鍣ㄩ獙璇佹枃浠禡D5
+            var objectMeta = new ObjectMetadata
+            {
+                ContentMd5 = md5
+            };
+
+
+            var task = Task.Run(() =>
+            //鏂囦欢涓婁紶--绌洪棿鍚嶃�佹枃浠朵繚瀛樿矾寰勩�佹枃浠舵祦銆乵eta澶翠俊鎭�(鏂囦欢md5) //杩斿洖meta澶翠俊鎭�(鏂囦欢md5)
+                aliYun.PutObject(App.Configuration["FileUploadOptions:AliOSSBucketName"], filePath, fileStream, objectMeta)
+
+
+
+              );
+            //绛夊緟瀹屾垚
+            try
+            {
+                task.Wait();
+            }
+            catch (AggregateException ex)
+            {
+
+                throw Oops.Oh(ex.Message);
+            }
+
+            //杩斿洖缁橴Editor鐨勬彃鍏ョ紪杈戝櫒鐨勫浘鐗囩殑src
+
+            return App.Configuration["FileUploadOptions:AliOSSSaveBaseUrl"] + filePath;
+        }
+
+        #endregion
+
+
+
+
+
+        #region 闃块噷浜戜笂浼犳柟娉曪紙Base64锛�
+        /// <summary>
+        /// 闃块噷浜戜笂浼犳柟娉曪紙Base64锛�
+        /// </summary>
+        /// <param name="options"></param>
+        /// <param name="memStream"></param>
+        /// <returns></returns>
+        public async Task<string> UpLoadBase64ForAliYunOSS(MemoryStream memStream)
+        {
+
+
+            var newFileName = DateTime.Now.ToString("yyyyMMddHHmmss_ffff", DateTimeFormatInfo.InvariantInfo) + ".jpg";
+            var today = DateTime.Now.ToString("yyyyMMdd");
+
+            // 璁剧疆褰撳墠娴佺殑浣嶇疆涓烘祦鐨勫紑濮�
+            memStream.Seek(0, SeekOrigin.Begin);
+
+            await using var fileStream = memStream;
+            var md5 = OssUtils.ComputeContentMd5(fileStream, memStream.Length);
+
+            var filePath = App.Configuration["FileUploadOptions:SavePath"] + today + "/" + newFileName; //浜戞枃浠朵繚瀛樿矾寰�
+                                                                                                        //鍒濆鍖栭樋閲屼簯閰嶇疆--澶栫綉Endpoint銆佽闂甀D銆佽闂畃assword
+            var aliYun = new OssClient(App.Configuration["FileUploadOptions:AliOSSEndpoint"], App.Configuration["FileUploadOptions:AliOSSAccessKeyID"], App.Configuration["FileUploadOptions:AliOSSAccessKeySecret"]);
+            //灏嗘枃浠秏d5鍊艰祴鍊肩粰meat澶翠俊鎭紝鏈嶅姟鍣ㄩ獙璇佹枃浠禡D5
+            var objectMeta = new ObjectMetadata
+            {
+                ContentMd5 = md5
+            };
+            try
+            {
+                //鏂囦欢涓婁紶--绌洪棿鍚嶃�佹枃浠朵繚瀛樿矾寰勩�佹枃浠舵祦銆乵eta澶翠俊鎭�(鏂囦欢md5) //杩斿洖meta澶翠俊鎭�(鏂囦欢md5)
+                aliYun.PutObject(App.Configuration["FileUploadOptions:AliOSSBucketName"], filePath, fileStream, objectMeta);
+            }
+            catch (AggregateException ex)
+            {
+
+                throw Oops.Oh(ex.Message);
+            }
+
+
+            //杩斿洖缁橴Editor鐨勬彃鍏ョ紪杈戝櫒鐨勫浘鐗囩殑src
+
+            return App.Configuration["FileUploadOptions:AliOSSSaveBaseUrl"] + filePath;
+
+        }
+
+        #endregion
+
+
+
+
+
+        #region 鍒犻櫎鏂囦欢
+
+        /// <summary>
+        /// 闃块噷浜戝垹闄�
+        /// </summary>
+        /// <param name="options"></param>
+        /// <param name="fileUrl">甯xx.xx鐨勯摼鎺ュ湴鍧�</param>
+        /// <returns></returns>
+        public async Task<bool> DelFileForAliYunOSS(string fileUrl)
+        {
+
+
+
+
+
+
+
+
+
+
+            //鍒濆鍖栭樋閲屼簯閰嶇疆--澶栫綉Endpoint銆佽闂甀D銆佽闂畃assword
+            var aliYun = new OssClient(App.Configuration["FileUploadOptions:AliOSSEndpoint"], App.Configuration["FileUploadOptions:AliOSSAccessKeyID"], App.Configuration["FileUploadOptions:AliOSSAccessKeySecret"]);
+
+            try
+            {
+                var task = Task.Run(() => aliYun.DeleteObject(App.Configuration["FileUploadOptions:AliOSSBucketName"], (App.Configuration["FileUploadOptions:SavePath"]?.RemoveStartWithStr("/") ?? "") + fileUrl.GetFileName()));
+
+
+                task.Wait();
+
+            }
+            catch (Exception ex)
+            {
+
+                throw Oops.Oh(ex.Message);
+            }
+
+
+            //杩斿洖缁橴Editor鐨勬彃鍏ョ紪杈戝櫒鐨勫浘鐗囩殑src
+
+            return true;
+
+        }
+
+
+
+
+        #endregion
+
+        #region 璇嗗埆涓婁紶
+        public async Task<(IDCardOCRResponse, string)> UpIdCord(string PageName = "FRONT")
+        {
+            try
+            {
+
+                var maxSize = 1024 * 1024 * 5; //涓婁紶澶у皬5M
+
+                var FileData = _request?.Form?.Files["file"];
+
+                if (FileData.Length > maxSize)
+                {
+                    throw Oops.Oh(" 涓婁紶鏂囦欢涓嶅彲瓒呭嚭500K");
+                }
+
+
+                //澶勭悊鍥惧舰
+                //  var FileData = Request.Form.Files[0];
+
+                Image oimage = Image.FromStream(FileData.OpenReadStream());
+                if (oimage == null)
+                {
+                    throw Oops.Oh(" 涓婁紶澶辫触");
+                }
+
+                MemoryStream ms = new MemoryStream();
+                if (oimage.Width > 600)
+
+                {
+                    if (oimage.Width > oimage.Height)
+                        oimage.GetThumbnailImage(600, 400, null, IntPtr.Zero).Save(ms, System.Drawing.Imaging.ImageFormat.Png);
+                    else
+                        oimage.GetThumbnailImage(400, 600, null, IntPtr.Zero).Save(ms, System.Drawing.Imaging.ImageFormat.Png);
+                }
+                else
+                    oimage.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
+                ms.Position = 0;
+
+                var arr = ms.ToArray();
+                string img64 = Convert.ToBase64String(arr);
+
+                IDCardOCRResponse idcordinfo = null;
+                string url = "";
+
+                try
+                {
+
+
+                    idcordinfo = _tcs.IdCord(img64, PageName == "FRONT");
+
+                    url = await UploadFilesFByBase64(_tcs.GetIdCordImg());
+                    idcordinfo.AdvancedInfo = null;
+
+                    return (idcordinfo, url);
+
+                }
+                catch (Exception e)
+                {
+
+                    throw Oops.Oh(e.Message);
+                }
+            }
+            catch (Exception e)
+            {
+
+                throw Oops.Oh(e.Message);
+            }
+
+        }
+
+        public async Task<(BizLicenseOCRResponse, string)> UpBizLicense()
+        {
+            try
+            {
+
+                var maxSize = 1024 * 1024 * 5; //涓婁紶澶у皬5M
+
+                var FileData = _request?.Form?.Files["file"];
+
+                if (FileData.Length > maxSize)
+                {
+                    throw Oops.Oh(" 涓婁紶鏂囦欢涓嶅彲瓒呭嚭500K");
+                }
+
+
+                //澶勭悊鍥惧舰
+                //  var FileData = Request.Form.Files[0];
+
+                Image oimage = Image.FromStream(FileData.OpenReadStream());
+                if (oimage == null)
+                {
+                    throw Oops.Oh(" 涓婁紶澶辫触");
+                }
+
+                MemoryStream ms = new MemoryStream();
+                if (oimage.Width > 600)
+
+                {
+                    if (oimage.Width > oimage.Height)
+                        oimage.GetThumbnailImage(600, 400, null, IntPtr.Zero).Save(ms, System.Drawing.Imaging.ImageFormat.Png);
+                    else
+                        oimage.GetThumbnailImage(400, 600, null, IntPtr.Zero).Save(ms, System.Drawing.Imaging.ImageFormat.Png);
+                }
+                else
+                    oimage.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
+                ms.Position = 0;
+
+                var arr = ms.ToArray();
+                string img64 = Convert.ToBase64String(arr);
+
+                BizLicenseOCRResponse info = null;
+                string url = "";
+
+                try
+                {
+                    info = _tcs.BizLicenseOCR(img64);
+
+                    url = await UploadFilesFByBase64(img64);
+
+                    return (info, url);
+
+                }
+                catch (Exception e)
+                {
+
+                    throw Oops.Oh(e.Message);
+                }
+            }
+            catch (Exception e)
+            {
+
+                throw Oops.Oh(e.Message);
+            }
+        }
+
+
+        public async Task<(bool,string)> IaiAddPerso(string CoredID,string Name,int PersonGender)
+        {
+            try
+            {
+
+                var maxSize = 1024 * 1024 * 5; //涓婁紶澶у皬5M
+
+                var FileData = _request?.Form?.Files["file"];
+
+                if (FileData.Length > maxSize)
+                {
+                    throw Oops.Oh(" 涓婁紶鏂囦欢涓嶅彲瓒呭嚭500K");
+                }
+
+
+                //澶勭悊鍥惧舰
+                //  var FileData = Request.Form.Files[0];
+
+                Image oimage = Image.FromStream(FileData.OpenReadStream());
+                if (oimage == null)
+                {
+                    throw Oops.Oh(" 涓婁紶澶辫触");
+                }
+
+                MemoryStream ms = new MemoryStream();
+                if (oimage.Width > 600)
+
+                {
+                    if (oimage.Width > oimage.Height)
+                        oimage.GetThumbnailImage(600, 400, null, IntPtr.Zero).Save(ms, System.Drawing.Imaging.ImageFormat.Png);
+                    else
+                        oimage.GetThumbnailImage(400, 600, null, IntPtr.Zero).Save(ms, System.Drawing.Imaging.ImageFormat.Png);
+                }
+                else
+                    oimage.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
+                ms.Position = 0;
+
+                var arr = ms.ToArray();
+                string img64 = Convert.ToBase64String(arr);
+
+                bool  info = false;
+                string url = "";
+
+                try
+                {
+                    info =  _tcs.IaiAddPerso(img64, CoredID, Name, PersonGender);
+
+                    url = await UploadFilesFByBase64(img64);
+
+                    return (info, url);
+
+                }
+                catch (Exception e)
+                {
+
+                    throw Oops.Oh(e.Message);
+                }
+            }
+            catch (Exception e)
+            {
+
+                throw Oops.Oh(e.Message);
+            }
+        }
+/// <inheritdoc/>
+
+        public async Task<(bool, string)> IaiAddPerso(string imgBase64, string CoredID, string Name, int PersonGender)
+        {
+            if (string.IsNullOrEmpty(imgBase64))
+            {
+                throw Oops.Oh("娌℃湁鍐呭");
+            }
+
+            //妫�鏌ヤ笂浼犲ぇ灏�
+            if (!CommonHelper.CheckBase64Size(imgBase64, 5))
+            {
+                throw Oops.Oh("涓婁紶鏂囦欢澶у皬瓒呰繃闄愬埗锛屾渶澶у厑璁镐笂浼�" + "5" + "M");
+            }
+
+            imgBase64 = imgBase64.Replace("data:image/png;base64,", "").Replace("data:image/jgp;base64,", "").Replace("data:image/jpg;base64,", "").Replace("data:image/jpeg;base64,", "");//灏哹ase64澶撮儴淇℃伅鏇挎崲
+            bool info = false;
+            string url = "";
+
+            try
+            {
+                info = _tcs.IaiAddPerso(imgBase64, CoredID, Name, PersonGender);
+
+                url = await UploadFilesFByBase64(imgBase64);
+
+                return (info, url);
+
+            }
+            catch (Exception e)
+            {
+
+                throw Oops.Oh(e.Message);
+            }
+        }
+
+
+        #endregion
+    }
+}
diff --git a/cylsg/EzUpFile/EzUpFile.csproj b/cylsg/EzUpFile/EzUpFile.csproj
index fa71b7a..d21d20d 100644
--- a/cylsg/EzUpFile/EzUpFile.csproj
+++ b/cylsg/EzUpFile/EzUpFile.csproj
@@ -4,6 +4,23 @@
     <TargetFramework>net8.0</TargetFramework>
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
+    <GenerateDocumentationFile>True</GenerateDocumentationFile>
   </PropertyGroup>
 
+  <ItemGroup>
+    <PackageReference Include="Aliyun.OSS.SDK.NetCore" Version="2.14.1" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\cylsg.Core\cylsg.Core.csproj" />
+    <ProjectReference Include="..\cylsg.utility\cylsg.utility.csproj" />
+    <ProjectReference Include="..\EzTencentCloud\EzTencentCloud.csproj" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <None Update="UpFileConfig.json">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+  </ItemGroup>
+
 </Project>
diff --git a/cylsg/EzUpFile/IEzFileUploadService.cs b/cylsg/EzUpFile/IEzFileUploadService.cs
new file mode 100644
index 0000000..dbf822d
--- /dev/null
+++ b/cylsg/EzUpFile/IEzFileUploadService.cs
@@ -0,0 +1,67 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using TencentCloud.Ocr.V20181119.Models;
+
+namespace EzUpFile
+{
+    public interface IEzFileUploadService
+    {
+        /// <summary>
+        /// 涓婁紶base64
+        /// </summary>
+        /// <param name="base64"></param>
+        /// <returns></returns>
+        Task<string> UploadFilesFByBase64(string base64);
+        /// <summary>
+        /// 涓婁紶鏂囦欢
+        /// </summary>
+        /// <returns></returns>
+        Task<string> UploadFiles();
+        /// <summary>
+        /// 鍒犻櫎鏂囦欢
+        /// </summary>
+        /// <param name="Path"></param>
+        /// <returns></returns>
+        Task<bool> DelFile(string Path);
+
+        /// <summary>
+        /// 涓婁紶韬唤璇�
+        /// </summary>
+        /// <param name="Path"></param>
+        /// <returns></returns>
+        Task<(IDCardOCRResponse, string)> UpIdCord(string PageName = "FRONT");
+
+
+        /// <summary>
+        /// 涓婁紶钀ヤ笟鎵х収
+        /// </summary>
+        /// <returns></returns>
+        Task<(BizLicenseOCRResponse, string)> UpBizLicense();
+
+        /// <summary>
+        /// 鍒涘缓浜鸿劯鐗瑰緛 鏂囦欢浼犻��
+        /// </summary>
+        /// <param name="CoredID"> 韬唤璇佸彿</param>
+        /// <param name="Name">濮撳悕</param>  
+        /// <param name="PersonGender"> 鎬у埆    0浠h〃鏈~鍐欙紝1浠h〃鐢锋�э紝2浠h〃濂虫�с��</param>
+        /// <returns></returns>
+        Task<(bool, string)> IaiAddPerso(string CoredID, string Name, int PersonGender);
+        /// <summary>
+        /// 鍒涘缓浜鸿劯鐗瑰緛
+        /// </summary>
+        /// <param name="imgBase64">img base64</param>
+        /// <param name="CoredID"> 韬唤璇佸彿</param>
+        /// <param name="Name">濮撳悕</param>  
+        /// <param name="PersonGender"> 鎬у埆    0浠h〃鏈~鍐欙紝1浠h〃鐢锋�э紝2浠h〃濂虫�с��</param>
+        /// <returns></returns>
+        Task<(bool, string)> IaiAddPerso(string imgBase64, string CoredID, string Name, int PersonGender);
+
+    }
+
+
+
+
+}
diff --git a/cylsg/EzUpFile/UpFileConfig.json b/cylsg/EzUpFile/UpFileConfig.json
new file mode 100644
index 0000000..31c4179
--- /dev/null
+++ b/cylsg/EzUpFile/UpFileConfig.json
@@ -0,0 +1,29 @@
+{
+  "FileUploadOptions": {
+
+    "AliOSSBucketName": "appimchat",
+    "SavePath": "cylsg/",
+    "AliOSSEndpoint": "oss-accelerate.aliyuncs.com",
+    "AliOSSAccessKeyID": "LTAI5tNYGwTd3swLhC8H2XYV",
+    "AliOSSAccessKeySecret": "TyfkpYbXRUCh1K8LLtUyxY3ZcFCy1A",
+    "AliOSSSaveBaseUrl": "https://appimchat.oss-cn-chengdu.aliyuncs.com/"
+
+  },
+
+  "[openapi:FileUpdata]": {
+    "Title": "鏂囦欢涓婁紶",
+    "Order": 0,
+    "Description": "鏂囦欢涓婁紶API",
+    "Version": "1.0.0",
+    "TermsOfService": "",
+    "Contact": {
+      "Name": "鏂囦欢涓婁紶宸濆嵃涓存椂宸�",
+      "Url": "",
+      "Email": "liaoXuJun@QQ.Com"
+    },
+    "License": {
+      "Name": "MIT",
+      "Url": ""
+    }
+  }
+}
diff --git a/cylsg/EzUpFile/UpFileController.cs b/cylsg/EzUpFile/UpFileController.cs
new file mode 100644
index 0000000..a3ee514
--- /dev/null
+++ b/cylsg/EzUpFile/UpFileController.cs
@@ -0,0 +1,187 @@
+锘縰sing EzTencentCloud;
+using Furion.FriendlyException;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Http.HttpResults;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.RazorPages;
+using Microsoft.IdentityModel.Abstractions;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using TencentCloud.Ocr.V20181119.Models;
+
+namespace EzUpFile
+{
+    /// <summary>
+    /// 鏂囦欢涓婁紶涓嬭浇
+    /// </summary>
+    [DynamicApiController]
+    [ApiDescriptionSettings("FileUpdata")]    
+    public class UpFileController
+    {
+
+
+        /// <summary>
+        /// 涓婁紶韬唤璇佷俊鎭�
+        /// </summary>   
+        /// <param name="PageName"> 韬唤璇佹鍙嶉潰 FRONT 姝i潰  Back  鍥藉窘鍙嶉潰 </param>
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<Object> UploadIdCord([FromServices] IEzFileUploadService fileUploadService,IFormFile file, [FromQuery] string PageName = "FRONT")
+        {
+
+
+            var ret= await fileUploadService.UpIdCord(PageName);
+            return new { Info = ret.Item1, url = ret.Item2 };
+        }
+
+        /// <summary>
+        /// 涓婁紶鍜岃瘑鍒惀涓氭墽鐓�
+        /// </summary>   
+        /// <param name="PageName"> 韬唤璇佹鍙嶉潰 FRONT 姝i潰  Back  鍥藉窘鍙嶉潰 </param>
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<Object> UpBizLicense([FromServices] IEzFileUploadService fileUploadService, IFormFile file)
+        {
+
+
+            var ret= await fileUploadService.UpBizLicense();
+            return new { Info = ret.Item1, url = ret.Item2 };
+
+        }
+        /// <summary>
+        /// 澧炲姞浜鸿劯鐗瑰緛
+        /// </summary>         
+        /// <param name="CordId">韬唤璇佸彿</param>
+        /// <param name="Name">鍚嶇О</param>
+        /// <param name="Gender">0浠h〃鏈~鍐欙紝1浠h〃鐢锋�э紝2浠h〃濂虫�с��</param>
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<object> IaiAddPerso([FromServices] IEzFileUploadService fileUploadService, IFormFile file,[FromQuery] string CordId, [FromQuery] string Name, [FromQuery] int Gender)
+        {
+
+
+            var ret= await fileUploadService.IaiAddPerso(CordId, Name,Gender);
+            return new { IsOK = ret.Item1, url = ret.Item2 };
+
+
+        }
+
+        /// <summary>
+        /// 澧炲姞浜鸿劯搴� base64
+        /// </summary>   
+        /// <param name="param"></param>
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<object> IaiAddPersoBase64([FromServices] IEzFileUploadService fileUploadService, UpDataFileData param)
+        {
+            if (string.IsNullOrEmpty(param.imgBase64))
+                throw Oops.Oh("娌℃湁鏂囦欢绫诲");
+            if (string.IsNullOrEmpty(param.Name))
+                throw Oops.Oh("娌℃湁濮撳悕");
+            if (string.IsNullOrEmpty(param.CordId))
+                throw Oops.Oh("娌℃湁韬唤璇佷俊鎭�");
+            var ret = await fileUploadService.IaiAddPerso(param.imgBase64, param.CordId, param. Name, param.Gender??0);
+            return new { IsOK = ret.Item1, url = ret.Item2 };
+
+
+        }
+        public async Task test([FromServices] ITencentCloudService fileUploadService)
+        {
+
+            fileUploadService.IaiCreatGroup();
+
+        }
+
+        /// <summary>
+        /// 涓婁紶闄勪欢
+        /// </summary>
+        /// <param name="fileUploadService"></param>
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<string> UpdateFile([FromServices] IEzFileUploadService fileUploadService, IFormFile file)
+        {
+            return await fileUploadService.UploadFiles();
+        }
+        /// <summary>
+        /// 鑾峰彇鍒板鎴风鐨処Pv4
+        /// </summary>
+        /// <param name="httpContextAccessor"></param>
+        /// <returns></returns>
+        [HttpGet]
+        public string GetIp4([FromServices] IHttpContextAccessor httpContextAccessor)
+        {
+            var httpc = httpContextAccessor.HttpContext;
+            var ipv4 = httpc.GetRemoteIpAddressToIPv4();
+            return ipv4;
+        }
+        /// <summary>
+        /// 涓婁紶闄勪欢
+        /// </summary>
+        /// <param name="fileUploadService"></param>
+        /// <param name="Param"></param>    
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<string> UpdateFileBase64([FromServices] IEzFileUploadService fileUploadService, UpDataFileData Param)
+        {
+            return await fileUploadService.UploadFilesFByBase64(Param.imgBase64);
+        }
+        [HttpPost]
+        public async Task<bool> DelFile([FromServices] IEzFileUploadService fileUploadService, DelFileData Param)
+        {
+            return await fileUploadService.DelFile(Param.FilePath);
+        }
+    }
+    /// <summary>
+    /// 涓婁紶鏁版嵁
+    /// </summary>
+    public class UpDataFileData
+
+    {
+        /// <summary>
+        /// 鏁版嵁base64
+        /// </summary>
+        public string imgBase64 { get; set; }
+        /// <summary>
+        /// 韬唤璇佸彿鐮�
+        /// </summary>
+        public string? CordId { get; set; }
+        /// <summary>
+        /// 濮撳悕
+        /// </summary>
+        public string? Name { get; set; }
+        /// <summary>
+        /// 鎬у埆
+        /// </summary>
+        public int? Gender { get; set; }
+    }
+    /// <summary>
+    /// 涓婁紶鏁版嵁
+    /// </summary>
+    public class DelFileData
+
+    {
+        /// <summary>
+        /// 鏁版嵁base64
+        /// </summary>
+        public string FilePath { get; set; }
+    }
+    /// <summary>
+    /// 韬唤璇佽繑鍥炶緭鍑�
+    /// </summary>
+    public class IdCordOuput
+    {
+        /// <summary>
+        /// 韬唤璇佺浉鍏充俊鎭�
+        /// </summary>
+        public IDCardOCRResponse IdCordInfo { get; set; }
+
+        /// <summary>
+        ///  url
+        /// </summary>
+        public string Url {  get; set; }
+
+    }
+}
diff --git a/cylsg/EzWechat/EzWechat.csproj b/cylsg/EzWechat/EzWechat.csproj
index 1e28ec0..ed480b7 100644
--- a/cylsg/EzWechat/EzWechat.csproj
+++ b/cylsg/EzWechat/EzWechat.csproj
@@ -8,6 +8,7 @@
 
   <ItemGroup>
     <PackageReference Include="SKIT.FlurlHttpClient.Wechat.Api" Version="3.4.0" />
+    <PackageReference Include="SKIT.FlurlHttpClient.Wechat.TenpayV3" Version="3.7.0" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/cylsg/EzWechat/IWecharPayServicecs.cs b/cylsg/EzWechat/IWecharPayServicecs.cs
new file mode 100644
index 0000000..21173bd
--- /dev/null
+++ b/cylsg/EzWechat/IWecharPayServicecs.cs
@@ -0,0 +1,19 @@
+锘縰sing SKIT.FlurlHttpClient.Wechat.TenpayV3.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace EzWechat
+{
+    public interface IWecharPayServicecs
+    {
+        /// <summary>
+        /// 鏀粯涓�鍗�
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+       Task<CreateTransferBatchResponse> PayOderAsync(CreateTransferBatchRequest request);
+    }
+}
diff --git a/cylsg/EzWechat/WecharPayServicecs.cs b/cylsg/EzWechat/WecharPayServicecs.cs
new file mode 100644
index 0000000..e4a37ab
--- /dev/null
+++ b/cylsg/EzWechat/WecharPayServicecs.cs
@@ -0,0 +1,43 @@
+锘縰sing Furion;
+using Furion.DependencyInjection;
+using SKIT.FlurlHttpClient.Wechat.TenpayV3;
+using SKIT.FlurlHttpClient.Wechat.TenpayV3.Models;
+using SKIT.FlurlHttpClient.Wechat.TenpayV3.Settings;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using static SKIT.FlurlHttpClient.Wechat.Api.Models.CgibinOpenApiRequestIdGetResponse.Types;
+
+namespace EzWechat
+{
+    /// <summary>
+    /// 寰俊鏀粯鏈嶅姟
+    /// </summary>
+    public class WecharPayServicecs:IWecharPayServicecs, IScoped
+    {
+        private readonly WechatTenpayClient _V3Client;
+
+        public WecharPayServicecs() {
+            var manager = new InMemoryCertificateManager();
+            var options = new WechatTenpayClientOptions()
+            {
+                MerchantId = App.Configuration["WechartPay:MerchantId"],
+                MerchantV3Secret = App.Configuration["WechartPay:lojdhuqyt5648dikunm623ddsl2543a5"],
+                MerchantCertificateSerialNumber = App.Configuration["WechartPay:MerchantCertificateSerialNumber"],
+                MerchantCertificatePrivateKey = System.IO.File.ReadAllText(App.Configuration["WechartPay:apiclient_keyFile"]),
+                PlatformCertificateManager = manager // 骞冲彴璇佷功绠$悊鍣ㄧ殑鍏蜂綋鐢ㄦ硶璇峰弬闃呬笅鏂囩殑鍩虹鐢ㄦ硶涓庡姞瀵嗐�侀獙绛炬湁鍏崇殑绔犺妭
+            };
+             _V3Client = WechatTenpayClientBuilder.Create(options).Build();
+        }
+
+        public async Task<CreateTransferBatchResponse> PayOderAsync(CreateTransferBatchRequest request)
+        {
+
+            var response = await _V3Client.ExecuteCreateTransferBatchAsync(request);
+            return response;
+
+        }
+    }
+}
diff --git a/cylsg/EzWechat/WechatConfig.json b/cylsg/EzWechat/WechatConfig.json
index f238b57..a7d7366 100644
--- a/cylsg/EzWechat/WechatConfig.json
+++ b/cylsg/EzWechat/WechatConfig.json
@@ -3,5 +3,14 @@
     "AppId": "wx983556688354dd14",
     "AppSecret": "2ab1aefaac926855dc9d5f7bf7f04477"
 
+  },
+
+  "WechartPay": {
+
+    "MerchantV3Secret": "lojdhuqyt5648dikunm623ddsl2543a5",
+    "MerchantId": "1669018589",
+    "MerchantCertificateSerialNumber": "49FFE8CB27B5EDD026BFF23C41F0DAA83405EB10",
+    "apiclient_keyFile": "wwwroot\\wechartKey\\apiclient_key.pem"
+
   }
 }
\ No newline at end of file
diff --git a/cylsg/EzWechat/WechatService.cs b/cylsg/EzWechat/WechatService.cs
index 1d07cce..5070c70 100644
--- a/cylsg/EzWechat/WechatService.cs
+++ b/cylsg/EzWechat/WechatService.cs
@@ -13,6 +13,7 @@
 using System.Text;
 using System.Threading.Tasks;
 
+
 namespace EzWechat
 {
 
@@ -106,5 +107,16 @@
             return key;
         }
 
+
+
+
+
+
+
+
+
+
     }
+
+  
 }
diff --git a/cylsg/cylsg.Application/LogoInController.cs b/cylsg/cylsg.Application/LogoInController.cs
index 8521f42..a97ec29 100644
--- a/cylsg/cylsg.Application/LogoInController.cs
+++ b/cylsg/cylsg.Application/LogoInController.cs
@@ -15,6 +15,7 @@
     /// 鐧诲綍
     /// </summary>
     [DynamicApiController]
+    [ApiDescriptionSettings("Default@1")]
     public class LogoIn
     {
         private readonly IWechatService _wechatService;
@@ -47,7 +48,7 @@
             }
             var jwt = new EzJwtModel()
             {
-                ITCode = user.ItCode,
+                //ITCode = user.ItCode, 涓嶅湪鏄庢枃涓娇鐢↖tcode 
                 NickName = user.Nickname,
                 UserID = user.Id,
 
diff --git a/cylsg/cylsg.Application/System/Services/SystemService.cs b/cylsg/cylsg.Application/System/Services/SystemService.cs
index 13bd938..6c72041 100644
--- a/cylsg/cylsg.Application/System/Services/SystemService.cs
+++ b/cylsg/cylsg.Application/System/Services/SystemService.cs
@@ -4,6 +4,6 @@
 {
     public string GetDescription()
     {
-        return "宸濆嵃鎷涜仒";
+        return "宸濆嵃鎷涜仒鏈嶅姟";
     }
 }
diff --git a/cylsg/cylsg.Application/applicationsettings.json b/cylsg/cylsg.Application/applicationsettings.json
index 4b91598..47b488e 100644
--- a/cylsg/cylsg.Application/applicationsettings.json
+++ b/cylsg/cylsg.Application/applicationsettings.json
@@ -1,14 +1,14 @@
 锘縶
   "$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
   "SpecificationDocumentSettings": {
-    "DocumentTitle": "Furion | 宸濆嵃闆舵椂宸�",
+    "DocumentTitle": " 宸濆嵃涓存椂宸�",
     "GroupOpenApiInfos": [
       {
         "Group": "Default",
-        "Title": "宸濆嵃闆舵椂宸�",
-        "Description": "宸濆嵃闆舵椂宸�",
+        "Title": "宸濆嵃涓存椂宸�",
+        "Description": "宸濆嵃涓存椂宸�",
         "Version": "1.0.0",
-
+        "Order": 10,
         "Contact": {
           "Name": "",
 
diff --git a/cylsg/cylsg.Application/cylsg.Application.csproj b/cylsg/cylsg.Application/cylsg.Application.csproj
index 75373a4..0d6e2b3 100644
--- a/cylsg/cylsg.Application/cylsg.Application.csproj
+++ b/cylsg/cylsg.Application/cylsg.Application.csproj
@@ -28,6 +28,7 @@
 		<ProjectReference Include="..\cylsg.redis\cylsg.redis.csproj" />
 		<ProjectReference Include="..\cylsg.utility\cylsg.utility.csproj" />
 		<ProjectReference Include="..\EzTencentCloud\EzTencentCloud.csproj" />
+		<ProjectReference Include="..\EzUpFile\EzUpFile.csproj" />
 		<ProjectReference Include="..\EzWechat\EzWechat.csproj" />
 	</ItemGroup>
 
diff --git a/cylsg/cylsg.Authorization/cylsg.Authorization.csproj b/cylsg/cylsg.Authorization/cylsg.Authorization.csproj
index 7250e20..2704b18 100644
--- a/cylsg/cylsg.Authorization/cylsg.Authorization.csproj
+++ b/cylsg/cylsg.Authorization/cylsg.Authorization.csproj
@@ -4,6 +4,7 @@
     <TargetFramework>net8.0</TargetFramework>
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
+    <GenerateDocumentationFile>True</GenerateDocumentationFile>
   </PropertyGroup>
 
   <ItemGroup>
diff --git a/cylsg/cylsg.Model/UserModel/UserWorker.cs b/cylsg/cylsg.Model/UserModel/UserWorker.cs
index 22f8da9..dd781c6 100644
--- a/cylsg/cylsg.Model/UserModel/UserWorker.cs
+++ b/cylsg/cylsg.Model/UserModel/UserWorker.cs
@@ -85,5 +85,32 @@
         [SugarColumn(ColumnDescription = "宸叉彁鐜伴噾棰�", Length = 18, DecimalDigits = 2, IsNullable = true)]
         public decimal? YiTiXianJine { get; set; }
 
+
+
+        /// <summary>
+        /// 浜鸿劯ID
+        /// </summary>
+        [SugarColumn(ColumnDescription = "浜鸿劯ID", IsNullable = true)]
+        public string? IAIPersonId { get; set; }
+
+        /// <summary>
+        /// 浜鸿劯搴揑D
+        /// </summary>
+        [SugarColumn(ColumnDescription = "浜鸿劯搴揑D", IsNullable = true)]
+        public string? IAIGroupId { get; set; }
+
+
+        /// <summary>
+        /// 浜鸿劯搴撳悕绉�
+        /// </summary>
+        [SugarColumn(ColumnDescription = "浜鸿劯搴撳悕绉�", IsNullable = true)]
+        public string? IAIGroupName { get; set; }
+
+        /// <summary>
+        /// 鎬у埆    0浠h〃鏈~鍐欙紝1浠h〃鐢锋�э紝2浠h〃濂虫�с��
+        /// </summary>
+        [SugarColumn(ColumnDescription = "浜鸿劯搴撳悕绉�", IsNullable = true)]
+        public long? Gender { get; set; } = 0;
+
     }
 }
diff --git a/cylsg/cylsg.Web.Core/cylsg.Web.Core.csproj b/cylsg/cylsg.Web.Core/cylsg.Web.Core.csproj
index b558568..76cc66d 100644
--- a/cylsg/cylsg.Web.Core/cylsg.Web.Core.csproj
+++ b/cylsg/cylsg.Web.Core/cylsg.Web.Core.csproj
@@ -16,6 +16,7 @@
 	<ItemGroup>
 		<ProjectReference Include="..\cylsg.Application\cylsg.Application.csproj" />
 		<ProjectReference Include="..\cylsg.Authorization\cylsg.Authorization.csproj" />
+		<ProjectReference Include="..\EzUpFile\EzUpFile.csproj" />
 	</ItemGroup>
 
 </Project>
diff --git a/cylsg/cylsg.Web.Entry/appsettings.json b/cylsg/cylsg.Web.Entry/appsettings.json
index c9ec59a..bb50097 100644
--- a/cylsg/cylsg.Web.Entry/appsettings.json
+++ b/cylsg/cylsg.Web.Entry/appsettings.json
@@ -24,6 +24,7 @@
 
   ],
 
+
   "DynamicApiControllerSettings": {
     "KeepName": true,
     "KeepVerb": true,

--
Gitblit v1.9.1