353 lines
12 KiB
C#
353 lines
12 KiB
C#
using _2021_backend.Models;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.AspNetCore.Mvc.RazorPages;
|
|
using Microsoft.AspNetCore.Mvc.Rendering;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using System.Text.Json;
|
|
using System.IO;
|
|
using System.Security.Claims;
|
|
|
|
namespace _2021_backend.Pages.Sessions
|
|
{
|
|
public class IndexModel : PageModel
|
|
{
|
|
public readonly _2021_backend.Data.BackendContext Context;
|
|
public IndexModel(_2021_backend.Data.BackendContext context)
|
|
{
|
|
Context = context;
|
|
}
|
|
public List<Session> LoadedSessions { get; set; }
|
|
public SelectList DayList { get; set; }
|
|
[BindProperty(SupportsGet = true)]
|
|
public string Room { get; set; }
|
|
|
|
[BindProperty]
|
|
public string Errmsg { get;set; }
|
|
|
|
[BindProperty]
|
|
public string savename { get; set; }
|
|
|
|
[BindProperty(SupportsGet = true)]
|
|
public bool onlyShowUnFull { get; set; }
|
|
|
|
[BindProperty(SupportsGet = true)]
|
|
public DateTime Day { get; set; }
|
|
|
|
[BindProperty]
|
|
public int TargetIndex { get; set; }
|
|
|
|
|
|
public SelectList Files { get; set; }
|
|
|
|
public IActionResult Construct(string errmsg)
|
|
{
|
|
Errmsg = errmsg;
|
|
var q = from s in Context.Sessions select s;
|
|
if (Day != DateTime.MinValue)
|
|
{
|
|
q = from t in q where t.Day == Day select t;
|
|
}
|
|
if (Room == "200" || Room == "204")
|
|
{
|
|
q = from t in q where t.Place == Room select t;
|
|
}
|
|
if (onlyShowUnFull)
|
|
{
|
|
q = from t in q where t.Capacity != t.Students.Count select t;
|
|
}
|
|
LoadedSessions = q.ToList();
|
|
LoadedSessions.Sort((Session a, Session b) =>
|
|
{
|
|
var x = a.Day.Date.Add(a.BeginTime.TimeOfDay).CompareTo(DateTime.Now);
|
|
var y = b.Day.Date.Add(b.BeginTime.TimeOfDay).CompareTo(DateTime.Now);
|
|
if (x != y) return y - x;
|
|
else
|
|
{
|
|
var z = a.Day.Date.Add(a.BeginTime.TimeOfDay).CompareTo(b.Day.Date.Add(b.BeginTime.TimeOfDay));
|
|
if (z != 0) return z;
|
|
else
|
|
{
|
|
if (a.BeginTime < b.BeginTime) return -1;
|
|
else if (a.BeginTime > b.BeginTime) return 1;
|
|
else if (a.Place == "200") return -1;
|
|
else if (a.Place == "204") return 1;
|
|
return 0;
|
|
}
|
|
}
|
|
});
|
|
var l = from it in LoadedSessions select it.Day;
|
|
DayList = new SelectList(l.Distinct());
|
|
if (!Directory.Exists("./saves")) Directory.CreateDirectory("./saves");
|
|
Files = new SelectList(Directory.GetFiles("./saves").ToList());
|
|
//Console.WriteLine(Files);
|
|
return Page();
|
|
}
|
|
public async Task<IActionResult> OnGetAsync(string errmsg)
|
|
{
|
|
return Construct(errmsg);
|
|
}
|
|
|
|
public async Task<IActionResult> OnGetResetAsync(int id)
|
|
{
|
|
if(Context.Sessions.Any(it => it.Id == id))
|
|
{
|
|
var s = Context.Sessions.Find(id);
|
|
foreach(var st in s.Students)
|
|
{
|
|
var e = Context.Students.Find(st);
|
|
e.Status = status.需调整时间;
|
|
e.InterviewTime = 0;
|
|
}
|
|
s.Students.Clear();
|
|
}
|
|
Context.SaveChanges();
|
|
return Construct("");
|
|
}
|
|
|
|
public async Task<IActionResult> OnPost()
|
|
{
|
|
return Construct("");
|
|
}
|
|
|
|
//public async Task<IActionResult> OnPostLoadAsync()
|
|
//{
|
|
|
|
// return Construct("");
|
|
//}
|
|
//public async Task<IActionResult> OnPostSaveAsync()
|
|
//{
|
|
|
|
// return Construct("");
|
|
//}
|
|
|
|
public async Task<IActionResult> OnPostArrangeAsync()
|
|
{
|
|
if (HttpContext.User.HasClaim((c) =>
|
|
{
|
|
return c.Type == ClaimTypes.Role&& (
|
|
c.Value == "admin" || c.Value == "manager");
|
|
})){
|
|
if (Utils.Arranger.Arrange(Context)) return Construct("");
|
|
else return Construct("排班失败,无法满足条件");
|
|
}
|
|
else
|
|
{
|
|
return Construct("您无权进行此操作");
|
|
}
|
|
}
|
|
|
|
public async Task<IActionResult> OnPostClearAllAsync()
|
|
{
|
|
|
|
if (HttpContext.User.HasClaim((c) =>
|
|
{
|
|
return c.Type == ClaimTypes.Role && (
|
|
c.Value == "admin" || c.Value == "manager");
|
|
}))
|
|
{
|
|
foreach (var s in Context.Students)
|
|
{
|
|
s.InterviewTime = 0;
|
|
s.Status = status.需调整时间;
|
|
s.Timelist.Clear();
|
|
}
|
|
Context.SaveChanges();
|
|
foreach (var s in Context.Sessions)
|
|
{
|
|
Context.Sessions.Remove(s);
|
|
}
|
|
Context.SaveChanges();
|
|
return Construct("");
|
|
}
|
|
else
|
|
{
|
|
return Construct("您无权进行此操作");
|
|
}
|
|
}
|
|
|
|
public async Task<IActionResult> OnPostResetAllAsync()
|
|
{
|
|
if (HttpContext.User.HasClaim((c) =>
|
|
{
|
|
return c.Type == ClaimTypes.Role && (
|
|
c.Value == "admin" || c.Value == "manager");
|
|
}))
|
|
{
|
|
|
|
|
|
var stus = Context.Students.ToList();
|
|
foreach (var s in stus)
|
|
{
|
|
if (s.Status == status.已选时间)
|
|
{
|
|
s.InterviewTime = 0;
|
|
s.Timelist.RemoveAll(it => !Context.Sessions.Any(k => k.Id == it));
|
|
s.Timelist.Sort((int a, int b) =>
|
|
{
|
|
var x = Context.Sessions.Find(a);
|
|
var y = Context.Sessions.Find(b);
|
|
var k1 = x.Day.CompareTo(y.Day);
|
|
var k2 = x.BeginTime.CompareTo(y.BeginTime);
|
|
return k1 != 0 ? k1 : k2;
|
|
});
|
|
}
|
|
|
|
}
|
|
Context.SaveChanges();
|
|
foreach (var s in Context.Sessions)
|
|
{
|
|
s.Students.Clear();
|
|
}
|
|
Context.SaveChanges();
|
|
return Construct("");
|
|
}
|
|
else
|
|
{
|
|
return Construct("您无权进行此操作");
|
|
}
|
|
}
|
|
|
|
public async Task<IActionResult> OnPostSaveAsync()
|
|
{
|
|
if (HttpContext.User.HasClaim((c) =>
|
|
{
|
|
return c.Type == ClaimTypes.Role && (
|
|
c.Value == "admin" || c.Value == "manager");
|
|
}))
|
|
{
|
|
var lst = Context.Sessions.ToList();
|
|
var str = JsonSerializer.Serialize(lst);
|
|
Console.WriteLine("Saving arrangement: " + str);
|
|
if (!Directory.Exists("./saves")) Directory.CreateDirectory("./saves/");
|
|
System.IO.File.WriteAllText($"./saves/{DateTime.Now.ToString("MM-dd-hh-mm-ss")}.txt", str);
|
|
return Construct("");
|
|
}
|
|
else
|
|
{
|
|
return Construct("您无权进行此操作");
|
|
}
|
|
}
|
|
public async Task<IActionResult> OnPostTidyAsync()
|
|
{
|
|
if (HttpContext.User.HasClaim((c) =>
|
|
{
|
|
return c.Type == ClaimTypes.Role && (
|
|
c.Value == "admin" || c.Value == "manager");
|
|
}))
|
|
{
|
|
var stus = Context.Students.ToList();
|
|
var sess = Context.Sessions.ToList();
|
|
foreach (var i in stus)
|
|
{
|
|
var tm = i.Timelist;
|
|
var ntm = new List<Session>();
|
|
foreach (var j in tm)
|
|
{
|
|
var k = sess.Find(it => it.Id == j);
|
|
ntm.Add(k);
|
|
}
|
|
ntm.Sort((Session a, Session b) =>
|
|
{
|
|
var x = a.Day.CompareTo(b.Day);
|
|
var y = a.BeginTime.CompareTo(b.BeginTime);
|
|
return x != 0 ? x : y;
|
|
});
|
|
List<int> nl = new List<int>();
|
|
foreach (var j in ntm)
|
|
{
|
|
if (i.Status != status.不通过 && i.Status != status.通过 && i.Status != status.已确认时间)
|
|
{
|
|
if (j.Day.Date.Add(j.BeginTime.TimeOfDay).CompareTo(DateTime.Now) < 0 || (j.Students.Count >= j.Capacity && !j.Students.Any(k => k == i.Id))) continue;
|
|
nl.Add(j.Id);
|
|
}
|
|
else
|
|
{
|
|
nl.Add(j.Id);
|
|
}
|
|
|
|
}
|
|
i.Timelist = nl;
|
|
}
|
|
Context.SaveChanges();
|
|
return Construct("");
|
|
}
|
|
else
|
|
{
|
|
return Construct("您无权进行此操作");
|
|
}
|
|
}
|
|
|
|
|
|
public async Task<IActionResult> OnPostLoadAsync()
|
|
{
|
|
if (HttpContext.User.HasClaim((c) =>
|
|
{
|
|
return c.Type == ClaimTypes.Role && (
|
|
c.Value == "admin" || c.Value == "manager");
|
|
}))
|
|
{
|
|
var str = "";
|
|
|
|
List<Session> loads = new List<Session>();
|
|
if (!string.IsNullOrEmpty(savename)) str = System.IO.File.ReadAllText(savename);
|
|
loads = JsonSerializer.Deserialize<List<Session>>(str);
|
|
|
|
var stus = Context.Students.ToList();
|
|
foreach (var s in stus)
|
|
{
|
|
if (s.Status == status.已选时间)
|
|
{
|
|
s.InterviewTime = 0;
|
|
s.Timelist.RemoveAll(it => !Context.Sessions.Any(k => k.Id == it));
|
|
s.Timelist.Sort((int a, int b) =>
|
|
{
|
|
var x = Context.Sessions.Find(a);
|
|
var y = Context.Sessions.Find(b);
|
|
var k1 = x.Day.CompareTo(y.Day);
|
|
var k2 = x.BeginTime.CompareTo(y.BeginTime);
|
|
return k1 != 0 ? k1 : k2;
|
|
});
|
|
}
|
|
}
|
|
Context.SaveChanges();
|
|
foreach (var s in Context.Sessions)
|
|
{
|
|
s.Students.Clear();
|
|
}
|
|
Context.SaveChanges();
|
|
foreach (var item in loads)
|
|
{
|
|
Session s = Context.Sessions.Find(item.Id);
|
|
if (s != null)
|
|
{
|
|
s.BeginTime = item.BeginTime;
|
|
s.Day = item.Day;
|
|
s.Capacity = item.Capacity;
|
|
s.SendSMS = item.SendSMS;
|
|
s.Chiefs = item.Chiefs;
|
|
s.Students = new List<int>();
|
|
foreach (var s2 in item.Students)
|
|
{
|
|
if (Context.Students.Any(k => k.Id == s2))
|
|
{
|
|
Context.Students.Find(s2).InterviewTime = item.Id;
|
|
s.Students.Add(s2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
Context.SaveChanges();
|
|
return Construct("");
|
|
}
|
|
else
|
|
{
|
|
return Construct("您无权进行此操作");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|