From 6a9e2822a137dd6edc9384ef2b71a8fdbcf6f6f0 Mon Sep 17 00:00:00 2001 From: liguoyang Date: Fri, 29 Nov 2024 16:17:00 +0800 Subject: [PATCH] =?UTF-8?q?fix=20excel=E5=AF=BC=E5=85=A5=E7=94=9F=E6=88=90?= =?UTF-8?q?=E6=9D=83=E9=99=90=E5=92=8C=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DevicePermissionsController.cs | 9 +++ .../Services/IDevicePermissionService.cs | 3 + .../Implements/DevicePermissionService.cs | 62 ++++++++++++++++++- Src/Dlhis.Basic/Dlhis.Basic.csproj | 1 + 4 files changed, 74 insertions(+), 1 deletion(-) 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 @@ +