dzx il y a 1 an
Parent
commit
ea036316a4

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

@@ -31,7 +31,7 @@ public interface ClassTimeStatisticsMapper extends MPJBaseMapper<ClassTimeStatis
      * 查询所有课时补充数据
      * @return 数据集合
      */
-    List<WfTeacherCourseTime> getWfTeacherCourseTimeList();
+    List<WfTeacherCourseTime> getWfTeacherCourseTimeList(@Param("dto") ClassTimeStatistics dto);
 
     List<CourseListVo> getCourseList(@Param("dto") ClassTimeStatistics dto);
 

+ 26 - 13
src/main/java/com/xjrsoft/module/classtime/service/impl/ClassTimeStatisticsServiceImpl.java

@@ -141,7 +141,7 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
             // 1、查询教师
             List<TeacherListVo> teacherList = this.baseMapper.getTeacherList();
             // 2、查询补课课时
-            List<WfTeacherCourseTime> courseTimeList = this.baseMapper.getWfTeacherCourseTimeList();
+            List<WfTeacherCourseTime> courseTimeList = this.baseMapper.getWfTeacherCourseTimeList(statistics);
             //按照课时补充类型分类统计
             Map<String, List<WfTeacherCourseTime>> courseTimeMap = courseTimeList.stream().collect(Collectors.groupingBy(WfTeacherCourseTime::getCourseTimeType));
             JsonParser parser = new JsonParser();
@@ -257,7 +257,6 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
                 record.setClassTime7(classTime7);
                 record.setClassTime8(classTime8);
                 record.setClassTime9(classTime9);
-                record.setClassTime10(classTime10);
                 record.setClassTime11(classTime11);
                 JsonObject weekDataJson = new JsonObject();
                 Double allTimes = 0d;
@@ -305,12 +304,8 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
                 weekDataJson.addProperty("allTimes", allTimes);
                 record.setWeekData(weekDataJson.toString());
 
-                //计算总课时
-                allClassTime = allClassTime + classTime7 + classTime8 + classTime9;
-                record.setAllClassTime(allClassTime);
-
                 //计算该老师发起的事假、病假顶课数据
-                List<CourseListVo> substituteList = allSubstituteList.stream().filter(x -> x.getTeacherId().equals(teacher.getId().toString()))
+                List<CourseListVo> substituteList = allSubstituteList.stream().filter(x -> x.getExchangeTeacherId().equals(teacher.getId()))
                         .collect(Collectors.toList());
                 Double reduceTime = 0d;
                 for (CourseListVo courseListVo : substituteList) {
@@ -321,6 +316,21 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
                     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);
+
                 //计算费用,根据聘用类型判断费用问题
                 Double classTimeAmount = 0d;
                 Double beyondClassTimeAmount = 0d;
@@ -358,13 +368,17 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
                 }
                 classTimeAmount += BigDecimal.valueOf(classTime9).multiply(wzxCost).doubleValue();
 
+                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"));
                 }
-                classTimeAmount += BigDecimal.valueOf(classTime10).multiply(dkCost).doubleValue();
+                if(record.getClassTime10() != null && record.getClassTime10() > 0){
+                    reduceTimeAmount = BigDecimal.valueOf(record.getClassTime10()).multiply(dkCost);
+                }
+
 
                 BigDecimal bdkCost = BigDecimal.ZERO;//顶课费用,被顶课老师扣钱
                 if("FB1601".equals(teacher.getEmployType())){
@@ -373,10 +387,9 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
                     bdkCost = BigDecimal.valueOf(costSetMap.get("cost14")==null?0:costSetMap.get("cost14"));
                 }
                 //计算被扣除的费用
-                BigDecimal reduceTimeAmount = bdkCost.multiply(BigDecimal.valueOf(reduceTime));
-
-                //计算总课时费用
-                classTimeAmount = BigDecimal.valueOf(classTimeAmount).subtract(reduceTimeAmount).doubleValue();
+                if(record.getClassTime10() != null && record.getClassTime10() < 0){
+                    reduceTimeAmount = bdkCost.multiply(BigDecimal.valueOf(record.getClassTime10()));
+                }
                 record.setClassTimeAmount(classTimeAmount);
                 //计算超出的课时,需要先计算出每个周的开始结束时间
                 BigDecimal ccksTime = BigDecimal.ZERO;//超出课时标准(每周)
@@ -403,7 +416,7 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
                 }
 
                 //计算总金额,课时费+超课时费
-                Double totalAmount = classTimeAmount + beyondClassTimeAmount - reduceTimeAmount.doubleValue();
+                Double totalAmount = classTimeAmount + beyondClassTimeAmount + reduceTimeAmount.doubleValue();
                 record.setTotalAmount(totalAmount);
 
                 insertList.add(record);

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

@@ -33,4 +33,7 @@ public class CourseListVo {
     @ApiModelProperty("上课日期")
     private LocalDate scheduleDate;
 
+    @ApiModelProperty("顶课老师")
+    private Long exchangeTeacherId;
+
 }

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

@@ -9,10 +9,11 @@
         WHERE t1.delete_mark = 0 AND t2.employ_type IN ('FB1601','FB1605','FB1609')
     </select>
 
-    <select id="getWfTeacherCourseTimeList" resultType="com.xjrsoft.module.oa.entity.WfTeacherCourseTime">
+    <select id="getWfTeacherCourseTimeList" parameterType="com.xjrsoft.module.classtime.entity.ClassTimeStatistics" resultType="com.xjrsoft.module.oa.entity.WfTeacherCourseTime">
         SELECT t1.* FROM wf_teacher_course_time t1
         INNER JOIN xjr_workflow_form_relation t2 ON t1.id = t2.form_key_value
         WHERE t2.current_state = 'COMPLETED'
+        and t1.schedule_date BETWEEN #{dto.startDate} and #{dto.endDate}
     </select>
 
     <select id="getCourseList" parameterType="com.xjrsoft.module.classtime.entity.ClassTimeStatistics" resultType="com.xjrsoft.module.classtime.vo.CourseListVo">
@@ -39,13 +40,17 @@
     </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 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 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 t3.schedule_date BETWEEN #{dto.startDate} and #{dto.endDate}
+        AND t3.schedule_date NOT IN (
+            SELECT DATE FROM holiday_date WHERE STATUS = 3
+            AND DATE BETWEEN #{dto.startDate} and #{dto.endDate}
+        )
     </select>