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 { 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 roleManager; private readonly UserManager userManager; public AssignmentController( RoleManager roleManager, UserManager userManager) { this.roleManager = roleManager; this.userManager = userManager; } [Route("api/v1/admin/Task")] [HttpPost] [Authorize] public async Task> 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 sub.SaveChangesAsync(); try { await runbot.runbotr.SendMessageAsync(MessageEnvironment.Channel, qqgroup, null, message, qqgroup); return Ok(new error_mb { code = 200, message = "新建任务成功" }); } catch { 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> 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> 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(); try { await runbot.runbotr.SendMessageAsync(MessageEnvironment.Channel, qqgroup, null, message, qqgroup); return Ok(new error_mb { code = 200, message = "成功提交修改" }); } catch { 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> 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(); try { await runbot.runbotr.SendMessageAsync(MessageEnvironment.Channel, qqgroup, null, message, qqgroup); return Ok(new { code = 200, message = "成功提交修改", result }); } catch { return Ok(new error_mb { code = 200, message = "机器人错误" }); } } } [Route("api/v1/Tasks")] [HttpGet] [Authorize] public async Task>> 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> 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 taskDBs = new List(); 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> 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(); try { await runbot.runbotr.SendMessageAsync(MessageEnvironment.Channel, qqgroup, null, message, qqgroup); return Ok(new { code = 200, message = "已通知" }); } catch { return Ok(new error_mb { 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> 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 }); } } } }