using Edu.Common.API;
using Edu.Common.Enum.Course;
using Edu.Common.Plugin;
using Edu.Model.ViewModel.Course;
using Edu.Model.ViewModel.EduTask;
using Edu.Model.ViewModel.Grade;
using Edu.Module.Course;
using Edu.Module.EduTask;
using Edu.WebApi.Filter;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Edu.WebApi.Controllers.EduTask
{
///
/// 改变流程相关申请
///
[Route("api/[controller]/[action]")]
[ApiExceptionFilter]
[ApiController]
[EnableCors("AllowCors")]
public class ChangePlanController : BaseController
{
///
/// 调课处理类对象
///
private readonly ChangeClassPlanModule changeClassPlanModule = AOP.AOPHelper.CreateAOPObject();
///
/// 班级处理类对象
///
private readonly ClassModule classModule = AOP.AOPHelper.CreateAOPObject();
///
/// 新增修改班级调课
///
///
[HttpPost]
public ApiResult SetChangeClassPlan()
{
var model = new RB_Change_ClassPlan_ViewModel()
{
Id = base.ParmJObj.GetInt("Id"),
ClassId = base.ParmJObj.GetInt("ClassId"),
CourseId = base.ParmJObj.GetInt("CourseId"),
ChangeType = base.ParmJObj.GetInt("ChangeType"),
MoveType = base.ParmJObj.GetInt("MoveType"),
Remarks = base.ParmJObj.GetStringValue("Remarks")
};
if (model.ClassId <= 0)
{
return ApiResult.ParamIsNull(message: "请选择要调整的班级!");
}
var classModel = classModule.GetClassModule(model.ClassId);
string receiptFile = string.Empty;
try
{
List receiptFileList = JsonHelper.DeserializeObject>(base.ParmJObj.GetStringValue("ReceiptFileList"));
if (receiptFileList == null || !receiptFileList.Any())
{
receiptFile = "";
}
else
{
receiptFile = JsonHelper.Serialize(receiptFileList);
}
if (model.MoveType == 1)
{
model.OldChangePlanItemList = JsonHelper.DeserializeObject>(base.ParmJObj.GetStringValue("OldChangePlanItemList"));
model.NewChangePlanItemList = JsonHelper.DeserializeObject>(base.ParmJObj.GetStringValue("NewChangePlanItemList"));
}
else
{
if (model.ChangeType != 1)
{
string takeEffectTime = base.ParmJObj.GetStringValue("TakeEffectTime");
if (string.IsNullOrWhiteSpace(takeEffectTime))
{
return ApiResult.Failed("请选择生效日期");
}
model.TakeEffectTime = Convert.ToDateTime(takeEffectTime);
}
model.AllChangePlanModel = Common.Plugin.JsonHelper.DeserializeObject(base.ParmJObj.GetStringValue("AllChangePlanItem"));
}
}
catch (Exception ex)
{
Common.Plugin.LogHelper.Write(ex, "SetChangeClassPlan");
}
List timeList = new List();
//固定日期
if (model.MoveType == 1)
{
if (model.ChangeType == 1)//调课
{
if (model.OldChangePlanItemList.Count() != model.NewChangePlanItemList.Count())
{
return ApiResult.Failed("排课原次数与现有次数不一致");
}
}
else if (model.ChangeType == 2)
{
if (model.NewChangePlanItemList == null || !model.NewChangePlanItemList.Any() || model.NewChangePlanItemList.FirstOrDefault()?.TeacherId == 0)
{
return ApiResult.Failed("请选择老师");
}
}
else if (model.ChangeType == 3)
{
if (model.NewChangePlanItemList == null || !model.NewChangePlanItemList.Any() || model.NewChangePlanItemList.FirstOrDefault()?.ClassRoomId == 0)
{
return ApiResult.Failed("请选择教室");
}
}
//固定日期上课计划验证冲突
timeList = new List();
foreach (var item in model.NewChangePlanItemList)
{
foreach (var subItem in item.PlanTimeList)
{
timeList.Add(new TimeItem
{
StartTime = subItem.StartTime,
EndTime = subItem.EndTime,
});
}
}
if (Common.Config.IsOpenChangeClassVerify==1&&timeList != null && timeList.Count > 0)
{
var objList = changeClassPlanModule.GetRepeatListModule(model.ClassId, model.NewChangePlanItemList, timeList);
if (objList != null && objList.Count > 0)
{
return ApiResult.Failed("存在上课计划冲突的数据!", data: objList);
}
}
}
//全局修改
else
{
if (model.ChangeType == 1)
{
List dayList = new List();
if (model.AllChangePlanModel.DefaultTimeList != null && model.AllChangePlanModel.DefaultTimeList.Count > 0)
{
foreach (var rootItem in model.AllChangePlanModel.DefaultTimeList)
{
if (rootItem.DateList == null || (rootItem.DateList != null && rootItem.DateList.Count == 0))
{
return ApiResult.ParamIsNull(message: "请选择日期/周");
}
if (rootItem.DateList != null && rootItem.DateList.Count > 0)
{
dayList.AddRange(rootItem.DateList);
}
foreach (var item in rootItem.TimeList)
{
string message = "";
if (!Common.ConvertHelper.IsTime(item.StartTime + ":00"))
{
message = "【" + item.StartTime + "】格式不正确!(参考格式为 00:00)";
}
if (!Common.ConvertHelper.IsTime(item.EndTime + ":00"))
{
if (!string.IsNullOrEmpty(message))
{
message += ",";
}
message += "【" + item.EndTime + "】格式不正确!(参考格式为 00:00)";
}
var startDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + item.StartTime + ":00");
var endDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + item.EndTime + ":00");
TimeSpan span = endDate.Subtract(startDate);
if (item.TimeHour <= 0)
{
item.TimeHour = Convert.ToDecimal(span.TotalMinutes / classModule.GetBasicMinutesModule(model.Group_Id));
}
if (!string.IsNullOrEmpty(message))
{
return ApiResult.ParamIsNull(message: message);
}
}
}
var tempList = dayList.GroupBy(qitem => new { qitem }).Where(g => g.Count() > 1).Select(qitem => new { qitem.Key.qitem });
string message2 = "";
foreach (var sItem in tempList)
{
message2 += "," + sItem.qitem;
}
if (!string.IsNullOrEmpty(message2))
{
string tempStr = "";
if (model.AllChangePlanModel.ClassStyle == ClassStyleEnum.Week)
{
tempStr = "每周";
}
if (model.AllChangePlanModel.ClassStyle == ClassStyleEnum.Month)
{
tempStr = "每月";
}
if (model.AllChangePlanModel.ClassStyle == ClassStyleEnum.FixedDate)
{
tempStr = "固定日期";
}
return ApiResult.ParamIsNull(message: "学习时间段" + (tempStr) + message2.TrimStart(',') + "重复!");
}
}
else
{
return ApiResult.Failed("请输入排课信息");
}
if (classModel != null && classModel.ClassId > 0)
{ //获取课时分钟数
model.AllChangePlanModel.ClassHourMinute = classModel?.ClassHourMinute ?? 0;
//获取剩余总课时
model.AllChangePlanModel.ClassHours = (Convert.ToDecimal(classModel.ClassHours) - (classModule.GetClassFinishMinutesRepository(model.ClassId.ToString()).FirstOrDefault()?.FinishClassHours ?? 0));
model.AllChangePlanModel.TeacherId = classModel.Teacher_Id;
model.AllChangePlanModel.ClassRoomId = classModel.ClassRoomId;
}
else
{
return ApiResult.Failed("班级信息不存在");
}
var dateList = changeClassPlanModule.GetAllDateAndTimeRepeatListModule(model.ClassId, model.AllChangePlanModel, base.UserInfo);
if (Common.Config.IsOpenChangeClassVerify == 1 && dateList != null && dateList.Count > 0)
{
return ApiResult.Failed("存在上课计划冲突的数据!", data: dateList);
}
}
else if (model.ChangeType == 2)
{
if (model.AllChangePlanModel == null || model.AllChangePlanModel.TeacherId == 0)
{
return ApiResult.Failed("请选择老师");
}
var teacherlist = changeClassPlanModule.GetAllRepeatListModule(model.ClassId, Common.ConvertHelper.FormatDate(model.TakeEffectTime), TeacherId: model.AllChangePlanModel.TeacherId);
if (Common.Config.IsOpenChangeClassVerify == 1 && teacherlist != null && teacherlist.Count > 0)
{
return ApiResult.Failed("存在上课计划冲突的数据!", data: teacherlist);
}
}
else if (model.ChangeType == 3)
{
if (model.AllChangePlanModel == null || model.AllChangePlanModel.ClassRoomId == 0)
{
return ApiResult.Failed("请选择教室");
}
var classroomlist = changeClassPlanModule.GetAllRepeatListModule(model.ClassId, Common.ConvertHelper.FormatDate(model.TakeEffectTime), ClassRoomId: model.AllChangePlanModel.ClassRoomId);
if (Common.Config.IsOpenChangeClassVerify == 1 && classroomlist != null && classroomlist.Count > 0)
{
return ApiResult.Failed("存在上课计划冲突的数据!", data: classroomlist);
}
}
}
if (model.OldChangePlanItemList != null && model.OldChangePlanItemList.Any())
{
model.SourceData = JsonHelper.Serialize(model.OldChangePlanItemList);
}
else
{
model.SourceData = "";
}
if (model.MoveType == 2)//全局并且是调课的时候赋值
{
if (model.AllChangePlanModel != null)
{
model.TargetData = JsonHelper.Serialize(model.AllChangePlanModel);
}
else
{
model.TargetData = "";
}
}
else
{
if (model.NewChangePlanItemList != null && model.NewChangePlanItemList.Any())
{
model.TargetData = JsonHelper.Serialize(model.NewChangePlanItemList);
}
else
{
model.TargetData = "";
}
}
if (model.Id == 0)
{
model.CreateBy = base.UserInfo.Id;
model.CreateTime = DateTime.Now;
model.Group_Id = base.UserInfo.Group_Id;
model.School_Id = classModel.School_Id;
}
model.UpdateBy = base.UserInfo.Id;
model.UpdateTime = DateTime.Now;
bool flag = changeClassPlanModule.SetChangeClassPlanModule(model, receiptFile);
return flag ? ApiResult.Success() : ApiResult.Failed();
}
}
}