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 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;
}
/// <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
{
/// <summary>
@ -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]

View File

@ -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<ActionResult<List<T_events>>> 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<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"))
{
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 = "无权访问" });
}
/// <summary>
@ -97,12 +128,12 @@ namespace asg_form.Controllers
[Authorize]
[Route("api/v1/admin/Events")]
[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"))
{
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<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"))
{
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<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"))
{
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<form>? 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<form>? 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; }
}
}

View File

@ -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<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 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();

View File

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