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-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-09-08 19:07:33 +08:00
|
|
|
|
public string approvalPerson { 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-09-06 21:04:19 +08:00
|
|
|
|
|
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(),
|
|
|
|
|
approvalPerson = "未审核"
|
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-10-21 18:39:25 +08:00
|
|
|
|
string msg = $"[ASG管理系统]{taskinfo.Chinaname} 同学,您有新的待办任务,请您登录后台管理系统查看任务详情,并及时完成任务。--{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("用户不存在");
|
|
|
|
|
return query.OrderByDescending(a => a.userId).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-09-05 22:08:40 +08:00
|
|
|
|
.Skip((page - 1) * limit)
|
|
|
|
|
.Take(limit)
|
|
|
|
|
.ToListAsync();
|
|
|
|
|
|
|
|
|
|
var result = 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-09-06 22:06:43 +08:00
|
|
|
|
return Ok(result);
|
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-08-29 20:38:38 +08:00
|
|
|
|
}
|
|
|
|
|
}
|