diff --git a/Src/Dlhis.Basic/Organization/Controllers/GainfoFacesController.cs b/Src/Dlhis.Basic/Organization/Controllers/GainfoFacesController.cs
new file mode 100644
index 00000000..124b041d
--- /dev/null
+++ b/Src/Dlhis.Basic/Organization/Controllers/GainfoFacesController.cs
@@ -0,0 +1,32 @@
+using Dlhis.Basic.Organization.Request;
+using Dlhis.Basic.Organization.Services;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+
+namespace Dlhis.Basic.Organization.Controllers;
+
+///
+/// 人员face
+///
+[Route("api/[controller]")]
+[ApiController]
+public class GainfoFacesController : ControllerBase
+{
+ private readonly IGainfoFaceService _gainfoFaceService;
+
+ public GainfoFacesController(IGainfoFaceService gainfoFaceService)
+ {
+ _gainfoFaceService = gainfoFaceService;
+ }
+
+ ///
+ /// 上传外部人员人脸照片
+ ///
+ ///
+ [AllowAnonymous]
+ [HttpPost("external/face")]
+ public async Task UploadExternalFaceAsync(GainfoUploadFaceRequest request)
+ {
+ await _gainfoFaceService.UploadExternalFaceAsync(request);
+ }
+}
diff --git a/Src/Dlhis.Basic/Organization/Request/GainfoUploadFaceRequest.cs b/Src/Dlhis.Basic/Organization/Request/GainfoUploadFaceRequest.cs
index 55b63b59..955e2b68 100644
--- a/Src/Dlhis.Basic/Organization/Request/GainfoUploadFaceRequest.cs
+++ b/Src/Dlhis.Basic/Organization/Request/GainfoUploadFaceRequest.cs
@@ -5,13 +5,13 @@ namespace Dlhis.Basic.Organization.Request;
public class GainfoUploadFaceRequest : IValidatableObject
{
///
- /// 用户档案号
+ /// no/idno
///
- [Required(ErrorMessage = "用户档案号")]
+ [Required(ErrorMessage = "no/idno不能为空")]
public string UserNo { get; set; }
///
- /// 人脸照片
+ /// 人脸base64
///
[Required(ErrorMessage = "人脸照片不能为空")]
public string Face { get; set; }
diff --git a/Src/Dlhis.Basic/Organization/Services/IGainfoFaceService.cs b/Src/Dlhis.Basic/Organization/Services/IGainfoFaceService.cs
new file mode 100644
index 00000000..e2f00e2f
--- /dev/null
+++ b/Src/Dlhis.Basic/Organization/Services/IGainfoFaceService.cs
@@ -0,0 +1,8 @@
+using Dlhis.Basic.Organization.Request;
+
+namespace Dlhis.Basic.Organization.Services;
+
+public interface IGainfoFaceService : IScopeDependency
+{
+ Task UploadExternalFaceAsync(GainfoUploadFaceRequest request);
+}
diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoFaceService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoFaceService.cs
new file mode 100644
index 00000000..2b91d5d8
--- /dev/null
+++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoFaceService.cs
@@ -0,0 +1,51 @@
+using Dlhis.Basic.Organization.Request;
+using Dlhis.Entity.Basic.Entity;
+using Dlhis.Entity.Basic.Enums;
+using Kurisu.AspNetCore.Utils.Extensions;
+using Kurisu.SqlSugar.Services;
+
+namespace Dlhis.Basic.Organization.Services.Implements;
+
+public class GainfoFaceService : IGainfoFaceService
+{
+ private readonly IGainfoStore _gainfoStore;
+ private readonly IDbContext _dbContext;
+
+ public GainfoFaceService(IGainfoStore gainfoStore, IDbContext dbContext)
+ {
+ _gainfoStore = gainfoStore;
+ _dbContext = dbContext;
+ }
+
+ public async Task UploadExternalFaceAsync(GainfoUploadFaceRequest request)
+ {
+ var gainfo = await _gainfoStore.Queryable(GainfoStatusEnumType.External).Where(x => x.No == request.UserNo).FirstAsync();
+ gainfo.ThrowIfNull("人员信息不存在");
+
+ var faceContext = _dbContext.ChangeDb("face");
+ var face = await faceContext.Queryable().Where(x => x.UserCode == gainfo.Code).SingleAsync();
+
+ if (face == null)
+ {
+ face = new GainfoFaceEntity
+ {
+ UserCode = gainfo.Code,
+ Face = request.Face,
+ CreateTime = DateTime.Now,
+ ModifiedTime = DateTime.Now,
+ CreatedBy = 1,
+ ModifiedBy = 1
+ };
+
+ await faceContext.InsertAsync(face);
+ }
+ else
+ {
+ face.Face = request.Face;
+ face.ModifiedBy = 1;
+ face.ModifiedTime = DateTime.Now;
+
+ await faceContext.UpdateAsync(face);
+ }
+ }
+}