diff --git a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs
index 834c46c9..70226553 100644
--- a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs
+++ b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs
@@ -50,6 +50,15 @@ public class DevicePermissionsController : ControllerBase
await _devicePermissionService.AssignToUniqueAsync(request);
}
+ [AllowAnonymous]
+ [HttpPost("assign-unique-import")]
+ [Transactional]
+ [IgnoreTenant]
+ public async Task AssignToUniqueImportAsync(IFormFile file)
+ {
+ await _devicePermissionService.AssignToUniqueImportAsync(file);
+ }
+
///
/// 当前类型的权限分配
///
diff --git a/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs
index deb9d1d5..532613db 100644
--- a/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs
+++ b/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs
@@ -23,6 +23,9 @@ public interface IDevicePermissionService : IScopeDependency
///
Task AssignToUniqueAsync(DevicePermissionsAssignToDeviceRequest request);
+
+ Task AssignToUniqueImportAsync(IFormFile file);
+
///
/// 获取分配的权限
///
diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs
index bceb2495..ecb56ceb 100644
--- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs
+++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs
@@ -19,6 +19,7 @@ using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
using Kurisu.AspNetCore.Scope;
using Kurisu.AspNetCore.Utils.Extensions;
+using OfficeOpenXml;
using SqlSugar;
namespace Dlhis.Basic.Device.Services.Implements;
@@ -161,10 +162,69 @@ public class DevicePermissionService : IDevicePermissionService
await _dbContext.InsertAsync(devicePermissions);
}
-
}, gainfoNos);
}
+ ///
+ public async Task AssignToUniqueImportAsync(IFormFile file)
+ {
+ var deviceNo = Path.GetFileNameWithoutExtension(file.FileName);
+
+ var device = await _dbContext.Queryable().Where(x => x.UniqueNo == deviceNo).SingleAsync();
+ device.ThrowIfNull("设备不存在");
+
+ ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
+ using (var package = new ExcelPackage(file.OpenReadStream()))
+ {
+ ExcelWorksheet worksheet = package.Workbook.Worksheets[0];
+ int rowCount = worksheet.Dimension.Rows; // 获取行数
+ int colCount = worksheet.Dimension.Columns; // 获取列数
+
+ var list = new List();
+ for (int i = 1; i < rowCount; i++)
+ {
+ var userCode = worksheet.Cells[i + 1, 2].GetCellValue();
+ list.Add(userCode);
+ }
+
+ foreach (var items in list.Chunk(500))
+ {
+ var gainfoNos = await _dbContext.Queryable().Where(x => items.Contains(x.Code)).Select(x => x.No).ToListAsync();
+
+ var permissions = gainfoNos.Select(x => new DevicePermissionEntity
+ {
+ AssignType = AssignTypeEnumType.User,
+ AssignValue = x,
+ UniqueType = DeviceAssignmentTypeEnumType.Device,
+ UniqueValue = device.Code,
+ Type = device.Type,
+ TenantId = device.TenantId,
+ IsDeleted = false
+ }).ToList();
+
+ await _dbContext.InsertAsync(permissions);
+
+ var tasks = permissions.Select(x => new DeviceTaskEntity
+ {
+ Type = DeviceTaskEnumType.Add,
+ DeviceType = x.Type,
+ UserId = null,
+ UserNo = x.AssignValue,
+ DeviceUniqueNo = device.UniqueNo,
+ Status = DeviceTaskStatusEnumType.Wait,
+ Version = 0,
+ ResultMessage = null,
+ CancellationId = 0,
+ Source = DeviceTaskSourceEnumType.Manually,
+ Priority = 0,
+ TenantId = device.TenantId,
+ }).ToList();
+
+ await _dbContext.InsertAsync(tasks);
+ }
+ }
+ }
+
public async Task> GetAssignmentsAsync(DeviceGetAssignmentsRequest request)
{
request.AssignValue = request.AssignType == AssignTypeEnumType.Department ? request.TenantId + ":" + request.AssignValue : request.AssignValue;
diff --git a/Src/Dlhis.Basic/Dlhis.Basic.csproj b/Src/Dlhis.Basic/Dlhis.Basic.csproj
index 5b2a8bb7..35ddb2dd 100644
--- a/Src/Dlhis.Basic/Dlhis.Basic.csproj
+++ b/Src/Dlhis.Basic/Dlhis.Basic.csproj
@@ -20,6 +20,7 @@
+