From aadc59e405494c8a4486c3e08b9d4620130b381c Mon Sep 17 00:00:00 2001 From: youngq Date: Mon, 9 Sep 2024 17:58:01 +0800 Subject: [PATCH] 1 --- .../Controllers/Backend/UserController.cs | 1 + .../Controllers/Frontend/UserController.cs | 84 ++++++++++++++++++- WGShare.API/WGShare.API.xml | 7 ++ 3 files changed, 91 insertions(+), 1 deletion(-) diff --git a/WGShare.API/Controllers/Backend/UserController.cs b/WGShare.API/Controllers/Backend/UserController.cs index 0c8b604..8f3ce7c 100644 --- a/WGShare.API/Controllers/Backend/UserController.cs +++ b/WGShare.API/Controllers/Backend/UserController.cs @@ -52,6 +52,7 @@ namespace WGShare.API.Controllers.Backend u => u.UserName.Contains(searchDTO.keyword) || u.Account.Contains(searchDTO.keyword) || u.Id.Contains(searchDTO.keyword)) .WhereIF(!string.IsNullOrWhiteSpace(searchDTO.TenantId), u => u.TenantId == searchDTO.TenantId) .WhereIF(!string.IsNullOrWhiteSpace(searchDTO.RoleId), u => u.RoleId == searchDTO.RoleId) + .OrderBy(u => u.Id, OrderByType.Desc) //.Where(u => u.IsDelete == false) .Select((u, r, t) => new User { diff --git a/WGShare.API/Controllers/Frontend/UserController.cs b/WGShare.API/Controllers/Frontend/UserController.cs index 9fc2035..f3c3a7b 100644 --- a/WGShare.API/Controllers/Frontend/UserController.cs +++ b/WGShare.API/Controllers/Frontend/UserController.cs @@ -1,7 +1,12 @@ using Mapster; +using Masuit.Tools; +using Masuit.Tools.Security; using Microsoft.AspNetCore.Mvc; +using Microsoft.VisualBasic; +using MiniExcelLibs; using SqlSugar; using System; +using System.Text.RegularExpressions; using WGShare.API.Controllers.Basic; using WGShare.API.Helpers; using WGShare.Domain.Constant; @@ -18,10 +23,13 @@ namespace WGShare.API.Controllers.Frontend public class UserController : BasicController { private readonly ISqlSugarClient _sqlSugar; + private readonly OssHelper _ossHelper; - public UserController(ISqlSugarClient sqlSugar) + public UserController(ISqlSugarClient sqlSugar, + OssHelper ossHelper) { this._sqlSugar = sqlSugar; + this._ossHelper = ossHelper; } @@ -131,5 +139,79 @@ namespace WGShare.API.Controllers.Frontend .Where(x => ids.Contains(x.Id)).ExecuteCommandHasChangeAsync(); } + + /// + /// Excel 导入用户 + /// + /// + /// + [HttpPost("import")] + public async Task Import([FromForm] IFormFile file) + { + + using var stream = file.OpenReadStream(); + var rows = stream.Query().ToList(); + if (rows.IsNullOrEmpty()) + { + throw Oops.Oh("无有效数据,请检查文件数据!"); + } + + var accounts = rows.Select(x => x.Account.Trim()); + var repeatAccount = accounts.GroupBy(x => x).Where(x => x.Count() > 1).Select(x => x.Key).ToHashSet(); + + // 去除重复账号 + var distinctAccount = accounts.Except(repeatAccount); + + // 数据库重复账号检查 + var existsAccount = await _sqlSugar.Queryable() + .Where(x => distinctAccount.Contains(x.Account)) + .Select(x => x.Account) + .ToListAsync(); + if (!existsAccount.IsNullOrEmpty()) + { + repeatAccount.UnionWith(existsAccount); + } + + if (!repeatAccount.IsNullOrEmpty()) + { + // 重复账号,返回结果Excel + foreach (var row in rows) + { + if (repeatAccount.Contains(row.Account)) + { + row.ImportResult = "账号重复"; + } + else + { + row.ImportResult = "可导入"; + } + } + //FileStreamResult fileStream = null; + using var memoryStream = new MemoryStream(); + + memoryStream.SaveAs(rows); + memoryStream.Seek(0, SeekOrigin.Begin); + + var fileName = $@"excel/{Regex.Replace(file.FileName, @"\.(xlsx|xls)$", "", RegexOptions.IgnoreCase)}_导入失败_{DateTime.Now.ToString("HHmmss")}.xlsx"; + _ossHelper.UploadWithExpireTime(fileName, memoryStream, 10); + var fileUrl = _ossHelper.GetAccessFileUrl(fileName, 1); + + return Ok((isSuccess: false, url: fileUrl, msg: "导入失败,请检查原因后重新导入!")); + } + + var users = rows.Adapt>(); + users.ForEach(x => + { + x.Pwd = x.Pwd.MDString(); + x.ScreenShareId = UserShareIdHelper.GenerateUnique8DigitNumber(); + x.TenantId = TenantId; + x.RoleId = x.RoleId == "管理员" ? "1" : "2"; + }); + + await _sqlSugar.Insertable(users).ExecuteCommandAsync(); + + return Ok((isSuccess: true, url: "", msg: "导入成功")); + } + } } diff --git a/WGShare.API/WGShare.API.xml b/WGShare.API/WGShare.API.xml index aa8d386..c2db736 100644 --- a/WGShare.API/WGShare.API.xml +++ b/WGShare.API/WGShare.API.xml @@ -281,6 +281,13 @@ + + + Excel 导入用户 + + + + 前后端共用接口