using Azure.Cosmos;
using HTEXLib.COMM.Helpers;
using Microsoft.AspNetCore.Hosting;
using Microsoft.International.Converters.PinYinConverter;
using Microsoft.International.Converters.TraditionalChineseToSimplifiedConverter;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.Json;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using TEAMModelOS.Models;
using TEAMModelOS.SDK.DI;
using TEAMModelOS.SDK.Extension;
using TEAMModelOS.SDK.Models;
namespace TEAMModelOS.SDK
{
public class SchoolService
{
///
/// 处理学期排序
///
///
///
public static List SortSemester(List semesterList)
{
int Year = DateTimeOffset.UtcNow.Year;
List> pairs = new List>();
semesterList.ForEach(se => {
string sm = se.month >= 10 ? $"{se.month}" : $"0{se.month}";
string sd = se.day >= 10 ? $"{se.day}" : $"0{se.day}";
int order = int.Parse($"{Year}{sm}{sd}");
pairs.Add(new KeyValuePair(order, se));
});
var orderPairs = pairs.OrderBy(z => z.Key);
semesterList = orderPairs.Select(z => z.Value).ToList();
int startIndex = semesterList.FindIndex(z => z.start == 1);
if (startIndex == -1)
{
//未设置学期的情况默认9月份开始的。
startIndex = semesterList.FindIndex(z => z.month == 9);
//如果还未找到,就以排序结果为准
if (startIndex == -1)
{
startIndex = 0;
}
}
if (startIndex > 0)
{
List before = semesterList.Take(startIndex).ToList();
List after = semesterList.Skip(startIndex).ToList();
semesterList = new List();
semesterList.AddRange(after);
semesterList.AddRange(before);
return semesterList;
}
else
{
return semesterList;
}
}
public static async Task<(List school_classes, List graduate_classes)> DoGraduateClasses(HttpTrigger _httpTrigger, AzureCosmosFactory _azureCosmos, List periodIds, School school_base, Option _option,DingDing _dingDing, int waite = 0) {
List school_classes = new List();
List graduate_classes = new List();
try
{
var client = _azureCosmos.GetCosmosClient();
//取得班级
int nowYear = DateTimeOffset.UtcNow.Year;
int nowMonth = DateTimeOffset.UtcNow.Month;
int nowDay = DateTimeOffset.UtcNow.Day;
//因为修改年级,而导致取消的
List cancel_graduate_classes = new List();
string sql = $"SELECT value c FROM c where (c.graduate = 0 or IS_DEFINED(c.graduate) = false) ";
if (periodIds.IsNotEmpty())
{
sql = $"SELECT value c FROM c where c.periodId in ({string.Join(",", periodIds.Select(x => $"'{x}'"))}) ";
}
await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator
//(queryText: $"SELECT value c FROM c where (c.graduate = 0 or IS_DEFINED(c.graduate) = false)",
(queryText: sql,
requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Class-{school_base.id}") }))
{
bool isgraduate = false;
if (!string.IsNullOrWhiteSpace(item.periodId))
{
var period = school_base.period.Find(x => x.id.Equals(item.periodId));
if (period != null)
{
var gradeCount = period.grades.Count();
//2022-2016=6(待判断月份日期是否是毕业) 2022-2017=5(未毕业)
if (nowYear - item.year > gradeCount)
{
isgraduate = true;
}
else if (nowYear - item.year == gradeCount)
{
var semester = period.semesters.Find(x => x.start == 1);
if (semester != null)
{
if (nowMonth > semester.month)
{
isgraduate = true;
}
else if (nowMonth == semester.month)
{
if (nowDay >= semester.day)
{
isgraduate = true;
}
else
{
}
}
else { isgraduate = false; }
}
}
else
{
isgraduate = false;
}
}
}
if (isgraduate)
{
graduate_classes.Add(item);
}
else
{
if (item.graduate == 1)
{
item.graduate = 0;
cancel_graduate_classes.Add(item);
}
school_classes.Add(item);
}
}
if (graduate_classes.Any() || cancel_graduate_classes.Any())
{
if (waite == 0)
{
_ = _httpTrigger.RequestHttpTrigger(new { graduate_classes = graduate_classes, cancel_graduate_classes = cancel_graduate_classes, schoolId = $"{school_base.id}" }, _option.Location, "graduate-change");
}
else
{
await _httpTrigger.RequestHttpTrigger(new { graduate_classes = graduate_classes, cancel_graduate_classes = cancel_graduate_classes, schoolId = $"{school_base.id}" }, _option.Location, "graduate-change");
}
}
} catch (Exception ex) {
await _dingDing.SendBotMsg($"{_option.Location},{ex.Message}\n{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
}
return (school_classes,graduate_classes);
}
public static async Task