From b7c9cbdc89bec4bd20f1c4bad5da2af4cbed8c81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=82=9C=E7=BF=94?= <2307953404@qq.com> Date: Wed, 6 Nov 2024 22:51:29 +0800 Subject: [PATCH] 1 --- asg_form/Controllers/Com.cs | 124 ++++++++++++++++++++++++- asg_form/Controllers/Events.cs | 72 ++++++++++---- asg_form/Controllers/Team/Team_http.cs | 34 ++++++- asg_form/Controllers/schedule.cs | 2 +- 4 files changed, 207 insertions(+), 25 deletions(-) diff --git a/asg_form/Controllers/Com.cs b/asg_form/Controllers/Com.cs index 926ae6a..fbf7e90 100644 --- a/asg_form/Controllers/Com.cs +++ b/asg_form/Controllers/Com.cs @@ -10,6 +10,8 @@ using Mirai.Net.Sessions.Http.Managers; using Newtonsoft.Json; using System.Security.Claims; using static asg_form.Controllers.InviteReferee; +using Manganese.Array; +using static asg_form.Controllers.schedule; namespace asg_form.Controllers { @@ -71,7 +73,7 @@ namespace asg_form.Controllers com.Add(new com_json { id = id.ToInt32(), chinaname = chinaname }); teamgame.commentary = JsonConvert.SerializeObject(com); await testDb.SaveChangesAsync(); - user.Integral = user.Integral+10; + user.Integral = user.Integral+5; await userManager.UpdateAsync(user); try { @@ -89,6 +91,125 @@ namespace asg_form.Controllers return BadRequest(new error_mb { code = 400, message = $"你是{user.officium},你不是解说,无法操作" }); } + public static int[] ConvertStringToIntArray(string input) + { + var cleanedInput = input.Trim('[', ']').Replace("'", ""); + int[] result = cleanedInput.Split(',') + .Select(int.Parse) + .ToArray(); + + return result; + } + + /// + /// 导播选定场次 + /// + [Route("api/v1/anchor")] + [HttpPost] + [Authorize] + public async Task> anchorPost(string gameIds) + { + string id = this.User.FindFirst(ClaimTypes.NameIdentifier)!.Value; + var user = await userManager.FindByIdAsync(id); + + if (user.officium != "Anchor") + { + return BadRequest(new error_mb { code = 401, message = $"你是{user.officium},你不是导播,无法操作" }); + } + + else + { + if (user.Integral == null) + { + user.Integral = 0; + await userManager.UpdateAsync(user); + } + + TestDbContext testDb = new TestDbContext(); + string chinaname = user.chinaname; + int[] gameIdArray = ConvertStringToIntArray(gameIds); + + var message = $"导播:\r\n{chinaname}\r\n选择了比赛:"; + + foreach (var gameId in gameIdArray) + { + var teamgame = await testDb.team_Games.FirstOrDefaultAsync(a => a.id == gameId); + if (teamgame != null) + { + teamgame.referee = chinaname; + teamgame.referee_Id = (int)(user.Id); + await testDb.SaveChangesAsync(); + user.Integral += 5; + await userManager.UpdateAsync(user); + message += $"\r\n{teamgame.team1_name} VS {teamgame.team2_name}"; + } + } + try + { + var msg = new MessageBuilder().Add(new AtSegment(user.qqnumber ?? "2667210109")).Text(message).Build(); + await runbot.runbotr.SendMessageAsync(MessageEnvironment.Channel, "925510646", null, msg, "925510646"); + + } + catch (Exception ex) + { + return Ok(new { code = 500, message = "服务器错误", ex }); + } + + return Ok(new { code = 200, message = "报名成功"}); ; + } + + } + + /// + /// 删除导播选择的比赛 + /// + [Route("api/v1/anchor")] + [HttpDelete] + [Authorize] + public async Task> DeleteSelectedGame(int gameId,string reason) + { + string userId = this.User.FindFirst(ClaimTypes.NameIdentifier)!.Value; + var user = await userManager.FindByIdAsync(userId); + + if (user.officium != "Anchor") + { + return BadRequest(new error_mb { code = 401, message = $"你是{user.officium},你不是导播,无法操作" }); + } + + TestDbContext testDb = new TestDbContext(); + + var teamGame = await testDb.team_Games.FirstOrDefaultAsync(a => a.id == gameId); + if (teamGame == null) + { + return NotFound(new { code = 404, message = "比赛未找到" }); + } + + teamGame.referee = null; + teamGame.referee_Id = null; + await testDb.SaveChangesAsync(); + + user.Integral = user.Integral - 5 > 0 ? user.Integral - 5 : 0; // 确保积分不会减少到负数 + await userManager.UpdateAsync(user); + + try + { + var message = new MessageBuilder() + .Add(new AtSegment(user.qqnumber ?? "2667210109")) + .Text($"导播 {user.chinaname} 已取消比赛 {teamGame.team1_name} VS {teamGame.team2_name} 的选择,\n原因是{reason}") + .Build(); + + await runbot.runbotr.SendMessageAsync(MessageEnvironment.Channel, "925510646", null, message, "925510646"); + } + catch (Exception ex) + { + return StatusCode(500, new { code = 500, message = "服务器错误", ex }); + } + + return Ok("删除成功"); + + } + + public class com_json { /// @@ -154,6 +275,7 @@ namespace asg_form.Controllers } return BadRequest(new error_mb { code = 400, message = $"你是{user.officium},你不是解说,无法操作" }); } + [Route("api/v1/com/search_ok_regist")] [HttpPost] [Authorize] diff --git a/asg_form/Controllers/Events.cs b/asg_form/Controllers/Events.cs index 54418d0..35bfd88 100644 --- a/asg_form/Controllers/Events.cs +++ b/asg_form/Controllers/Events.cs @@ -2,6 +2,8 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; +using NPOI.SS.Formula.Functions; +using System.Reflection.Metadata; using System.Security.Claims; using static asg_form.Controllers.excel; @@ -34,12 +36,12 @@ namespace asg_form.Controllers object Event = new object(); if (get_poem) { - Event = testDbContext.events.Select(a => new { a.Id, a.is_over, a.opentime, a.name, a.promChart }).ToList(); + Event = testDbContext.events.Select(a => new { a.Id, a.is_over, a.opentime, a.name, a.promChart ,a.status}).ToList(); } else { - Event = testDbContext.events.Select(a => new { a.Id, a.is_over, a.opentime, a.name }).ToList(); + Event = testDbContext.events.Select(a => new { a.Id, a.is_over, a.opentime, a.name,a.status }).ToList(); } return Event; @@ -55,7 +57,7 @@ namespace asg_form.Controllers public async Task>> Postevent([FromBody] events_get events) { TestDbContext testDbContext = new TestDbContext(); - await testDbContext.events.AddAsync(new T_events { name = events.name, is_over = events.is_over, opentime = events.opentime, events_rule_uri = new Uri($"https://124.223.35.239/doc/rule/{events.name}.md") }); + await testDbContext.events.AddAsync(new T_events { name = events.name, is_over = events.is_over, opentime = events.opentime, events_rule_uri = new Uri($"https://124.223.35.239/doc/rule/{events.name}.md"),status =events.status }); System.IO.Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory + $"loge/{events.name}"); System.IO.File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory + $"doc/rule/{events.name}.md", events.rule_markdown); await testDbContext.SaveChangesAsync(); @@ -71,23 +73,52 @@ namespace asg_form.Controllers [Authorize] [Route("api/v1/admin/Events")] [HttpPut] - public async Task>> putevent(string event_name, [FromBody] T_events_debug events) + public async Task>> putevent(int eventId, [FromBody] T_events_debug events) { if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin")) { TestDbContext testDb = new TestDbContext(); - var eve = testDb.events.FirstOrDefault(a => a.name == event_name); + var eve = testDb.events.FirstOrDefault(a => a.Id == eventId); + if(eve==null) return BadRequest(new error_mb { code = 404, message = "没有找到对应信息" }); eve.name = events.name; eve.opentime = events.opentime; eve.is_over = events.is_over; eve.events_rule_uri = events.events_rule_uri; + eve.status = events.status; + if (!string.IsNullOrEmpty(events.rule_markdown)) + { + var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "doc", "rule", $"{eventId}.md"); + + // 如果文件存在,删除旧文件 + if (System.IO.File.Exists(filePath)) + { + System.IO.File.Delete(filePath); + } + + // 创建目录(如果不存在的话) + var directoryPath = Path.GetDirectoryName(filePath); + if (!Directory.Exists(directoryPath)) + { + Directory.CreateDirectory(directoryPath); + } + + // 写入新的规则内容 + try + { + await System.IO.File.WriteAllTextAsync(filePath, events.rule_markdown); + } + catch (Exception ex) + { + return StatusCode(500, new error_mb { code = 500, message = "文件操作失败: " + ex.Message }); + } + } await testDb.SaveChangesAsync(); return Ok(eve); } - return BadRequest(new error_mb { code = 400, message = "没管理员改个P!" }); + return BadRequest(new error_mb { code = 401, message = "无权访问" }); } /// @@ -97,12 +128,12 @@ namespace asg_form.Controllers [Authorize] [Route("api/v1/admin/Events")] [HttpDelete] - public async Task>> Delevent(string event_name) + public async Task>> Delevent(int eventId) { if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin")) { TestDbContext test = new TestDbContext(); - var evernt = test.events.FirstOrDefault(a => a.name == event_name); + var evernt = test.events.FirstOrDefault(a => a.Id == eventId); test.Remove(evernt); await test.SaveChangesAsync(); return Ok("删除"); @@ -121,19 +152,19 @@ namespace asg_form.Controllers [Authorize] [Route("api/v1/admin/Events_rule")] [HttpDelete] - public async Task>> event_rule(string event_name, [FromBody] string rule_markdown) + public async Task>> event_rule(int eventId, [FromBody] string rule_markdown) { if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin")) { TestDbContext test = new TestDbContext(); - var evernt = test.events.FirstOrDefault(a => a.name == event_name); - System.IO.File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory + $"doc/rule/{event_name}.md", rule_markdown); + var evernt = test.events.FirstOrDefault(a => a.Id == eventId); + System.IO.File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory + $"doc/rule/{eventId}.md", rule_markdown); - return Ok("修改了呢"); + return Ok("修改成功"); } else { - return BadRequest(new error_mb { code = 400, message = "没管理员就别调用,嘻嘻" }); + return BadRequest(new error_mb { code = 401, message = "无权访问" }); } } @@ -145,19 +176,20 @@ namespace asg_form.Controllers [Authorize] [Route("api/v1/admin/poem")] [HttpPost] - public async Task>> event_poem(string event_name, [FromBody] string poem_json) + public async Task>> event_poem(int eventId, [FromBody] string poem_json) { if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin")) { TestDbContext test = new TestDbContext(); - var evernt = test.events.FirstOrDefault(a => a.name == event_name); + var evernt = test.events.FirstOrDefault(a => a.Id == eventId); + if (evernt == null) return BadRequest(new error_mb { code = 404, message = "没有找到对应信息" }); evernt.promChart = poem_json; await test.SaveChangesAsync(); - return Ok("修改了呢"); + return Ok(new error_mb { code = 200, message = "修改成功" }); } else { - return BadRequest(new error_mb { code = 400, message = "没P管理员隔着装尼玛呢" }); + return BadRequest(new error_mb { code = 401, message = "无权访问" }); } } @@ -171,7 +203,7 @@ namespace asg_form.Controllers public bool? is_over { get; set; } public DateTime? opentime { get; set; } public string rule_markdown { get; set; } - + public string status { get; set; } } } public class T_events @@ -184,6 +216,7 @@ namespace asg_form.Controllers public List
? forms { get; set; } public Uri? events_rule_uri { get; set; } public string? promChart { get; set; } + public string status { get; set; } = "0"; } @@ -196,6 +229,7 @@ namespace asg_form.Controllers public List? forms { get; set; } public Uri? events_rule_uri { get; set; } public string? promChart { get; set; } - + public string status { get; set; } + public string rule_markdown { get; set; } } } diff --git a/asg_form/Controllers/Team/Team_http.cs b/asg_form/Controllers/Team/Team_http.cs index 22e2253..3c946da 100644 --- a/asg_form/Controllers/Team/Team_http.cs +++ b/asg_form/Controllers/Team/Team_http.cs @@ -213,6 +213,12 @@ namespace asg_form.Controllers.Team 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 @@ -229,14 +235,16 @@ namespace asg_form.Controllers.Team public form? form { get; set; } public List? roles { get; set; }= new List(); } - private static List findRolesByFormId(long formId) + 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); - roles = query + if (y == 1) + { + roles = query .Select(f => new tmpRole { roleName = f.role_name, @@ -245,6 +253,24 @@ namespace asg_form.Controllers.Team 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) @@ -282,7 +308,7 @@ namespace asg_form.Controllers.Team .Select(f => new AdminTeamFind { form = f, - roles = findRolesByFormId(f.Id) + roles = findRolesByFormId(f.Id,0) }) .ToListAsync(); int total = await query.CountAsync(); @@ -307,7 +333,7 @@ namespace asg_form.Controllers.Team team_name = f.team_name, piaoshu = f.piaoshu, }, - roles = findRolesByFormId(f.Id) + roles = findRolesByFormId(f.Id,1) }) .ToListAsync(); int total = await query.CountAsync(); diff --git a/asg_form/Controllers/schedule.cs b/asg_form/Controllers/schedule.cs index 62f0bdc..83d3492 100644 --- a/asg_form/Controllers/schedule.cs +++ b/asg_form/Controllers/schedule.cs @@ -411,7 +411,7 @@ namespace asg_form.Controllers /// /// 裁判的名字 /// - public string referee { get; set; } + public string? referee { get; set; } public int? referee_Id { get; set; } /// /// bilibili录屏路径