using LearningOfficer.OA.Common.Enums;
using LearningOfficer.OA.Common.Exceptions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UserCenter.Model.Common;
using UserCenter.Model.Enum;
namespace LearningOfficer.OA.Common.Helpers
{
///
/// 解决方案工具年级转换帮助类
///
public class SolutionToolGradeHelper
{
public static SolutionSemesterEnum ConvertToSolutionToolGradeEnum(string gradeLevel, int graduationYear)
{
var grade = GradeHelper.GetGradeByStudentGradeBase(gradeLevel, graduationYear);
if (string.IsNullOrWhiteSpace(grade) || grade.Contains("届") || gradeLevel == GradeLevelEnum.小.ToString())
{
return SolutionSemesterEnum.None;
}
var gradeValue = GetGradeValue(gradeLevel, graduationYear);
if (gradeValue == 0)
{
return SolutionSemesterEnum.None;
}
var semesterValue = GetSemesterValue();
return (SolutionSemesterEnum)(gradeValue + semesterValue);
}
///
/// 获取年级的基础值
///
///
///
///
///
private static int GetGradeValue(string gradeLevel, int graduationYear)
{
var now = DateTime.Now;
// 获取当前年份与毕业年份的差值
var diffYear = graduationYear - now.Year;
if (diffYear < 0 || (diffYear == 0 && now.Date > new DateTime(now.Year, 8, 1)))
{
// 如果毕业年份小于当前年份,或者毕业年份为当前年份但当前日期在8月1日之后,代表已毕业,则返回0
return 0;
}
// 取绝对值
diffYear = Math.Abs(diffYear);
if (now.Date > new DateTime(now.Year, 8, 1))
{
// 如果当前日期在8月31日之后,说明已经进入新学年
diffYear--;
}
diffYear = diffYear * 10;
var baseYearValue = 0;
switch (gradeLevel)
{
case "初":
baseYearValue = 90;
break;
case "高":
baseYearValue = 120;
break;
default:
throw new BusinessException("未知年级值,年级转换值失败");
}
// 获取年级值
return baseYearValue - diffYear;
}
///
/// 获取学期阶段基础值
///
///
private static int GetSemesterValue()
{
DateTime now = DateTime.Today;
int month = now.Month;
int day = now.Day;
// 1月直接返回4
if (month == 1)
{
return 2;
}
// 2月、3月 或 4月1-25日 返回1
else if ((month == 2 || month == 3) || (month == 4 && day <= 25))
{
return 3;
}
// 4月26日-7月31日 返回2
else if ((month == 4 && day >= 26) || (month >= 5 && month <= 7))
{
return 4;
}
// 8月、 9月、10月 或 11月1-8日 返回3
else if ((month == 8 || month == 9 || month == 10) || (month == 11 && day <= 8))
{
return 1;
}
// 剩余情况(11月9日-12月31日)返回4
else
{
return 2;
}
}
}
}