fix excel导入生成权限和任务

This commit is contained in:
2024-11-29 16:17:00 +08:00
parent e96c9c1ee1
commit 6a9e2822a1
4 changed files with 74 additions and 1 deletions

View File

@@ -50,6 +50,15 @@ public class DevicePermissionsController : ControllerBase
await _devicePermissionService.AssignToUniqueAsync(request); await _devicePermissionService.AssignToUniqueAsync(request);
} }
[AllowAnonymous]
[HttpPost("assign-unique-import")]
[Transactional]
[IgnoreTenant]
public async Task AssignToUniqueImportAsync(IFormFile file)
{
await _devicePermissionService.AssignToUniqueImportAsync(file);
}
/// <summary> /// <summary>
/// 当前类型的权限分配 /// 当前类型的权限分配
/// </summary> /// </summary>

View File

@@ -23,6 +23,9 @@ public interface IDevicePermissionService : IScopeDependency
/// <returns></returns> /// <returns></returns>
Task AssignToUniqueAsync(DevicePermissionsAssignToDeviceRequest request); Task AssignToUniqueAsync(DevicePermissionsAssignToDeviceRequest request);
Task AssignToUniqueImportAsync(IFormFile file);
/// <summary> /// <summary>
/// 获取分配的权限 /// 获取分配的权限
/// </summary> /// </summary>

View File

@@ -19,6 +19,7 @@ using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
using Kurisu.AspNetCore.Scope; using Kurisu.AspNetCore.Scope;
using Kurisu.AspNetCore.Utils.Extensions; using Kurisu.AspNetCore.Utils.Extensions;
using OfficeOpenXml;
using SqlSugar; using SqlSugar;
namespace Dlhis.Basic.Device.Services.Implements; namespace Dlhis.Basic.Device.Services.Implements;
@@ -161,10 +162,69 @@ public class DevicePermissionService : IDevicePermissionService
await _dbContext.InsertAsync(devicePermissions); await _dbContext.InsertAsync(devicePermissions);
} }
}, gainfoNos); }, gainfoNos);
} }
/// <inheritdoc />
public async Task AssignToUniqueImportAsync(IFormFile file)
{
var deviceNo = Path.GetFileNameWithoutExtension(file.FileName);
var device = await _dbContext.Queryable<DeviceEntity>().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<string>();
for (int i = 1; i < rowCount; i++)
{
var userCode = worksheet.Cells[i + 1, 2].GetCellValue<string>();
list.Add(userCode);
}
foreach (var items in list.Chunk(500))
{
var gainfoNos = await _dbContext.Queryable<GainfoEntity>().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<List<Guid>> GetAssignmentsAsync(DeviceGetAssignmentsRequest request) public async Task<List<Guid>> GetAssignmentsAsync(DeviceGetAssignmentsRequest request)
{ {
request.AssignValue = request.AssignType == AssignTypeEnumType.Department ? request.TenantId + ":" + request.AssignValue : request.AssignValue; request.AssignValue = request.AssignType == AssignTypeEnumType.Department ? request.TenantId + ":" + request.AssignValue : request.AssignValue;

View File

@@ -20,6 +20,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="EPPlus" Version="7.5.1" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.19.5" /> <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.19.5" />
<PackageReference Include="Minio" Version="6.0.3" /> <PackageReference Include="Minio" Version="6.0.3" />
</ItemGroup> </ItemGroup>