snihwxf 1 miesiąc temu
rodzic
commit
47e4ed44ef

+ 78 - 61
src/main/java/com/xjrsoft/module/classtime/service/impl/ClassTimeStatisticsServiceImpl.java

@@ -958,6 +958,10 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
                 allClassTime = allClassTime + classTime7 + classTime8 + classTime9;
                 record.setAllClassTime(allClassTime);
 
+                double _classTime7 = insertCourseList.stream().filter(x -> Objects.equals(x.getUserId(), teacher.getId())).mapToDouble(ClassCourseTimeStatisticsRecord::getClassTime7).sum();
+                double _classTime8 = insertCourseList.stream().filter(x -> Objects.equals(x.getUserId(), teacher.getId())).mapToDouble(ClassCourseTimeStatisticsRecord::getClassTime8).sum();
+                double _classTime9 = insertCourseList.stream().filter(x -> Objects.equals(x.getUserId(), teacher.getId())).mapToDouble(ClassCourseTimeStatisticsRecord::getClassTime9).sum();
+
                 //计算费用,根据聘用类型判断费用问题
                 Double classTimeAmount = 0d;
                 Double beyondClassTimeAmount = 0d;
@@ -969,7 +973,7 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
                     zzxCost = BigDecimal.valueOf(costSetMap.get("cost2"));
                 }
 
-                classTimeAmount += BigDecimal.valueOf(classTime7).multiply(zzxCost).doubleValue();
+                classTimeAmount += BigDecimal.valueOf(classTime7-_classTime7).multiply(zzxCost).doubleValue();
 
                 BigDecimal zkCost = BigDecimal.ZERO;//正课费用
                 if ("FB1601".equals(teacher.getEmployType())) {
@@ -979,7 +983,7 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
                 }
 
                 double classTime = classTime8
-                        + courseTimeTypeTime;
+                        + courseTimeTypeTime-_classTime8;
                 classTimeAmount += BigDecimal.valueOf(classTime).multiply(zkCost).doubleValue();
 
                 BigDecimal wzxCost = BigDecimal.ZERO;//晚自习费用
@@ -988,7 +992,7 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
                 } else {//外聘FB1605、合作人员FB1609
                     wzxCost = BigDecimal.valueOf(costSetMap.get("cost6"));
                 }
-                classTimeAmount += BigDecimal.valueOf(classTime9).multiply(wzxCost).doubleValue();
+                classTimeAmount += BigDecimal.valueOf(classTime9-_classTime9).multiply(wzxCost).doubleValue();
                 /**
                  * 顶课:
                  * 1、流程发起人(被顶老师)的课被顶课老师上了,那么被顶老师的课时就会-1,顶课老师课时就会+1
@@ -1072,6 +1076,72 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
                     reduceTimeAmount = reduceTimeAmount.subtract(bdkCost.multiply(BigDecimal.valueOf(bdkClassTime)));
                 }
 
+
+
+                // 计算费用
+                for (ClassCourseTimeStatisticsRecord recordCourse : insertCourseList.stream().filter(item-> Objects.equals(item.getUserId(), teacher.getId())).collect(Collectors.toList())) {
+
+                    recordCourse.setClassTimeStatisticsId(statistics.getId());
+
+                    //费用设置jsonArray
+                    JsonArray _costSetArray = parser.parse(recordCourse.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(recordCourse.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(recordCourse.getClassTime7()).multiply(_zzxCost).doubleValue();
+                    _classTimeAmount += BigDecimal.valueOf(recordCourse.getClassTime8()).multiply(_zkCost).doubleValue();
+                    _classTimeAmount += BigDecimal.valueOf(recordCourse.getClassTime9()).multiply(_wzxCost).doubleValue();
+                    recordCourse.setClassTimeAmount(_classTimeAmount);
+
+
+                    BigDecimal _reduceTimeAmount = BigDecimal.valueOf(recordCourse.getClassTime20()).multiply(_dkCost);
+                    //计算被扣除的费用
+                    _reduceTimeAmount = _reduceTimeAmount.subtract(_bdkCost.multiply(BigDecimal.valueOf(recordCourse.getClassTime21())));
+
+//                //计算出总的超出课时并计算超课时费
+//                double _beyondClassTimeAmount = BigDecimal.valueOf(allCcksTime).multiply(_ccksCost).doubleValue();
+//
+//                if (!"FB1601".equals(record.getEmployType())) {
+//                    recordCourse.setBeyondClassTimeAmount(_beyondClassTimeAmount);
+//                }
+
+                    //计算总金额,课时费+超课时费
+//                Double totalAmount = _classTimeAmount + _beyondClassTimeAmount + _reduceTimeAmount.doubleValue();
+                    Double totalAmount = _classTimeAmount + _reduceTimeAmount.doubleValue();
+                    recordCourse.setTotalAmount(totalAmount);
+                }
+
+                double _classTimeAmount = insertCourseList.stream().filter(x -> Objects.equals(x.getUserId(), teacher.getId())).mapToDouble(ClassCourseTimeStatisticsRecord::getClassTimeAmount).sum();
+
+                classTimeAmount+=_classTimeAmount;
+
                 record.setClassTimeAmount(classTimeAmount);
                 //计算超出的课时,需要先计算出每个周的开始结束时间
                 BigDecimal ccksCost = BigDecimal.ZERO;
@@ -1095,65 +1165,7 @@ 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()) {
                 //先删除
@@ -1185,6 +1197,11 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
 
     // 检查数据
     private  ClassCourseTimeStatisticsRecord checkCourseSet(List<ClassCourseTimeStatisticsSet> classCourseTimeStatisticsSetList,List<ClassCourseTimeStatisticsRecord> insertCourseList,Long classId,Long  courseId,TeacherListVo teacher) {
+
+        if(classId==null|| courseId==null) {
+            return null;
+        }
+
         // 课程明细统计
         ClassCourseTimeStatisticsSet classCourseTimeStatisticsSet = classCourseTimeStatisticsSetList.stream()
                 .filter(item -> classId.equals(item.getClassId()) && courseId.equals(item.getCourseId()))

+ 2 - 2
src/main/resources/mapper/classtime/ClassCourseTimeStatisticsSetGroupMapper.xml

@@ -17,7 +17,7 @@
         ) AS class_names,
         (
         SELECT GROUP_CONCAT(c.name SEPARATOR ', ')
-        FROM base_course_subject c
+        FROM (SELECT DISTINCT course_id AS id,course_name AS name FROM course_table) c
         WHERE FIND_IN_SET(c.id, t1.course_ids) > 0
         <if test="dto.courseName != null and dto.courseName != ''">
             AND c.name like concat('%', #{dto.courseName},'%')
@@ -34,7 +34,7 @@
         </if>
         <if test="dto.courseName != null and dto.courseName != ''">
         AND EXISTS (
-        SELECT 1 FROM base_course_subject c
+        SELECT 1 FROM (SELECT DISTINCT course_id AS id,course_name AS name FROM course_table) c
         WHERE FIND_IN_SET(c.id, t1.course_ids) > 0
             AND c.name like concat('%', #{dto.courseName},'%')
         )

+ 1 - 1
src/main/resources/mapper/classtime/ClassCourseTimeStatisticsSetMapper.xml

@@ -6,7 +6,7 @@
     <select id="getPage" parameterType="com.xjrsoft.module.classtime.dto.ClassCourseTimeStatisticsSetPageDto" resultType="com.xjrsoft.module.classtime.vo.ClassCourseTimeStatisticsSetPageVo">
         SELECT t1.id,t1.class_id,t1.course_id,t1.json_content,t1.is_default,t2.name class_name,t3.name course_name FROM class_course_time_statistics_set t1
         INNER JOIN base_class t2 ON t1.class_id = t2.id
-        INNER JOIN base_course_subject t3 on t1.course_id=t3.id
+        INNER JOIN (SELECT DISTINCT course_id AS id,course_name AS name FROM course_table) t3 on t1.course_id=t3.id
         WHERE t1.delete_mark = 0
         <if test="dto.className != null and dto.className != ''">
             and t2.name like concat('%', #{dto.className},'%')

+ 6 - 0
src/main/resources/sqlScript/20251011_sql.sql

@@ -79,6 +79,12 @@ CREATE TABLE `class_course_time_statistics_record` (
   `class_time9` FLOAT(4,1) DEFAULT NULL COMMENT '晚辅(包含调顶课时)',
   `class_time10` FLOAT(4,1) DEFAULT NULL COMMENT '顶课',
   `class_time11` FLOAT(4,1) DEFAULT NULL COMMENT '调课',
+  `class_time20` FLOAT(4,1) DEFAULT NULL COMMENT 'dkClassTime',
+  `class_time21` FLOAT(4,1) DEFAULT NULL COMMENT 'bdkClassTime',
+  `class_time22` FLOAT(4,1) DEFAULT NULL COMMENT 'zkTimes',
+  `class_time23` FLOAT(4,1) DEFAULT NULL COMMENT 'wzxTimes',
+  `class_time24` FLOAT(4,1) DEFAULT NULL COMMENT 'tkTimes',
+  `class_time25` FLOAT(4,1) DEFAULT NULL COMMENT 'reduceTime',
 
 
   PRIMARY KEY (`id`) USING BTREE