This commit is contained in:
2026-06-29 14:52:14 +08:00
parent 147100d27c
commit 365a2d0790
2 changed files with 48 additions and 25 deletions

View File

@@ -89,11 +89,6 @@ public class AliyunClient : IAliyunClient
RawResponse = rawResponse RawResponse = rawResponse
}; };
if (string.IsNullOrWhiteSpace(rawResponse))
{
return result;
}
var response = JsonConvert.DeserializeObject<AliyunId3MetaVerifyApiResponse>(rawResponse); var response = JsonConvert.DeserializeObject<AliyunId3MetaVerifyApiResponse>(rawResponse);
result.RequestId = response?.RequestId; result.RequestId = response?.RequestId;
result.Code = response?.Code; result.Code = response?.Code;

View File

@@ -46,6 +46,7 @@ public class GainfoIdCardFaceCompareService : IGainfoIdCardFaceCompareService
|| record.IdNo == request.Search || record.IdNo == request.Search
|| record.UserName.Contains(request.Search) || record.UserName.Contains(request.Search)
|| gainfo.Name.Contains(request.Search)) || gainfo.Name.Contains(request.Search))
.OrderBy(record => record.LastCompareTime, OrderByType.Desc)
.OrderBy(record => record.CreateTime, OrderByType.Desc) .OrderBy(record => record.CreateTime, OrderByType.Desc)
.Select((record, gainfo, department) => new IdCardFaceCompareRecordResponse .Select((record, gainfo, department) => new IdCardFaceCompareRecordResponse
{ {
@@ -74,20 +75,6 @@ public class GainfoIdCardFaceCompareService : IGainfoIdCardFaceCompareService
.Where(x => x.Code == request.UserCode) .Where(x => x.Code == request.UserCode)
.SingleAsync(); .SingleAsync();
gainfo.ThrowIfNull("人员档案信息不存在"); gainfo.ThrowIfNull("人员档案信息不存在");
gainfo.IdNo.IsPresent().ThrowIfFalse("人员证件号为空,无法对比");
var face = string.Empty;
using (var scope = _serviceProvider.CreateScope())
{
var faceDbContext = scope.ServiceProvider.GetService<IDbContext>().ChangeDb("face");
face = await faceDbContext.Queryable<GainfoFaceEntity>()
.Where(x => x.UserCode == gainfo.Code)
.Select(x => x.Face)
.SingleAsync();
}
face.IsEmpty().ThrowIfTrue("人脸照片尚未录入");
var now = DateTime.Now; var now = DateTime.Now;
var userId = _currentUser.GetIntSubjectId(); var userId = _currentUser.GetIntSubjectId();
@@ -105,6 +92,11 @@ public class GainfoIdCardFaceCompareService : IGainfoIdCardFaceCompareService
IdNo = gainfo.IdNo, IdNo = gainfo.IdNo,
CompareResult = IdCardFaceCompareResultEnumType.NotCompared, CompareResult = IdCardFaceCompareResultEnumType.NotCompared,
CompareCount = 0, CompareCount = 0,
ErrorMessage = null,
CreatedBy = userId,
ModifiedBy = userId,
CreateTime = now,
ModifiedTime = now
}; };
await _dbContext.InsertAsync(record); await _dbContext.InsertAsync(record);
@@ -115,34 +107,70 @@ public class GainfoIdCardFaceCompareService : IGainfoIdCardFaceCompareService
record.UserName = gainfo.Name; record.UserName = gainfo.Name;
record.IdNo = gainfo.IdNo; record.IdNo = gainfo.IdNo;
record.CompareResult = IdCardFaceCompareResultEnumType.NotCompared; record.CompareResult = IdCardFaceCompareResultEnumType.NotCompared;
record.IsPassed = null;
record.Similarity = null;
record.ApiResponse = null;
record.ErrorMessage = null; record.ErrorMessage = null;
record.ModifiedTime = now;
record.ModifiedBy = userId;
await _dbContext.UpdateAsync(record); 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<IDbContext>().ChangeDb("face");
face = await faceDbContext.Queryable<GainfoFaceEntity>()
.Where(x => x.UserCode == gainfo.Code)
.Select(x => x.Face)
.SingleAsync();
}
if (!face.IsPresent()) if (!face.IsPresent())
{ {
record.ErrorMessage = "人脸照片尚未录入"; await UpdateRecordErrorAndThrowAsync(record, "人脸照片尚未录入", userId);
record.ModifiedTime = DateTime.Now; }
record.ModifiedBy = userId;
await _dbContext.UpdateAsync(record); AliyunId3MetaVerifyResponse response;
throw new UserFriendlyException(record.ErrorMessage); 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.CompareResult = IdCardFaceCompareResultEnumType.Compared;
record.ApiResponse = response.RawResponse; record.ApiResponse = response.RawResponse;
record.IsPassed = response.Passed; record.IsPassed = response.Passed;
record.Similarity = response.Similarity; record.Similarity = response.Similarity;
record.CompareCount += 1; record.CompareCount += 1;
record.LastCompareTime = now; record.LastCompareTime = now;
record.ErrorMessage = null;
record.ModifiedTime = DateTime.Now;
record.ModifiedBy = userId;
await _dbContext.UpdateAsync(record); await _dbContext.UpdateAsync(record);
return await GetRecordAsync(record.UserCode); 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<IdCardFaceCompareRecordResponse> GetRecordAsync(string userCode) private async Task<IdCardFaceCompareRecordResponse> GetRecordAsync(string userCode)
{ {
return await _dbContext.Queryable<IdCardFaceCompareRecordEntity>() return await _dbContext.Queryable<IdCardFaceCompareRecordEntity>()