This commit is contained in:
youngq 2024-09-09 17:58:01 +08:00
parent 4306e03fe6
commit aadc59e405
3 changed files with 91 additions and 1 deletions

View File

@ -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
{

View File

@ -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();
}
/// <summary>
/// Excel 导入用户
/// </summary>
/// <param name="file"></param>
/// <returns></returns>
[HttpPost("import")]
public async Task<IActionResult> Import([FromForm] IFormFile file)
{
using var stream = file.OpenReadStream();
var rows = stream.Query<UserExcelInputDto>().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<User>()
.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<List<User>>();
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: "导入成功"));
}
}
}

View File

@ -281,6 +281,13 @@
<param name="ids"></param>
<returns></returns>
</member>
<member name="M:WGShare.API.Controllers.Frontend.UserController.Import(Microsoft.AspNetCore.Http.IFormFile)">
<summary>
Excel 导入用户
</summary>
<param name="file"></param>
<returns></returns>
</member>
<member name="T:WGShare.API.Controllers.PublicController">
<summary>
前后端共用接口