using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using OfficeOpenXml; using OfficeOpenXml.Style; using System.Drawing; using System.IO.Compression; using System.Security.Claims; using static asg_form.Controllers.login; using static System.Runtime.InteropServices.JavaScript.JSType; namespace asg_form.Controllers { [ApiController] public class excel : ControllerBase { private readonly RoleManager roleManager; private readonly UserManager userManager; public excel( RoleManager roleManager, UserManager userManager) { this.roleManager = roleManager; this.userManager = userManager; } /// /// 通过战队名搜索一个战队的详细信息 /// /// /// public static void ExportToExcel_noadmin(List
data,string eventname, string fileName) { using (var package = new ExcelPackage()) { foreach (var form in data) { var worksheet = package.Workbook.Worksheets.Add(form.team_name); worksheet.Cells[1, 1].Value = "队伍logo"; worksheet.Cells[1, 2].Value = "队伍ID"; worksheet.Cells[1, 3].Value = "队伍名称"; worksheet.Cells[1, 4].Value = "队长联系方式"; worksheet.Cells[1, 5].Value = "队伍票数"; int a = 1; while (a <= 5) { worksheet.Cells[1, a].Style.Font.Bold = true; worksheet.Cells[1, a].Style.Font.Color.SetColor(Color.White); worksheet.Cells[1, a].Style.Fill.PatternType = ExcelFillStyle.Solid; worksheet.Cells[1, a].Style.Fill.BackgroundColor.SetColor(Color.RoyalBlue); a++; } try { var pic = worksheet.Drawings.AddPicture(form.team_name, $@"{AppDomain.CurrentDomain.BaseDirectory}loge/{eventname}/{form.team_name}.png"); pic.SetSize(50, 50); pic.SetPosition(26, 0); } catch (Exception) { Console.WriteLine($@"{AppDomain.CurrentDomain.BaseDirectory}loge/{eventname}/{form.team_name}.png"); } worksheet.Cells[2, 2].Value = form.Id; worksheet.Cells[2, 3].Value = form.team_name; worksheet.Cells[2, 4].Value = form.team_tel; worksheet.Cells[2, 5].Value = form.piaoshu; int b = 1; while (b <= 6) { worksheet.Cells[5, b].Style.Font.Bold = true; worksheet.Cells[5, b].Style.Font.Color.SetColor(Color.White); worksheet.Cells[5, b].Style.Fill.PatternType = ExcelFillStyle.Solid; worksheet.Cells[5, b].Style.Fill.BackgroundColor.SetColor(Color.LightGreen); b++; } worksheet.Cells[5, 1].Value = "队员ID"; worksheet.Cells[5, 2].Value = "队员名称"; worksheet.Cells[5, 3].Value = "队伍第五人格名称"; worksheet.Cells[5, 4].Value = "队员阵营"; worksheet.Cells[5, 5].Value = "队员第五人格ID"; worksheet.Cells[5, 6].Value = "队员历史段位"; for (int i = 0; i < form.role.Count; i++) { var role = form.role[i]; var dow = i + 6; worksheet.Cells[dow, 1].Value = role.Id; worksheet.Cells[dow, 2].Value = role.role_name; worksheet.Cells[dow, 3].Value = role.Game_Name; worksheet.Cells[dow, 4].Value = role.role_lin; worksheet.Cells[dow, 5].Value = role.role_id; worksheet.Cells[dow, 6].Value = role.Historical_Ranks; } } FileInfo excelFile = new FileInfo(fileName); package.SaveAs(excelFile); } } public static void ExportToExcel(List data, string eventname, string fileName) { using (var package = new ExcelPackage()) { foreach (var form in data) { var worksheet = package.Workbook.Worksheets.Add(form.team_name); worksheet.Cells[1, 1].Value = "队伍logo"; worksheet.Cells[1, 2].Value = "队伍ID"; worksheet.Cells[1, 3].Value = "队伍名称"; worksheet.Cells[1, 4].Value = "队长联系方式"; worksheet.Cells[1, 5].Value = "队伍密码"; worksheet.Cells[1, 6].Value = "队伍票数"; int a = 1; while (a <= 6) { worksheet.Cells[1, a].Style.Font.Bold = true; worksheet.Cells[1, a].Style.Font.Color.SetColor(Color.White); worksheet.Cells[1, a].Style.Fill.PatternType = ExcelFillStyle.Solid; worksheet.Cells[1, a].Style.Fill.BackgroundColor.SetColor(Color.RoyalBlue); a++; } try { var pic = worksheet.Drawings.AddPicture(form.team_name, $@"{AppDomain.CurrentDomain.BaseDirectory}loge/{eventname}/{form.team_name}.png"); pic.SetSize(50, 50); pic.SetPosition(26, 0); } catch (Exception) { } worksheet.Cells[2, 2].Value = form.Id; worksheet.Cells[2, 3].Value = form.team_name; worksheet.Cells[2, 4].Value = form.team_tel; worksheet.Cells[2, 5].Value = form.team_password; worksheet.Cells[2, 6].Value = form.piaoshu; worksheet.Cells[5, 1].Value = "队员ID"; worksheet.Cells[5, 2].Value = "队员名称"; worksheet.Cells[5, 3].Value = "队伍第五人格名称"; worksheet.Cells[5, 4].Value = "队员阵营"; worksheet.Cells[5, 5].Value = "队员第五人格ID"; worksheet.Cells[5, 6].Value = "队员身份证号码"; worksheet.Cells[5, 7].Value = "队员常用角色"; worksheet.Cells[5, 8].Value = "队员历史段位"; worksheet.Cells[5, 9].Value = "队员真实姓名"; worksheet.Cells[5, 10].Value = "队员姓名"; int b = 1; while (b <= 10) { worksheet.Cells[5, b].Style.Font.Bold = true; worksheet.Cells[5, b].Style.Font.Color.SetColor(Color.White); worksheet.Cells[5, b].Style.Fill.PatternType = ExcelFillStyle.Solid; worksheet.Cells[5, b].Style.Fill.BackgroundColor.SetColor(Color.LightGreen); b++; } for (int i = 0; i < form.role.Count; i++) { var role = form.role[i]; var dow = i + 6; worksheet.Cells[dow, 1].Value = role.Id; worksheet.Cells[dow, 2].Value = role.role_name; worksheet.Cells[dow, 3].Value = role.Game_Name; worksheet.Cells[dow, 4].Value = role.role_lin; worksheet.Cells[dow, 5].Value = role.role_id; worksheet.Cells[dow, 6].Value = role.Id_Card; worksheet.Cells[dow, 7].Value = role.Common_Roles; worksheet.Cells[dow, 8].Value = role.Historical_Ranks; worksheet.Cells[dow, 9].Value = role.Id_Card_Name; worksheet.Cells[dow, 10].Value = role.Phone_Number; } } FileInfo excelFile = new FileInfo(fileName); package.SaveAs(excelFile); } } [Authorize] [Route("api/v1/admin/form/{search}")] [HttpGet] public async Task>> Get(string search) { if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin")) { TestDbContext ctx = new TestDbContext(); List data = new List(); List teams = ctx.Forms.Include(a => a.role).Where(a => a.team_name.IndexOf(search) >= 0).ToList(); foreach (var team in teams) { var roles = team.role; allteam allteam = new allteam(); allteam.Id = team.Id; allteam.Name = team.team_name; foreach (var role in roles) { role.form = null; allteam.role.Add(role); } data.Add(allteam); } return data; } else { return BadRequest(new error_mb { code = 400, message = "无权访问" }); } } [Authorize] [Route("api/v1/admin/officium/group")] [HttpGet] public async Task> Gethaveop() { using (TestDbContext ctx = new TestDbContext()) { object data = userManager.Users.Select(a => new { a.Id, a.UserName, a.chinaname, a.Email, a.officium }).Where(a => a.officium != null).GroupBy(a => a.officium).ToList(); return data; } } [Authorize] [Route("api/v1/admin/user/{search}")] [HttpGet] public async Task>> searchuser(string search) { if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "nbadmin")) { TestDbContext ctx = new TestDbContext(); List data = new List(); List users = userManager.Users.Where(a => a.UserName.IndexOf(search) >= 0).ToList(); foreach (var user1 in users) { post_user post_User = new post_user(); post_User.id = user1.Id; post_User.name = user1.UserName; post_User.email = user1.Email; post_User.officium = user1.officium; post_User.chinaname = user1.chinaname; post_User.Base64 = user1.UserBase64; post_User.Roles = (List?)await userManager.GetRolesAsync(user1); data.Add(post_User); } return data; } else { return BadRequest(new error_mb { code = 400, message = "无权访问" }); } } [Authorize] [Route("api/v1/admin/user/email/{search}")] [HttpGet] public async Task>> searchuser_byemail(string search) { if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin")) { TestDbContext ctx = new TestDbContext(); List data = new List(); List users = userManager.Users.Where(a => a.Email.IndexOf(search) >= 0).ToList(); foreach (var user1 in users) { post_user post_User = new post_user(); post_User.id = user1.Id; post_User.name = user1.UserName; post_User.email = user1.Email; post_User.officium = user1.officium; post_User.chinaname = user1.chinaname; post_User.Base64 = user1.UserBase64; post_User.Roles = (List?)await userManager.GetRolesAsync(user1); data.Add(post_User); } return data; } else { return BadRequest(new error_mb { code = 400, message = "无权访问" }); } } [Authorize] [Route("api/v1/admin/user/chinaname/{search}")] [HttpGet] public async Task>> searchuser_bychinaname(string search) { if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin")) { TestDbContext ctx = new TestDbContext(); List data = new List(); List users = userManager.Users.Where(a => a.chinaname.IndexOf(search) >= 0).ToList(); foreach (var user1 in users) { post_user post_User = new post_user(); post_User.id = user1.Id; post_User.name = user1.UserName; post_User.email = user1.Email; post_User.officium = user1.officium; post_User.chinaname = user1.chinaname; post_User.Base64 = user1.UserBase64; post_User.Roles = (List?)await userManager.GetRolesAsync(user1); data.Add(post_User); } return data; } else { return BadRequest(new error_mb { code = 400, message = "无权访问" }); } } [Route("api/v1/admin/excel")] [HttpGet] [Authorize] public async Task>> excel1(string event_name) { string guid = Guid.NewGuid().ToString(); TestDbContext testDb = new TestDbContext(); List result = testDb.Forms.Include(a=>a.role).Include(a=>a.events).Where(a=>a.events.name==event_name).ToList(); if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "nbadmin")) { ExportToExcel(result,event_name, $"{AppDomain.CurrentDomain.BaseDirectory}excel/{guid}.xlsx"); return Ok(guid); } else if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin")) { ExportToExcel_noadmin(result,event_name, $"{AppDomain.CurrentDomain.BaseDirectory}excel/{guid}.xlsx"); return Ok(guid); } else { return BadRequest(new error_mb { code = 400, message = "无管理员" }); } } [Route("api/v1/admin/excel/")] [HttpDelete] [Authorize] public ActionResult> delexcel() { if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin")) { DirectoryInfo di = new DirectoryInfo($@"{AppDomain.CurrentDomain.BaseDirectory}excel"); FileInfo[] files = di.GetFiles(); foreach (var file in files) { System.IO.File.Delete(file.FullName); } return Ok("ok"); } else { return BadRequest(new error_mb { code = 400, message = "无管理员" }); } } [Route("api/v1/admin/rolealluser")] [HttpGet] [Authorize] public async Task> RoleuserAsync(string rolename,string onlyId) { if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin")) { List data = new List(); var users= await userManager.GetUsersInRoleAsync(rolename); foreach (var user1 in users) { post_user post_User = new post_user(); post_User.id = user1.Id; if(onlyId != "1") { post_User.name = user1.UserName; post_User.email = user1.Email; post_User.officium = user1.officium; post_User.chinaname = user1.chinaname; post_User.Base64 = user1.UserBase64; post_User.Roles = (List?)await userManager.GetRolesAsync(user1); } data.Add(post_User); } return Ok(new { code = 200, message = "" ,data}); } else { return BadRequest(new error_mb { code = 400, message = "无管理员" }); } } [Route("api/v1/admin/excel/all")] [HttpGet] [Authorize] public ActionResult> allexcel() { if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin")) { DirectoryInfo di = new DirectoryInfo($@"{AppDomain.CurrentDomain.BaseDirectory}video"); FileInfo[] files = di.GetFiles(); List result = new List(); foreach (FileInfo file in files) { result.Add(file.Name); } return result; } else { return BadRequest(new error_mb { code = 400, message = "无管理员" }); } } /// /// 将指定目录压缩为Zip文件 /// /// 文件夹地址 D:/1/ /// zip地址 D:/1.zip public static void CompressDirectoryZip(string folderPath, string zipPath) { DirectoryInfo directoryInfo = new(zipPath); if (directoryInfo.Parent != null) { directoryInfo = directoryInfo.Parent; } if (!directoryInfo.Exists) { directoryInfo.Create(); } ZipFile.CreateFromDirectory(folderPath, zipPath, System.IO.Compression.CompressionLevel.Optimal, false); } [Route("api/v1/admin/form_count")] [HttpGet] [ResponseCache(Duration = 30)] public async Task> form_count() { Dictionary keys = new Dictionary(); using (TestDbContext ctx = new TestDbContext()) { var all_event = await ctx.events.ToListAsync(); foreach (var eventt in all_event) { keys.Add(eventt.name, ctx.Forms.Where(a => a.events == eventt).Count()); } } return Ok((object)keys); } [Route("api/v1/admin/img_zip")] [HttpGet] [ResponseCache(Duration = 1720)] public async Task> img_zip() { string guid = Guid.NewGuid().ToString(); CompressDirectoryZip($"{AppDomain.CurrentDomain.BaseDirectory}loge/", $"{AppDomain.CurrentDomain.BaseDirectory}doc/{guid}.zip"); return $"/doc/{guid}.zip"; } public class team_count { public string eventname { get; set; } public int formnumber { get; set; } } /// /// 获得所有战队信息 /// /// /// /// [Authorize] [Route("api/v1/admin/form/all")] [HttpGet] public async Task>> Post(string events) { if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin")) { TestDbContext ctx = new TestDbContext(); var teams = ctx.Forms.Include(a => a.role).Include(a => a.events).Where(a => a.events.name == events).ToList(); foreach (var team in teams) { team.events.forms = null; foreach (var role in team.role) { role.form = null; } } return teams; } else { return BadRequest(new error_mb { code = 400, message = "无权访问" }); } } public class allteam { /// /// 战队id /// public long Id { get; set; } /// /// 战队名称 /// public string Name { get; set; } /// /// 战队的角色 /// public List role { get; set; } = new List(); } } }