fix: .
This commit is contained in:
@@ -42,4 +42,14 @@ public class GainfoIdCardFaceCompareController : ControllerBase
|
|||||||
{
|
{
|
||||||
return await _service.CompareAsync(request);
|
return await _service.CompareAsync(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 保存人证人脸对比记录
|
||||||
|
/// </summary>
|
||||||
|
[HttpPost("save")]
|
||||||
|
[Transactional]
|
||||||
|
public async Task<IdCardFaceCompareRecordResponse> SaveAsync(IdCardFaceCompareRecordSaveRequest request)
|
||||||
|
{
|
||||||
|
return await _service.SaveAsync(request);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,43 @@
|
|||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using Dlhis.Entity.Basic.Enums;
|
||||||
|
|
||||||
|
namespace Dlhis.Basic.Organization.Request;
|
||||||
|
|
||||||
|
public class IdCardFaceCompareRecordSaveRequest
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 用户code
|
||||||
|
/// </summary>
|
||||||
|
[Required(ErrorMessage = "用户code不可为空")]
|
||||||
|
public string UserCode { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 对比结果
|
||||||
|
/// </summary>
|
||||||
|
public IdCardFaceCompareResultEnumType? CompareResult { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 业务核验是否通过
|
||||||
|
/// </summary>
|
||||||
|
public bool? IsPassed { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 相似度
|
||||||
|
/// </summary>
|
||||||
|
public double? Similarity { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 阿里云原始响应
|
||||||
|
/// </summary>
|
||||||
|
public string ApiResponse { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 对比异常信息
|
||||||
|
/// </summary>
|
||||||
|
public string ErrorMessage { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 对比时间
|
||||||
|
/// </summary>
|
||||||
|
public DateTime? CompareTime { get; set; }
|
||||||
|
}
|
||||||
@@ -90,12 +90,12 @@ public class AliyunClient : IAliyunClient
|
|||||||
};
|
};
|
||||||
|
|
||||||
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;
|
||||||
result.Message = response?.Message;
|
result.Message = response.Message;
|
||||||
result.BizCode = response?.ResultObject?.BizCode;
|
result.BizCode = response.ResultObject.BizCode;
|
||||||
result.Similarity = ParseVerifyScore(response?.ResultObject?.FaceDetail);
|
result.Similarity = ParseVerifyScore(response.ResultObject.FaceDetail);
|
||||||
result.Passed = response?.ResultObject?.BizCode switch
|
result.Passed = response.ResultObject.BizCode switch
|
||||||
{
|
{
|
||||||
"1" => true,
|
"1" => true,
|
||||||
"2" or "3" => false,
|
"2" or "3" => false,
|
||||||
@@ -105,15 +105,10 @@ public class AliyunClient : IAliyunClient
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static double? ParseVerifyScore(string faceDetail)
|
private static double ParseVerifyScore(string faceDetail)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(faceDetail))
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
var detail = JsonConvert.DeserializeObject<AliyunId3MetaVerifyFaceDetail>(faceDetail);
|
var detail = JsonConvert.DeserializeObject<AliyunId3MetaVerifyFaceDetail>(faceDetail);
|
||||||
return detail?.VerifyScore;
|
return detail.VerifyScore;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string ComputeSignature(SortedDictionary<string, string> parameters, string httpMethod, string accessKeySecret)
|
private static string ComputeSignature(SortedDictionary<string, string> parameters, string httpMethod, string accessKeySecret)
|
||||||
@@ -184,6 +179,6 @@ public class AliyunClient : IAliyunClient
|
|||||||
private class AliyunId3MetaVerifyFaceDetail
|
private class AliyunId3MetaVerifyFaceDetail
|
||||||
{
|
{
|
||||||
[JsonProperty("verifyScore")]
|
[JsonProperty("verifyScore")]
|
||||||
public double? VerifyScore { get; set; }
|
public double VerifyScore { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,4 +19,11 @@ public interface IGainfoIdCardFaceCompareService : IScopeDependency
|
|||||||
/// <param name="request">人证人脸对比请求</param>
|
/// <param name="request">人证人脸对比请求</param>
|
||||||
/// <returns>人证人脸对比记录</returns>
|
/// <returns>人证人脸对比记录</returns>
|
||||||
Task<IdCardFaceCompareRecordResponse> CompareAsync(IdCardFaceCompareRequest request);
|
Task<IdCardFaceCompareRecordResponse> CompareAsync(IdCardFaceCompareRequest request);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 保存人证人脸对比记录
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="request">人证人脸对比记录</param>
|
||||||
|
/// <returns>人证人脸对比记录</returns>
|
||||||
|
Task<IdCardFaceCompareRecordResponse> SaveAsync(IdCardFaceCompareRecordSaveRequest request);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ namespace Dlhis.Basic.Organization.Services.Implements;
|
|||||||
public class GainfoIdCardFaceCompareService : IGainfoIdCardFaceCompareService
|
public class GainfoIdCardFaceCompareService : IGainfoIdCardFaceCompareService
|
||||||
{
|
{
|
||||||
private readonly IDbContext _dbContext;
|
private readonly IDbContext _dbContext;
|
||||||
private readonly IServiceProvider _serviceProvider;
|
|
||||||
private readonly IAliyunClient _aliyunClient;
|
private readonly IAliyunClient _aliyunClient;
|
||||||
private readonly ICurrentUser _currentUser;
|
private readonly ICurrentUser _currentUser;
|
||||||
|
|
||||||
@@ -151,6 +150,59 @@ public class GainfoIdCardFaceCompareService : IGainfoIdCardFaceCompareService
|
|||||||
return await GetRecordAsync(record.UserCode);
|
return await GetRecordAsync(record.UserCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<IdCardFaceCompareRecordResponse> SaveAsync(IdCardFaceCompareRecordSaveRequest request)
|
||||||
|
{
|
||||||
|
var gainfo = await _dbContext.Queryable<GainfoEntity>()
|
||||||
|
.Where(x => x.Code == request.UserCode)
|
||||||
|
.SingleAsync();
|
||||||
|
gainfo.ThrowIfNull("人员档案信息不存在");
|
||||||
|
|
||||||
|
var now = DateTime.Now;
|
||||||
|
var compareTime = request.CompareTime ?? now;
|
||||||
|
var userId = _currentUser.GetIntSubjectId();
|
||||||
|
var record = await _dbContext.Queryable<IdCardFaceCompareRecordEntity>()
|
||||||
|
.Where(x => x.UserCode == gainfo.Code)
|
||||||
|
.SingleAsync();
|
||||||
|
|
||||||
|
if (record == null)
|
||||||
|
{
|
||||||
|
record = new IdCardFaceCompareRecordEntity
|
||||||
|
{
|
||||||
|
UserCode = gainfo.Code,
|
||||||
|
CompareCount = 0,
|
||||||
|
CreatedBy = userId,
|
||||||
|
CreateTime = now
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
record.UserType = gainfo.Type;
|
||||||
|
record.UserName = gainfo.Name;
|
||||||
|
record.IdNo = gainfo.IdNo;
|
||||||
|
record.CompareResult = request.CompareResult
|
||||||
|
?? (request.ErrorMessage.IsPresent()
|
||||||
|
? IdCardFaceCompareResultEnumType.NotCompared
|
||||||
|
: IdCardFaceCompareResultEnumType.Compared);
|
||||||
|
record.ApiResponse = request.ApiResponse;
|
||||||
|
record.IsPassed = request.IsPassed;
|
||||||
|
record.Similarity = request.Similarity;
|
||||||
|
record.ErrorMessage = request.ErrorMessage;
|
||||||
|
record.CompareCount += 1;
|
||||||
|
record.LastCompareTime = compareTime;
|
||||||
|
record.ModifiedTime = now;
|
||||||
|
record.ModifiedBy = userId;
|
||||||
|
|
||||||
|
if (record.Id == 0)
|
||||||
|
{
|
||||||
|
await _dbContext.InsertAsync(record);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
await _dbContext.UpdateAsync(record);
|
||||||
|
}
|
||||||
|
|
||||||
|
return await GetRecordAsync(record.UserCode);
|
||||||
|
}
|
||||||
|
|
||||||
private async Task UpdateRecordErrorAndThrowAsync(IdCardFaceCompareRecordEntity record, string message, int userId)
|
private async Task UpdateRecordErrorAndThrowAsync(IdCardFaceCompareRecordEntity record, string message, int userId)
|
||||||
{
|
{
|
||||||
record.ErrorMessage = message;
|
record.ErrorMessage = message;
|
||||||
|
|||||||
Reference in New Issue
Block a user