JPHD-2021-backend/Pages/Students/Details.cshtml.cs

205 lines
8.1 KiB
C#

using _2021_backend.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.EntityFrameworkCore;
using System;
using System.Linq;
using System.Security.Claims;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace _2021_backend.Pages.Students
{
public class DetailsModel : PageModel
{
public _2021_backend.Data.BackendContext Context;
public DetailsModel(_2021_backend.Data.BackendContext context)
{
Context = context;
}
[BindProperty]
public Student Student { get; set; }
[BindProperty]
public int score { get; set; }
public List<Session> Sessions { get; set; }
public List<Submission> Submissions { get; set; }
public List<Comment> CurComments { get; set; }
public Session Interviewtime { get; set; }
public Comment CommentSample { get; set; }
public Submission SubmissionSample { get; set; }
[Display(Name = "评论内容")]
[BindProperty]
[Required(ErrorMessage = "该项不能为空")]
public string NewComment { get; set; }
public List<SMS> Messages { get; set; }
public IActionResult Construct(string? idstr)
{
if (idstr == null)
{
return NotFound();
}
Guid id = Guid.Parse(idstr);
Student = Context.Students.Find(id);
if (Student == null)
{
Console.WriteLine("Student not found.");
return NotFound();
}
Sessions = new List<Session>();
Submissions = new List<Submission>();
Interviewtime = Context.Sessions.Find(Student.InterviewTime);
foreach (var it in Student.Timelist)
{
var tm = Context.Sessions.Find(it);
if (tm == null) Console.WriteLine("null encountered in timelist!");
Sessions.Add(tm);
}
Messages = Context.SMS.Where(it => it.Host == id).ToList();
CurComments = Context.Comments.Where(cmt => cmt.Student == Student.Guid).ToList();
Sessions.Sort((Session a, Session b) => {
var x = a.Day.CompareTo(b.Day);
var y = a.BeginTime.CompareTo(b.BeginTime);
var z = a.Place.CompareTo(b.Place);
return (x != 0 ? x : y != 0 ? y : z != 0 ? z : 0);
});
Console.WriteLine("Page construction finished.");
return Page();
}
public async Task<IActionResult> OnGetAsync(string? idstr)
{
Console.WriteLine("getting student " + idstr);
return Construct(idstr);
}
public async Task<IActionResult> OnPostAsync()
{
if (!string.IsNullOrWhiteSpace(NewComment))
{
var cmt = new Comment();
cmt.Student = Student.Guid;
cmt.Content = NewComment;
cmt.Operator = Guid.Parse(User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value);
var stu = Context.Students.Find(Student.Guid);
stu.Comments.Add(cmt.Guid);
Context.Comments.Add(cmt);
Context.SaveChanges();
}
Construct(Student.Guid.ToString());
return RedirectToPage(new { idstr = Student.Guid.ToString() });
}
public async Task<IActionResult> OnPostAcceptAsync()
{
Student = Context.Students.Find(Student.Guid);
Student.Status = status.;
Context.SaveChanges();
CurComments = Context.Comments.Where(cmt => cmt.Student == Student.Guid).ToList();
Messages = Context.SMS.Where(it => it.Host == Student.Guid).ToList();
Construct(Student.Guid.ToString());
return RedirectToPage(new { idstr = Student.Guid.ToString() });
}
public async Task<IActionResult> OnPostRejectAsync()
{
Student = Context.Students.Find(Student.Guid);
Student.Status = status.;
Context.SaveChanges();
Student.Score = 0;
CurComments = Context.Comments.Where(cmt => cmt.Student == Student.Guid).ToList();
Messages = Context.SMS.Where(it => it.Host == Student.Guid).ToList();
Construct(Student.Guid.ToString());
return RedirectToPage(new { idstr = Student.Guid.ToString() });
}
public async Task<IActionResult> OnPostSelectAsync(Guid stu, Guid time)
{
var st = Context.Students.Find(stu);
if (st != null)
{
if (Context.Sessions.Any(it => it.Guid == time))
{
var tm = Context.Sessions.Find(time);
if (tm.Students.Count < tm.Capacity)
{
if (st.InterviewTime != Guid.Empty)
{
var tmold = Context.Sessions.Find(st.InterviewTime);
if (tmold != null)
{
tmold.Students.RemoveAll(it => it == st.Guid);
Context.SaveChanges();
}
}
tm.Students.Add(stu);
st.InterviewTime = time;
if (st.Status != status. && st.Status != status.) st.Status = status.;
Context.SaveChanges();
}
}
}
return Construct(Student.Guid.ToString());
}
public async Task<IActionResult> OnPostPullAsync()
{
await Utils.TencentSMS.Pull(Context, Context.Students.Find(Student.Guid), true);
return Construct(Student.Guid.ToString());
}
public async Task<IActionResult> OnPostRankAsync()
{
var s = Context.Students.Find(Student.Guid);
s.Score = score;
s.Status = status.;
Context.SaveChanges();
return Construct(Student.Guid.ToString());
}
public async Task<IActionResult> OnPostResultAsync()
{
var stu = Context.Students.Find(Student.Guid);
if (stu.Status == status.)
await Utils.TencentSMS.Send(Context, SMSType.Accept, stu, Context.Users.Find(Guid.Parse(User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value)).Name);
else if (stu.Status == status.)
await Utils.TencentSMS.Send(Context, SMSType.Reject, stu, Context.Users.Find(Guid.Parse(User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value)).Name);
return Construct(Student.Guid.ToString());
}
public async Task<IActionResult> OnPostSignAsync()
{
var stu = Context.Students.Find(Student.Guid);
await Utils.TencentSMS.Send(Context, SMSType.Signed, stu, Context.Users.Find(Guid.Parse(User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value)).Name);
return Construct(Student.Guid.ToString());
}
public async Task<IActionResult> OnPostSelectTimeAsync()
{
var stu = Context.Students.Find(Student.Guid);
await Utils.TencentSMS.Send(Context, SMSType.TimeSelect, stu, Context.Users.Find(Guid.Parse(User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value)).Name);
stu.Status = status.;
return Construct(Student.Guid.ToString());
}
public async Task<IActionResult> OnPostTimeAsync()
{
var stu = Context.Students.Find(Student.Guid);
await Utils.TencentSMS.Send(Context, SMSType.TimeSet, stu, Context.Users.Find(Guid.Parse(User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value)).Name);
stu.Status = status.;
Context.SaveChanges();
return Construct(Student.Guid.ToString());
}
}
}