JPHD-2021-backend/Pages/Message/Index.cshtml.cs

165 lines
5.6 KiB
C#

using _2021_backend.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Threading.Tasks;
namespace _2021_backend.Pages.Message
{
public class IndexModel : PageModel
{
public readonly _2021_backend.Data.BackendContext Context;
[BindProperty]
public string Errmsg { get; set; }
[BindProperty]
public string SearchString { get; set; }
[BindProperty]
public bool showSend { get; set; }
[BindProperty]
public bool showReceive { get; set; }
[BindProperty]
public int pageid { get; set; }
public static int pageSize = 30;
public List<SMS> Messages { get; set; }
public int PageCount { get; set; }
public IndexModel(_2021_backend.Data.BackendContext context)
{
Context = context;
}
public IActionResult Construct(int PageId)
{
List<int> stus;
IQueryable<int> q;
if (!String.IsNullOrEmpty(SearchString)) q = from e in Context.Students where e.Name.Contains(SearchString) select e.Id;
else q = from e in Context.Students select e.Id;
stus = q.ToList();
var q2 = from e in Context.SMS where stus.Contains(e.Host) select e;
if (showReceive && !showSend) q2 = from e in q2 where e.Type == SMSType.Reply select e;
else if (!showReceive && showSend) q2 = from e in q2 where e.Type != SMSType.Reply select e;
Messages = q2.ToList();
Messages.Sort((SMS a, SMS b) => b.SendTime.CompareTo(a.SendTime));
int cnt = Messages.Count;
PageCount = (int)Math.Ceiling((double)cnt / (double)pageSize);
if (PageId >= PageCount) PageId = PageCount - 1;
if (PageId < 0) PageId = 0;
pageid = PageId;
int count = (PageId + 1) * pageSize > cnt ? (cnt - PageId * pageSize) : pageSize;
Messages = Messages.GetRange(PageId * pageSize, count);
return Page();
}
public async Task<IActionResult> OnGetAsync(int PageId)
{
return Construct(PageId);
}
public async Task<IActionResult> OnPostAsync(int PageId)
{
return Construct(PageId);
}
public async void OnPostPullAsync(int PageId)
{
var stu = Context.Students.ToList();
foreach (var e in stu)
{
await Utils.TencentSMS.Pull(Context, e, true);
}
Construct(PageId);
}
public async Task<IActionResult> OnPostSignAsync(int PageId)
{
var stu = Context.Students.ToList();
foreach (var e in stu)
{
if (e.Status == status.)
await Utils.TencentSMS.Send(Context, SMSType.Signed, e, Context.Users.Find(int.Parse(User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value)).Name);
}
return Construct(PageId);
}
public async Task<IActionResult> OnPostResultRejectAsync(int PageId)
{
var stu = Context.Students.ToList();
foreach (var e in stu)
{
if (e.Status == status.)
{
if (!Context.SMS.Any(it => it.Host == e.Id && it.Type == SMSType.Reject))
await Utils.TencentSMS.Send(Context, SMSType.Reject, e, Context.Users.Find(int.Parse(User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value)).Name);
}
}
return Construct(PageId);
}
public async Task<IActionResult> OnPostTimeSelectAsync(int PageId)
{
var stu = Context.Students.ToList();
foreach (var e in stu)
{
if (e.Status != status. && e.Status != status.)
{
await Utils.TencentSMS.Send(Context, SMSType.TimeSelect, e, Context.Users.Find(int.Parse(User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value)).Name);
}
}
Context.SaveChanges();
return Construct(PageId);
}
public async Task<IActionResult> OnPostResultAccpetAsync(int PageId)
{
var stu = Context.Students.ToList();
foreach (var e in stu)
{
if (e.Status == status.)
{
if (!Context.SMS.Any(it => it.Host == e.Id && it.Type == SMSType.Accept))
await Utils.TencentSMS.Send(Context, SMSType.Accept, e, Context.Users.Find(int.Parse(User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value)).Name);
}
}
return Construct(PageId);
}
public async Task<IActionResult> OnPostTimeSetAsync(int PageId)
{
var stu = Context.Students.ToList();
foreach(var e in stu)
{
var t = Context.Sessions.Find(e.InterviewTime);
if(t != null && t.Students.Find(s => s==e.Id)!= 0 && e.Status == status.)
{
await Utils.TencentSMS.Send(Context, SMSType.TimeSet, e, Context.Users.Find(int.Parse(User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value)).Name);
e.Status = status.;
}
}
Context.SaveChanges();
return Construct(PageId);
}
}
}