diff --git a/Src/Dlhis.Entity/Device/Entities/DeviceUserEntity.cs b/Src/Dlhis.Entity/Device/Entities/DeviceUserEntity.cs
new file mode 100644
index 00000000..81aea744
--- /dev/null
+++ b/Src/Dlhis.Entity/Device/Entities/DeviceUserEntity.cs
@@ -0,0 +1,26 @@
+using Kurisu.AspNetCore.DataAccess.Entity;
+using Kurisu.AspNetCore.DataAccess.SqlSugar;
+using SqlSugar;
+
+namespace Dlhis.Entity.Device.Entities;
+
+///
+///
+///
+[SugarTable(TableName = "DeviceUsers")]
+public class DeviceUserEntity : SugarBaseEntity, ISoftDeleted
+{
+ ///
+ /// 设备唯一号
+ ///
+ [SugarColumn(IsNullable = false, UniqueGroupNameList = new[] { "idx_deviceUsers_deviceUniqueNo" })]
+ public string DeviceUniqueNo { get; set; }
+
+ ///
+ /// 用户工号
+ ///
+ [SugarColumn(IsNullable = false)]
+ public string UserCode { get; set; }
+
+ public bool IsDeleted { get; set; }
+}
\ No newline at end of file
diff --git a/Src/Dlhis.ScheduledTask/DeviceUploadLog/Controllers/DeviceUserController.cs b/Src/Dlhis.ScheduledTask/DeviceUploadLog/Controllers/DeviceUserController.cs
new file mode 100644
index 00000000..9358bf6d
--- /dev/null
+++ b/Src/Dlhis.ScheduledTask/DeviceUploadLog/Controllers/DeviceUserController.cs
@@ -0,0 +1,32 @@
+using Dlhis.ScheduledTask.DeviceUploadLog.Request;
+using Dlhis.ScheduledTask.DeviceUploadLog.Services;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+
+namespace Dlhis.ScheduledTask.DeviceUploadLog.Controllers;
+
+///
+/// 设备人员
+///
+[Authorize]
+[Route("api/[controller]")]
+[ApiController]
+public class DeviceUserController
+{
+ private readonly IDeviceUserService _deviceUserService;
+
+ public DeviceUserController(IDeviceUserService deviceUserService)
+ {
+ _deviceUserService = deviceUserService;
+ }
+
+ ///
+ /// 上传人员信息
+ ///
+ ///
+ [HttpPost("upload")]
+ public async Task UploadAsync([FromBody] DeviceUploadUserCodeRequest request)
+ {
+ await _deviceUserService.UploadAsync(request);
+ }
+}
\ No newline at end of file
diff --git a/Src/Dlhis.ScheduledTask/DeviceUploadLog/Request/DeviceUploadUserCodeRequest.cs b/Src/Dlhis.ScheduledTask/DeviceUploadLog/Request/DeviceUploadUserCodeRequest.cs
new file mode 100644
index 00000000..87cfb198
--- /dev/null
+++ b/Src/Dlhis.ScheduledTask/DeviceUploadLog/Request/DeviceUploadUserCodeRequest.cs
@@ -0,0 +1,11 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace Dlhis.ScheduledTask.DeviceUploadLog.Request;
+
+public class DeviceUploadUserCodeRequest
+{
+ [Required]
+ public string DeviceUniqueNo { get; set; }
+
+ public List UserCodes { get; set; }
+}
\ No newline at end of file
diff --git a/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/IDeviceUserService.cs b/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/IDeviceUserService.cs
new file mode 100644
index 00000000..55d8b081
--- /dev/null
+++ b/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/IDeviceUserService.cs
@@ -0,0 +1,8 @@
+using Dlhis.ScheduledTask.DeviceUploadLog.Request;
+
+namespace Dlhis.ScheduledTask.DeviceUploadLog.Services;
+
+public interface IDeviceUserService : IScopeDependency
+{
+ Task UploadAsync(DeviceUploadUserCodeRequest request);
+}
\ No newline at end of file
diff --git a/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUserService.cs b/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUserService.cs
new file mode 100644
index 00000000..1cbdf5eb
--- /dev/null
+++ b/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUserService.cs
@@ -0,0 +1,32 @@
+using Dlhis.Entity.Device.Entities;
+using Dlhis.ScheduledTask.DeviceUploadLog.Request;
+using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
+
+namespace Dlhis.ScheduledTask.DeviceUploadLog.Services.Implements;
+
+public class DeviceUserService : IDeviceUserService
+{
+ private readonly IDbContext _dbContext;
+
+ public DeviceUserService(IDbContext dbContext)
+ {
+ _dbContext = dbContext;
+ }
+
+ public async Task UploadAsync(DeviceUploadUserCodeRequest request)
+ {
+ if (!await _dbContext.Queryable().Where(x => x.DeviceUniqueNo == request.DeviceUniqueNo).AnyAsync())
+ {
+ var userCodes = request.UserCodes.Distinct().ToList();
+
+ var entities = userCodes.Select(userCode => new DeviceUserEntity
+ {
+ DeviceUniqueNo = request.DeviceUniqueNo,
+ UserCode = userCode,
+ IsDeleted = false
+ }).ToList();
+
+ await _dbContext.InsertAsync(entities);
+ }
+ }
+}
\ No newline at end of file