This commit is contained in:
王炜翔 2024-11-06 22:51:29 +08:00
parent 2cdb8f60ae
commit b7c9cbdc89
4 changed files with 207 additions and 25 deletions

View File

@ -10,6 +10,8 @@ using Mirai.Net.Sessions.Http.Managers;
using Newtonsoft.Json; using Newtonsoft.Json;
using System.Security.Claims; using System.Security.Claims;
using static asg_form.Controllers.InviteReferee; using static asg_form.Controllers.InviteReferee;
using Manganese.Array;
using static asg_form.Controllers.schedule;
namespace asg_form.Controllers namespace asg_form.Controllers
{ {
@ -71,7 +73,7 @@ namespace asg_form.Controllers
com.Add(new com_json { id = id.ToInt32(), chinaname = chinaname }); com.Add(new com_json { id = id.ToInt32(), chinaname = chinaname });
teamgame.commentary = JsonConvert.SerializeObject(com); teamgame.commentary = JsonConvert.SerializeObject(com);
await testDb.SaveChangesAsync(); await testDb.SaveChangesAsync();
user.Integral = user.Integral+10; user.Integral = user.Integral+5;
await userManager.UpdateAsync(user); await userManager.UpdateAsync(user);
try try
{ {
@ -89,6 +91,125 @@ namespace asg_form.Controllers
return BadRequest(new error_mb { code = 400, message = $"你是{user.officium},你不是解说,无法操作" }); 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;
}
/// <summary>
/// 导播选定场次
/// </summary>
[Route("api/v1/anchor")]
[HttpPost]
[Authorize]
public async Task<ActionResult<string>> 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 = "报名成功"}); ;
}
}
/// <summary>
/// 删除导播选择的比赛
/// </summary>
[Route("api/v1/anchor")]
[HttpDelete]
[Authorize]
public async Task<ActionResult<string>> 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 public class com_json
{ {
/// <summary> /// <summary>
@ -154,6 +275,7 @@ namespace asg_form.Controllers
} }
return BadRequest(new error_mb { code = 400, message = $"你是{user.officium},你不是解说,无法操作" }); return BadRequest(new error_mb { code = 400, message = $"你是{user.officium},你不是解说,无法操作" });
} }
[Route("api/v1/com/search_ok_regist")] [Route("api/v1/com/search_ok_regist")]
[HttpPost] [HttpPost]
[Authorize] [Authorize]

View File

@ -2,6 +2,8 @@
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using NPOI.SS.Formula.Functions;
using System.Reflection.Metadata;
using System.Security.Claims; using System.Security.Claims;
using static asg_form.Controllers.excel; using static asg_form.Controllers.excel;
@ -34,12 +36,12 @@ namespace asg_form.Controllers
object Event = new object(); object Event = new object();
if (get_poem) 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 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; return Event;
@ -55,7 +57,7 @@ namespace asg_form.Controllers
public async Task<ActionResult<List<T_events>>> Postevent([FromBody] events_get events) public async Task<ActionResult<List<T_events>>> Postevent([FromBody] events_get events)
{ {
TestDbContext testDbContext = new TestDbContext(); 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.Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory + $"loge/{events.name}");
System.IO.File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory + $"doc/rule/{events.name}.md", events.rule_markdown); System.IO.File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory + $"doc/rule/{events.name}.md", events.rule_markdown);
await testDbContext.SaveChangesAsync(); await testDbContext.SaveChangesAsync();
@ -71,23 +73,52 @@ namespace asg_form.Controllers
[Authorize] [Authorize]
[Route("api/v1/admin/Events")] [Route("api/v1/admin/Events")]
[HttpPut] [HttpPut]
public async Task<ActionResult<List<T_events>>> putevent(string event_name, [FromBody] T_events_debug events) public async Task<ActionResult<List<T_events>>> putevent(int eventId, [FromBody] T_events_debug events)
{ {
if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin")) if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin"))
{ {
TestDbContext testDb = new TestDbContext(); 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.name = events.name;
eve.opentime = events.opentime; eve.opentime = events.opentime;
eve.is_over = events.is_over; eve.is_over = events.is_over;
eve.events_rule_uri = events.events_rule_uri; 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(); await testDb.SaveChangesAsync();
return Ok(eve); return Ok(eve);
} }
return BadRequest(new error_mb { code = 400, message = "没管理员改个P" }); return BadRequest(new error_mb { code = 401, message = "无权访问" });
} }
/// <summary> /// <summary>
@ -97,12 +128,12 @@ namespace asg_form.Controllers
[Authorize] [Authorize]
[Route("api/v1/admin/Events")] [Route("api/v1/admin/Events")]
[HttpDelete] [HttpDelete]
public async Task<ActionResult<List<T_events>>> Delevent(string event_name) public async Task<ActionResult<List<T_events>>> Delevent(int eventId)
{ {
if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin")) if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin"))
{ {
TestDbContext test = new TestDbContext(); 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); test.Remove(evernt);
await test.SaveChangesAsync(); await test.SaveChangesAsync();
return Ok("删除"); return Ok("删除");
@ -121,19 +152,19 @@ namespace asg_form.Controllers
[Authorize] [Authorize]
[Route("api/v1/admin/Events_rule")] [Route("api/v1/admin/Events_rule")]
[HttpDelete] [HttpDelete]
public async Task<ActionResult<List<T_events>>> event_rule(string event_name, [FromBody] string rule_markdown) public async Task<ActionResult<List<T_events>>> event_rule(int eventId, [FromBody] string rule_markdown)
{ {
if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin")) if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin"))
{ {
TestDbContext test = new TestDbContext(); TestDbContext test = new TestDbContext();
var evernt = test.events.FirstOrDefault(a => a.name == event_name); var evernt = test.events.FirstOrDefault(a => a.Id == eventId);
System.IO.File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory + $"doc/rule/{event_name}.md", rule_markdown); System.IO.File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory + $"doc/rule/{eventId}.md", rule_markdown);
return Ok("修改了呢"); return Ok("修改成功");
} }
else 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] [Authorize]
[Route("api/v1/admin/poem")] [Route("api/v1/admin/poem")]
[HttpPost] [HttpPost]
public async Task<ActionResult<List<T_events>>> event_poem(string event_name, [FromBody] string poem_json) public async Task<ActionResult<List<T_events>>> event_poem(int eventId, [FromBody] string poem_json)
{ {
if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin")) if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin"))
{ {
TestDbContext test = new TestDbContext(); 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; evernt.promChart = poem_json;
await test.SaveChangesAsync(); await test.SaveChangesAsync();
return Ok("修改了呢"); return Ok(new error_mb { code = 200, message = "修改成功" });
} }
else 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 bool? is_over { get; set; }
public DateTime? opentime { get; set; } public DateTime? opentime { get; set; }
public string rule_markdown { get; set; } public string rule_markdown { get; set; }
public string status { get; set; }
} }
} }
public class T_events public class T_events
@ -184,6 +216,7 @@ namespace asg_form.Controllers
public List<form>? forms { get; set; } public List<form>? forms { get; set; }
public Uri? events_rule_uri { get; set; } public Uri? events_rule_uri { get; set; }
public string? promChart { get; set; } public string? promChart { get; set; }
public string status { get; set; } = "0";
} }
@ -196,6 +229,7 @@ namespace asg_form.Controllers
public List<form>? forms { get; set; } public List<form>? forms { get; set; }
public Uri? events_rule_uri { get; set; } public Uri? events_rule_uri { get; set; }
public string? promChart { get; set; } public string? promChart { get; set; }
public string status { get; set; }
public string rule_markdown { get; set; }
} }
} }

View File

@ -213,6 +213,12 @@ namespace asg_form.Controllers.Team
public int? roleRank { get; set; } public int? roleRank { get; set; }
public string? commonRoles { get; set; } public string? commonRoles { get; set; }
public string? roleLin { 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 class TeamFind
@ -229,14 +235,16 @@ namespace asg_form.Controllers.Team
public form? form { get; set; } public form? form { get; set; }
public List<tmpRole>? roles { get; set; }= new List<tmpRole>(); public List<tmpRole>? roles { get; set; }= new List<tmpRole>();
} }
private static List<tmpRole> findRolesByFormId(long formId) private static List<tmpRole> findRolesByFormId(long formId,int y)
{ {
var roles = new List<tmpRole>(); var roles = new List<tmpRole>();
var db = new TestDbContext(); var db = new TestDbContext();
try try
{ {
var query = db.Roles.Where(x => x.form.Id == formId); var query = db.Roles.Where(x => x.form.Id == formId);
roles = query if (y == 1)
{
roles = query
.Select(f => new tmpRole .Select(f => new tmpRole
{ {
roleName = f.role_name, roleName = f.role_name,
@ -245,6 +253,24 @@ namespace asg_form.Controllers.Team
roleLin = f.role_lin roleLin = f.role_lin
}) })
.ToList(); .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) catch (Exception ex)
@ -282,7 +308,7 @@ namespace asg_form.Controllers.Team
.Select(f => new AdminTeamFind .Select(f => new AdminTeamFind
{ {
form = f, form = f,
roles = findRolesByFormId(f.Id) roles = findRolesByFormId(f.Id,0)
}) })
.ToListAsync(); .ToListAsync();
int total = await query.CountAsync(); int total = await query.CountAsync();
@ -307,7 +333,7 @@ namespace asg_form.Controllers.Team
team_name = f.team_name, team_name = f.team_name,
piaoshu = f.piaoshu, piaoshu = f.piaoshu,
}, },
roles = findRolesByFormId(f.Id) roles = findRolesByFormId(f.Id,1)
}) })
.ToListAsync(); .ToListAsync();
int total = await query.CountAsync(); int total = await query.CountAsync();

View File

@ -411,7 +411,7 @@ namespace asg_form.Controllers
/// <summary> /// <summary>
/// 裁判的名字 /// 裁判的名字
/// </summary> /// </summary>
public string referee { get; set; } public string? referee { get; set; }
public int? referee_Id { get; set; } public int? referee_Id { get; set; }
/// <summary> /// <summary>
/// bilibili录屏路径 /// bilibili录屏路径