//[ValidateAntiForgeryToken] public JsonResult GetTeacherOfficeHourStatistics(ClassHourStatisticsInput input) { var result = _teacherOfficeHoursStatisticsAppService.GetClassHourStatistics(input).Items; var totalDuration = 0.0M; var beginTimeDay = input.BeginTime.Day; var endTimeDay = input.EndTime.Day; decimal[] classHoursArray = new decimal[endTimeDay - beginTimeDay + 1]; int index = 0; for (int i = beginTimeDay - 1; i < endTimeDay; i++) { var duration = 0.0M; classHoursArray[index] = duration; if (result.Any(v => v.EndTime.Day == i + 1)) { var maxEndTime = result.Where(r => r.EndTime.Day == i + 1).Max(t => t.EndTime); var minBeginTime = result.Where(r => r.EndTime.Day == i + 1).Min(t => t.BeginTime); var totalMinutes = (maxEndTime - minBeginTime).TotalMinutes; duration = decimal.Round(Convert.ToDecimal(totalMinutes) / 60, 1); // duration = decimal.Round(result.Where(r => r.EndTime.Day == i + 1).Sum(c => c.Duration) / 60, 1); classHoursArray[index] = duration; } totalDuration += classHoursArray[index]; index++; } ResultData data = new ResultData(); data.returnData = new Dictionary <string, object> { { "durations", classHoursArray },// durations.ToArray() { "total", totalDuration } }; return(Json(data, JsonRequestBehavior.AllowGet)); }
//[ValidateAntiForgeryToken] public JsonResult GetTeacherClassHourStatistics(ClassHourStatisticsInput input) { var result = _teacherClassHoursStatisticsAppService.GetClassHourStatistics(input).Items; var classResult = result.Where(r => r.ClassType == CourseManagerConsts.ClassClassType && r.Type != CourseManagerConsts.NoCourseSignInRecordType).ToList(); var one2OneResult = result.Where(r => r.ClassType == CourseManagerConsts.One2OneClassType && r.Type != CourseManagerConsts.NoCourseSignInRecordType).ToList(); List <decimal> durations = new List <decimal>(); var totalDuration = result.Where(r => r.Type != CourseManagerConsts.NoCourseSignInRecordType).Sum(r => r.Duration); var one2oneDuration = one2OneResult.Sum(r => r.Duration); var classDuration = classResult.Sum(r => r.Duration); var beginTimeDay = input.BeginTime.Day; var endTimeDay = input.EndTime.Day; decimal[] classHoursArray = new decimal[endTimeDay - beginTimeDay + 1]; //取得的值是大于等于开始时间 小于结束时间 decimal[] one2OneDurationsArray = new decimal[endTimeDay - beginTimeDay + 1]; decimal[] classCourseDurationsArray = new decimal[endTimeDay - beginTimeDay + 1]; int index = 0; for (int i = beginTimeDay - 1; i < endTimeDay; i++) { var duration = 0.0M; classHoursArray[index] = duration; if (result.Any(v => v.EndTime.Day == i + 1)) { duration = decimal.Round(result.Where(r => r.EndTime.Day == i + 1).Sum(c => c.Duration) / 60, 1); classHoursArray[index] = duration; } if (one2OneResult.Any(v => v.EndTime.Day == i + 1)) { one2OneDurationsArray[index] = decimal.Round(one2OneResult.Where(r => r.EndTime.Day == i + 1).Sum(c => c.Duration) / 60, 1); } if (classResult.Any(v => v.EndTime.Day == i + 1)) { classCourseDurationsArray[index] = decimal.Round(classResult.Where(r => r.EndTime.Day == i + 1).Sum(c => c.Duration) / 60, 1); } index++; } ResultData data = new ResultData(); data.returnData = new Dictionary <string, object> { { "durations", classHoursArray },// durations.ToArray() { "one2OneDurations", one2OneDurationsArray }, { "classCourseDurations", classCourseDurationsArray }, { "total", decimal.Round(totalDuration / 60, 1) }, { "one2oneDuration", decimal.Round(one2oneDuration / 60, 1) }, { "classDuration", decimal.Round(classDuration / 60, 1) } }; return(Json(data, JsonRequestBehavior.AllowGet)); }
//[ValidateAntiForgeryToken] public JsonResult GetPayCalculation(ClassHourStatisticsInput input) { var result = _teacherClassHoursStatisticsAppService.GetClassHourStatistics(input).Items; /*说明: * --续学人数 通过group统计 某个学生上课总时长 是否达到15 * --基本工资 通过计算总课时 是否达到70 如果达到了 其他的一些福利 再进行计算,如果在40-70之间就只是拿到底薪4k * --早课和晚课通过 上课开始时间是否小于早上七点半 和开始时间是否大于晚上七点 进行统计 * --1对1课时数和班级数 通过课程类型来统计 * --外派次数 通过上课类型来统计 * --学生当前月上课是否80%达标,防止学生随意请假,影响老师收益(如果学生当月需要上课20小时,然后请假次数太多导致不够80% 也就是不够16个小时 那么缺少的课时按照正常课时的80%费用收取 如仅仅上了8个小时,那么就是缺少8个小时也就是需要补贴老师8*50*0.8=320元) 这里暂只处理 1对1 * --统计输出的话 就是按照自定义的格式综合输出 */ var classResult = result.Where(r => r.ClassType == CourseManagerConsts.ClassClassType && r.Type != CourseManagerConsts.NoCourseSignInRecordType).ToList(); var one2OneResult = result.Where(r => r.ClassType == CourseManagerConsts.One2OneClassType && r.Type != CourseManagerConsts.NoCourseSignInRecordType).ToList(); List <decimal> durations = new List <decimal>(); var totalDuration = decimal.Round(result.Sum(r => r.Duration) / 60, 1); var one2oneDuration = one2OneResult.Sum(r => r.Duration); var classDuration = classResult.Sum(r => r.Duration); var beginTimeDay = input.BeginTime.Day; var endTimeDay = input.EndTime.Day; decimal[] classHoursArray = new decimal[endTimeDay - beginTimeDay + 1]; //取得的值是大于等于开始时间 小于结束时间 decimal[] one2OneDurationsArray = new decimal[endTimeDay - beginTimeDay + 1]; decimal[] classCourseDurationsArray = new decimal[endTimeDay - beginTimeDay + 1]; PayCalculationViewModel vm = new PayCalculationViewModel(); var totalOfficeHours = 0.0M; for (int i = beginTimeDay - 1; i < endTimeDay; i++) { var duration = 0.0M; classHoursArray[i] = duration; if (result.Any(v => v.EndTime.Day == i + 1)) { duration = decimal.Round(result.Where(r => r.EndTime.Day == i + 1).Sum(c => c.Duration) / 60, 1); classHoursArray[i] = duration; } if (one2OneResult.Any(v => v.EndTime.Day == i + 1)) { one2OneDurationsArray[i] = decimal.Round(one2OneResult.Where(r => r.EndTime.Day == i + 1).Sum(c => c.Duration) / 60, 1); } if (classResult.Any(v => v.EndTime.Day == i + 1)) { classCourseDurationsArray[i] = decimal.Round(classResult.Where(r => r.EndTime.Day == i + 1).Sum(c => c.Duration) / 60, 1); } var totalMinutes = 0.0; if (result.Any(r => r.EndTime.Day == i + 1)) { var maxEndTime = result.Where(r => r.EndTime.Day == i + 1).Max(t => t.EndTime); var minBeginTime = result.Where(r => r.EndTime.Day == i + 1).Min(t => t.BeginTime); totalMinutes = (maxEndTime - minBeginTime).TotalMinutes; } totalOfficeHours += decimal.Round(Convert.ToDecimal(totalMinutes) / 60, 1); } vm.TeacherName = string.IsNullOrEmpty(input.TeacherName) ? "胡盼" : input.TeacherName; decimal basicSalary = CourseManagerConsts.BasicSalary; //底薪说明:20小时以下2000元,20小时~40小时3000元,40以上4000元 if (totalDuration < CourseManagerConsts.BasicSalaryHours) { if (totalDuration < 20) { basicSalary = 2000; } else if (totalDuration > 20 && totalDuration < 40) { basicSalary = 3000; } } vm.BasicSalary = basicSalary; vm.One2OneDuration = decimal.Round(one2oneDuration / 60, 1); vm.ClassDuration = decimal.Round(classDuration / 60, 1); vm.TotalDuration = totalDuration; vm.EarlyCourseTimes = result.Where(r => r.BeginTime.Hour <= CourseManagerConsts.EarlyHour).Count(); vm.NightCourseTimes = result.Where(r => r.BeginTime.Hour >= CourseManagerConsts.NigthHour).Count(); vm.AssignmentTimes = result.Where(r => r.CourseAddressType == CourseManagerConsts.OutSideCourseType).Count(); //外派 vm.OfficeHours = totalOfficeHours; vm.AllOfficeHoursBonus = totalOfficeHours >= CourseManagerConsts.JuneOfficeHours ? CourseManagerConsts.AllOfficeHoursBonus : 0.0M; #region 统计各个学生当前月需要上课多少个小时 以及续学学生 CountUpStudentCourses(input, result, vm); #endregion ResultData data = new ResultData() { returnData = new Dictionary <string, object> { { "result", vm } } }; return(Json(data, JsonRequestBehavior.AllowGet)); }