|
|
@@ -692,7 +692,7 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
|
|
|
List<ClassTimeStatisticsRecord> insertList = new ArrayList<>();
|
|
|
List<ClassCourseTimeStatisticsRecord> insertCourseList = new ArrayList<>();
|
|
|
|
|
|
- List<ClassCourseTimeStatisticsSet> classCourseTimeStatisticsSetList = statisticsCourseSetService.list();
|
|
|
+ List<ClassCourseTimeStatisticsSet> classCourseTimeStatisticsSetList = statisticsCourseSetService.list(Wrappers.<ClassCourseTimeStatisticsSet>lambdaQuery().eq(ClassCourseTimeStatisticsSet::getCategory,2));
|
|
|
|
|
|
//循环教师,准备开始计算
|
|
|
for (TeacherListVo teacher : teacherList) {
|
|
|
@@ -1476,6 +1476,211 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
|
|
|
List<CourseListVo> allCourseList = this.baseMapper.getCourseList(statistics);
|
|
|
allCourseList.addAll(this.baseMapper.getHolidayReplaceCourseList(statistics));
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+ //查询删除课时的数据,将每个班删除的具体日期统计出来
|
|
|
+ List<ClassTimeDelete> deleteList = deleteService.list(
|
|
|
+ new QueryWrapper<ClassTimeDelete>().lambda()
|
|
|
+ .ne(ClassTimeDelete::getStatus, 2)
|
|
|
+ .eq(ClassTimeDelete::getDeleteMark, DeleteMark.NODELETE.getCode())
|
|
|
+ .eq(ClassTimeDelete::getEnabledMark, EnabledMark.ENABLED.getCode())
|
|
|
+ );
|
|
|
+ Map<Long, List<ClassTimeDelete>> deleteDataMap = deleteList.stream().collect(Collectors.groupingBy(ClassTimeDelete::getClassId));
|
|
|
+ Map<Long, Map<LocalDate, String>> deleteMap = new HashMap<>();//将每个班级计算出来所有被删除的日期存入map
|
|
|
+ for (Long classId : deleteDataMap.keySet()) {
|
|
|
+ Map<LocalDate, String> dateMap = new HashMap<>();
|
|
|
+ for (ClassTimeDelete classTimeDelete : deleteDataMap.get(classId)) {
|
|
|
+ LocalDate currentDate = classTimeDelete.getStartDate();
|
|
|
+ while (!currentDate.isAfter(classTimeDelete.getEndDate())) {
|
|
|
+ dateMap.put(currentDate, classTimeDelete.getTimePeriod());
|
|
|
+ currentDate = currentDate.plusDays(1); // 增加一天
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //去重并存到map中
|
|
|
+ deleteMap.put(classId, dateMap);
|
|
|
+ }
|
|
|
+ JsonParser parser = new JsonParser();
|
|
|
+
|
|
|
+ //权重设置jsonArray
|
|
|
+ JsonArray weightSetArray = parser.parse(statistics.getWeightSetJson()).getAsJsonArray();
|
|
|
+ Map<String, Double> weightLabelMap = new LinkedHashMap<>();
|
|
|
+ Map<String, Double> weightFieldMap = new LinkedHashMap<>();
|
|
|
+ for (JsonElement jsonElement : weightSetArray) {
|
|
|
+ JsonObject object = jsonElement.getAsJsonObject();
|
|
|
+ weightLabelMap.put(object.get("label").getAsString(), object.get("value").getAsDouble());
|
|
|
+ weightFieldMap.put(object.get("field").getAsString(), object.get("value").getAsDouble());
|
|
|
+ }
|
|
|
+
|
|
|
+ //查询行政工作量并转成map
|
|
|
+ List<ClassTimeStatisticsAdministration> administrationList = administrationMapper.selectList(
|
|
|
+ new QueryWrapper<ClassTimeStatisticsAdministration>().lambda()
|
|
|
+ .eq(ClassTimeStatisticsAdministration::getClassTimeStatisticsId, statistics.getId())
|
|
|
+ .eq(ClassTimeStatisticsAdministration::getDeleteMark, DeleteMark.NODELETE.getCode())
|
|
|
+ .eq(ClassTimeStatisticsAdministration::getEnabledMark, EnabledMark.ENABLED.getCode())
|
|
|
+ );
|
|
|
+ Map<Long, Double> administrationMap = administrationList.stream().collect(Collectors.toMap(ClassTimeStatisticsAdministration::getUserId, ClassTimeStatisticsAdministration::getWorkload));
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ List<ClassTimeStatisticsRecord> insertList = new ArrayList<>();
|
|
|
+ List<ClassCourseTimeStatisticsRecord> insertCourseList = new ArrayList<>();
|
|
|
+ List<ClassCourseTimeStatisticsSet> classCourseTimeStatisticsSetList = statisticsCourseSetService.list(Wrappers.<ClassCourseTimeStatisticsSet>lambdaQuery().eq(ClassCourseTimeStatisticsSet::getCategory,3));
|
|
|
+
|
|
|
+
|
|
|
+ for (TeacherListVo teacher : teacherList) {
|
|
|
+ ClassTimeStatisticsRecord record = new ClassTimeStatisticsRecord();
|
|
|
+ record.setUserId(teacher.getId());
|
|
|
+ record.setClassTimeStatisticsId(statistics.getId());
|
|
|
+ record.setEmployType(teacher.getEmployType());
|
|
|
+ record.setClassTime1(statistics.getWeeks());
|
|
|
+
|
|
|
+ //早自习、正课、晚辅、顶课、调课
|
|
|
+ Double classTime7 = 0D, classTime8 = 0D, classTime9 = 0D;
|
|
|
+
|
|
|
+ List<String> zkList = Arrays.asList("上1", "上2", "上3", "上4", "下1", "下2", "下3", "下4");
|
|
|
+ List<String> wzxList = Arrays.asList("晚1", "晚2", "晚3");
|
|
|
+ //查询出老师的课程
|
|
|
+ List<CourseListVo> courseList = allCourseList.stream()
|
|
|
+ .filter(x -> x.getTeacherId().contains(teacher.getId().toString()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ //循环,统计出各项数据
|
|
|
+ for (CourseListVo courseListVo : courseList) {
|
|
|
+ Map<LocalDate, String> deleteDates = deleteMap.get(courseListVo.getClassId());
|
|
|
+ if (deleteDates != null && deleteDates.containsKey(courseListVo.getScheduleDate()) && deleteDates.get(courseListVo.getScheduleDate()) != null
|
|
|
+ && deleteDates.get(courseListVo.getScheduleDate()).contains(courseListVo.getTimeNumber())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ ClassCourseTimeStatisticsRecord classCourseTimeStatisticsRecord = checkCourseSet(classCourseTimeStatisticsSetList, insertCourseList, courseListVo.getClassId(), courseListVo.getCourseId(), teacher);
|
|
|
+
|
|
|
+ if (classCourseTimeStatisticsRecord != null) {
|
|
|
+ //早自习、正课、晚辅
|
|
|
+ Double _classTime8 = classCourseTimeStatisticsRecord.getClassTime8(),
|
|
|
+ _classTime9 = classCourseTimeStatisticsRecord.getClassTime9();
|
|
|
+
|
|
|
+ //费用设置jsonArray
|
|
|
+ JsonArray _weightLabelArray = parser.parse(classCourseTimeStatisticsRecord.getCostSetJson()).getAsJsonArray();
|
|
|
+ Map<String, Double> _weightLabelMap = new LinkedHashMap<>();
|
|
|
+ for (JsonElement jsonElement : _weightLabelArray) {
|
|
|
+ JsonObject object = jsonElement.getAsJsonObject();
|
|
|
+ _weightLabelMap.put(object.get("label").getAsString(), object.get("value").getAsDouble());
|
|
|
+ }
|
|
|
+
|
|
|
+ if ("早自习".equals(courseListVo.getShortName())) {
|
|
|
+ _classTime8 += _weightLabelMap.get(courseListVo.getShortName()) == null ? 0d : _weightLabelMap.get(courseListVo.getShortName());
|
|
|
+ classTime8 += _weightLabelMap.get(courseListVo.getShortName()) == null ? 0d : _weightLabelMap.get(courseListVo.getShortName());
|
|
|
+ } else if (zkList.contains(courseListVo.getShortName())) {
|
|
|
+ _classTime8 += _weightLabelMap.get(courseListVo.getShortName()) == null ? 0d : _weightLabelMap.get(courseListVo.getShortName());
|
|
|
+ classTime8 += _weightLabelMap.get(courseListVo.getShortName()) == null ? 0d : _weightLabelMap.get(courseListVo.getShortName());
|
|
|
+ } else if (wzxList.contains(courseListVo.getShortName())) {
|
|
|
+ _classTime9 += _weightLabelMap.get(courseListVo.getShortName()) == null ? 0d : _weightLabelMap.get(courseListVo.getShortName());
|
|
|
+ classTime9 += _weightLabelMap.get(courseListVo.getShortName()) == null ? 0d : _weightLabelMap.get(courseListVo.getShortName());
|
|
|
+ }
|
|
|
+
|
|
|
+ classCourseTimeStatisticsRecord.setClassTime8(_classTime8);
|
|
|
+ classCourseTimeStatisticsRecord.setClassTime9(_classTime9);
|
|
|
+
|
|
|
+ Double _llClassTime = _classTime8 + _classTime9;
|
|
|
+
|
|
|
+ classCourseTimeStatisticsRecord.setAllClassTime(_llClassTime);
|
|
|
+
|
|
|
+ } else {
|
|
|
+ if ("早自习".equals(courseListVo.getShortName())) {
|
|
|
+ classTime8 += weightLabelMap.get(courseListVo.getShortName()) == null ? 0d : weightLabelMap.get(courseListVo.getShortName());
|
|
|
+ } else if (zkList.contains(courseListVo.getShortName())) {
|
|
|
+ classTime8 += weightLabelMap.get(courseListVo.getShortName()) == null ? 0d : weightLabelMap.get(courseListVo.getShortName());
|
|
|
+ } else if (wzxList.contains(courseListVo.getShortName())) {
|
|
|
+ classTime9 += weightLabelMap.get(courseListVo.getShortName()) == null ? 0d : weightLabelMap.get(courseListVo.getShortName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ record.setClassTime7(classTime7);
|
|
|
+ record.setClassTime8(classTime8);
|
|
|
+ record.setClassTime9(classTime9);
|
|
|
+ //计算总课时:正课课时+晚辅
|
|
|
+ Double allTimes = classTime8 + classTime9;
|
|
|
+ record.setAllClassTime(allTimes);
|
|
|
+ //计算周平均课时:总课时÷总周次
|
|
|
+ double classTime2 = BigDecimal.valueOf(allTimes).divide(BigDecimal.valueOf(record.getClassTime1()), 2, RoundingMode.HALF_UP).doubleValue();
|
|
|
+ record.setClassTime2(classTime2);
|
|
|
+ //行政工作量
|
|
|
+ record.setClassTime3(administrationMap.get(record.getUserId()));
|
|
|
+
|
|
|
+ //总平均课时
|
|
|
+ Double classTime4 = (record.getClassTime3() == null ? 0D : record.getClassTime3()) + (record.getClassTime2() == null ? 0D : record.getClassTime2());
|
|
|
+ record.setClassTime4(classTime4);
|
|
|
+
|
|
|
+ Double time13 = weightFieldMap.get("time13");
|
|
|
+ if (classTime4 > time13) {
|
|
|
+ record.setClassTime5(time13);
|
|
|
+ } else {
|
|
|
+ record.setClassTime5(classTime4);
|
|
|
+ }
|
|
|
+
|
|
|
+ insertList.add(record);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!insertList.isEmpty()) {
|
|
|
+ Double overWorkloadNumber = statistics.getOverWorkloadNumber() == null ? 0D : statistics.getOverWorkloadNumber();
|
|
|
+ Double time14 = weightFieldMap.get("time14");//工作量得分
|
|
|
+ Double time13 = weightFieldMap.get("time13");//超工作量得分
|
|
|
+ if (statistics.getOverWorkloadNumberStatus() != 1) {
|
|
|
+ //取出最大总平均课时
|
|
|
+ Double maxClassTime4 = insertList.stream().mapToDouble(ClassTimeStatisticsRecord::getClassTime4).max().getAsDouble();
|
|
|
+ //计算超工作量基数
|
|
|
+ if (!maxClassTime4.equals(time13)) {
|
|
|
+
|
|
|
+ overWorkloadNumber = BigDecimal.valueOf(time14).divide((BigDecimal.valueOf(maxClassTime4).subtract(BigDecimal.valueOf(time13))), 2, RoundingMode.HALF_UP).doubleValue();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ double allClassTime = insertList.stream().filter(x -> x.getAllClassTime() != null).mapToDouble(ClassTimeStatisticsRecord::getAllClassTime).sum();
|
|
|
+ statistics.setAllClassTime(allClassTime);
|
|
|
+ statistics.setOverWorkloadNumber(overWorkloadNumber);
|
|
|
+ //先删除
|
|
|
+ String sql = "delete from class_time_statistics_record where class_time_statistics_id = " + statistics.getId();
|
|
|
+ SqlRunnerAdapter.db().delete(sql);
|
|
|
+ for (ClassTimeStatisticsRecord record : insertList) {
|
|
|
+ if (overWorkloadNumber != 0D && time13 < record.getClassTime4()) {
|
|
|
+ double classTime6 = BigDecimal.valueOf(record.getClassTime4())
|
|
|
+ .subtract(BigDecimal.valueOf(time13))
|
|
|
+ .multiply(BigDecimal.valueOf(overWorkloadNumber)).doubleValue();
|
|
|
+ if (classTime6 > 0d) {
|
|
|
+ record.setClassTime6(classTime6);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ recordMapper.insert(record);
|
|
|
+ }
|
|
|
+
|
|
|
+ sql = "delete from class_course_time_statistics_record where class_time_statistics_id = " + statistics.getId();
|
|
|
+ SqlRunnerAdapter.db().delete(sql);
|
|
|
+ for (ClassCourseTimeStatisticsRecord record : insertCourseList) {
|
|
|
+ recordCourseMapper.insert(record);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ Log.error(e.getMessage(), e);
|
|
|
+ throw new MyException("刷新统计出错,请联系管理员");
|
|
|
+ } finally {
|
|
|
+ statistics.setStatus(1);
|
|
|
+ this.updateById(statistics);
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ public Boolean refreshCourseRecordOld(ClassTimeStatistics statistics) {
|
|
|
+ try {
|
|
|
+ // 1、查询教师
|
|
|
+ List<TeacherListVo> teacherList = this.baseMapper.getTeacherList();
|
|
|
+
|
|
|
+ //查询课程数据,排除开节假日的数据
|
|
|
+ List<CourseListVo> allCourseList = this.baseMapper.getCourseList(statistics);
|
|
|
+ allCourseList.addAll(this.baseMapper.getHolidayReplaceCourseList(statistics));
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
//查询删除课时的数据,将每个班删除的具体日期统计出来
|
|
|
List<ClassTimeDelete> deleteList = deleteService.list(
|
|
|
new QueryWrapper<ClassTimeDelete>().lambda()
|