|
|
@@ -21,9 +21,11 @@ import com.xjrsoft.common.utils.VoToColumnUtil;
|
|
|
import com.xjrsoft.module.classtime.dto.AddClassTimeStatisticsDto;
|
|
|
import com.xjrsoft.module.classtime.dto.CourseRecordDto;
|
|
|
import com.xjrsoft.module.classtime.entity.*;
|
|
|
+import com.xjrsoft.module.classtime.mapper.ClassCourseTimeStatisticsRecordMapper;
|
|
|
import com.xjrsoft.module.classtime.mapper.ClassTimeStatisticsAdministrationMapper;
|
|
|
import com.xjrsoft.module.classtime.mapper.ClassTimeStatisticsMapper;
|
|
|
import com.xjrsoft.module.classtime.mapper.ClassTimeStatisticsRecordMapper;
|
|
|
+import com.xjrsoft.module.classtime.service.IClassCourseTimeStatisticsSetService;
|
|
|
import com.xjrsoft.module.classtime.service.IClassTimeDeleteService;
|
|
|
import com.xjrsoft.module.classtime.service.IClassTimeStatisticsService;
|
|
|
import com.xjrsoft.module.classtime.service.IClassTimeStatisticsSetService;
|
|
|
@@ -67,6 +69,9 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
|
|
|
private final ClassTimeStatisticsMapper statisticsMapper;
|
|
|
|
|
|
private final ClassTimeStatisticsRecordMapper recordMapper;
|
|
|
+ private final ClassCourseTimeStatisticsRecordMapper recordCourseMapper;
|
|
|
+
|
|
|
+ private final IClassCourseTimeStatisticsSetService statisticsCourseSetService;
|
|
|
|
|
|
private final IClassTimeStatisticsSetService statisticsSetService;
|
|
|
|
|
|
@@ -238,6 +243,384 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
|
|
|
* 4、查询补班日期下的所有课程
|
|
|
* 5、属于节假日的课程不查询
|
|
|
*/
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Boolean refreshRecordNew(ClassTimeStatistics statistics) {
|
|
|
+ try {
|
|
|
+ // 1、查询教师
|
|
|
+ List<TeacherListVo> teacherList = this.baseMapper.getTeacherList();
|
|
|
+ // 2、查询补课课时
|
|
|
+ List<DictionaryDetail> CourseTimeTypeList = dictionaryService.list(
|
|
|
+ new QueryWrapper<DictionaryDetail>().lambda()
|
|
|
+ .eq(DictionaryDetail::getItemId, 1833772737004875778L)
|
|
|
+ .eq(DictionaryDetail::getDeleteMark, DeleteMark.NODELETE.getCode())
|
|
|
+ .eq(DictionaryDetail::getEnabledMark, EnabledMark.ENABLED.getCode())
|
|
|
+ .orderByAsc(DictionaryDetail::getCode)
|
|
|
+ );
|
|
|
+ Map<String, String> CourseTimeTypeMap = CourseTimeTypeList.stream().collect(Collectors.toMap(DictionaryDetail::getCode, DictionaryDetail::getName));
|
|
|
+ List<WfTeacherCourseTime> courseTimeList = this.baseMapper.getWfTeacherCourseTimeList(statistics);
|
|
|
+ //按照课时补充类型分类统计
|
|
|
+ Map<String, List<WfTeacherCourseTime>> courseTimeMap = courseTimeList.stream().collect(Collectors.groupingBy(WfTeacherCourseTime::getCourseTimeType));
|
|
|
+ JsonParser parser = new JsonParser();
|
|
|
+
|
|
|
+ //费用设置jsonArray
|
|
|
+ JsonArray costSetArray = parser.parse(statistics.getCostSetJson()).getAsJsonArray();
|
|
|
+ Map<String, Double> costSetMap = new LinkedHashMap<>();
|
|
|
+ for (JsonElement jsonElement : costSetArray) {
|
|
|
+ JsonObject object = jsonElement.getAsJsonObject();
|
|
|
+ costSetMap.put(object.get("field").getAsString(), object.get("value").getAsDouble());
|
|
|
+ }
|
|
|
+
|
|
|
+ //权重设置jsonArray
|
|
|
+ JsonArray weightSetArray = parser.parse(statistics.getWeightSetJson()).getAsJsonArray();
|
|
|
+ Map<String, Double> weightSetMap = new LinkedHashMap<>();
|
|
|
+ for (JsonElement jsonElement : weightSetArray) {
|
|
|
+ JsonObject object = jsonElement.getAsJsonObject();
|
|
|
+ weightSetMap.put(object.get("label").getAsString(), object.get("value").getAsDouble());
|
|
|
+ }
|
|
|
+ //计算出这个时间段内一共多少周
|
|
|
+ List<WeekTimeRangeVo> weekTimeRangeVos = calculateNaturalWeeks(statistics.getStartDate(), statistics.getEndDate());
|
|
|
+ //取出所有的日期
|
|
|
+ List<LocalDate> allDateList = getDatesBetween(statistics.getStartDate(), statistics.getEndDate());
|
|
|
+ //查询课程数据,排除开节假日的数据
|
|
|
+ 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::getEnabledMark, EnabledMark.ENABLED.getCode())
|
|
|
+ .eq(ClassTimeDelete::getDeleteMark, DeleteMark.NODELETE.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);
|
|
|
+ }
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
+
|
|
|
+ //查询所有老师发起顶课通过的数量,也要分别计算早自习、晚自习、正课、如果日期出入课时删除中,也需要跳过
|
|
|
+ List<CourseListVo> allSubstituteList = this.baseMapper.getSubstituteList(statistics);
|
|
|
+ List<ClassTimeStatisticsRecord> insertList = new ArrayList<>();
|
|
|
+ //循环教师,准备开始计算
|
|
|
+ for (TeacherListVo teacher : teacherList) {
|
|
|
+ ClassTimeStatisticsRecord record = new ClassTimeStatisticsRecord();
|
|
|
+ record.setUserId(teacher.getId());
|
|
|
+ record.setClassTimeStatisticsId(statistics.getId());
|
|
|
+ record.setEmployType(teacher.getEmployType());
|
|
|
+
|
|
|
+ JsonArray allClassTimeDataArray = new JsonArray();
|
|
|
+
|
|
|
+ Double allClassTime = 0D;
|
|
|
+ //计算补充课时,算作正课课时,但是计算超出课时时不计算这部分
|
|
|
+ JsonObject courseTimeTypeJson = new JsonObject();
|
|
|
+ Double courseTimeTypeTime = 0D;
|
|
|
+ for (String courseTimeType : CourseTimeTypeMap.keySet()) {
|
|
|
+ List<WfTeacherCourseTime> courseTimes = courseTimeMap.get(courseTimeType);
|
|
|
+ if (courseTimes == null) {
|
|
|
+ courseTimeTypeJson.addProperty(CourseTimeTypeMap.get(courseTimeType), 0);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ double sum = courseTimes.stream()
|
|
|
+ .filter(x -> x.getTeacherIds().contains(teacher.getId().toString()))
|
|
|
+ .mapToDouble(WfTeacherCourseTime::getCourseTime).sum();
|
|
|
+ allClassTime = allClassTime + sum;
|
|
|
+ courseTimeTypeTime = courseTimeTypeTime + sum;
|
|
|
+ courseTimeTypeJson.addProperty(CourseTimeTypeMap.get(courseTimeType), sum);
|
|
|
+
|
|
|
+ for (LocalDate localDate : allDateList) {
|
|
|
+ double sum1 = courseTimes.stream()
|
|
|
+ .filter(x -> x.getTeacherIds().contains(teacher.getId().toString()) && localDate.equals(x.getScheduleDate()))
|
|
|
+ .mapToDouble(WfTeacherCourseTime::getCourseTime).sum();
|
|
|
+ JsonObject courseJson = new JsonObject();
|
|
|
+ courseJson.addProperty("type", CourseTimeTypeMap.get(courseTimeType));
|
|
|
+ courseJson.addProperty("scheduleDate", localDate.format(formatter));
|
|
|
+ courseJson.addProperty("content", sum1);
|
|
|
+ courseJson.addProperty("adjustType", "");
|
|
|
+ allClassTimeDataArray.add(courseJson);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ record.setCourseTimeTypeData(courseTimeTypeJson.toString());
|
|
|
+
|
|
|
+ //早自习、正课、晚辅
|
|
|
+ Double classTime7 = 0D, classTime8 = 0D, classTime9 = 0D, classTime11 = 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());
|
|
|
+ JsonObject courseJson = new JsonObject();
|
|
|
+ if (deleteDates != null && deleteDates.containsKey(courseListVo.getScheduleDate()) && deleteDates.get(courseListVo.getScheduleDate()) != null
|
|
|
+ && deleteDates.get(courseListVo.getScheduleDate()).contains(courseListVo.getTimeNumber())) {
|
|
|
+ courseJson.addProperty("type", courseListVo.getShortName());
|
|
|
+ courseJson.addProperty("scheduleDate", courseListVo.getScheduleDate().format(formatter));
|
|
|
+ courseJson.addProperty("content", "");
|
|
|
+ courseJson.addProperty("adjustType", "course_delete");
|
|
|
+ allClassTimeDataArray.add(courseJson);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if ("早自习".equals(courseListVo.getShortName())) {
|
|
|
+ classTime7 += weightSetMap.get(courseListVo.getShortName()) == null ? 0d : weightSetMap.get(courseListVo.getShortName());
|
|
|
+ } else if (zkList.contains(courseListVo.getShortName())) {
|
|
|
+ classTime8 += weightSetMap.get(courseListVo.getShortName()) == null ? 0d : weightSetMap.get(courseListVo.getShortName());
|
|
|
+ } else if (wzxList.contains(courseListVo.getShortName())) {
|
|
|
+ classTime9 += weightSetMap.get(courseListVo.getShortName()) == null ? 0d : weightSetMap.get(courseListVo.getShortName());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (courseListVo.getAdjustType() != null && !courseListVo.getAdjustType().isEmpty()) {
|
|
|
+ if (CourseAdjustTypeEnum.courseExchange.getCode().equals(courseListVo.getAdjustType())) {
|
|
|
+ classTime11 += weightSetMap.get(courseListVo.getShortName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ courseJson.addProperty("type", courseListVo.getShortName());
|
|
|
+ courseJson.addProperty("scheduleDate", courseListVo.getScheduleDate().format(formatter));
|
|
|
+ courseJson.addProperty("content", courseListVo.getClassName() + "," + courseListVo.getCourseName());
|
|
|
+ courseJson.addProperty("adjustType", courseListVo.getAdjustType() == null ? "" : courseListVo.getAdjustType());
|
|
|
+ allClassTimeDataArray.add(courseJson);
|
|
|
+ }
|
|
|
+ record.setClassTime7(classTime7);
|
|
|
+ record.setClassTime8(classTime8);
|
|
|
+ record.setClassTime9(classTime9);
|
|
|
+ record.setClassTime11(classTime11);
|
|
|
+ JsonObject weekDataJson = new JsonObject();
|
|
|
+ Double allTimes = 0d;
|
|
|
+ Double allCcksTime = 0d;//总的超出课时,从每周的正课课时中计算
|
|
|
+ BigDecimal ccksTime = BigDecimal.ZERO;//超出课时标准(每周)
|
|
|
+ if ("FB1601".equals(teacher.getEmployType())) {
|
|
|
+ ccksTime = BigDecimal.valueOf(costSetMap.get("cost7"));
|
|
|
+ } else {//外聘FB1605、合作人员FB1609
|
|
|
+ ccksTime = BigDecimal.valueOf(costSetMap.get("cost8"));
|
|
|
+ }
|
|
|
+ //存每周的数据
|
|
|
+ for (WeekTimeRangeVo timeRangeVo : weekTimeRangeVos) {
|
|
|
+ Double zkTimes = 0d;
|
|
|
+ Double wzxTimes = 0d;
|
|
|
+ Double tkTimes = 0d;
|
|
|
+ for (CourseListVo courseListVo : courseList) {
|
|
|
+ LocalDate scheduleDate = courseListVo.getScheduleDate();
|
|
|
+ //如果这个课程数据包含在被删除的课时中,跳过不计算
|
|
|
+ Map<LocalDate, String> deleteDates = deleteMap.get(courseListVo.getClassId());
|
|
|
+ if (deleteDates != null && deleteDates.containsKey(scheduleDate) && deleteDates.get(courseListVo.getScheduleDate()) != null
|
|
|
+ && deleteDates.get(courseListVo.getScheduleDate()).contains(courseListVo.getTimeNumber())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!((scheduleDate.equals(timeRangeVo.getMondayDate()) || scheduleDate.isAfter(timeRangeVo.getMondayDate()))
|
|
|
+ && (scheduleDate.equals(timeRangeVo.getSundayDate()) || scheduleDate.isBefore(timeRangeVo.getSundayDate())))) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ("早自习".equals(courseListVo.getShortName())) {
|
|
|
+ zkTimes += weightSetMap.get(courseListVo.getShortName()) == null ? 0d : weightSetMap.get(courseListVo.getShortName());
|
|
|
+ } else if (zkList.contains(courseListVo.getShortName())) {
|
|
|
+ zkTimes += weightSetMap.get(courseListVo.getShortName()) == null ? 0d : weightSetMap.get(courseListVo.getShortName());
|
|
|
+ } else if (wzxList.contains(courseListVo.getShortName())) {
|
|
|
+ wzxTimes += weightSetMap.get(courseListVo.getShortName()) == null ? 0d : weightSetMap.get(courseListVo.getShortName());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (courseListVo.getAdjustType() != null && !courseListVo.getAdjustType().isEmpty()) {
|
|
|
+ if (CourseAdjustTypeEnum.courseExchange.getCode().equals(courseListVo.getAdjustType())) {
|
|
|
+ tkTimes += weightSetMap.get(courseListVo.getShortName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //计算该老师发起的事假、病假顶课数据
|
|
|
+ List<CourseListVo> substituteList = allSubstituteList.stream().filter(x -> x.getExchangeTeacherId().equals(teacher.getId()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ Double reduceTime = 0d;//顶课课时
|
|
|
+ for (CourseListVo courseListVo : substituteList) {
|
|
|
+ Map<LocalDate, String> deleteDates = deleteMap.get(courseListVo.getClassId());
|
|
|
+ if (deleteDates != null && deleteDates.get(courseListVo.getScheduleDate()) != null && deleteDates.get(courseListVo.getScheduleDate()).contains(courseListVo.getTimeNumber())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (!((courseListVo.getScheduleDate().equals(timeRangeVo.getMondayDate()) || courseListVo.getScheduleDate().isAfter(timeRangeVo.getMondayDate()))
|
|
|
+ && (courseListVo.getScheduleDate().equals(timeRangeVo.getSundayDate()) || courseListVo.getScheduleDate().isBefore(timeRangeVo.getSundayDate())))) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ reduceTime += weightSetMap.get(courseListVo.getShortName());
|
|
|
+ }
|
|
|
+
|
|
|
+ substituteList = allSubstituteList.stream().filter(x -> x.getTeacherId().equals(teacher.getId().toString()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ for (CourseListVo courseListVo : substituteList) {
|
|
|
+ Map<LocalDate, String> deleteDates = deleteMap.get(courseListVo.getClassId());
|
|
|
+ if (deleteDates != null && deleteDates.get(courseListVo.getScheduleDate()) != null
|
|
|
+ ) {
|
|
|
+ String timeNumbers = deleteDates.get(courseListVo.getScheduleDate());
|
|
|
+ if (StrUtil.isNotEmpty(timeNumbers) && timeNumbers.contains(courseListVo.getTimeNumber())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!((courseListVo.getScheduleDate().equals(timeRangeVo.getMondayDate()) || courseListVo.getScheduleDate().isAfter(timeRangeVo.getMondayDate()))
|
|
|
+ && (courseListVo.getScheduleDate().equals(timeRangeVo.getSundayDate()) || courseListVo.getScheduleDate().isBefore(timeRangeVo.getSundayDate())))) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ reduceTime = reduceTime - weightSetMap.get(courseListVo.getShortName());
|
|
|
+ }
|
|
|
+
|
|
|
+ timeRangeVo.setZkTimes(zkTimes);
|
|
|
+ timeRangeVo.setWzxTimes(wzxTimes);
|
|
|
+ timeRangeVo.setDkTimes(reduceTime);
|
|
|
+ timeRangeVo.setTkTimes(tkTimes);
|
|
|
+ allTimes += (zkTimes + wzxTimes);
|
|
|
+ if (zkTimes > ccksTime.doubleValue()) {
|
|
|
+ allCcksTime += zkTimes - ccksTime.doubleValue();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ weekDataJson.add("weekData", new Gson().toJsonTree(weekTimeRangeVos));
|
|
|
+ weekDataJson.addProperty("allTimes", allTimes);
|
|
|
+ record.setWeekData(weekDataJson.toString());
|
|
|
+ //计算总课时
|
|
|
+ allClassTime = allClassTime + classTime7 + classTime8 + classTime9;
|
|
|
+ record.setAllClassTime(allClassTime);
|
|
|
+
|
|
|
+ //计算费用,根据聘用类型判断费用问题
|
|
|
+ Double classTimeAmount = 0d;
|
|
|
+ Double beyondClassTimeAmount = 0d;
|
|
|
+
|
|
|
+ BigDecimal zzxCost = BigDecimal.ZERO;//早自习费用
|
|
|
+ if ("FB1601".equals(teacher.getEmployType())) {
|
|
|
+ zzxCost = BigDecimal.valueOf(costSetMap.get("cost1"));
|
|
|
+ } else {//外聘FB1605、合作人员FB1609
|
|
|
+ zzxCost = BigDecimal.valueOf(costSetMap.get("cost2"));
|
|
|
+ }
|
|
|
+
|
|
|
+ classTimeAmount += BigDecimal.valueOf(classTime7).multiply(zzxCost).doubleValue();
|
|
|
+
|
|
|
+ BigDecimal zkCost = BigDecimal.ZERO;//正课费用
|
|
|
+ if ("FB1601".equals(teacher.getEmployType())) {
|
|
|
+ zkCost = BigDecimal.valueOf(costSetMap.get("cost3"));
|
|
|
+ } else {//外聘FB1605、合作人员FB1609
|
|
|
+ zkCost = BigDecimal.valueOf(costSetMap.get("cost4"));
|
|
|
+ }
|
|
|
+
|
|
|
+ double classTime = classTime8
|
|
|
+ + courseTimeTypeTime;
|
|
|
+ classTimeAmount += BigDecimal.valueOf(classTime).multiply(zkCost).doubleValue();
|
|
|
+
|
|
|
+ BigDecimal wzxCost = BigDecimal.ZERO;//晚自习费用
|
|
|
+ if ("FB1601".equals(teacher.getEmployType())) {
|
|
|
+ wzxCost = BigDecimal.valueOf(costSetMap.get("cost5"));
|
|
|
+ } else {//外聘FB1605、合作人员FB1609
|
|
|
+ wzxCost = BigDecimal.valueOf(costSetMap.get("cost6"));
|
|
|
+ }
|
|
|
+ classTimeAmount += BigDecimal.valueOf(classTime9).multiply(wzxCost).doubleValue();
|
|
|
+ /**
|
|
|
+ * 顶课:
|
|
|
+ * 1、流程发起人(被顶老师)的课被顶课老师上了,那么被顶老师的课时就会-1,顶课老师课时就会+1
|
|
|
+ * 2、顶课老师会根据规则额外加一笔费用,根据设置1课时额外加4元
|
|
|
+ * 3、顶课类型为事假和病假的时候会扣除被顶老师的费用,根据设置为扣除4元
|
|
|
+ */
|
|
|
+ BigDecimal reduceTimeAmount = BigDecimal.ZERO;
|
|
|
+ {
|
|
|
+ //计算该老师发起的事假、病假顶课数据
|
|
|
+ List<CourseListVo> substituteList = allSubstituteList.stream().filter(x -> x.getExchangeTeacherId().equals(teacher.getId()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ Double reduceTime = 0d;//顶课课时
|
|
|
+ Double dkClassTime = 0d;//去顶课的数量,所有顶课数量
|
|
|
+ for (CourseListVo courseListVo : substituteList) {
|
|
|
+ Map<LocalDate, String> deleteDates = deleteMap.get(courseListVo.getClassId());
|
|
|
+ if (deleteDates != null && deleteDates.get(courseListVo.getScheduleDate()) != null && deleteDates.get(courseListVo.getScheduleDate()).contains(courseListVo.getTimeNumber())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ reduceTime += weightSetMap.get(courseListVo.getShortName());
|
|
|
+ dkClassTime += weightSetMap.get(courseListVo.getShortName());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ Double bdkClassTime = 0d;//发起顶课的数量,只统计事假和病假的数量
|
|
|
+ substituteList = allSubstituteList.stream().filter(x -> x.getTeacherId().equals(teacher.getId().toString()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ for (CourseListVo courseListVo : substituteList) {
|
|
|
+ Map<LocalDate, String> deleteDates = deleteMap.get(courseListVo.getClassId());
|
|
|
+ if (deleteDates != null && deleteDates.get(courseListVo.getScheduleDate()) != null && deleteDates.get(courseListVo.getScheduleDate()).contains(courseListVo.getTimeNumber())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ reduceTime = reduceTime - weightSetMap.get(courseListVo.getShortName());
|
|
|
+ if ("sick _leave".equals(courseListVo.getReason()) || "leave_absence".equals(courseListVo.getReason())) {
|
|
|
+ bdkClassTime += weightSetMap.get(courseListVo.getShortName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ record.setClassTime10(reduceTime);
|
|
|
+
|
|
|
+ BigDecimal dkCost = BigDecimal.ZERO;//顶课费用,顶课老师加钱
|
|
|
+ if ("FB1601".equals(teacher.getEmployType())) {
|
|
|
+ dkCost = BigDecimal.valueOf(costSetMap.get("cost11"));
|
|
|
+ } else {//外聘FB1605、合作人员FB1609
|
|
|
+ dkCost = BigDecimal.valueOf(costSetMap.get("cost12"));
|
|
|
+ }
|
|
|
+ reduceTimeAmount = BigDecimal.valueOf(dkClassTime).multiply(dkCost);
|
|
|
+ BigDecimal bdkCost = BigDecimal.ZERO;//顶课费用,被顶课老师扣钱
|
|
|
+ if ("FB1601".equals(teacher.getEmployType())) {
|
|
|
+ bdkCost = BigDecimal.valueOf(costSetMap.get("cost13") == null ? 0 : costSetMap.get("cost13"));
|
|
|
+ } else {//外聘FB1605、合作人员FB1609
|
|
|
+ bdkCost = BigDecimal.valueOf(costSetMap.get("cost14") == null ? 0 : costSetMap.get("cost14"));
|
|
|
+ }
|
|
|
+ //计算被扣除的费用
|
|
|
+ reduceTimeAmount = reduceTimeAmount.subtract(bdkCost.multiply(BigDecimal.valueOf(bdkClassTime)));
|
|
|
+ }
|
|
|
+
|
|
|
+ record.setClassTimeAmount(classTimeAmount);
|
|
|
+ //计算超出的课时,需要先计算出每个周的开始结束时间
|
|
|
+ BigDecimal ccksCost = BigDecimal.ZERO;
|
|
|
+ if ("FB1601".equals(teacher.getEmployType())) {
|
|
|
+ ccksCost = BigDecimal.valueOf(costSetMap.get("cost9"));
|
|
|
+ } else {//外聘FB1605、合作人员FB1609
|
|
|
+ ccksCost = BigDecimal.valueOf(costSetMap.get("cost10"));
|
|
|
+ }
|
|
|
+ //计算出总的超出课时并计算超课时费
|
|
|
+ beyondClassTimeAmount = BigDecimal.valueOf(allCcksTime).multiply(ccksCost).doubleValue();
|
|
|
+ if (!"FB1601".equals(teacher.getEmployType())) {
|
|
|
+ record.setBeyondClassTimeAmount(beyondClassTimeAmount);
|
|
|
+ }
|
|
|
+
|
|
|
+ //计算总金额,课时费+超课时费
|
|
|
+ Double totalAmount = classTimeAmount + beyondClassTimeAmount + reduceTimeAmount.doubleValue();
|
|
|
+ record.setTotalAmount(totalAmount);
|
|
|
+ record.setAllClassTimeData(calculateClassTime(allClassTimeDataArray, weightSetMap, allDateList, new ArrayList<>(CourseTimeTypeMap.values())));
|
|
|
+ record.setCreateDate(new Date());
|
|
|
+
|
|
|
+ insertList.add(record);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!insertList.isEmpty()) {
|
|
|
+ //先删除
|
|
|
+ String sql = "delete from class_time_statistics_record where class_time_statistics_id = " + statistics.getId();
|
|
|
+ SqlRunnerAdapter.db().delete(sql);
|
|
|
+ for (ClassTimeStatisticsRecord record : insertList) {
|
|
|
+ recordMapper.insert(record);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ statistics.setAllClassTime(insertList.stream().filter(x -> x.getAllClassTime() != null).mapToDouble(ClassTimeStatisticsRecord::getAllClassTime).sum());
|
|
|
+ statistics.setTotalAmount(insertList.stream().filter(x -> x.getTotalAmount() != null).mapToDouble(ClassTimeStatisticsRecord::getTotalAmount).sum());
|
|
|
+ statistics.setBeyondClassTimeAmount(insertList.stream().filter(x -> x.getBeyondClassTimeAmount() != null).mapToDouble(ClassTimeStatisticsRecord::getBeyondClassTimeAmount).sum());
|
|
|
+ statistics.setClassTimeAmount(insertList.stream().filter(x -> x.getClassTimeAmount() != null).mapToDouble(ClassTimeStatisticsRecord::getClassTimeAmount).sum());
|
|
|
+ } catch (Exception e) {
|
|
|
+ Log.error(e.getMessage(), e);
|
|
|
+ throw new MyException("统计出错,请联系管理员");
|
|
|
+ } finally {
|
|
|
+ statistics.setStatus(1);
|
|
|
+ this.updateById(statistics);
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public Boolean refreshRecord(ClassTimeStatistics statistics) {
|
|
|
@@ -307,6 +690,10 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
|
|
|
//查询所有老师发起顶课通过的数量,也要分别计算早自习、晚自习、正课、如果日期出入课时删除中,也需要跳过
|
|
|
List<CourseListVo> allSubstituteList = this.baseMapper.getSubstituteList(statistics);
|
|
|
List<ClassTimeStatisticsRecord> insertList = new ArrayList<>();
|
|
|
+ List<ClassCourseTimeStatisticsRecord> insertCourseList = new ArrayList<>();
|
|
|
+
|
|
|
+ List<ClassCourseTimeStatisticsSet> classCourseTimeStatisticsSetList = statisticsCourseSetService.list();
|
|
|
+
|
|
|
//循环教师,准备开始计算
|
|
|
for (TeacherListVo teacher : teacherList) {
|
|
|
ClassTimeStatisticsRecord record = new ClassTimeStatisticsRecord();
|
|
|
@@ -371,6 +758,7 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
|
|
|
allClassTimeDataArray.add(courseJson);
|
|
|
continue;
|
|
|
}
|
|
|
+
|
|
|
if ("早自习".equals(courseListVo.getShortName())) {
|
|
|
classTime7 += weightSetMap.get(courseListVo.getShortName()) == null ? 0d : weightSetMap.get(courseListVo.getShortName());
|
|
|
} else if (zkList.contains(courseListVo.getShortName())) {
|
|
|
@@ -389,6 +777,42 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
|
|
|
courseJson.addProperty("content", courseListVo.getClassName() + "," + courseListVo.getCourseName());
|
|
|
courseJson.addProperty("adjustType", courseListVo.getAdjustType() == null ? "" : courseListVo.getAdjustType());
|
|
|
allClassTimeDataArray.add(courseJson);
|
|
|
+
|
|
|
+ ClassCourseTimeStatisticsRecord classCourseTimeStatisticsRecord =checkCourseSet(classCourseTimeStatisticsSetList,insertCourseList,courseListVo.getClassId(),courseListVo.getCourseId(),teacher);
|
|
|
+
|
|
|
+ if(classCourseTimeStatisticsRecord!=null) {
|
|
|
+ //早自习、正课、晚辅
|
|
|
+ Double _classTime7 = classCourseTimeStatisticsRecord.getClassTime7(),
|
|
|
+ _classTime8 = classCourseTimeStatisticsRecord.getClassTime8(),
|
|
|
+ _classTime9 = classCourseTimeStatisticsRecord.getClassTime9(),
|
|
|
+ _classTime11 = classCourseTimeStatisticsRecord.getClassTime11();
|
|
|
+
|
|
|
+ if ("早自习".equals(courseListVo.getShortName())) {
|
|
|
+ _classTime7 += weightSetMap.get(courseListVo.getShortName()) == null ? 0d : weightSetMap.get(courseListVo.getShortName());
|
|
|
+ } else if (zkList.contains(courseListVo.getShortName())) {
|
|
|
+ _classTime8 += weightSetMap.get(courseListVo.getShortName()) == null ? 0d : weightSetMap.get(courseListVo.getShortName());
|
|
|
+ } else if (wzxList.contains(courseListVo.getShortName())) {
|
|
|
+ _classTime9 += weightSetMap.get(courseListVo.getShortName()) == null ? 0d : weightSetMap.get(courseListVo.getShortName());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (courseListVo.getAdjustType() != null && !courseListVo.getAdjustType().isEmpty()) {
|
|
|
+ if (CourseAdjustTypeEnum.courseExchange.getCode().equals(courseListVo.getAdjustType())) {
|
|
|
+ _classTime11 += weightSetMap.get(courseListVo.getShortName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ classCourseTimeStatisticsRecord.setClassTime7(_classTime7);
|
|
|
+ classCourseTimeStatisticsRecord.setClassTime8(_classTime8);
|
|
|
+ classCourseTimeStatisticsRecord.setClassTime9(_classTime9);
|
|
|
+ classCourseTimeStatisticsRecord.setClassTime11(_classTime11);
|
|
|
+
|
|
|
+ Double _llClassTime = _classTime7 + _classTime8 + _classTime9;
|
|
|
+
|
|
|
+ classCourseTimeStatisticsRecord.setAllClassTime(_llClassTime);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
record.setClassTime7(classTime7);
|
|
|
record.setClassTime8(classTime8);
|
|
|
@@ -435,6 +859,34 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
|
|
|
tkTimes += weightSetMap.get(courseListVo.getShortName());
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ ClassCourseTimeStatisticsRecord classCourseTimeStatisticsRecord =checkCourseSet(classCourseTimeStatisticsSetList,insertCourseList,courseListVo.getClassId(),courseListVo.getCourseId(),teacher);
|
|
|
+
|
|
|
+ if(classCourseTimeStatisticsRecord!=null) {
|
|
|
+ //早自习、正课、晚辅
|
|
|
+ Double _zkTimes = classCourseTimeStatisticsRecord.getClassTime22(),
|
|
|
+ _wzxTimes = classCourseTimeStatisticsRecord.getClassTime23(),
|
|
|
+ _tkTimes = classCourseTimeStatisticsRecord.getClassTime24();
|
|
|
+
|
|
|
+ if ("早自习".equals(courseListVo.getShortName())) {
|
|
|
+ _zkTimes += weightSetMap.get(courseListVo.getShortName()) == null ? 0d : weightSetMap.get(courseListVo.getShortName());
|
|
|
+ } else if (zkList.contains(courseListVo.getShortName())) {
|
|
|
+ _zkTimes += weightSetMap.get(courseListVo.getShortName()) == null ? 0d : weightSetMap.get(courseListVo.getShortName());
|
|
|
+ } else if (wzxList.contains(courseListVo.getShortName())) {
|
|
|
+ _wzxTimes += weightSetMap.get(courseListVo.getShortName()) == null ? 0d : weightSetMap.get(courseListVo.getShortName());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (courseListVo.getAdjustType() != null && !courseListVo.getAdjustType().isEmpty()) {
|
|
|
+ if (CourseAdjustTypeEnum.courseExchange.getCode().equals(courseListVo.getAdjustType())) {
|
|
|
+ _tkTimes += weightSetMap.get(courseListVo.getShortName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ classCourseTimeStatisticsRecord.setClassTime22(_zkTimes);
|
|
|
+ classCourseTimeStatisticsRecord.setClassTime23(_wzxTimes);
|
|
|
+ classCourseTimeStatisticsRecord.setClassTime24(_tkTimes);
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
//计算该老师发起的事假、病假顶课数据
|
|
|
List<CourseListVo> substituteList = allSubstituteList.stream().filter(x -> x.getExchangeTeacherId().equals(teacher.getId()))
|
|
|
@@ -450,6 +902,15 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
|
|
|
continue;
|
|
|
}
|
|
|
reduceTime += weightSetMap.get(courseListVo.getShortName());
|
|
|
+
|
|
|
+ ClassCourseTimeStatisticsRecord classCourseTimeStatisticsRecord =checkCourseSet(classCourseTimeStatisticsSetList,insertCourseList,courseListVo.getClassId(),courseListVo.getCourseId(),teacher);
|
|
|
+
|
|
|
+ if(classCourseTimeStatisticsRecord!=null) {
|
|
|
+ Double _reduceTime = classCourseTimeStatisticsRecord.getClassTime25();
|
|
|
+ _reduceTime += weightSetMap.get(courseListVo.getShortName());
|
|
|
+ classCourseTimeStatisticsRecord.setClassTime25(_reduceTime);
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
substituteList = allSubstituteList.stream().filter(x -> x.getTeacherId().equals(teacher.getId().toString()))
|
|
|
@@ -468,6 +929,15 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
|
|
|
continue;
|
|
|
}
|
|
|
reduceTime = reduceTime - weightSetMap.get(courseListVo.getShortName());
|
|
|
+
|
|
|
+
|
|
|
+ ClassCourseTimeStatisticsRecord classCourseTimeStatisticsRecord =checkCourseSet(classCourseTimeStatisticsSetList,insertCourseList,courseListVo.getClassId(),courseListVo.getCourseId(),teacher);
|
|
|
+
|
|
|
+ if(classCourseTimeStatisticsRecord!=null) {
|
|
|
+ Double _reduceTime = classCourseTimeStatisticsRecord.getClassTime25();
|
|
|
+ _reduceTime -= weightSetMap.get(courseListVo.getShortName());
|
|
|
+ classCourseTimeStatisticsRecord.setClassTime25(_reduceTime);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
timeRangeVo.setZkTimes(zkTimes);
|
|
|
@@ -478,6 +948,8 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
|
|
|
if (zkTimes > ccksTime.doubleValue()) {
|
|
|
allCcksTime += zkTimes - ccksTime.doubleValue();
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
weekDataJson.add("weekData", new Gson().toJsonTree(weekTimeRangeVos));
|
|
|
weekDataJson.addProperty("allTimes", allTimes);
|
|
|
@@ -537,8 +1009,20 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
|
|
|
}
|
|
|
reduceTime += weightSetMap.get(courseListVo.getShortName());
|
|
|
dkClassTime += weightSetMap.get(courseListVo.getShortName());
|
|
|
- }
|
|
|
|
|
|
+ ClassCourseTimeStatisticsRecord classCourseTimeStatisticsRecord =checkCourseSet(classCourseTimeStatisticsSetList,insertCourseList,courseListVo.getClassId(),courseListVo.getCourseId(),teacher);
|
|
|
+
|
|
|
+ if(classCourseTimeStatisticsRecord!=null) {
|
|
|
+ Double _reduceTime = classCourseTimeStatisticsRecord.getClassTime10();
|
|
|
+ _reduceTime += weightSetMap.get(courseListVo.getShortName());
|
|
|
+
|
|
|
+ Double _classTime20 = classCourseTimeStatisticsRecord.getClassTime20();
|
|
|
+ _classTime20 += weightSetMap.get(courseListVo.getShortName());
|
|
|
+
|
|
|
+ classCourseTimeStatisticsRecord.setClassTime10(_reduceTime);
|
|
|
+ classCourseTimeStatisticsRecord.setClassTime20(_classTime20);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
Double bdkClassTime = 0d;//发起顶课的数量,只统计事假和病假的数量
|
|
|
substituteList = allSubstituteList.stream().filter(x -> x.getTeacherId().equals(teacher.getId().toString()))
|
|
|
@@ -552,6 +1036,22 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
|
|
|
if ("sick _leave".equals(courseListVo.getReason()) || "leave_absence".equals(courseListVo.getReason())) {
|
|
|
bdkClassTime += weightSetMap.get(courseListVo.getShortName());
|
|
|
}
|
|
|
+
|
|
|
+ ClassCourseTimeStatisticsRecord classCourseTimeStatisticsRecord =checkCourseSet(classCourseTimeStatisticsSetList,insertCourseList,courseListVo.getClassId(),courseListVo.getCourseId(),teacher);
|
|
|
+
|
|
|
+ if(classCourseTimeStatisticsRecord!=null) {
|
|
|
+ Double _reduceTime = classCourseTimeStatisticsRecord.getClassTime10();
|
|
|
+ _reduceTime -= weightSetMap.get(courseListVo.getShortName());
|
|
|
+ classCourseTimeStatisticsRecord.setClassTime10(_reduceTime);
|
|
|
+
|
|
|
+ if ("sick _leave".equals(courseListVo.getReason()) || "leave_absence".equals(courseListVo.getReason())) {
|
|
|
+ Double _bdkClassTime = classCourseTimeStatisticsRecord.getClassTime21();
|
|
|
+ _bdkClassTime += weightSetMap.get(courseListVo.getShortName());
|
|
|
+
|
|
|
+ classCourseTimeStatisticsRecord.setClassTime21(_bdkClassTime);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
record.setClassTime10(reduceTime);
|
|
|
|
|
|
@@ -595,6 +1095,66 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
|
|
|
insertList.add(record);
|
|
|
}
|
|
|
|
|
|
+ // 计算费用
|
|
|
+ for (ClassCourseTimeStatisticsRecord record : insertCourseList) {
|
|
|
+
|
|
|
+ record.setClassTimeStatisticsId(statistics.getId());
|
|
|
+
|
|
|
+ //费用设置jsonArray
|
|
|
+ JsonArray _costSetArray = parser.parse(record.getCostSetJson()).getAsJsonArray();
|
|
|
+ Map<String, Double> _costSetMap = new LinkedHashMap<>();
|
|
|
+ for (JsonElement jsonElement : _costSetArray) {
|
|
|
+ JsonObject object = jsonElement.getAsJsonObject();
|
|
|
+ _costSetMap.put(object.get("field").getAsString(), object.get("value").getAsDouble());
|
|
|
+ }
|
|
|
+
|
|
|
+ BigDecimal _zzxCost = BigDecimal.ZERO;//早自习费用
|
|
|
+ BigDecimal _zkCost = BigDecimal.ZERO;//正课费用
|
|
|
+ BigDecimal _wzxCost = BigDecimal.ZERO;//晚自习费用
|
|
|
+ BigDecimal _dkCost = BigDecimal.ZERO;//顶课费用,顶课老师加钱
|
|
|
+ BigDecimal _bdkCost = BigDecimal.ZERO;//顶课费用,被顶课老师扣钱
|
|
|
+ //计算超出的课时,需要先计算出每个周的开始结束时间
|
|
|
+ BigDecimal _ccksCost = BigDecimal.ZERO;
|
|
|
+ if ("FB1601".equals(record.getEmployType())) {
|
|
|
+ _zzxCost = BigDecimal.valueOf(_costSetMap.get("cost1"));
|
|
|
+ _zkCost = BigDecimal.valueOf(_costSetMap.get("cost3"));
|
|
|
+ _wzxCost = BigDecimal.valueOf(_costSetMap.get("cost5"));
|
|
|
+ _dkCost = BigDecimal.valueOf(_costSetMap.get("cost11"));
|
|
|
+ _bdkCost = BigDecimal.valueOf(_costSetMap.get("cost13") == null ? 0 : _costSetMap.get("cost13"));
|
|
|
+ _ccksCost = BigDecimal.valueOf(_costSetMap.get("cost9"));
|
|
|
+ } else {//外聘FB1605、合作人员FB1609
|
|
|
+ _zzxCost = BigDecimal.valueOf(_costSetMap.get("cost2"));
|
|
|
+ _zkCost = BigDecimal.valueOf(_costSetMap.get("cost4"));
|
|
|
+ _wzxCost = BigDecimal.valueOf(_costSetMap.get("cost6"));
|
|
|
+ _dkCost = BigDecimal.valueOf(_costSetMap.get("cost12"));
|
|
|
+ _bdkCost = BigDecimal.valueOf(_costSetMap.get("cost14") == null ? 0 : _costSetMap.get("cost14"));
|
|
|
+ _ccksCost = BigDecimal.valueOf(_costSetMap.get("cost10"));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ double _classTimeAmount = BigDecimal.valueOf(record.getClassTime7()).multiply(_zzxCost).doubleValue();
|
|
|
+ _classTimeAmount += BigDecimal.valueOf(record.getClassTime8()).multiply(_zkCost).doubleValue();
|
|
|
+ _classTimeAmount += BigDecimal.valueOf(record.getClassTime9()).multiply(_wzxCost).doubleValue();
|
|
|
+ record.setClassTimeAmount(_classTimeAmount);
|
|
|
+
|
|
|
+
|
|
|
+ BigDecimal _reduceTimeAmount = BigDecimal.valueOf(record.getClassTime20()).multiply(_dkCost);
|
|
|
+ //计算被扣除的费用
|
|
|
+ _reduceTimeAmount = _reduceTimeAmount.subtract(_bdkCost.multiply(BigDecimal.valueOf(record.getClassTime21())));
|
|
|
+
|
|
|
+// //计算出总的超出课时并计算超课时费
|
|
|
+// double _beyondClassTimeAmount = BigDecimal.valueOf(allCcksTime).multiply(_ccksCost).doubleValue();
|
|
|
+//
|
|
|
+// if (!"FB1601".equals(record.getEmployType())) {
|
|
|
+// record.setBeyondClassTimeAmount(_beyondClassTimeAmount);
|
|
|
+// }
|
|
|
+
|
|
|
+ //计算总金额,课时费+超课时费
|
|
|
+// Double totalAmount = _classTimeAmount + _beyondClassTimeAmount + _reduceTimeAmount.doubleValue();
|
|
|
+ Double totalAmount = _classTimeAmount + _reduceTimeAmount.doubleValue();
|
|
|
+ record.setTotalAmount(totalAmount);
|
|
|
+ }
|
|
|
+
|
|
|
if (!insertList.isEmpty()) {
|
|
|
//先删除
|
|
|
String sql = "delete from class_time_statistics_record where class_time_statistics_id = " + statistics.getId();
|
|
|
@@ -602,6 +1162,12 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
|
|
|
for (ClassTimeStatisticsRecord record : insertList) {
|
|
|
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);
|
|
|
+ }
|
|
|
}
|
|
|
statistics.setAllClassTime(insertList.stream().filter(x -> x.getAllClassTime() != null).mapToDouble(ClassTimeStatisticsRecord::getAllClassTime).sum());
|
|
|
statistics.setTotalAmount(insertList.stream().filter(x -> x.getTotalAmount() != null).mapToDouble(ClassTimeStatisticsRecord::getTotalAmount).sum());
|
|
|
@@ -617,6 +1183,57 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ // 检查数据
|
|
|
+ private ClassCourseTimeStatisticsRecord checkCourseSet(List<ClassCourseTimeStatisticsSet> classCourseTimeStatisticsSetList,List<ClassCourseTimeStatisticsRecord> insertCourseList,Long classId,Long courseId,TeacherListVo teacher) {
|
|
|
+ // 课程明细统计
|
|
|
+ ClassCourseTimeStatisticsSet classCourseTimeStatisticsSet = classCourseTimeStatisticsSetList.stream()
|
|
|
+ .filter(item -> classId.equals(item.getClassId()) && courseId.equals(item.getCourseId()))
|
|
|
+ .findFirst()
|
|
|
+ .orElse(null);
|
|
|
+
|
|
|
+ if (classCourseTimeStatisticsSet != null) {
|
|
|
+
|
|
|
+ ClassCourseTimeStatisticsRecord classCourseTimeStatisticsRecord = insertCourseList.stream()
|
|
|
+ .filter(item -> classId.equals(item.getClassId()) && courseId.equals(item.getCourseId()) && teacher.getId().equals(item.getUserId()))
|
|
|
+ .findFirst()
|
|
|
+ .orElse(null);
|
|
|
+
|
|
|
+ if (classCourseTimeStatisticsRecord == null) {
|
|
|
+
|
|
|
+ classCourseTimeStatisticsRecord = new ClassCourseTimeStatisticsRecord() {{
|
|
|
+
|
|
|
+ setUserId(teacher.getId());
|
|
|
+// setClassTimeStatisticsId(statistics.getId());
|
|
|
+ setEmployType(teacher.getEmployType());
|
|
|
+ setCostSetJson(classCourseTimeStatisticsSet.getJsonContent());
|
|
|
+ setClassId(classCourseTimeStatisticsSet.getClassId());
|
|
|
+ setCourseId(classCourseTimeStatisticsSet.getCourseId());
|
|
|
+
|
|
|
+ setClassTime7(0D);
|
|
|
+ setClassTime8(0D);
|
|
|
+ setClassTime9(0D);
|
|
|
+ setClassTime10(0D);
|
|
|
+ setClassTime11(0D);
|
|
|
+ setClassTime20(0D);
|
|
|
+ setClassTime21(0D);
|
|
|
+ setClassTime22(0D);
|
|
|
+ setClassTime23(0D);
|
|
|
+ setClassTime24(0D);
|
|
|
+ setClassTime25(0D);
|
|
|
+ setAllClassTime(0D);
|
|
|
+
|
|
|
+ }};
|
|
|
+
|
|
|
+ insertCourseList.add(classCourseTimeStatisticsRecord);
|
|
|
+
|
|
|
+ return classCourseTimeStatisticsRecord;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public Boolean lockData(Long id) {
|
|
|
ClassTimeStatistics statistics = this.getById(id);
|