Explorar o código

顶课计算规则调整

dzx hai 5 meses
pai
achega
367389f0df

+ 1 - 1
src/main/java/com/xjrsoft/module/classtime/mapper/ClassTimeStatisticsMapper.java

@@ -36,7 +36,7 @@ public interface ClassTimeStatisticsMapper extends MPJBaseMapper<ClassTimeStatis
     List<CourseListVo> getCourseList(@Param("dto") ClassTimeStatistics dto);
 
     /**
-     * 查询被顶课老师的信息
+     * 查询顶课数据
      * @param dto
      * @return
      */

+ 66 - 46
src/main/java/com/xjrsoft/module/classtime/service/impl/ClassTimeStatisticsServiceImpl.java

@@ -202,7 +202,7 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
             }
             DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
 
-            //查询所有老师发起顶课通过的数量(只查询事假、病假),也要分别计算早自习、晚自习、正课、如果日期出入课时删除中,也需要跳过
+            //查询所有老师发起顶课通过的数量,也要分别计算早自习、晚自习、正课、如果日期出入课时删除中,也需要跳过
             List<CourseListVo> allSubstituteList = this.baseMapper.getSubstituteList(statistics);
             List<ClassTimeStatisticsRecord> insertList = new ArrayList<>();
             //循环教师,准备开始计算
@@ -303,7 +303,7 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
                     }
                 }
                 //早自习、正课、晚辅、顶课、调课
-                Double classTime7 = 0D,classTime8 = 0D,classTime9 = 0D,classTime10 = 0D,classTime11 = 0D;
+                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");
@@ -341,7 +341,7 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
                     courseJson.addProperty("type", courseListVo.getShortName());
                     courseJson.addProperty("scheduleDate", courseListVo.getScheduleDate().format(formatter));
                     courseJson.addProperty("content", courseListVo.getClassName() + "," + courseListVo.getCourseName());
-                    courseJson.addProperty("adjustType", courseListVo.getAdjustType());
+                    courseJson.addProperty("adjustType", courseListVo.getAdjustType() == null?"":courseListVo.getAdjustType());
                     allClassTimeDataArray.add(courseJson);
                 }
                 record.setClassTime7(classTime7);
@@ -404,30 +404,6 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
                 weekDataJson.add("weekData", new Gson().toJsonTree(weekTimeRangeVos));
                 weekDataJson.addProperty("allTimes", allTimes);
                 record.setWeekData(weekDataJson.toString());
-
-                //计算该老师发起的事假、病假顶课数据
-                List<CourseListVo> substituteList = allSubstituteList.stream().filter(x -> x.getExchangeTeacherId().equals(teacher.getId()))
-                        .collect(Collectors.toList());
-                Double reduceTime = 0d;
-                for (CourseListVo courseListVo : substituteList) {
-                    Set<LocalDate> deleteDates = deleteMap.get(courseListVo.getClassId());
-                    if(deleteDates !=null && deleteDates.contains(courseListVo.getScheduleDate())){
-                        continue;
-                    }
-                    reduceTime += weightSetMap.get(courseListVo.getShortName());
-                }
-
-                substituteList = allSubstituteList.stream().filter(x -> x.getTeacherId().equals(teacher.getId().toString()))
-                        .collect(Collectors.toList());
-                for (CourseListVo courseListVo : substituteList) {
-                    Set<LocalDate> deleteDates = deleteMap.get(courseListVo.getClassId());
-                    if(deleteDates !=null && deleteDates.contains(courseListVo.getScheduleDate())){
-                        continue;
-                    }
-                    reduceTime = reduceTime - weightSetMap.get(courseListVo.getShortName());
-                }
-
-                record.setClassTime10(reduceTime);
                 //计算总课时
                 allClassTime = allClassTime + classTime7 + classTime8 + classTime9;
                 record.setAllClassTime(allClassTime);
@@ -468,29 +444,61 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
                     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;
-                BigDecimal dkCost = BigDecimal.ZERO;//顶课费用,顶课老师加钱
-                if("FB1601".equals(teacher.getEmployType())){
-                    dkCost = BigDecimal.valueOf(costSetMap.get("cost11"));
-                }else{//外聘FB1605、合作人员FB1609
-                    dkCost = BigDecimal.valueOf(costSetMap.get("cost12"));
-                }
-                if(record.getClassTime10() != null && record.getClassTime10() > 0){
-                    reduceTimeAmount = BigDecimal.valueOf(record.getClassTime10()).multiply(dkCost);
-                }
+                {
+                    //计算该老师发起的事假、病假顶课数据
+                    List<CourseListVo> substituteList = allSubstituteList.stream().filter(x -> x.getExchangeTeacherId().equals(teacher.getId()))
+                            .collect(Collectors.toList());
+                    Double reduceTime = 0d;//顶课课时
+                    Double bdkClassTime = 0d;//发起顶课的数量,只统计事假和病假的数量
+                    for (CourseListVo courseListVo : substituteList) {
+                        Set<LocalDate> deleteDates = deleteMap.get(courseListVo.getClassId());
+                        if(deleteDates !=null && deleteDates.contains(courseListVo.getScheduleDate())){
+                            continue;
+                        }
+                        reduceTime += weightSetMap.get(courseListVo.getShortName());
+                        if("sick_leave".equals(courseListVo.getReason()) || "leave_absence".equals(courseListVo.getReason())){
+                            bdkClassTime += weightSetMap.get(courseListVo.getShortName());
+                        }
+                    }
+
+                    Double dkClassTime = 0d;//去顶课的数量,所有顶课数量
+                    substituteList = allSubstituteList.stream().filter(x -> x.getTeacherId().equals(teacher.getId().toString()))
+                            .collect(Collectors.toList());
+                    for (CourseListVo courseListVo : substituteList) {
+                        Set<LocalDate> deleteDates = deleteMap.get(courseListVo.getClassId());
+                        if(deleteDates !=null && deleteDates.contains(courseListVo.getScheduleDate())){
+                            continue;
+                        }
+                        reduceTime = reduceTime - weightSetMap.get(courseListVo.getShortName());
 
+                        dkClassTime += weightSetMap.get(courseListVo.getShortName());
+                     }
+                    record.setClassTime10(reduceTime);
 
-                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"));
-                }
-                //计算被扣除的费用
-                if(record.getClassTime10() != null && record.getClassTime10() < 0){
-                    reduceTimeAmount = bdkCost.multiply(BigDecimal.valueOf(record.getClassTime10()));
+                    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;
@@ -955,6 +963,10 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
                 if(!scheduleDate.equals(localDate)){
                     continue;
                 }
+                String adjustType = object.get("adjustType").getAsString();
+                if("course_delete".equals(adjustType)){
+                    continue;
+                }
                 if(weightSetMap.get(object.get("type").getAsString()) == null){
                     sum += object.get("content").getAsDouble();
                     allClassTime += object.get("content").getAsDouble();
@@ -982,6 +994,10 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
                 if(!type.equals(typeStr)){
                     continue;
                 }
+                String adjustType = object.get("adjustType").getAsString();
+                if("course_delete".equals(adjustType)){
+                    continue;
+                }
                 sum += weightSetMap.get(typeStr);
             }
             columnTitleJson.addProperty("type", type);
@@ -1000,6 +1016,10 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
                 if (!courseTimeType.equals(typeStr)) {
                     continue;
                 }
+                String adjustType = object.get("adjustType").getAsString();
+                if("course_delete".equals(adjustType)){
+                    continue;
+                }
                 sum += object.get("content").getAsDouble();
             }
             columnTitleJson.addProperty("type", courseTimeType);

+ 3 - 2
src/main/java/com/xjrsoft/module/classtime/vo/CourseListVo.java

@@ -18,7 +18,7 @@ public class CourseListVo {
     @ApiModelProperty("班级id")
     private Long classId;
 
-    @ApiModelProperty("教师id")
+    @ApiModelProperty("教师id(被顶课老师)")
     private String teacherId;
 
     @ApiModelProperty("所属节次")
@@ -27,7 +27,7 @@ public class CourseListVo {
     @ApiModelProperty("调顶课类型")
     private String adjustType;
 
-    @ApiModelProperty("调顶课类型")
+    @ApiModelProperty("顶课原因")
     private String reason;
 
     @ApiModelProperty("上课日期")
@@ -42,4 +42,5 @@ public class CourseListVo {
     @ApiModelProperty("课程名称")
     private String courseName;
 
+
 }

+ 3 - 2
src/main/resources/mapper/classtime/ClassTimeStatisticsMapper.xml

@@ -53,12 +53,13 @@
     </select>
 
     <select id="getSubstituteList" parameterType="com.xjrsoft.module.classtime.entity.ClassTimeStatistics" resultType="com.xjrsoft.module.classtime.vo.CourseListVo">
-        SELECT t4.short_name,t3.schedule_date,t3.class_id,t1.user_id as teacher_id,t1.exchange_teacher_id FROM wf_course_adjust t1
+        SELECT t4.short_name,t3.schedule_date,t3.class_id,t1.user_id as teacher_id,t1.exchange_teacher_id,t1.reason FROM wf_course_adjust t1
         INNER JOIN xjr_workflow_form_relation t2 ON t1.id = t2.form_key_value
         INNER JOIN course_table_bak t3 ON t1.id = t3.wf_course_adjust_id
         LEFT JOIN class_time t4 ON t3.time_period = t4.time_period AND t3.time_number = t4.number
         WHERE t1.delete_mark = 0 AND t2.current_state = 'COMPLETED'
-        AND t1.reason IN ('sick _leave','leave_absence') and t1.adjust_type = 'course_substitute'
+        <!-- AND t1.reason IN ('sick_leave','leave_absence') -->
+        and t1.adjust_type = 'course_substitute'
         AND t3.schedule_date BETWEEN #{dto.startDate} and #{dto.endDate}
         AND t3.schedule_date NOT IN (
             SELECT DATE FROM holiday_date WHERE STATUS = 3