From 365a2d07905ca675bb7ba687805d11ab9268da88 Mon Sep 17 00:00:00 2001 From: liguoyang Date: Mon, 29 Jun 2026 14:52:14 +0800 Subject: [PATCH] fix: . --- .../Organization/Services/IAliyunClient.cs | 5 -- .../GainfoIdCardFaceCompareService.cs | 68 +++++++++++++------ 2 files changed, 48 insertions(+), 25 deletions(-) diff --git a/Src/Dlhis.Basic/Organization/Services/IAliyunClient.cs b/Src/Dlhis.Basic/Organization/Services/IAliyunClient.cs index 3100d3ff..0f04adf0 100644 --- a/Src/Dlhis.Basic/Organization/Services/IAliyunClient.cs +++ b/Src/Dlhis.Basic/Organization/Services/IAliyunClient.cs @@ -89,11 +89,6 @@ public class AliyunClient : IAliyunClient RawResponse = rawResponse }; - if (string.IsNullOrWhiteSpace(rawResponse)) - { - return result; - } - var response = JsonConvert.DeserializeObject(rawResponse); result.RequestId = response?.RequestId; result.Code = response?.Code; diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoIdCardFaceCompareService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoIdCardFaceCompareService.cs index ddd4bb57..220c54b7 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoIdCardFaceCompareService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoIdCardFaceCompareService.cs @@ -46,6 +46,7 @@ public class GainfoIdCardFaceCompareService : IGainfoIdCardFaceCompareService || record.IdNo == request.Search || record.UserName.Contains(request.Search) || gainfo.Name.Contains(request.Search)) + .OrderBy(record => record.LastCompareTime, OrderByType.Desc) .OrderBy(record => record.CreateTime, OrderByType.Desc) .Select((record, gainfo, department) => new IdCardFaceCompareRecordResponse { @@ -74,20 +75,6 @@ public class GainfoIdCardFaceCompareService : IGainfoIdCardFaceCompareService .Where(x => x.Code == request.UserCode) .SingleAsync(); gainfo.ThrowIfNull("人员档案信息不存在"); - gainfo.IdNo.IsPresent().ThrowIfFalse("人员证件号为空,无法对比"); - - var face = string.Empty; - using (var scope = _serviceProvider.CreateScope()) - { - var faceDbContext = scope.ServiceProvider.GetService().ChangeDb("face"); - face = await faceDbContext.Queryable() - .Where(x => x.UserCode == gainfo.Code) - .Select(x => x.Face) - .SingleAsync(); - } - - face.IsEmpty().ThrowIfTrue("人脸照片尚未录入"); - var now = DateTime.Now; var userId = _currentUser.GetIntSubjectId(); @@ -105,6 +92,11 @@ public class GainfoIdCardFaceCompareService : IGainfoIdCardFaceCompareService IdNo = gainfo.IdNo, CompareResult = IdCardFaceCompareResultEnumType.NotCompared, CompareCount = 0, + ErrorMessage = null, + CreatedBy = userId, + ModifiedBy = userId, + CreateTime = now, + ModifiedTime = now }; await _dbContext.InsertAsync(record); @@ -115,34 +107,70 @@ public class GainfoIdCardFaceCompareService : IGainfoIdCardFaceCompareService record.UserName = gainfo.Name; record.IdNo = gainfo.IdNo; record.CompareResult = IdCardFaceCompareResultEnumType.NotCompared; + record.IsPassed = null; + record.Similarity = null; + record.ApiResponse = null; record.ErrorMessage = null; + record.ModifiedTime = now; + record.ModifiedBy = userId; await _dbContext.UpdateAsync(record); } + if (!gainfo.IdNo.IsPresent()) + { + await UpdateRecordErrorAndThrowAsync(record, "人员证件号为空,无法对比", userId); + } + var face = string.Empty; + using (var scope = _serviceProvider.CreateScope()) + { + var faceDbContext = scope.ServiceProvider.GetService().ChangeDb("face"); + face = await faceDbContext.Queryable() + .Where(x => x.UserCode == gainfo.Code) + .Select(x => x.Face) + .SingleAsync(); + } if (!face.IsPresent()) { - record.ErrorMessage = "人脸照片尚未录入"; - record.ModifiedTime = DateTime.Now; - record.ModifiedBy = userId; - await _dbContext.UpdateAsync(record); - throw new UserFriendlyException(record.ErrorMessage); + await UpdateRecordErrorAndThrowAsync(record, "人脸照片尚未录入", userId); + } + + AliyunId3MetaVerifyResponse response; + try + { + response = await _aliyunClient.Id3MetaVerifyAsync(gainfo.IdNo, gainfo.Name, face); + } + catch (Exception e) + { + await UpdateRecordErrorAndThrowAsync(record, $"人证人脸对比接口调用失败:{e.Message}", userId); + throw; } - var response = await _aliyunClient.Id3MetaVerifyAsync(gainfo.IdNo, gainfo.Name, face); record.CompareResult = IdCardFaceCompareResultEnumType.Compared; record.ApiResponse = response.RawResponse; record.IsPassed = response.Passed; record.Similarity = response.Similarity; record.CompareCount += 1; record.LastCompareTime = now; + record.ErrorMessage = null; + record.ModifiedTime = DateTime.Now; + record.ModifiedBy = userId; await _dbContext.UpdateAsync(record); return await GetRecordAsync(record.UserCode); } + private async Task UpdateRecordErrorAndThrowAsync(IdCardFaceCompareRecordEntity record, string message, int userId) + { + record.ErrorMessage = message; + record.ModifiedTime = DateTime.Now; + record.ModifiedBy = userId; + await _dbContext.UpdateAsync(record); + throw new UserFriendlyException(message); + } + private async Task GetRecordAsync(string userCode) { return await _dbContext.Queryable()