asg_backend/asg_form/Controllers/AssignmentController.cs
2025-01-27 20:32:23 +08:00

382 lines
15 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 System.Security.Claims;
using Microsoft.EntityFrameworkCore;
using Mirai.Net.Utils.Scaffolds;
using Flandre.Core.Messaging.Segments;
using Flandre.Core.Messaging;
using Flandre.Core.Common;
namespace asg_form.Controllers
{
[ApiController]
public class TaskDB
{
public long id { get; set; }
public string chinaname { get; set; }
public string createPerson { get; set; }
public long? createUserId { get; set; }
public long userId { get; set; }
public string taskName { get; set; }
public string taskDescription { get; set; }
public string status { get; set; }
public long money { get; set; }
public string createTime { get; set; }
public string lastOperateTime { get; set; }
public string approvalPerson { get; set; }
public string priority { get; set; }
}
public class TaskCreate
{
public string Chinaname { get; set; }
public string CreatePerson { get; set; }
public long? CreateUserid { get; set; }
public long UserId { get; set; }
public string TaskName { get; set; }
public string TaskDescription { get; set; }
public long Money { get; set; }
public string priority { 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 == "nbadmin"))
{
return Ok(new error_mb { code = 401, message = "无权访问" });
}
var dateString = DateTime.Now;
using (TestDbContext sub = new TestDbContext())
{
int wp = -2;
try
{
var user = await userManager.Users.FirstOrDefaultAsync(u => u.Id == taskinfo.UserId);
var task = new TaskDB
{
chinaname = taskinfo.Chinaname,
createPerson = taskinfo.CreatePerson,
createUserId = taskinfo.CreateUserid,
userId = taskinfo.UserId,
taskName = taskinfo.TaskName,
taskDescription = taskinfo.TaskDescription,
money = taskinfo.Money,
status = "0",
createTime = dateString.ToString(),
lastOperateTime = dateString.ToString(),
approvalPerson = "未审核",
priority = taskinfo.priority
};
sub.T_Task.Add(task);
wp = -1;
string msg = $"ASG管理系统{taskinfo.Chinaname} 同学,您有新的{taskinfo.priority}星级待办任务,请您登录后台管理系统查看任务详情,并及时完成任务。--{taskinfo.CreatePerson}";
string qqgroup = "925510646";
wp = 0;
var atuserqq = user.qqnumber;
if(atuserqq == null) return Ok(new { code = 500, message = "服务器错误" });
var message = new MessageBuilder().Add(new AtSegment(atuserqq)).Text(msg).Build();
await runbot.runbotr.SendMessageAsync(MessageEnvironment.Channel, qqgroup, null, message, qqgroup);
await sub.SaveChangesAsync();
return Ok(new error_mb { code = 200, message = "新建任务成功" });
}
catch (Exception ex)
{
return Ok(new { code = 500, message = "服务器错误", details = ex ,wp});
}
}
}
[Route("api/v1/admin/Task")]
[HttpDelete]
[Authorize]
public async Task<ActionResult<object>> DelTask([FromQuery] long id)
{
if (!this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "nbadmin"))
{
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(new error_mb { code = 200, message = "成功删除" });
}
}
[Route("api/v1/Task")]
[HttpGet]
[Authorize]
public async Task<ActionResult<object>> CekTask([FromQuery] long taskid)
{
using (TestDbContext sub = new TestDbContext())
{
string userId = this.User.FindFirst(ClaimTypes.NameIdentifier)!.Value;
var user = await userManager.FindByIdAsync(userId);
var task = sub.T_Task.Find(taskid);
var dateString = DateTime.Now;
task.status = "1";
task.lastOperateTime = dateString.ToString();
await sub.SaveChangesAsync();
string mesg = $"ASG管理系统{user.chinaname}同学的任务:{task.taskName}已完成,请及时上后台系统审批。";
string qqgroup = "925510646";
var atuserqq = "3124961425";
var message = new MessageBuilder().Add(new AtSegment(atuserqq)).Text(mesg).Build();
await runbot.runbotr.SendMessageAsync(MessageEnvironment.Channel, qqgroup, null, message, qqgroup);
return Ok(new error_mb { code = 200, message = "成功提交修改" });
}
}
public class statusChange
{
public long taskid { get; set; }
public string status { get; set; }
}
[Route("api/v1/admin/Task/Done")]
[HttpPost]
[Authorize]
public async Task<ActionResult<object>> FinishTask([FromBody] statusChange msg)
{
string userId = this.User.FindFirst(ClaimTypes.NameIdentifier)!.Value;
var user = await userManager.FindByIdAsync(userId);
if (!this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "nbadmin"))
{
return Ok(new error_mb { code = 401, message = "无权访问" });
}
var dateString = DateTime.Now;
using (TestDbContext sub = new TestDbContext())
{
var task = sub.T_Task.Find(msg.taskid);
long isPassed = long.Parse(msg.status);
var user_done = await userManager.FindByIdAsync(task.userId.ToString());
if(isPassed == 2)
{
task.status = "2";
//user.Integral += task.money;
user_done.Integral += task.money;
}
if (isPassed == 3)
{
task.status = "3";
}
task.lastOperateTime = dateString.ToString();
task.approvalPerson = user.chinaname;
await userManager.UpdateAsync(user);
await sub.SaveChangesAsync();
var result = new
{
approvalPerson = user.chinaname,
status = task.status,
taskId = msg.taskid,
code = 200,
message = "成功修改"
};
string mesg = "未知错误";
if(task.status == "2")
{
mesg = $"ASG管理系统{user_done.officium}{user_done.chinaname}同学,您的任务{task.taskName}完成已被通过。积分奖励已经发放,感谢您的付出!";
}else if(task.status == "3")
{
mesg = $"ASG管理系统{user_done.officium}{user_done.chinaname}同学,您的任务{task.taskName}完成未被通过。请您登录后台管理系统查看详情,并于完成后再次提交。";
}
string qqgroup = "925510646";
var atuserqq = user_done.qqnumber;
if (atuserqq == null) return Ok(new { code = 500, message = "服务器错误" });
var message = new MessageBuilder().Add(new AtSegment(atuserqq)).Text(mesg).Build();
await runbot.runbotr.SendMessageAsync(MessageEnvironment.Channel, qqgroup, null, message, qqgroup);
return Ok(new { code = 200, message = "成功提交修改", result });
}
}
[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 && n.status!="2");
}
//return Ok("用户不存在");
return query.OrderByDescending(a => a.userId)
.ThenByDescending(n => n.priority == "5" ? 5 :
n.priority == "4" ? 4 :
n.priority == "3" ? 3 :
n.priority == "2" ? 2 :
n.priority == "1" ? 1 :
n.priority == "0" ? 0 :
10).ToList();
}
[Route("api/v1/admin/FindTasks")]
[HttpGet]
[Authorize]
public async Task<ActionResult<object>> FindTasks([FromQuery] long userId = -1,string priority = null,string status = null,short page = 1,short limit = 10)
{
//string encodedChinaname = HttpUtility.UrlEncode(chinaname);
if (!this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "nbadmin"))
{
return Ok(new error_mb { code = 401, message = "无权访问" });
}
using (TestDbContext sub = new TestDbContext())
{
//List <TaskDB> taskDBs = new List<TaskDB>();
var query = sub.T_Task.AsQueryable();
if (!string.IsNullOrEmpty(priority))
{
query = query.Where(n => n.priority == priority);
}
if (!string.IsNullOrEmpty(status))
{
query = query.Where(n => n.status == status);
}
if (userId != -1)
{
query = query.Where(n => n.userId == userId);
}
// var customOrder = new[] { "1","0","3","2" };
var TotalRecords = await query.CountAsync();
var Tasks = await query
.OrderByDescending(t => t.status == "1" ? 3 :
t.status == "0" ? 2 :
t.status == "3" ? 1 :
t.status == "2" ? 0 :
10)
.ThenByDescending(n => n.priority == "5" ? 5 :
n.priority == "4" ? 4 :
n.priority == "3" ? 3 :
n.priority == "2" ? 2 :
n.priority == "1" ? 1 :
n.priority == "0" ? 0 :
10)
.Skip((page - 1) * limit)
.Take(limit)
.ToListAsync();
var data = new
{
rows = Tasks ,
total = TotalRecords,
};
return Ok(new { code = 200, message = " ", data });
}
}
[Route("api/v1/admin/RemindTasks")]
[HttpGet]
[Authorize]
public async Task<ActionResult<object>> RemindTasks([FromQuery] long taskId)
{
try
{
if (!this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "nbadmin"))
{
return Ok(new error_mb { code = 401, message = "无权访问" });
}
using (var db = new TestDbContext())
{
var task = db.T_Task.Find(taskId);
if (task == null) return Ok(new { code = 404, message = "任务未找到" });
var user = await userManager.FindByIdAsync(task.userId.ToString());
string mesg = $"ASG管理系统{user.officium}{user.chinaname}同学,您的{task.taskName}任务尚未完成,请登录后台管理系统查看任务详情。";
string qqgroup = "925510646";
var atuserqq = user.qqnumber;
var message = new MessageBuilder().Add(new AtSegment(atuserqq)).Text(mesg).Build();
await runbot.runbotr.SendMessageAsync(MessageEnvironment.Channel, qqgroup, null, message, qqgroup);
return Ok(new { code = 200, message = "已通知" });
}
}catch (Exception ex)
{
return Ok(new { code = 500, message = "服务器错误" ,ex});
}
}
public class taskChange
{
public long taskId { get; set; }
public string taskName { get; set; }
public string taskDescription { get; set; }
public long money { get; set; }
public string priority { get; set; }
public long userId { get; set; }
public string chinaname { get; set; }
}
[Route("api/v1/admin/UpdateTasks")]
[HttpPut]
[Authorize]
public async Task<ActionResult<object>> UpdateTask([FromBody] taskChange msg)
{
try
{
if (!this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "nbadmin"))
{
return Ok(new error_mb { code = 401, message = "无权访问" });
}
if(msg == null) return Ok(new error_mb { code = 400, message = "信息不完整" });
using (var db = new TestDbContext())
{
var task = db.T_Task.Find(msg.taskId);
if (task == null) return Ok(new { code = 404, message = "任务未找到" });
task.taskDescription = msg.taskDescription;
task.money = msg.money;
task.taskName = msg.taskName;
task.priority = msg.priority;
task.userId = msg.userId;
task.chinaname = msg.chinaname;
await db.SaveChangesAsync();
return Ok(new { code = 200, message = "已修改" });
}
}
catch (Exception ex)
{
return Ok(new { code = 500, message = "服务器错误", ex });
}
}
}
}