Sfoglia il codice sorgente

修改统计课时量

snihwxf 1 settimana fa
parent
commit
cdddf3194b

+ 6 - 0
src/main/java/com/xjrsoft/module/classtime/dto/ClassCourseTimeStatisticsSetGroupPageDto.java

@@ -35,4 +35,10 @@ public class ClassCourseTimeStatisticsSetGroupPageDto extends PageInput {
      */
     @ApiModelProperty("课程名称")
     private String courseName;
+
+    /**
+     * 类别(1:权重 2:费用设置 3:课时量)
+     */
+    @ApiModelProperty("类别(1:权重 2:费用设置 3:课时量)")
+    private Integer category;
 }

+ 5 - 0
src/main/java/com/xjrsoft/module/classtime/service/impl/ClassCourseTimeStatisticsSetServiceImpl.java

@@ -77,6 +77,7 @@ public class ClassCourseTimeStatisticsSetServiceImpl extends MPJBaseServiceImpl<
 
                 boolean exists = classCourseTimeStatisticsSetGroupMapper.exists(new QueryWrapper<ClassCourseTimeStatisticsSetGroup>()
                         .lambda()
+                        .eq(ClassCourseTimeStatisticsSetGroup::getCategory,dto.getCategory())
                         .like(ClassCourseTimeStatisticsSetGroup::getClassIds, classId)
                         .like(ClassCourseTimeStatisticsSetGroup::getCourseIds, courseId));
 
@@ -201,6 +202,7 @@ public class ClassCourseTimeStatisticsSetServiceImpl extends MPJBaseServiceImpl<
                 for (Long courseId : soruceCourseIds) {
                     classCourseTimeStatisticsSetMapper.delete(new QueryWrapper<ClassCourseTimeStatisticsSet>()
                             .lambda()
+                            .eq(ClassCourseTimeStatisticsSet::getCategory,dto.getCategory())
                             .eq(ClassCourseTimeStatisticsSet::getClassId, classId)
                             .eq(ClassCourseTimeStatisticsSet::getCourseId, courseId));
                 }
@@ -212,6 +214,7 @@ public class ClassCourseTimeStatisticsSetServiceImpl extends MPJBaseServiceImpl<
                 for (Long classId : soruceClassIds) {
                     classCourseTimeStatisticsSetMapper.delete(new QueryWrapper<ClassCourseTimeStatisticsSet>()
                             .lambda()
+                            .eq(ClassCourseTimeStatisticsSet::getCategory,dto.getCategory())
                             .eq(ClassCourseTimeStatisticsSet::getClassId, classId)
                             .eq(ClassCourseTimeStatisticsSet::getCourseId, courseId));
                 }
@@ -226,6 +229,7 @@ public class ClassCourseTimeStatisticsSetServiceImpl extends MPJBaseServiceImpl<
                                 .lambda()
                                 .like(ClassCourseTimeStatisticsSetGroup::getClassIds, classId)
                                 .like(ClassCourseTimeStatisticsSetGroup::getCourseIds, courseId)
+                                .eq(ClassCourseTimeStatisticsSetGroup::getCategory,dto.getCategory())
                                 .ne(ClassCourseTimeStatisticsSetGroup::getId,dto.getId()));
                 if(exists){
                     String className = baseClassList.stream()
@@ -247,6 +251,7 @@ public class ClassCourseTimeStatisticsSetServiceImpl extends MPJBaseServiceImpl<
 
                 ClassCourseTimeStatisticsSet classCourseTimeStatisticsSet = classCourseTimeStatisticsSetMapper.selectOne(new QueryWrapper<ClassCourseTimeStatisticsSet>()
                         .lambda()
+                        .eq(ClassCourseTimeStatisticsSet::getCategory,dto.getCategory())
                         .eq(ClassCourseTimeStatisticsSet::getClassId, classId)
                         .eq(ClassCourseTimeStatisticsSet::getCourseId, courseId)
                 );

+ 206 - 1
src/main/java/com/xjrsoft/module/classtime/service/impl/ClassTimeStatisticsServiceImpl.java

@@ -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()

+ 4 - 0
src/main/resources/mapper/classtime/ClassCourseTimeStatisticsSetGroupMapper.xml

@@ -39,6 +39,10 @@
             AND c.name like concat('%', #{dto.courseName},'%')
         )
         </if>
+
+        <if test="dto.category != null and dto.category != ''">
+            and t1.category = #{dto.category}
+        </if>
         order by t1.create_date desc
     </select>
 </mapper>