using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Edu.Common.API; using Edu.Common.Enum.Question; using Edu.Common.Plugin; using Edu.Model.ViewModel.Exam; using Edu.Model.ViewModel.Grade; using Edu.Model.ViewModel.User; using Edu.Module.Course; using Edu.Module.EduTask; using Edu.Module.Public; using Edu.Module.User; using Edu.WebApi.Filter; using Microsoft.AspNetCore.Cors; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json.Linq; namespace Edu.WebApi.Controllers.Applet { [Route("api/[controller]/[action]")] [ApiExceptionFilter] [ApiController] [EnableCors("AllowCors")] public class AppletIndexController : AppletBaseController { /// /// 学生管理处理类 /// private readonly StudentModule studentModule = new StudentModule(); /// /// 学生管理处理类 /// private readonly EducationContractModule educationContractModule = new EducationContractModule(); /// /// 班级管理处理类 /// private readonly ClassModule classModule = new ClassModule(); /// /// 课程处理类对象 /// private readonly CourseModule courseModule = AOP.AOPHelper.CreateAOPObject(); /// /// 教务单据处理类对象 /// private readonly EducationReceiptModule educationReceiptModule = AOP.AOPHelper.CreateAOPObject(); /// /// 试卷处理类对象 /// private readonly Module.Exam.PaperModule paperModule = AOP.AOPHelper.CreateAOPObject(); #region 小程序首页 /// /// 小程序首页 /// /// [HttpPost] public ApiResult GetIndexInfo() { var appletUserInfo = base.AppletUserInfo; //判断学员是否退学 var studentList = studentModule.GetStudentInfo(appletUserInfo.AccountId, appletUserInfo.Group_Id); if (studentList == null || !studentList.Any()) { return ApiResult.Failed(message: $"很抱歉,由于你已经退学,无法继续使用本系统", new { Error = 3 }); } RB_Student_ViewModel studentModel = new RB_Student_ViewModel(); studentModel = studentList.Where(x => x.ClassStatus == 2).FirstOrDefault(); if (studentModel == null || studentModel.StuId == 0) { studentModel = new RB_Student_ViewModel(); studentModel = studentList.Where(x => x.ClassStatus == 1).FirstOrDefault(); if (studentModel == null || studentModel.StuId == 0) { studentModel = new RB_Student_ViewModel(); studentModel = studentList.Where(x => x.ClassStatus == 3).FirstOrDefault(); } } //获取电子合同 GetStudentContractInfo var contractList = educationContractModule.GetStudentContractInfo(appletUserInfo.AccountId, appletUserInfo.Group_Id); var backClassList = educationContractModule.GetStudentBackClassInfo(appletUserInfo.AccountId, appletUserInfo.Group_Id); var classTimeList = classModule.GetClassTimeByClassId(studentModel.ClassId, appletUserInfo.Group_Id); var tempList = classTimeList.OrderBy(x => x.NewEndPlanDateTime).Where(x => x.ClassId == studentModel.ClassId && x.NewPlanDateTime.HasValue && System.DateTime.Now >= x.NewPlanDateTime.Value.AddMinutes(-10) && x.NewEndPlanDateTime.HasValue && System.DateTime.Now < x.NewEndPlanDateTime.Value.AddMinutes(30)); if (tempList == null || !tempList.Any()) { tempList = classTimeList.OrderBy(x => x.NewEndPlanDateTime).Where(x => x.ClassId == studentModel.ClassId && x.NewPlanDateTime.HasValue && System.DateTime.Now <= x.NewPlanDateTime.Value); } var classModel = tempList?.OrderBy(x => x.NewPlanDateTime).FirstOrDefault(); if (classModel == null || classModel.ClassTimeId == 0) { classModel = new Model.ViewModel.Grade.RB_Class_Time_Extend(); } #region 我的试卷 List examinationPublishList = new List(); if (studentModel != null && studentModel.GuestId > 0) { examinationPublishList = paperModule.GetGuestExaminationPublishPage(1, 5, out long rowsCount, new Model.ViewModel.Exam.RB_Examination_Publish_ViewModel { GuestId = studentModel.GuestId, Group_Id = studentModel.Group_Id }); if (examinationPublishList == null) { examinationPublishList = new List(); } else { foreach (var item in examinationPublishList) { if (item.ExamStartTime > System.DateTime.Now) { item.ExamStatusStr = "未开始"; } else if (item.ExamEndTime > System.DateTime.Now) { if (item.ExamStatus == 0) { item.ExamStatusStr = "缺考"; } else if (item.ExamStatus == 1) { item.ExamStatusStr = "完成"; } } else if (item.ExamStartTime < System.DateTime.Now && item.ExamEndTime > System.DateTime.Now) { item.ExamStatusStr = "已开始"; } } } } #endregion var result = new { studentModel.SName,//学区 studentModel.CourseName,//课程 studentModel.SurplusHours,//剩余时间 studentModel.TeacherName,//老师 studentModel.ClassId, studentModel.ClassName, studentModel.CourseId, studentModel.GuestId, EnterPhone = Cache.User.UserReidsCache.GetUserLoginInfo(studentModel.EnterID).UserMobile, ContractNum = (((contractList != null && contractList.Any()) ? contractList.Count() : 0) + ((backClassList != null && backClassList.Any()) ? backClassList.Count() : 0)),//合同数 ClassPlan = new //我的课表最新一个数据 { NewPlanDateTimeStr = (classModel.NewPlanDateTime.HasValue) ? classModel?.NewPlanDateTime.Value.ToString("yyyy-MM-dd") : "", TimeStr = (classModel.NewPlanDateTime.HasValue) ? Common.ConvertHelper.GetTimeStr(classModel.NewPlanDateTime.Value) : "", TimeStart = classModel.StartTime, classModel.TeacherName, TimeStatusStr = classModel.ClassStatus, }, paperList = examinationPublishList.Select(x => new { x.PaperId, x.Id, x.PaperName, x.PublishPic, ExamStartTime = x.ExamStartTime.ToString("yyyy-MM-dd HH:mm:ss"), x.ExamStatus, x.ExamStatusStr }) }; return ApiResult.Success("", result); } #endregion #region 我的课表 /// /// 老师上课计划统计 /// /// public ApiResult GetStundentPlanStatistical() { var startDate = base.ParmJObj.GetStringValue("StartTime"); var endDate = base.ParmJObj.GetStringValue("EndTime"); DateTime now = DateTime.Now; //获取当前月的第一天 DateTime d1 = new DateTime(now.Year, now.Month, 1); //当月最后一天 DateTime d2 = d1.AddMonths(1).AddDays(-1); if (string.IsNullOrEmpty(startDate)) { startDate = Common.ConvertHelper.FormatDate(d1); } if (string.IsNullOrEmpty(endDate)) { endDate = Common.ConvertHelper.FormatDate(d2); } else { //if (Convert.ToDateTime(endDate) > Convert.ToDateTime(Common.ConvertHelper.FormatDate(DateTime.Now))) //{ // endDate = Common.ConvertHelper.FormatDate(DateTime.Now); //} } RB_Class_ViewModel query = new RB_Class_ViewModel() { StartTime = startDate, EndTime = endDate, Group_Id = base.AppletUserInfo.Group_Id, School_Id = -1, ClassId = base.ParmJObj.GetInt("ClassId"), }; var list = classModule.GetStundentPlanModule(query); List chapterTreeList = new List(); if (list != null && list.Any()) { string rannkIds = string.Join(",", list.Select(x => x.Ranks));//查询章节信息 chapterTreeList = new CourseModule().GetMatchChapterRepository((list.FirstOrDefault()?.CourseId ?? 0), rannkIds); } DateTime startTime = Convert.ToDateTime(query.StartTime); DateTime endTime = Convert.ToDateTime(query.EndTime); TimeSpan sp = endTime.Subtract(startTime); List planListResult = new List(); for (int i = 0; i <= sp.Days; i++) { var plan = list.Where(x => x.ClassDate.ToString("yyyy-MM-dd") == startTime.AddDays(i).ToString("yyyy-MM-dd")); string DayTime = string.Empty; foreach (var itemGroup in plan) { itemGroup.Chapter = chapterTreeList.Where(x => x.ChapterNo == itemGroup.Ranks.ToString() || x.ChapterNo.Contains(itemGroup.Ranks.ToString() + ".")).ToList(); if (itemGroup.PlanTimeList != null && itemGroup.PlanTimeList.Any()) { itemGroup.PlanTimeList.ForEach(x => x.NewPlanDateTime = itemGroup.ClassDate.ToString("yyyy-MM-dd") + " " + x.StartTime); DayTime = itemGroup.PlanTimeList.Min(x => Convert.ToDateTime(x.NewPlanDateTime)).ToString("HH:ss"); itemGroup.PlanTimeList.ForEach(x => x.NewPlanDateTime = itemGroup.ClassDate.ToString("yyyy-MM-dd") + " " + x.EndTime); // DayTime = DayTime + "~" + itemGroup.PlanTimeList.Max(x => Convert.ToDateTime(x.NewPlanDateTime)).ToString("HH:ss"); } planListResult.Add(new { itemGroup.Chapter, DateYear = startTime.AddDays(i).ToString("yyyy"), DateMonth = startTime.AddDays(i).ToString("MM"), DateDay = startTime.AddDays(i).ToString("dd"), WeekStr = StringHelper.GetJapanWeekChar(startTime.AddDays(i)), ClassDateStr = startTime.AddDays(i).ToString("yyyy-MM-dd"), ClassName = plan.Where(x => x.ClassId == itemGroup.ClassId).FirstOrDefault()?.ClassName ?? "", itemGroup.ClassId, itemGroup.CourseId, PlanTimeList = itemGroup.PlanTimeList.Select(x => new { x.StartTime, x.EndTime, x.ClassPlanId, x.ClassTimeId, x.TimeHour, TeacherName = itemGroup.TeacherName ?? "", UserIcon = itemGroup.UserIcon ?? "", x.GuestList.Where(x => x.StudentId == base.AppletUserInfo.AccountId).FirstOrDefault()?.IsCheck, OrderGuestId = x.GuestList.Where(x => x.StudentId == base.AppletUserInfo.AccountId).FirstOrDefault()?.Id, IsLeave = Convert.ToDateTime(x.NewPlanDateTime) > DateTime.Now ? 1 : 0 }) }); } } return ApiResult.Success(data: planListResult); } #endregion #region 我的课程 /// /// 获取章节树形列表 /// /// [HttpPost] public ApiResult GetChapterTree() { var query = new Model.ViewModel.Course.RB_Course_Chapter_ViewModel() { CourseId = base.ParmJObj.GetInt("CourseId"), }; if (query.CourseId <= 0) { return ApiResult.ParamIsNull(message: "请传递课程编号!"); } query.Group_Id = base.AppletUserInfo.Group_Id; var list = courseModule.GetChapterTreeListModule(query); return ApiResult.Success(data: list); } #endregion #region 我的合同 public ApiResult GetContractList() { //获取电子合同 GetStudentContractInfo var contractList = educationContractModule.GetStudentContractInfo(base.AppletUserInfo.AccountId, base.AppletUserInfo.Group_Id); var backClassList = educationContractModule.GetStudentBackClassInfo(base.AppletUserInfo.AccountId, base.AppletUserInfo.Group_Id); List result = new List(); if (contractList != null && contractList.Any()) { foreach (var item in contractList) { var nowContractList = new { item.ContractNo, item.IsCompanySeal, Type = 1, item.Id }; result.Add(nowContractList); } } if (backClassList != null && backClassList.Any()) { foreach (var item in backClassList) { var nowContractList = new { Type = 2, ContractNo = item.ProtocolNum, item.IsCompanySeal, Id = item.BackClassProtocolId }; result.Add(nowContractList); } } return ApiResult.Success("", result); } #endregion #region 我的进度 /// /// 老师上课计划统计 /// /// public ApiResult GetStundentScheduleList() { RB_Class_ViewModel query = new RB_Class_ViewModel() { EndTime = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), Group_Id = base.AppletUserInfo.Group_Id, School_Id = -1, ClassId = base.ParmJObj.GetInt("ClassId"), }; var list = classModule.GetStundentScheduleList(query); List chapterTreeList = new List(); if (list != null && list.Any()) { string rannkIds = string.Join(",", list.Select(x => x.Ranks));//查询章节信息 chapterTreeList = new CourseModule().GetMatchChapterRepository((list.FirstOrDefault()?.CourseId ?? 0), rannkIds); } List result = new List(); foreach (var item in chapterTreeList) { //判断是否已经学习 var planModel = list.Where(x => item.ChapterNo == x.Ranks.ToString() || item.ChapterNo.Contains(x.Ranks.ToString() + ".")).FirstOrDefault(); int IsStudy = 0;//0-未学习,1-已学习 if (planModel != null && planModel.ClassPlanId > 0) { if (planModel.ClassDate < (Convert.ToDateTime(System.DateTime.Now.ToString("yyyy-MM-dd 00:00:00")))) { IsStudy = 1; } } result.Add(new { IsStudy, ChapterTreeInfo = item, }); } return ApiResult.Success(data: result); } #endregion #region 我的剩余课时 /// /// 老师上课计划统计 /// /// public ApiResult GetStundentSurplus() { RB_Class_ViewModel query = new RB_Class_ViewModel() { StartTime = System.DateTime.Now.AddDays(1).ToString("yyyy-MM-dd 00:00:00"), Group_Id = base.AppletUserInfo.Group_Id, School_Id = -1, ClassId = base.ParmJObj.GetInt("ClassId"), }; var list = classModule.GetStundentPlanModule(query); List planListResult = new List(); foreach (var itemGroup in list) { if (itemGroup.PlanTimeList != null && itemGroup.PlanTimeList.Any()) { itemGroup.PlanTimeList.ForEach(x => x.NewPlanDateTime = itemGroup.ClassDate.ToString("yyyy-MM-dd") + " " + x.StartTime); itemGroup.PlanTimeList.ForEach(x => x.NewPlanDateTime = itemGroup.ClassDate.ToString("yyyy-MM-dd") + " " + x.EndTime); } planListResult.Add(new { WeekStr = StringHelper.GetJapanWeekChar(itemGroup.ClassDate), ClassDateStr = itemGroup.ClassDate.ToString("yyyy-MM-dd"), TeacherName = itemGroup.TeacherName ?? "", UserIcon = itemGroup.UserIcon ?? "", RoomName = itemGroup.RoomName ?? "", PlanTimeList = itemGroup.PlanTimeList.Select(x => new { x.StartTime, x.EndTime, x.GuestList.Where(x => x.StudentId == base.AppletUserInfo.AccountId).FirstOrDefault()?.IsCheck, IsLeave = Convert.ToDateTime(x.NewPlanDateTime) > DateTime.Now ? 1 : 0 }) }); } return ApiResult.Success(data: planListResult); } #endregion #region 我的请假列表 /// /// 获取请假单据分页列表 /// /// [HttpPost] public ApiResult GetEducationReceiptPage() { var pageModel = Common.Plugin.JsonHelper.DeserializeObject(RequestParm.Msg.ToString()); var query = new Model.ViewModel.EduTask.EducationReceiptQuery() { Group_Id = base.AppletUserInfo.Group_Id, StartTime = base.ParmJObj.GetStringValue("StartTime"), EndTime = base.ParmJObj.GetStringValue("EndTime"), Conditon = Common.Enum.Course.EduReceiptConditionEnum.Launch, ReceiptType = 7, Title = base.ParmJObj.GetStringValue("Title") }; if (!string.IsNullOrEmpty(base.ParmJObj.GetStringValue("VerifyStatus"))) { query.VerifyStatus = base.ParmJObj.GetInt("VerifyStatus", -1); } var id = base.ParmJObj.GetInt("Id"); if (id > 0) { query.QIds = id.ToString(); } query.CreateBy = base.AppletUserInfo.Id; var list = educationReceiptModule.GetEducationReceiptPageModule(pageModel.PageIndex, pageModel.PageSize, out long rowsCount, query); pageModel.PageData = list; pageModel.Count = rowsCount; return ApiResult.Success(data: pageModel); } /// /// 获取教务单据类型 /// /// [HttpPost] public ApiResult GetEduReceiptInfo() { var Id = base.ParmJObj.GetInt("Id"); var Info = educationReceiptModule.GetEducationReceiptInfoModule(Id); return ApiResult.Success(data: Info); } /// /// 教务单据作废 /// /// [HttpPost] public ApiResult InvalidReceipt() { var Id = base.ParmJObj.GetInt("Id"); var flag = educationReceiptModule.InvalidReceiptModule(Id); return flag ? ApiResult.Success() : ApiResult.Failed(); } #endregion #region 我的考卷列表 /// /// 获取考卷列表分页列表 /// /// [HttpPost] public ApiResult GetGuestExaminationPublishPage() { var pageModel = Common.Plugin.JsonHelper.DeserializeObject(RequestParm.Msg.ToString()); var query = new Model.ViewModel.Exam.RB_Examination_Publish_ViewModel() { Group_Id = base.AppletUserInfo.Group_Id, ExamStatus = base.ParmJObj.GetInt("ExamStatus", 0), GuestId = base.ParmJObj.GetInt("GuestId", 0), }; var list = paperModule.GetGuestExaminationPublishPage(pageModel.PageIndex, pageModel.PageSize, out long rowsCount, query); foreach (var item in list) { if (item.ExamStartTime > System.DateTime.Now) { item.ExamStatusStr = "未开始"; } else if (item.ExamEndTime > System.DateTime.Now) { if (item.ExamStatus == 0) { item.ExamStatusStr = "缺考"; } else if (item.ExamStatus == 1) { item.ExamStatusStr = "完成"; } } else if (item.ExamStartTime < System.DateTime.Now && item.ExamEndTime > System.DateTime.Now) { item.ExamStatusStr = "已开始"; } } pageModel.PageData = list.Select(x => new { x.PaperId, x.Id, x.PaperName, x.PublishPic, ExamStartTime = Common.ConvertHelper.FormatTime(x.ExamStartTime), ExamEndTime = Common.ConvertHelper.FormatTime(x.ExamEndTime), x.ExamTimes, x.ExamStatus, x.ExamStatusStr }); pageModel.Count = rowsCount; return ApiResult.Success(data: pageModel); } /// /// 根据编号获取试卷信息 /// /// [HttpPost] public ApiResult GetPaperDetails() { var PaperId = base.ParmJObj.GetInt("PaperId"); var PublishId = base.ParmJObj.GetInt("PublishId"); var GuestId = base.ParmJObj.GetInt("GuestId", 0); var isShowAnswer = base.ParmJObj.GetBoolValue("isShowAnswer"); if (PublishId <= 0) { return ApiResult.ParamIsNull(message: "请传递考试编号!"); } if (GuestId <= 0) { return ApiResult.ParamIsNull(message: "请传递学员编号!"); } var data = paperModule.AppGetExamPaperInfoModule(PaperId, isShowAnswer: isShowAnswer, GuestId: GuestId, PublishId: PublishId); return ApiResult.Success(data: data); } /// /// 学生提交答卷 /// /// [HttpPost] public ApiResult StuSubmitExamPaper() { var PublishId = base.ParmJObj.GetInt("PublishId"); var GuestId = base.ParmJObj.GetInt("GuestId", 0); var PaperId = base.ParmJObj.GetInt("PaperId"); List paperDetailsList = new List(); string groups = base.ParmJObj.GetStringValue("GroupList"); if (!string.IsNullOrEmpty(groups)) { JArray jarray = JArray.Parse(groups); if (jarray != null && jarray.Count > 0) { foreach (var jItem in jarray) { JObject jobj = JObject.Parse(jItem.ToString()); string details = jobj.GetStringValue("DetailsList"); if (!string.IsNullOrEmpty(details)) { JArray subArray = JArray.Parse(details); int dSortNum = 0; foreach (var sItem in subArray) { JObject sObj = JObject.Parse(sItem.ToString()); var detailModel = new RB_Examination_Details_ViewModel() { Id = sObj.GetInt("PaperDetailsId"), PaperId = sObj.GetInt("PaperId"), BankId = sObj.GetInt("BankId"), QuestionId = sObj.GetInt("QuestionId"), Title = sObj.GetStringValue("Title"), QuestionContent = sObj.GetStringValue("QuestionContentObj"), DifficultyType = (DifficultyTypeEnum)sObj.GetInt("DifficultyType"), AnswerParse = sObj.GetStringValue("AnswerParse"), QuestionTypeId = sObj.GetInt("QuestionTypeId"), QuestionTypeKey = sObj.GetStringValue("QuestionTypeKey"), Knowledge = sObj.GetStringValue("Knowledge"), UpdateTime = DateTime.Now, IsUpdateJobExam = sObj.GetInt("IsUpdateJobExam"), Status = Common.Enum.DateStateEnum.Normal, SortNum = dSortNum, StundetAnswer = sObj.GetStringValue("StundetAnswer"), IsMutex = sObj.GetInt("IsMutex"), StundetDetailsId = sObj.GetInt("StundetDetailsId"), LevelType = (LevelTypeEnum)sObj.GetInt("LevelType"), Answer=sObj.GetStringValue("Answer"), StuPaperGroupId= jobj.GetInt("GId"), Score=sObj.GetDecimal("Score"), }; paperDetailsList.Add(detailModel); } } } } } int Group_Id = base.ParmJObj.GetInt("Group_Id"); if (Group_Id <= 0) { Group_Id = base.AppletUserInfo.Group_Id; } var result = paperModule.SetStuExamPaperDetailsModule(PublishId, GuestId,PaperId, Group_Id, paperDetailsList); return result ? ApiResult.Success("提交试卷成功") : ApiResult.Failed("提交试卷失败"); } #endregion } }