ソースを参照

OCR相关接口 新增英文文档下载

leiy 9 ヶ月 前
コミット
c109fa86a6

+ 102 - 48
OASystem/OASystem.Api/Controllers/TencentOCRController.cs

@@ -564,7 +564,7 @@ namespace OASystem.API.Controllers
 
             if (dto.CardSide == 0) // 正面
             {
-                fileName = "行驶证识别-主页";
+                fileName = "行驶证识别-主页[CH]";
                 TextVehicleFront frontInfo = vlData.FrontInfo;
                 if (frontInfo != null)
                 {
@@ -582,14 +582,17 @@ namespace OASystem.API.Controllers
                     content += $"印章:{frontInfo.Seal ?? "Unknown"}\n";
                 }
 
-                if (dto.language == 2) content = await YouDaoApiTools.GetOCR_ReTrans(content);
+                if (dto.language == 2) {
+                    fileName = "行驶证识别-主页[EN]";
+                    content = await YouDaoApiTools.GetOCR_ReTrans(content);
+                }
 
                 url = NPOICreateWord(fileName, content);
             }
             else if (dto.CardSide == 1) //反面
             {
                 TextVehicleBack backInfo = vlData.BackInfo;
-                fileName = "行驶证识别-副页";
+                fileName = "行驶证识别-副页[CH]";
 
                 if (backInfo != null)
                 {
@@ -606,7 +609,11 @@ namespace OASystem.API.Controllers
                     content += $"准牵引总质量:{backInfo.TotalQuasiMass ?? "Unknown"}\n";
                 }
 
-                if (dto.language == 2) content = await YouDaoApiTools.GetOCR_ReTrans(content);
+                if (dto.language == 2) {
+                    fileName = "行驶证识别-副页[EN]"; 
+                    content = await YouDaoApiTools.GetOCR_ReTrans(content);
+                }
+                
 
                 url = NPOICreateWord(fileName, content);
             }
@@ -625,10 +632,14 @@ namespace OASystem.API.Controllers
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         public async Task<IActionResult> GetPropOwnerCert(PropOwnerCertOCRDto dto)
         {
-            double strSize = 1024 * 1024 * 7;
-            if (dto.picBase64.Length > strSize)
+            var validator = new PropOwnerCertOCRDtoFoalidator();
+            var validatorRes = await validator.ValidateAsync(dto);
+
+            if (!validatorRes.IsValid) 
             {
-                return Ok(JsonView("图片不能大于7M!"));
+                var errors = new StringBuilder();
+                foreach (var valid in validatorRes.Errors) errors.AppendLine(valid.ErrorMessage);
+                return Ok(JsonView(false, errors.ToString()));
             }
 
             var pcData = await TencentOCRTools.GetOCR((int)TencentOCREnum.PropOwnerCert, dto);
@@ -644,7 +655,7 @@ namespace OASystem.API.Controllers
             }
 
             PropOwnerCertOCRResponse pocInfo = pcData.Data as PropOwnerCertOCRResponse;
-            string fileName = "房产证识别";
+            string fileName = "房产证识别[CH]";
             string content = "";
             if (pocInfo != null) {
                 content += $"房地产权利人:{pocInfo.Owner}\n";
@@ -654,6 +665,11 @@ namespace OASystem.API.Controllers
                 content += $"房屋性质:{pocInfo.Nature}\n";
                 content += $"房地坐落:{pocInfo.Location}\n";
             }
+            if (dto.language == 2)
+            {
+                fileName = "房产证识别[EN]";
+                content = await YouDaoApiTools.GetOCR_ReTrans(content);
+            }
             string url = NPOICreateWord(fileName, content);
 
             return Ok(JsonView(new { dataSource = pocInfo, url = url }));
@@ -669,10 +685,13 @@ namespace OASystem.API.Controllers
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         public async Task<IActionResult> GetMarriageLicense(GeneralBasicOCRDto dto)
         {
-            double strSize = 1024 * 1024 * 7;
-            if (dto.picBase64.Length > strSize)
+            var validator = new GeneralBasicOCRDtoFoalidator();
+            var validatorRes = await validator.ValidateAsync(dto);
+            if (!validatorRes.IsValid) 
             {
-                return Ok(JsonView("图片不能大于7M!"));
+                var errors = new StringBuilder();
+                foreach (var valid in validatorRes.Errors) errors.AppendLine(valid.ErrorMessage);
+                return Ok(JsonView(false,errors.ToString()));
             }
 
             var mlData = await TencentOCRTools.GetOCR((int)TencentOCREnum.GeneralBasic, dto);
@@ -687,7 +706,7 @@ namespace OASystem.API.Controllers
                 return Ok(JsonView(mlData.Msg));
             }
 
-            string fileName = "结婚证识别";
+            string fileName = "结婚证识别[CH]";
             string content = "";
             GeneralBasicOCRResponse data = mlData.Data as GeneralBasicOCRResponse;
             List<TextDetection> infos = data.TextDetections.ToList();
@@ -696,6 +715,12 @@ namespace OASystem.API.Controllers
             {
                 content += $"Content:{item.DetectedText}\n";
             }
+            if (dto.language == 2)
+            {
+                fileName = "结婚证识别[EN]";
+                content = await YouDaoApiTools.GetOCR_ReTrans(content);
+            }
+
             string url = NPOICreateWord(fileName, content);
 
             return Ok(JsonView(new { dataSource = infos, url = url }));
@@ -711,10 +736,13 @@ namespace OASystem.API.Controllers
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         public async Task<IActionResult> GetUniformCreditCode(GeneralBasicOCRDto dto)
         {
-            double strSize = 1024 * 1024 * 7;
-            if (dto.picBase64.Length > strSize)
+            var validator = new GeneralBasicOCRDtoFoalidator();
+            var validatorRes = await validator.ValidateAsync(dto);
+            if (!validatorRes.IsValid) 
             {
-                return Ok(JsonView("图片不能大于7M!"));
+                var errors = new StringBuilder();
+                foreach (var valid in validatorRes.Errors) errors.AppendLine( valid.ErrorMessage);
+                return Ok(JsonView(false,errors.ToString()));
             }
 
             var gbData = await TencentOCRTools.GetOCR((int)TencentOCREnum.GeneralBasic, dto);
@@ -729,7 +757,7 @@ namespace OASystem.API.Controllers
                 return Ok(JsonView(gbData.Msg));
             }
 
-            string fileName = "统一信用代码识别";
+            string fileName = "统一信用代码识别[CH]";
             string content = "";
             GeneralBasicOCRResponse data = gbData.Data as GeneralBasicOCRResponse;
             List<TextDetection> infos = data.TextDetections.ToList();
@@ -738,6 +766,13 @@ namespace OASystem.API.Controllers
             {
                 content += $"Content:{item.DetectedText}\n";
             }
+
+            if (dto.language == 2)
+            {
+                fileName = "统一信用代码识别[EN]";
+                content = await YouDaoApiTools.GetOCR_ReTrans(content);
+            }
+
             string url = NPOICreateWord(fileName, content);
 
             return Ok(JsonView(new { dataSource = infos, url = url }));
@@ -753,10 +788,13 @@ namespace OASystem.API.Controllers
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         public async Task<IActionResult> GetPassport(PassportOCRDto dto)
         {
-            double strSize = 1024 * 1024 * 7;
-            if (dto.picBase64.Length > strSize)
+            var validator = new PassportOCRDtoFoalidator();
+            var validatorRes = await validator.ValidateAsync(dto);
+            if (!validatorRes.IsValid)
             {
-                return Ok(JsonView("图片不能大于7M!"));
+                var errors = new StringBuilder();
+                foreach (var valid in validatorRes.Errors) errors.AppendLine(valid.ErrorMessage);
+                return Ok(JsonView(false, errors.ToString()));
             }
 
             var pData = await TencentOCRTools.GetOCR((int)TencentOCREnum.Passport, dto);
@@ -766,15 +804,10 @@ namespace OASystem.API.Controllers
                 return Ok(JsonView(pData.Msg));
             }
 
-            if (pData.Data == null)
-            {
-                return Ok(JsonView(pData.Msg));
-            }
-
             string url = "";
             #region 文档下载
 
-            string fileName = "护照识别(中国大陆地区护照)";
+            string fileName = "护照识别(中国大陆地区护照)[CH]";
             string content = $"";
             PassportOCRResponse pInfo = pData.Data as PassportOCRResponse;
             if (pInfo != null)
@@ -794,6 +827,12 @@ namespace OASystem.API.Controllers
                 content += $"最下方第一行 MRZ Code 序列:{pInfo.CodeSet ?? "Unknown"}\n";
                 content += $"最下方第二行 MRZ Code 序列:{pInfo.CodeCrc ?? "Unknown"}\n";
             }
+
+            if (dto.language == 2) {
+                fileName = "护照识别(中国大陆地区护照)[EN]";
+                content = await YouDaoApiTools.GetOCR_ReTrans(content);
+            }
+
             url = NPOICreateWord(fileName, content);
 
             #endregion
@@ -811,10 +850,13 @@ namespace OASystem.API.Controllers
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         public async Task<IActionResult> GetMLIDPassport(MLIDPassportOCRDto dto)
         {
-            double strSize = 1024 * 1024 * 7;
-            if (dto.picBase64.Length > strSize)
+            var validator = new MLIDPassportOCRDtoFoavalidator();
+            var validatorRes = await validator.ValidateAsync(dto);
+            if (!validatorRes.IsValid)
             {
-                return Ok(JsonView("图片不能大于7M!"));
+                var errors = new StringBuilder();
+                foreach (var valid in validatorRes.Errors) errors.AppendLine(valid.ErrorMessage);
+                return Ok(JsonView(false, errors.ToString()));
             }
 
             var mlidpData = await TencentOCRTools.GetOCR((int)TencentOCREnum.MLIDPassport, dto);
@@ -832,7 +874,7 @@ namespace OASystem.API.Controllers
             string url = "";
             #region 文档下载
 
-            string fileName = "护照识别(港澳台地区及境外护照)";
+            string fileName = "护照识别(港澳台地区及境外护照)[CH]";
             string content = $"";
             MLIDPassportOCRResponse mlidInfo = mlidpData.Data as MLIDPassportOCRResponse;
 
@@ -846,6 +888,11 @@ namespace OASystem.API.Controllers
                 content += $"发行国:{mlidInfo.IssuingCountry ?? "Unknown"}\n";
                 content += $"国家地区代码:{mlidInfo.Nationality ?? "Unknown"}\n";
             }
+            if (dto.language == 2)
+            {
+                fileName = "护照识别(港澳台地区及境外护照)[EN]";
+                content = await YouDaoApiTools.GetOCR_ReTrans(content);
+            }
 
             url = NPOICreateWord(fileName, content);
 
@@ -864,10 +911,13 @@ namespace OASystem.API.Controllers
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         public async Task<IActionResult> GetBusinessCard(BusinessCardOCRDto dto)
         {
-            double strSize = 1024 * 1024 * 7;
-            if (dto.picBase64.Length > strSize)
+            var validator = new BusinessCardOCRDtoFoavalidator();
+            var validatorRes = await validator.ValidateAsync(dto);
+            if (!validatorRes.IsValid) 
             {
-                return Ok(JsonView("图片不能大于7M!"));
+                var errors = new StringBuilder();
+                foreach (var valid in validatorRes.Errors) errors.AppendLine(valid.ErrorMessage);
+                return Ok(JsonView(false,errors.ToString()));
             }
 
             var mlidpData = await TencentOCRTools.GetOCR((int)TencentOCREnum.BusinessCard, dto);
@@ -884,7 +934,7 @@ namespace OASystem.API.Controllers
             string url = "";
             #region 文档下载
 
-            string fileName = "名片识别";
+            string fileName = "名片识别[CH]";
             string content = $"";
             BusinessCardOCRResponse bcData = mlidpData.Data as BusinessCardOCRResponse;
             List<BusinessCardInfo> bcInfos = new List<BusinessCardInfo>();
@@ -895,6 +945,12 @@ namespace OASystem.API.Controllers
                 content += $"TypeName:{view?.Name ?? "Unknown"}\nContent:{view?.Value ?? "Unknown"}\n";
             }
 
+            if (dto.language == 2)
+            {
+                fileName = "名片识别[EN]";
+                content = await YouDaoApiTools.GetOCR_ReTrans(content);
+            }
+
             url = NPOICreateWord(fileName, content);
 
             #endregion
@@ -913,24 +969,16 @@ namespace OASystem.API.Controllers
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         public async Task<IActionResult> GetSmartStructuralOCRV2(BusinessCardOCRDto dto)
         {
-            string[] picBase64Array = dto.picBase64.Split(';');
-            string picFormat = picBase64Array[0].Split('/')[1];
-            if (!TencentOCRTools.ImageType(picFormat))
+            var validator = new BusinessCardOCRDtoFoavalidator();
+            var validatorRes = await validator.ValidateAsync(dto);
+            if (!validatorRes.IsValid)
             {
-                if (!picFormat.ToLower().Equals("pdf"))
-                {
-                    return Ok(JsonView("图片格式不正确!只支持 PDF、PNG、JPG、JPEG、BMP 格式!"));
-                }
-                
-            }
+                var errors = new StringBuilder();
+                foreach(var valid in validatorRes.Errors) { errors.AppendLine(valid.ErrorMessage); }
 
-            double strSize = 1024 * 1024 * 7;
-            if (dto.picBase64.Length > strSize)
-            {
-                return Ok(JsonView("图片不能大于7M!"));
+                return Ok(JsonView(false,errors.ToString()));
             }
 
-
             var ssData = await TencentOCRTools.GetOCR((int)TencentOCREnum.SmartStructuralOCRV2, dto);
             if (ssData.Code != 0)
             {
@@ -941,7 +989,7 @@ namespace OASystem.API.Controllers
             {
                 return Ok(JsonView(false, ssData.Msg));
             }
-            string fileName = "智能结构化识别V2";
+            string fileName = "智能结构化识别V2[CH]";
 
             List<ocrGeneralView>? datas = ssData.Data as List<ocrGeneralView>;
 
@@ -951,6 +999,12 @@ namespace OASystem.API.Controllers
                 content += $"TypeName:{view.name}\nContent:{view.value}\n";
             }
 
+            if (dto.language == 2) 
+            {
+                fileName = "智能结构化识别V2[EN]";
+                content = await YouDaoApiTools.GetOCR_ReTrans(content);
+            }
+
             string url = NPOICreateWord(fileName, content);
 
             var data = new

+ 6 - 0
OASystem/OASystem.Api/OAMethodLib/TencentCloudAPI/TencentOCRTools.cs

@@ -45,6 +45,7 @@ namespace OASystem.API.OAMethodLib.TencentCloudAPI
                         else if (iDCardDto.CardSide == 1) req.CardSide = "BACK";
 
                         req.ImageBase64 = iDCardDto.picBase64;
+                        
                         IDCardOCRResponse resp = client.IDCardOCRSync(req);
                         result.Data = resp;
                         break;
@@ -52,6 +53,7 @@ namespace OASystem.API.OAMethodLib.TencentCloudAPI
                         ResidenceBookletOCRDto rbOCR = (ResidenceBookletOCRDto)data;
                         ResidenceBookletOCRRequest rbReq = new ResidenceBookletOCRRequest();
                         rbReq.ImageBase64 = rbOCR.picBase64;
+
                         ResidenceBookletOCRResponse rbRep = client.ResidenceBookletOCRSync(rbReq);
                         result.Data = rbRep;
                         break;
@@ -60,6 +62,7 @@ namespace OASystem.API.OAMethodLib.TencentCloudAPI
                         BizLicenseOCRDto blOCR = (BizLicenseOCRDto)data;
                         BizLicenseOCRRequest blReq = new BizLicenseOCRRequest();
                         blReq.ImageBase64 = blOCR.picBase64;
+                        
                         BizLicenseOCRResponse blRep = client.BizLicenseOCRSync(blReq);
                         result.Data = blRep;
                         break;
@@ -68,6 +71,7 @@ namespace OASystem.API.OAMethodLib.TencentCloudAPI
                         OrgCodeCertOCRDto occOCR = (OrgCodeCertOCRDto)data;
                         OrgCodeCertOCRRequest ocReq = new OrgCodeCertOCRRequest();
                         ocReq.ImageBase64 = occOCR.picBase64;
+                        
                         OrgCodeCertOCRResponse occReq = client.OrgCodeCertOCRSync(ocReq);
                         result.Data = occReq;
                         break;
@@ -81,6 +85,7 @@ namespace OASystem.API.OAMethodLib.TencentCloudAPI
                         else if (vlOCR.CardSide == 2) vlReq.CardSide = "DOUBLE";
 
                         vlReq.ImageBase64 = vlOCR.picBase64;
+                        
                         VehicleLicenseOCRResponse vlRep = client.VehicleLicenseOCRSync(vlReq);
                         result.Data = vlRep;
                         break;
@@ -88,6 +93,7 @@ namespace OASystem.API.OAMethodLib.TencentCloudAPI
                         PropOwnerCertOCRDto pocOCR = (PropOwnerCertOCRDto)data;
                         PropOwnerCertOCRRequest pocReq = new PropOwnerCertOCRRequest();
                         pocReq.ImageBase64 = pocOCR.picBase64;
+                        
                         PropOwnerCertOCRResponse pocRep = client.PropOwnerCertOCRSync(pocReq);
                         result.Data = pocRep;
                         break;

+ 10 - 1
OASystem/OASystem.Domain/Dtos/Tencent/BusinessCardOCRDto.cs

@@ -1,4 +1,5 @@
-using System;
+using FluentValidation;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -13,4 +14,12 @@ namespace OASystem.Domain.Dtos.Tencent
     public class BusinessCardOCRDto:OCRDtoBase
     {
     }
+
+    public class BusinessCardOCRDtoFoavalidator : AbstractValidator<BusinessCardOCRDto>
+    {
+        public BusinessCardOCRDtoFoavalidator() 
+        {
+            Include(new OCRDtoBaseFoalidator());
+        }
+    }
 }

+ 10 - 1
OASystem/OASystem.Domain/Dtos/Tencent/MLIDPassportOCRDto.cs

@@ -1,4 +1,5 @@
-using System;
+using FluentValidation;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -13,4 +14,12 @@ namespace OASystem.Domain.Dtos.Tencent
     public class MLIDPassportOCRDto:OCRDtoBase
     {
     }
+
+    public class MLIDPassportOCRDtoFoavalidator : AbstractValidator<MLIDPassportOCRDto>
+    {
+        public MLIDPassportOCRDtoFoavalidator() 
+        {
+            Include(new OCRDtoBaseFoalidator());
+        }
+    }
 }

+ 10 - 1
OASystem/OASystem.Domain/Dtos/Tencent/PassportOCRDto.cs

@@ -1,4 +1,5 @@
-using System;
+using FluentValidation;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -13,4 +14,12 @@ namespace OASystem.Domain.Dtos.Tencent
     public class PassportOCRDto:OCRDtoBase
     {
     }
+
+    public class PassportOCRDtoFoalidator : AbstractValidator<PassportOCRDto>
+    {
+        public PassportOCRDtoFoalidator() 
+        {
+            Include(new OCRDtoBaseFoalidator());
+        }
+    }
 }

+ 10 - 1
OASystem/OASystem.Domain/Dtos/Tencent/PropOwnerCertOCRDto.cs

@@ -1,4 +1,5 @@
-using System;
+using FluentValidation;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -12,4 +13,12 @@ namespace OASystem.Domain.Dtos.Tencent
     public class PropOwnerCertOCRDto:OCRDtoBase
     {
     }
+
+    public class PropOwnerCertOCRDtoFoalidator : AbstractValidator<PropOwnerCertOCRDto>
+    {
+        public PropOwnerCertOCRDtoFoalidator() 
+        {
+            Include(new OCRDtoBaseFoalidator());
+        }
+    }
 }

+ 0 - 1
OASystem/OASystem.Domain/ViewModels/Groups/HotelReservationsByDiIdView.cs

@@ -443,7 +443,6 @@ namespace OASystem.Domain.ViewModels.Groups
         /// </summary>
         public string CityTax { get; set; }
 
-
         public string PayMoneys { get; set; }
         /// <summary>
         /// 消费说明