From a9ee8bf270eb8a3315808b24b41417be4b1a8a9a Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期三, 20 八月 2025 16:47:34 +0800
Subject: [PATCH] feat:开发

---
 FlexJobApi.Core/Utils/BaiduUtils/BaiduOcrIdentityResult.cs                                |   90 ++++++++++++
 FlexJobApi.Core/Models/CommonServer/OcrUtils/Commands/GetIdentityOcrCommand.cs            |   52 +++++++
 FlexJobApi.CommonServer.Application/FlexJobApi.CommonServer.Application.xml               |   13 +
 FlexJobApi.CommonServer.Application/OcrUtils/Commands/OcrCommandHandler.cs                |   17 ++
 FlexJobApi.Core/Models/CommonServer/OcrUtils/Commands/GetLicenseOcrCommand.cs             |    2 
 FlexJobApi.Core/FlexJobApi.Core.xml                                                       |  130 ++++++++++++++++++
 FlexJobApi.Core/Utils/BaiduUtils/BaiduOcrUtils.cs                                         |   44 ++++++
 FlexJobApi.UserServer.Application/ElectronSign/Commands/ContractTemplateCommandHandler.cs |   14 +
 8 files changed, 350 insertions(+), 12 deletions(-)

diff --git a/FlexJobApi.CommonServer.Application/FlexJobApi.CommonServer.Application.xml b/FlexJobApi.CommonServer.Application/FlexJobApi.CommonServer.Application.xml
index 0bc03fb..563f50a 100644
--- a/FlexJobApi.CommonServer.Application/FlexJobApi.CommonServer.Application.xml
+++ b/FlexJobApi.CommonServer.Application/FlexJobApi.CommonServer.Application.xml
@@ -208,11 +208,6 @@
             鏂囧瓧璇嗗埆钀ヤ笟鎵х収
             </summary>
         </member>
-        <member name="M:FlexJobApi.CommonServer.Application.OcrCommandHandler.#ctor">
-            <summary>
-            鏂囧瓧璇嗗埆钀ヤ笟鎵х収
-            </summary>
-        </member>
         <member name="M:FlexJobApi.CommonServer.Application.OcrCommandHandler.Handle(FlexJobApi.Core.GetLicenseOcrCommand,System.Threading.CancellationToken)">
             <summary>
             鏂囧瓧璇嗗埆钀ヤ笟鎵х収
@@ -221,6 +216,14 @@
             <param name="cancellationToken"></param>
             <returns></returns>
         </member>
+        <member name="M:FlexJobApi.CommonServer.Application.OcrCommandHandler.Handle(FlexJobApi.Core.GetIdentityOcrCommand,System.Threading.CancellationToken)">
+            <summary>
+            鏂囧瓧璇嗗埆韬唤璇�
+            </summary>
+            <param name="request"></param>
+            <param name="cancellationToken"></param>
+            <returns></returns>
+        </member>
         <member name="T:FlexJobApi.CommonServer.Application.CheckHealthQueryHandler">
             <summary>
             鍋ュ悍鏍¢獙
diff --git a/FlexJobApi.CommonServer.Application/OcrUtils/Commands/OcrCommandHandler.cs b/FlexJobApi.CommonServer.Application/OcrUtils/Commands/OcrCommandHandler.cs
index 9d7840c..095fd25 100644
--- a/FlexJobApi.CommonServer.Application/OcrUtils/Commands/OcrCommandHandler.cs
+++ b/FlexJobApi.CommonServer.Application/OcrUtils/Commands/OcrCommandHandler.cs
@@ -12,8 +12,9 @@
     /// <summary>
     /// 鏂囧瓧璇嗗埆钀ヤ笟鎵х収
     /// </summary>
-    public class OcrCommandHandler() :
-        IRequestHandler<GetLicenseOcrCommand, GetLicenseOcrCommandResult>
+    public class OcrCommandHandler :
+        IRequestHandler<GetLicenseOcrCommand, GetLicenseOcrCommandResult>,
+        IRequestHandler<GetIdentityOcrCommand, GetIdentityOcrCommandResult>
     {
         /// <summary>
         /// 鏂囧瓧璇嗗埆钀ヤ笟鎵х収
@@ -26,5 +27,17 @@
             var result = await request.Url.OcrBusinessLicense(request.Scene, request.IsOssUrl);
             return result.Adapt<GetLicenseOcrCommandResult>();
         }
+
+        /// <summary>
+        /// 鏂囧瓧璇嗗埆韬唤璇�
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task<GetIdentityOcrCommandResult> Handle(GetIdentityOcrCommand request, CancellationToken cancellationToken)
+        {
+            var result = await request.Url.OcrBusinessLicense(request.Scene, request.IsOssUrl);
+            return result.Adapt<GetIdentityOcrCommandResult>();
+        }
     }
 }
diff --git a/FlexJobApi.Core/FlexJobApi.Core.xml b/FlexJobApi.Core/FlexJobApi.Core.xml
index 5235b06..c388f15 100644
--- a/FlexJobApi.Core/FlexJobApi.Core.xml
+++ b/FlexJobApi.Core/FlexJobApi.Core.xml
@@ -4463,6 +4463,46 @@
             鏁版嵁搴撳璁℃棩蹇�
             </summary>
         </member>
+        <member name="T:FlexJobApi.Core.GetIdentityOcrCommand">
+            <summary>
+            鏂囧瓧璇嗗埆韬唤璇�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetIdentityOcrCommand.Access">
+            <summary>
+            閫氶亾
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetIdentityOcrCommand.Scene">
+            <summary>
+            鍦烘櫙
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetIdentityOcrCommand.Url">
+            <summary>
+            閾炬帴鍦板潃
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetIdentityOcrCommand.IsOssUrl">
+            <summary>
+            鏄惁涓轰簯瀛樺偍鐩稿鍦板潃
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.GetIdentityOcrCommandResult">
+            <summary>
+            鏂囧瓧璇嗗埆韬唤璇�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetIdentityOcrCommandResult.Url">
+            <summary>
+            鍦板潃
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetIdentityOcrCommandResult.Model">
+            <summary>
+            妯″瀷
+            </summary>
+        </member>
         <member name="T:FlexJobApi.Core.GetLicenseOcrCommand">
             <summary>
             鏂囧瓧璇嗗埆钀ヤ笟鎵х収
@@ -7138,6 +7178,11 @@
             妯℃澘Id
             </summary>
         </member>
+        <member name="P:FlexJobApi.Core.GetContractTemplateQueryResult.Id">
+            <summary>
+            妯℃澘Id
+            </summary>
+        </member>
         <member name="P:FlexJobApi.Core.GetContractTemplateQueryResult.EnterpriseId">
             <summary>
             浼佷笟Id
@@ -7180,7 +7225,7 @@
         </member>
         <member name="P:FlexJobApi.Core.GetContractTemplateQueryResultValue.Id">
             <summary>
-            Id
+            鍙橀噺Id
             </summary>
         </member>
         <member name="P:FlexJobApi.Core.GetContractTemplateQueryResultValue.Type">
@@ -10902,6 +10947,81 @@
             缁忚惀鑼冨洿
             </summary>
         </member>
+        <member name="T:FlexJobApi.Core.BaiduOcrIdentityResult">
+            <summary>
+            鐧惧害鏂囧瓧璇嗗埆缁撴灉
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.BaiduOcrIdentityResult.Url">
+            <summary>
+            鍦板潃
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.BaiduOcrIdentityResult.Model">
+            <summary>
+            妯″瀷
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.BaiduOcrIdentityResult.ErrorCode">
+            <summary>
+            閿欒鐮�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.BaiduOcrIdentityResult.ErrorMessage">
+            <summary>
+            閿欒娑堟伅
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.BaiduOcrIdentityResult.WordsResult">
+            <summary>
+            鏂囧瓧缁撴灉
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.BaiduOcrIdentityResultModel">
+            <summary>
+            鐧惧害鏂囧瓧璇嗗埆缁撴灉
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.BaiduOcrIdentityResultModel.EnterpriseName">
+            <summary>
+            浼佷笟鍏ㄧО
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.BaiduOcrIdentityResultModel.SocietyCreditCode">
+            <summary>
+            缁熶竴绀句細淇$敤浠g爜
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.BaiduOcrIdentityResultModel.LegalPerson">
+            <summary>
+            娉曚汉濮撳悕
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.BaiduOcrIdentityResultModel.EnterpriseType">
+            <summary>
+            浼佷笟绫诲瀷
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.BaiduOcrIdentityResultModel.RegisteredCapital">
+            <summary>
+            娉ㄥ唽璧勬湰
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.BaiduOcrIdentityResultModel.EstablishmentDate">
+            <summary>
+            鎴愮珛鏃ユ湡
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.BaiduOcrIdentityResultModel.Address">
+            <summary>
+            浼佷笟鍦板潃
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.BaiduOcrIdentityResultModel.MainBusiness">
+            <summary>
+            缁忚惀鑼冨洿
+            </summary>
+        </member>
         <member name="T:FlexJobApi.Core.BaiduOcrResultWord">
             <summary>
             鐧惧害鏂囧瓧璇嗗埆缁撴灉
@@ -10955,6 +11075,14 @@
             <param name="scene"></param>
             <param name="isOssUrl"></param>
         </member>
+        <member name="M:FlexJobApi.Core.BaiduOcrUtils.OcrIdentity(System.String,System.String,System.Boolean)">
+            <summary>
+            钀ヤ笟鎵х収OCR
+            </summary>
+            <param name="url"></param>
+            <param name="scene"></param>
+            <param name="isOssUrl"></param>
+        </member>
         <member name="T:FlexJobApi.Core.BaiduOptions">
             <summary>
             鐧惧害閰嶇疆
diff --git a/FlexJobApi.Core/Models/CommonServer/OcrUtils/Commands/GetIdentityOcrCommand.cs b/FlexJobApi.Core/Models/CommonServer/OcrUtils/Commands/GetIdentityOcrCommand.cs
new file mode 100644
index 0000000..c58ab07
--- /dev/null
+++ b/FlexJobApi.Core/Models/CommonServer/OcrUtils/Commands/GetIdentityOcrCommand.cs
@@ -0,0 +1,52 @@
+锘縰sing MediatR;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FlexJobApi.Core
+{
+    /// <summary>
+    /// 鏂囧瓧璇嗗埆韬唤璇�
+    /// </summary>
+    [Resource([EnumResourceController.CommonServerOcrUtils], Method = EnumResourceMethod.Post)]
+    public class GetIdentityOcrCommand : IRequest<GetIdentityOcrCommandResult>
+    {
+        /// <summary>
+        /// 閫氶亾
+        /// </summary>
+        public EnumOcrAccess Access { get; set; }
+
+        /// <summary>
+        /// 鍦烘櫙
+        /// </summary>
+        public string Scene { get; set; }
+
+        /// <summary>
+        /// 閾炬帴鍦板潃
+        /// </summary>
+        public string Url { get; set; }
+
+        /// <summary>
+        /// 鏄惁涓轰簯瀛樺偍鐩稿鍦板潃
+        /// </summary>
+        public bool IsOssUrl { get; set; }
+    }
+
+    /// <summary>
+    /// 鏂囧瓧璇嗗埆韬唤璇�
+    /// </summary>
+    public class GetIdentityOcrCommandResult
+    {
+        /// <summary>
+        /// 鍦板潃
+        /// </summary>
+        public string Url { get; set; }
+
+        /// <summary>
+        /// 妯″瀷
+        /// </summary>
+        public BaiduOcrBusinessLicenseResultModel Model { get; set; }
+    }
+}
diff --git a/FlexJobApi.Core/Models/CommonServer/OcrUtils/Commands/GetLicenseOcrCommand.cs b/FlexJobApi.Core/Models/CommonServer/OcrUtils/Commands/GetLicenseOcrCommand.cs
index fcdb4d8..4219cca 100644
--- a/FlexJobApi.Core/Models/CommonServer/OcrUtils/Commands/GetLicenseOcrCommand.cs
+++ b/FlexJobApi.Core/Models/CommonServer/OcrUtils/Commands/GetLicenseOcrCommand.cs
@@ -11,7 +11,7 @@
     /// <summary>
     /// 鏂囧瓧璇嗗埆钀ヤ笟鎵х収
     /// </summary>
-    [Resource([EnumResourceController.CommonServerOcrUtils])]
+    [Resource([EnumResourceController.CommonServerOcrUtils], Method = EnumResourceMethod.Post)]
     public class GetLicenseOcrCommand : IRequest<GetLicenseOcrCommandResult>
     {
         /// <summary>
diff --git a/FlexJobApi.Core/Utils/BaiduUtils/BaiduOcrIdentityResult.cs b/FlexJobApi.Core/Utils/BaiduUtils/BaiduOcrIdentityResult.cs
new file mode 100644
index 0000000..fc777d7
--- /dev/null
+++ b/FlexJobApi.Core/Utils/BaiduUtils/BaiduOcrIdentityResult.cs
@@ -0,0 +1,90 @@
+锘縰sing Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FlexJobApi.Core
+{
+    /// <summary>
+    /// 鐧惧害鏂囧瓧璇嗗埆缁撴灉
+    /// </summary>
+    public class BaiduOcrIdentityResult
+    {
+        /// <summary>
+        /// 鍦板潃
+        /// </summary>
+        public string Url { get; set; }
+
+        /// <summary>
+        /// 妯″瀷
+        /// </summary>
+        public BaiduOcrIdentityResultModel Model { get; set; }
+
+        /// <summary>
+        /// 閿欒鐮�
+        /// </summary>
+        [JsonProperty("error_code")]
+        public string ErrorCode { get; set; }
+
+        /// <summary>
+        /// 閿欒娑堟伅
+        /// </summary>
+        [JsonProperty("error_msg")]
+        public string ErrorMessage { get; set; }
+
+        /// <summary>
+        /// 鏂囧瓧缁撴灉
+        /// </summary>
+        [JsonProperty("words_result")]
+        public Dictionary<string, BaiduOcrResultWord> WordsResult { get; set; }
+    }
+
+    /// <summary>
+    /// 鐧惧害鏂囧瓧璇嗗埆缁撴灉
+    /// </summary>
+    public class BaiduOcrIdentityResultModel
+    {
+        /// <summary>
+        /// 浼佷笟鍏ㄧО
+        /// </summary>
+        public string EnterpriseName { get; set; }
+
+        /// <summary>
+        /// 缁熶竴绀句細淇$敤浠g爜
+        /// </summary>
+        public string SocietyCreditCode { get; set; }
+
+        /// <summary>
+        /// 娉曚汉濮撳悕
+        /// </summary>
+        public string LegalPerson { get; set; }
+
+        /// <summary>
+        /// 浼佷笟绫诲瀷
+        /// </summary>
+        public string EnterpriseType { get; set; }
+
+        /// <summary>
+        /// 娉ㄥ唽璧勬湰
+        /// </summary>
+        public string RegisteredCapital { get; set; }
+
+        /// <summary>
+        /// 鎴愮珛鏃ユ湡
+        /// </summary>
+        public string EstablishmentDate { get; set; }
+
+        /// <summary>
+        /// 浼佷笟鍦板潃
+        /// </summary>
+        public string Address { get; set; }
+
+        /// <summary>
+        /// 缁忚惀鑼冨洿
+        /// </summary>
+        public string MainBusiness { get; set; }
+    }
+}
diff --git a/FlexJobApi.Core/Utils/BaiduUtils/BaiduOcrUtils.cs b/FlexJobApi.Core/Utils/BaiduUtils/BaiduOcrUtils.cs
index 51439b2..49bec7f 100644
--- a/FlexJobApi.Core/Utils/BaiduUtils/BaiduOcrUtils.cs
+++ b/FlexJobApi.Core/Utils/BaiduUtils/BaiduOcrUtils.cs
@@ -66,5 +66,49 @@
             return result;
         }
 
+        /// <summary>
+        /// 钀ヤ笟鎵х収OCR
+        /// </summary>
+        /// <param name="url"></param>
+        /// <param name="scene"></param>
+        /// <param name="isOssUrl"></param>
+        public static async Task<BaiduOcrIdentityResultModel> OcrIdentity(this string url, string scene = null, bool isOssUrl = true)
+        {
+            var options = App.GetOptions<BaiduOptions>();
+            var ocr = new Ocr(options.Ocr.Key, options.Ocr.Secret);
+            ocr.Timeout = 60000;
+            JObject value;
+            if (isOssUrl)
+            {
+                var downloadUrl = AliyunOSSUtils.GetUrl(url);
+                var buffer = await App.GetRequiredService<IHttpRemoteService>().GetAsByteArrayAsync(downloadUrl);
+                value = ocr.Idcard(buffer, "1");
+            }
+            else
+            {
+                var upload = AliyunOSSUtils.Upload(scene, url);
+                url = upload.Url;
+                //value = ocr.Idcard(upload.Buffer);
+            }
+            //var result = value.ToObject<BaiduOcrIdentityResult>();
+            //result.Url = url;
+            //if (result.ErrorCode.IsNotNull())
+            //{
+            //    return result;
+            //}
+            //result.Model = new BaiduOcrIdentityResultModel
+            //{
+            //    EnterpriseName = result.WordsResult["鍗曚綅鍚嶇О"].Words,
+            //    SocietyCreditCode = result.WordsResult["绀句細淇$敤浠g爜"].Words,
+            //    LegalPerson = result.WordsResult["娉曚汉"].Words,
+            //    EnterpriseType = result.WordsResult["绫诲瀷"].Words,
+            //    RegisteredCapital = result.WordsResult["娉ㄥ唽璧勬湰"].Words,
+            //    EstablishmentDate = result.WordsResult["鎴愮珛鏃ユ湡"].Words,
+            //    Address = result.WordsResult["鍦板潃"].Words,
+            //    MainBusiness = result.WordsResult["缁忚惀鑼冨洿"].Words,
+            //};
+            //return result;
+            throw new Exception();
+        }
     }
 }
diff --git a/FlexJobApi.UserServer.Application/ElectronSign/Commands/ContractTemplateCommandHandler.cs b/FlexJobApi.UserServer.Application/ElectronSign/Commands/ContractTemplateCommandHandler.cs
index 63c0831..d098fe9 100644
--- a/FlexJobApi.UserServer.Application/ElectronSign/Commands/ContractTemplateCommandHandler.cs
+++ b/FlexJobApi.UserServer.Application/ElectronSign/Commands/ContractTemplateCommandHandler.cs
@@ -69,10 +69,18 @@
                          entity.UpdatedUserId = logier.Id;
                          entity.UpdatedTime = DateTime.Now;
                      }
-                     if (entity.Access.HasValue && entity.TemplateId.IsNotNull() && entity.Status == EnumContractTemplateStatus.Wait)
+                     if (entity.Access.HasValue && entity.TemplateId.IsNotNull())
                      {
-                         entity.Status = EnumContractTemplateStatus.Completed;
-                         entity.CompletedTime = DateTime.Now;
+                         if (entity.Status == EnumContractTemplateStatus.Wait)
+                         {
+                             entity.Status = EnumContractTemplateStatus.Completed;
+                             entity.CompletedTime = DateTime.Now;
+                         }
+                     }
+                     else
+                     {
+                         entity.Status = EnumContractTemplateStatus.Wait;
+                         entity.CompletedTime = null;
                      }
                  },
                  cancellationToken);

--
Gitblit v1.9.1