asg_backend/asg_form/Controllers/AssignmentController.cs

190 lines
6.3 KiB
C#
Raw Normal View History

2024-08-29 20:38:38 +08:00
using AngleSharp.Text;
using asg_form.Controllers.Hubs;
using asg_form.Controllers.Store;
using Manganese.Array;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.SignalR;
using NPOI.HPSF;
using System.Security.Claims;
2024-09-03 09:57:25 +08:00
using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
using System.Web;
2024-09-03 10:54:04 +08:00
using System.Net.NetworkInformation;
2024-09-03 21:53:16 +08:00
using Microsoft.EntityFrameworkCore.Storage.ValueConversion.Internal;
2024-08-29 20:38:38 +08:00
namespace asg_form.Controllers
{
public class TaskDB
{
public long id { get; set; }
2024-08-30 08:52:06 +08:00
public string chinaname { get; set; }
2024-08-29 22:06:07 +08:00
public long userId { get; set; }
2024-08-29 20:38:38 +08:00
public string taskName { get; set; }
public string taskDescription { get; set; }
public string status { get; set; }
public long money { get; set; }
}
public class TaskCreate
{
2024-08-30 08:52:06 +08:00
public string Chinaname { get; set; }
2024-08-29 22:06:07 +08:00
public long UserId { get; set; }
2024-08-29 20:38:38 +08:00
public string TaskName { get; set; }
public string TaskDescription { get; set; }
public long Money { get; set; }
}
public class AssignmentController : ControllerBase
{
private readonly RoleManager<Role> roleManager;
private readonly UserManager<User> userManager;
public AssignmentController(
RoleManager<Role> roleManager, UserManager<User> userManager)
{
this.roleManager = roleManager;
this.userManager = userManager;
}
[Route("api/v1/admin/Task")]
[HttpPost]
[Authorize]
public async Task<ActionResult<string>> PubTask([FromBody] TaskCreate taskinfo)
{
if (!this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin"))
{
return Ok(new error_mb { code = 401, message = "无权访问" });
}
using (TestDbContext sub = new TestDbContext())
{
var task = new TaskDB
{
2024-08-30 08:52:06 +08:00
chinaname = taskinfo.Chinaname,
2024-08-29 20:38:38 +08:00
userId = taskinfo.UserId,
taskName = taskinfo.TaskName,
taskDescription = taskinfo.TaskDescription,
money = taskinfo.Money,
status = "0",
};
sub.T_Task.Add(task);
await sub.SaveChangesAsync();
return Ok(taskinfo);
}
}
[Route("api/v1/admin/Task")]
[HttpDelete]
[Authorize]
2024-08-30 20:11:37 +08:00
public async Task<ActionResult<object>> DelTask([FromQuery] long id)
2024-08-29 20:38:38 +08:00
{
if (!this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin"))
{
return Ok(new error_mb { code = 401, message = "无权访问" });
}
using (TestDbContext sub = new TestDbContext())
{
sub.T_Task.Remove(sub.T_Task.Find(id));
await sub.SaveChangesAsync();
return Ok("ok");
}
}
[Route("api/v1/Task")]
2024-08-30 20:13:18 +08:00
[HttpGet]
2024-08-29 20:38:38 +08:00
[Authorize]
2024-09-01 15:52:28 +08:00
public async Task<ActionResult<object>> CekTask([FromQuery] long taskid)
{
2024-08-29 20:38:38 +08:00
using (TestDbContext sub = new TestDbContext())
{
2024-09-01 15:52:28 +08:00
var task = sub.T_Task.Find(taskid);
2024-08-29 20:38:38 +08:00
task.status = "1";
await sub.SaveChangesAsync();
return Ok(task);
}
}
2024-09-03 21:53:16 +08:00
public class statusChange
{
public long taskid { get; set; }
public string status { get; set; }
2024-08-29 20:38:38 +08:00
2024-09-03 21:53:16 +08:00
}
2024-08-29 20:38:38 +08:00
[Route("api/v1/admin/Task/Done")]
2024-09-03 09:57:25 +08:00
[HttpPost]
2024-08-29 20:38:38 +08:00
[Authorize]
2024-09-03 21:53:16 +08:00
public async Task<ActionResult<object>> FinishTask([FromBody] statusChange msg)
2024-08-29 20:38:38 +08:00
{
string userId = this.User.FindFirst(ClaimTypes.NameIdentifier)!.Value;
var user = await userManager.FindByIdAsync(userId);
2024-08-30 15:21:55 +08:00
2024-09-04 10:40:51 +08:00
if (!this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "nbadmin"))
2024-08-29 20:38:38 +08:00
{
return Ok(new error_mb { code = 401, message = "无权访问" });
}
using (TestDbContext sub = new TestDbContext())
{
2024-09-03 21:53:16 +08:00
var task = sub.T_Task.Find(msg.taskid);
long isPassed = long.Parse(msg.status);
2024-09-03 09:57:25 +08:00
if(isPassed == 2)
{
task.status = "2";
user.Integral += task.money;
2024-09-04 10:31:51 +08:00
user.Integral = user.Integral > 200 ? 200 : user.Integral;
2024-09-03 09:57:25 +08:00
}
if (isPassed == 3)
{
task.status = "3";
}
2024-08-30 15:21:55 +08:00
await userManager.UpdateAsync(user);
2024-08-29 20:38:38 +08:00
await sub.SaveChangesAsync();
return Ok(task);
}
}
2024-08-30 15:21:55 +08:00
[Route("api/v1/Tasks")]
[HttpGet]
[Authorize]
public async Task<ActionResult<List<TaskDB>>> GetTasks([FromQuery] string userid = null)
{
TestDbContext test = new TestDbContext();
var query = test.T_Task.AsQueryable();
if (!string.IsNullOrEmpty(userid))
{
long idNum = long.Parse(userid);
query = query.Where(n => n.userId == idNum);
}
2024-09-03 09:57:25 +08:00
//return Ok("用户不存在");
return query.OrderByDescending(a => a.userId).ToList();
2024-09-01 15:52:28 +08:00
}
[Route("api/v1/admin/FindTasks")]
[HttpGet]
[Authorize]
2024-09-03 10:54:04 +08:00
public async Task<ActionResult<object>> FindTasks([FromQuery] string chinaname = null,string status = null)
2024-09-03 09:57:25 +08:00
{
2024-09-03 10:54:04 +08:00
//string encodedChinaname = HttpUtility.UrlEncode(chinaname);
2024-09-03 09:57:25 +08:00
2024-09-04 10:40:51 +08:00
if (!this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "nbadmin"))
2024-09-01 15:52:28 +08:00
{
return Ok(new error_mb { code = 401, message = "无权访问" });
}
using (TestDbContext sub = new TestDbContext())
{
var query = sub.T_Task.AsQueryable();
if (!string.IsNullOrEmpty(chinaname))
2024-09-03 09:57:25 +08:00
{
2024-09-03 10:54:04 +08:00
query = query.Where(n => n.chinaname.Contains(chinaname));
2024-09-03 09:57:25 +08:00
}
2024-09-03 10:54:04 +08:00
if (!string.IsNullOrEmpty(status))
2024-09-03 09:57:25 +08:00
{
2024-09-03 10:54:04 +08:00
query = query.Where(n => n.status == status);
2024-09-01 15:52:28 +08:00
}
2024-09-03 10:54:04 +08:00
return query.OrderByDescending(a => a.status).ToList();
2024-09-01 15:52:28 +08:00
}
2024-08-30 15:21:55 +08:00
}
2024-08-29 20:38:38 +08:00
}
}