using System.Security.Cryptography; using System.Runtime.InteropServices.ComTypes; using asg_form.Controllers.Hubs; using Manganese.Text; using Masuit.Tools; using Masuit.Tools.Win32.AntiVirus; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.SignalR; using Microsoft.EntityFrameworkCore; using Newtonsoft.Json.Linq; using NLog; using RestSharp; using SixLabors.ImageSharp; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Net; using System.Net.Mail; using System.Text; using System.Web; using static asg_form.Controllers.excel; using static 所有队伍; using Manganese.Array; using Microsoft.AspNetCore.Identity; using Flurl.Http; using System.Security.Claims; namespace asg_form.Controllers { [ApiController] public class form_cs : ControllerBase { [Route("api/v3/form/all")] [HttpGet] public async Task> GetFormById(short page, short limit, int sort, int eventId) { using (var db = new TestDbContext()) { try { var query = db.Forms.Where(f => f.events.Id == eventId); query = sort switch { 0 => query.OrderByDescending(m => m.piaoshu).ThenByDescending(m => m.time), 1 => query.OrderBy(m => m.piaoshu), 2 => query.OrderByDescending(m => m.piaoshu), 3 => query.OrderBy(m => m.time), 4 => query.OrderByDescending(m => m.time), _ => query }; if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "nbadmin") || this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin")) { try { var results = await query .Skip((page - 1) * limit) .Take(limit) .Select(f => new AdminTeamFind { form = f, roles = findRolesByFormId(f.Id, 0) }) .ToListAsync(); int total = await query.CountAsync(); return Ok(new { code = 200, message = "成功", data = results, total }); } catch (Exception ex) { return Ok(new { code = 500, message = "服务器错误", error = ex.Message }); } } else { var results = await query .Skip((page - 1) * limit) .Take(limit) .Select(f => new AdminTeamFind { form = new form { Id = f.Id, team_name = f.team_name, piaoshu = f.piaoshu, }, roles = findRolesByFormId(f.Id, 1) }) .ToListAsync(); int total = await query.CountAsync(); return Ok(new { code = 200, message = "成功", data = results, total }); } } catch (Exception ex) { return Ok(new { code = 500, message = "服务器错误", ex = ex.Message }); } } } public class tmpRole { public string? roleName { get; set; } public int? roleRank { get; set; } public string? commonRoles { get; set; } public string? roleLin { get; set; } public string? roleId { get; set; } public string? gameName { get; set; } public string? idCard { get; set; } public string? phoneNumber { get; set; } public string? idCardName { get; set; } } public class TeamFind { public long formId { get; set; } public string teamName { get; set; } public int voteOfLikes { get; set; } public List roles { get; set; } = new List(); } public class AdminTeamFind { public form? form { get; set; } public List? roles { get; set; } = new List(); } private static List findRolesByFormId(long formId, int y) { var roles = new List(); var db = new TestDbContext(); try { var query = db.Roles.Where(x => x.form.Id == formId); if (y == 1) { roles = query .Select(f => new tmpRole { roleName = f.role_name, roleRank = f.Historical_Ranks, commonRoles = f.Common_Roles, roleLin = f.role_lin }) .ToList(); } else { roles = query .Select(f => new tmpRole { roleName = f.role_name, roleRank = f.Historical_Ranks, commonRoles = f.Common_Roles, roleLin = f.role_lin, roleId = f.role_id, gameName = f.Game_Name, idCard = f.Id_Card, phoneNumber = f.Phone_Number, idCardName = f.Id_Card_Name }) .ToList(); } } catch (Exception ex) { Console.WriteLine($"Error in BuildTree: {ex.Message}"); throw; } return roles; } } [ApiController] // [Route("api/updateform/")] public class 提交表单 : ControllerBase { public static void WriteFile(String str) { StreamWriter sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "/allteam.txt", true, System.Text.Encoding.Default); sw.WriteLine(str); sw.Close(); } /// /// 点赞表单 /// /// 队伍名称 /// 谷歌验证码token /// [Route("api/v1/form/like/")] [HttpPost] public async Task> Post(long formid, string captoken) { var client = new RestClient($"https://www.recaptcha.net/recaptcha/api/siteverify?secret=6LcdXUEmAAAAAJLICuxBgtMsDiMSCm5XpB0z-fzK&response={captoken}"); var request = new RestRequest(Method.POST); IRestResponse response = client.Execute(request); string a = response.Content; JObject d = a.ToJObject(); string ok = d["success"].ToString(); if (ok == "True") { try { using TestDbContext ctx = new TestDbContext(); var b = ctx.Forms.Single(b => b.Id == formid); b.piaoshu = b.piaoshu + 1; await ctx.SaveChangesAsync(); return new like { Number = b.piaoshu }; } catch (Exception ex) { return BadRequest(ex.Message); } } else { return BadRequest(new error_mb { code = 400, message = "人机验证未通过" }); } } public class like { public int Number { get; set; } } /// /// 修改问卷 /// /// 密码 /// 队伍名称 /// 队伍信息 /// [Route("api/v1/form/")] [HttpPut] public async Task> updateform(string password,string formname,[FromBody] form_get for1) { TestDbContext ctx = new TestDbContext(); var form = ctx.Forms.Include(a => a.role).FirstOrDefault(a => a.team_name==formname); if (form.team_password == password) { List role = new List(); foreach (role_get a in for1.role_get) { role.Add(new role { role_id = a.role_id, role_lin = a.role_lin, role_name = a.role_name }); } form.role = role; await ctx.SaveChangesAsync(); return Ok("成功!"); } else { return BadRequest(new error_mb { code=400,message="密码错误"}); } } private readonly Logger logger = LogManager.GetCurrentClassLogger(); private readonly IHubContext hubContext; public 提交表单(IHubContext hubContext) { this.hubContext= hubContext; } [Route("api/v1/websocket/")] [HttpGet] public async Task GetAsync() { await hubContext.Clients.All.SendAsync("formok", $"队伍测试已经成功报名,剩余队伍名额:1/32"); } /// /// 提交表单 /// /// /// 表单信息 /// 谷歌人机验证验证码 /// [Route("api/v2/form/")] [HttpPost] public async Task> PostAsync(IFormFile imageFile,[FromForm] form_get_new for1, string server, string token, string ip) { object data = new { id = "67134feddc0ff12924d9aaf4", secretkey = "c3e08b07b8034e6b961f010abed5586a", scene = 3, token = token, ip = ip }; var a1 = await server.PostJsonAsync(data); var ok = await a1.GetJsonAsync(); Console.WriteLine(ok); if (ok.success == 1) { using (var ctx = new TestDbContext()) { if (ctx.Forms.Include(a => a.events).Where(a => a.events.name == for1.events_name).Any(e => e.team_name == for1.team_name)) { return BadRequest(new error_mb { code = 400, message = "有重名队伍" }); } else { if (imageFile == null || imageFile.Length == 0) return BadRequest("Invalid image file."); // 将文件保存到磁盘 var filePath = Path.Combine(Directory.GetCurrentDirectory(), $"loge/{for1.events_name}/", $"{for1.team_name}.png"); using (var stream = new FileStream(filePath, FileMode.Create)) { await imageFile.CopyToAsync(stream); } // 返回成功响应 // base64toimg(for1.logo_base64, $@"{AppDomain.CurrentDomain.BaseDirectory}loge\{for1.events_name}\{for1.team_name}.png"); var events = await ctx.events.FirstAsync(ctx => ctx.name == for1.events_name); form form1 = new form(); form1.logo_uri = $"/loge/{for1.events_name}/{for1.team_name}.png"; form1.team_name = for1.team_name; form1.team_password = for1.team_password; form1.team_tel = for1.team_tel; form1.events = events; List role = new List(); foreach (role_get a in for1.role_get) { role.Add(new role { role_id = a.role_id, role_lin = a.role_lin, role_name = a.role_name, Common_Roles = a.Common_Roles, Historical_Ranks = a.Historical_Ranks, Id_Card = a.Id_Card, Game_Name = a.Game_Name, Phone_Number = a.Phone_Number, Id_Card_Name = a.Id_Card_Name }); } form1.role = role; ctx.Forms.Add(form1); await ctx.SaveChangesAsync(); int nownumber = ctx.Forms.Count(); //ChatRoomHub chat = new ChatRoomHub(); // await chat.formok(nownumber, for1.team_name); try { await hubContext.Clients.All.SendAsync("formok", $"队伍{for1.team_name}已经成功报名,剩余队伍名额:{ctx.Forms.Count()}/32"); } catch { } logger.Info($"有新队伍报名!队伍名称:{for1.team_name} "); } return "ok!"; } } else { return BadRequest(new error_mb { code = 400, message = $"未通过人机验证{await a1.GetStringAsync()}" }); } } /// /// 上传队伍logo /// /// /// [Route("api/v1/updata_logo")] [HttpPost] public async Task> update_logo(IFormFile imageFile,string eventname) { if (imageFile == null || imageFile.Length == 0) return BadRequest("Invalid image file."); // 将文件保存到磁盘 var filePath = Path.Combine(Directory.GetCurrentDirectory(), $"loge/{eventname}/", $"{imageFile.FileName}"); using (var stream = new FileStream(filePath, FileMode.Create)) { await imageFile.CopyToAsync(stream); } // 返回成功响应 return Ok("Image file uploaded successfully."); } /// /// 获得所有表单信息 /// /// 页数 /// 每页长度 /// [Route("api/v1/form/all")] [HttpGet] [Authorize] public List Getform(short page,short page_long,string sort,string eventsname) { TestDbContext ctx = new TestDbContext(); int c = ctx.Forms.Count(); int b = page_long * page; if (page_long * page > c) { b = c; } var events= ctx.events.First(ctx => ctx.name == eventsname); List
forms; if(sort=="vote") { forms = ctx.Forms.Include(a => a.role).Include(a=>a.events).OrderByDescending(a => a.piaoshu).Where(a=>a.events==events).Skip(page_long * page - page_long).Take(page_long).ToList(); } else { //改为按照id倒序排序 //forms = ctx.Forms.Include(a => a.role).Skip(page_long * page - page_long).Take(page_long).ToList(); forms = ctx.Forms.Include(a => a.role).Include(a => a.events).OrderByDescending(a => a.Id).Where(a => a.events == events).Skip(page_long * page - page_long).Take(page_long).ToList(); } List teams = new List(); foreach (form for1 in forms) { var team = new team { id=for1.Id,name = for1.team_name, timer = for1.time, piaoshu = for1.piaoshu ,logo_uri=for1.logo_uri}; foreach (var role in for1.role) { team.rolename.Add(new roletwo { name = role.role_name, lin = role.role_lin }); } teams.Add(team); // a++; } return teams; } /// /// 搜索表单 /// /// 表单名称 /// [Route("api/v1/form/{team_name}")] [HttpGet] public async Task>> formsearch(string team_name) { TestDbContext ctx = new TestDbContext(); List data = new List(); List teams = ctx.Forms.Include(a => a.role).Where(a => a.team_name.IndexOf(team_name) >= 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; } /// /// 模糊搜索表单名称 /// /// 表单名称 /// [Route("api/v1/form/name/{team_name}")] [HttpGet] public async Task>> search_name(string team_name,string events_name) { var ctx = new TestDbContext(); var data = ctx.Forms.Where(a => a.team_name.IndexOf(team_name) >= 0&&a.events.name==events_name).Select(a => a.team_name).ToList(); return data; } } public class role { public long Id { get; set; } public form form { get; set; }//属于哪个队伍 public string role_id { get; set; } = "无"; public string role_name { get; set; } = "无";//阵容 public string? Game_Name { get; set; } = "未知"; public string role_lin { get; set; } public string? Id_Card { get; set; } = "未知"; public string? Common_Roles { get; set; } = "未知"; public string? Phone_Number { get; set; } = "未知"; public string? Id_Card_Name { get; set; } = "未知"; public int? Historical_Ranks { get; set; } = 0; } public class role_get { public string role_id { get; set; } = "无"; public string role_name { get; set; } = "无";//阵容 public string role_lin { get; set; } = "无"; public string? Game_Name { get; set; } public string? Id_Card { get; set; } public string? Common_Roles { get; set; } public string? Phone_Number { get; set; } public string? Id_Card_Name { get; set; } public int? Historical_Ranks { get; set; } } public class form { public long Id { get; set; } public int piaoshu { get; set; } public DateTime time { get; set; } = DateTime.UtcNow; public string team_name { get; set; } public string team_password { get; set; } public string team_tel { get; set; } public string logo_uri { get; set; } public T_events events { get; set; } // public string? belong { get; set; } public List role { get; set; } = new List(); } public class form_get { // public DateTime time { get; set; } = DateTime.Now; public string team_name { get; set; } public string team_password { get; set; } public string team_tel { get; set; } public string logo_base64 { get; set; } public string events_name { get; set; } // public string? belong { get; set; } public List role_get { get; set; } } public class form_get_new { public DateTime time { get; set; } = DateTime.Now; public string team_name { get; set; } public string team_password { get; set; } public string team_tel { get; set; } // public string logo_base64 { get; set; } public string events_name { get; set; } // public string? belong { get; set; } public List role_get { get; set; } } public class form1 { public long Id { get; set; } public string Team_name { get; set; } public string team_password { get; set; } public string team_tel { get; set; } public role[] role1 { get; set; } public string loge_base64 { get; set; } = "null"; } } public class 所有队伍 : ControllerBase { private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; public class team { public long id { get; set; } public string name { get; set; } public DateTime timer { get; set; } public int piaoshu { get; set; } public string logo_uri { get; set; } public List rolename { get; set; }=new List(); } public class roletwo { public string name { get; set; } public string lin { get; set; } } public class form_uri { public string uri { get; set; } } }