asg_backend/asg_form/Controllers/AssignmentController.cs

384 lines
16 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-09-05 22:08:40 +08:00
using NPOI.SS.Formula.Functions;
using Microsoft.EntityFrameworkCore;
2024-10-19 21:53:56 +08:00
using Flandre.Core.Models;
using Mirai.Net.Sessions.Http.Managers;
using Mirai.Net.Utils.Scaffolds;
using Flandre.Core.Messaging.Segments;
using Flandre.Core.Messaging;
2024-10-19 21:59:10 +08:00
using Flandre.Core.Common;
2024-10-21 18:39:25 +08:00
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using static asg_form.Controllers.InviteReferee;
2024-10-23 11:24:16 +08:00
using static Microsoft.ApplicationInsights.MetricDimensionNames.TelemetryContext;
2024-11-07 14:33:50 +08:00
using AngleSharp.Css;
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-09-08 16:35:39 +08:00
public string createPerson { get; set; }
2024-10-02 21:05:36 +08:00
public long? createUserId { 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; }
2024-09-06 20:54:46 +08:00
2024-09-06 22:06:43 +08:00
public string createTime { get; set; }
public string lastOperateTime { get; set; }
2024-09-08 17:09:48 +08:00
2024-11-07 14:33:50 +08:00
public string approvalPerson { get; set; }
public string priority { get; set; }
2024-08-29 20:38:38 +08:00
}
public class TaskCreate
{
2024-08-30 08:52:06 +08:00
public string Chinaname { get; set; }
2024-09-08 16:35:39 +08:00
public string CreatePerson { get; set; }
2024-10-02 21:05:36 +08:00
public long? CreateUserid { 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; }
2024-11-07 14:33:50 +08:00
public string priority { get; set; }
2024-08-29 20:38:38 +08:00
}
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;
}
2024-09-05 22:08:40 +08:00
2024-08-29 20:38:38 +08:00
[Route("api/v1/admin/Task")]
[HttpPost]
[Authorize]
public async Task<ActionResult<string>> PubTask([FromBody] TaskCreate taskinfo)
{
2024-09-04 10:42:17 +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 = "无权访问" });
}
2024-09-06 21:29:57 +08:00
var dateString = DateTime.Now;
2024-08-29 20:38:38 +08:00
using (TestDbContext sub = new TestDbContext())
{
2024-10-19 21:53:56 +08:00
int wp = -2;
try
{
2024-10-21 18:39:25 +08:00
var user = await userManager.Users.FirstOrDefaultAsync(u => u.Id == taskinfo.UserId);
var task = new TaskDB
2024-08-29 20:38:38 +08:00
{
2024-08-30 08:52:06 +08:00
chinaname = taskinfo.Chinaname,
2024-09-08 16:35:39 +08:00
createPerson = taskinfo.CreatePerson,
2024-09-08 19:20:04 +08:00
createUserId = taskinfo.CreateUserid,
2024-08-29 20:38:38 +08:00
userId = taskinfo.UserId,
taskName = taskinfo.TaskName,
taskDescription = taskinfo.TaskDescription,
money = taskinfo.Money,
status = "0",
2024-09-06 22:12:53 +08:00
createTime = dateString.ToString(),
2024-09-08 19:07:33 +08:00
lastOperateTime = dateString.ToString(),
2024-11-07 14:33:50 +08:00
approvalPerson = "未审核",
priority = taskinfo.priority
2024-08-29 20:38:38 +08:00
};
sub.T_Task.Add(task);
2024-10-21 18:39:25 +08:00
2024-10-19 21:53:56 +08:00
wp = -1;
2024-11-07 14:33:50 +08:00
string msg = $"ASG管理系统{taskinfo.Chinaname} 同学,您有新的{taskinfo.priority}星级待办任务,请您登录后台管理系统查看任务详情,并及时完成任务。--{taskinfo.CreatePerson}";
2024-10-19 21:53:56 +08:00
string qqgroup = "925510646";
wp = 0;
2024-10-21 18:39:25 +08:00
var atuserqq = user.qqnumber;
if(atuserqq == null) return Ok(new { code = 500, message = "服务器错误" });
var message = new MessageBuilder().Add(new AtSegment(atuserqq)).Text(msg).Build();
2024-10-19 21:53:56 +08:00
await runbot.runbotr.SendMessageAsync(MessageEnvironment.Channel, qqgroup, null, message, qqgroup);
2024-10-21 18:39:25 +08:00
await sub.SaveChangesAsync();
2024-10-19 21:53:56 +08:00
return Ok(new error_mb { code = 200, message = "新建任务成功" });
}
catch (Exception ex)
{
return Ok(new { code = 500, message = "服务器错误", details = ex ,wp});
}
2024-08-29 20:38:38 +08:00
}
2024-09-04 22:59:09 +08:00
2024-08-29 20:38:38 +08:00
}
[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
{
2024-09-04 10:42:17 +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())
{
sub.T_Task.Remove(sub.T_Task.Find(id));
await sub.SaveChangesAsync();
2024-09-04 22:59:09 +08:00
return Ok(new error_mb { code = 200, message = "成功删除" });
2024-08-29 20:38:38 +08:00
}
}
[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-10-23 11:24:16 +08:00
string userId = this.User.FindFirst(ClaimTypes.NameIdentifier)!.Value;
var user = await userManager.FindByIdAsync(userId);
2024-09-01 15:52:28 +08:00
var task = sub.T_Task.Find(taskid);
2024-09-06 21:29:57 +08:00
var dateString = DateTime.Now;
2024-08-29 20:38:38 +08:00
task.status = "1";
2024-09-06 22:06:43 +08:00
task.lastOperateTime = dateString.ToString();
2024-08-29 20:38:38 +08:00
await sub.SaveChangesAsync();
2024-10-23 11:24:16 +08:00
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);
2024-09-04 22:59:09 +08:00
return Ok(new error_mb { code = 200, message = "成功提交修改" });
2024-08-29 20:38:38 +08:00
}
}
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 = "无权访问" });
}
2024-09-06 21:29:57 +08:00
var dateString = DateTime.Now;
2024-08-29 20:38:38 +08:00
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-10-21 18:39:25 +08:00
var user_done = await userManager.FindByIdAsync(task.userId.ToString());
2024-09-03 09:57:25 +08:00
if(isPassed == 2)
{
task.status = "2";
2024-09-18 10:23:36 +08:00
//user.Integral += task.money;
2024-10-21 18:39:25 +08:00
2024-09-17 22:23:25 +08:00
user_done.Integral += task.money;
2024-09-03 09:57:25 +08:00
}
if (isPassed == 3)
{
task.status = "3";
}
2024-09-06 22:06:43 +08:00
task.lastOperateTime = dateString.ToString();
2024-09-08 17:09:48 +08:00
task.approvalPerson = user.chinaname;
2024-08-30 15:21:55 +08:00
await userManager.UpdateAsync(user);
2024-08-29 20:38:38 +08:00
await sub.SaveChangesAsync();
2024-09-08 16:35:39 +08:00
var result = new
{
approvalPerson = user.chinaname,
status = task.status,
2024-09-08 19:07:33 +08:00
taskId = msg.taskid,
2024-09-08 16:35:39 +08:00
code = 200,
message = "成功修改"
};
2024-10-21 18:39:25 +08:00
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 });
2024-08-29 20:38:38 +08:00
}
}
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);
2024-10-25 20:28:57 +08:00
query = query.Where(n => n.userId == idNum && n.status!="2");
2024-08-30 15:21:55 +08:00
}
2024-09-03 09:57:25 +08:00
//return Ok("用户不存在");
2024-11-12 16:29:22 +08:00
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();
2024-09-01 15:52:28 +08:00
}
[Route("api/v1/admin/FindTasks")]
[HttpGet]
[Authorize]
2024-09-05 22:08:40 +08:00
public async Task<ActionResult<object>> FindTasks([FromQuery] string chinaname = null,string status = null,short page = 1,short limit = 10)
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())
{
2024-09-05 22:08:40 +08:00
//List <TaskDB> taskDBs = new List<TaskDB>();
2024-09-01 15:52:28 +08:00
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-10-04 16:16:48 +08:00
// var customOrder = new[] { "1","0","3","2" };
2024-10-02 21:05:36 +08:00
2024-09-06 21:40:31 +08:00
var TotalRecords = await query.CountAsync();
2024-09-05 22:08:40 +08:00
2024-09-06 21:40:31 +08:00
var Tasks = await query
2024-10-04 16:23:24 +08:00
.OrderByDescending(t => t.status == "1" ? 3 :
t.status == "0" ? 2 :
t.status == "3" ? 1 :
t.status == "2" ? 0 :
2024-10-21 18:39:25 +08:00
10)
2024-11-12 16:29:22 +08:00
.ThenByDescending(n => n.priority == "5" ? 5 :
2024-11-07 14:33:50 +08:00
n.priority == "4" ? 4 :
n.priority == "3" ? 3 :
n.priority == "2" ? 2 :
n.priority == "1" ? 1 :
n.priority == "0" ? 0 :
10)
2024-09-05 22:08:40 +08:00
.Skip((page - 1) * limit)
.Take(limit)
.ToListAsync();
2024-11-08 21:58:56 +08:00
var data = new
2024-09-06 22:06:43 +08:00
{
2024-09-06 21:40:31 +08:00
rows = Tasks ,
2024-09-06 22:06:43 +08:00
total = TotalRecords,
2024-09-05 22:08:40 +08:00
};
2024-11-08 21:58:56 +08:00
return Ok(new { code = 200, message = " ", data });
2024-09-05 22:08:40 +08:00
}
}
2024-10-21 18:39:25 +08:00
[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});
}
}
2024-10-28 22:59:35 +08:00
public class taskChange
{
public long taskId { get; set; }
public string taskName { get; set; }
public string taskDescription { get; set; }
public long money { get; set; }
2024-11-07 14:33:50 +08:00
public string priority { get; set; }
2024-10-28 22:59:35 +08:00
}
[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;
2024-11-07 14:33:50 +08:00
task.priority = msg.priority;
2024-10-28 22:59:35 +08:00
await db.SaveChangesAsync();
return Ok(new { code = 200, message = "已修改" });
}
}
catch (Exception ex)
{
return Ok(new { code = 500, message = "服务器错误", ex });
}
}
2024-08-29 20:38:38 +08:00
}
}