Browse Source

Merge branch 'pre'

dzx 1 year ago
parent
commit
5c15b09d0b

+ 19 - 0
src/main/java/com/xjrsoft/common/enums/CourseTimeTypeEnum.java

@@ -35,4 +35,23 @@ public enum CourseTimeTypeEnum {
         this.code = code;
         this.code = code;
         this.value = message;
         this.value = message;
     }
     }
+
+    public static String getValue(String code) {
+        for (CourseTimeTypeEnum item : values()) {
+            if (item.getCode().equals(code)) {
+                return  item.getValue();
+            }
+        }
+        return null;
+    }
+
+    public static String[] getCodes() {
+        String[] codes = {"CTT001", "CTT002", "CTT003", "CTT004", "CTT005", "周末培优"};
+        return codes;
+    }
+
+    public static String[] getValues() {
+        String[] values = {"教研会", "督导听课", "临近三年退休政策", "出题", "阅卷", "CTT006"};
+        return values;
+    }
 }
 }

+ 12 - 0
src/main/java/com/xjrsoft/module/classtime/controller/ClassTimeStatisticsController.java

@@ -17,7 +17,9 @@ import com.xjrsoft.module.classtime.dto.ClassTimeStatisticsPageDto;
 import com.xjrsoft.module.classtime.dto.RefreshStatisticsDto;
 import com.xjrsoft.module.classtime.dto.RefreshStatisticsDto;
 import com.xjrsoft.module.classtime.dto.UpdateClassTimeStatisticsDto;
 import com.xjrsoft.module.classtime.dto.UpdateClassTimeStatisticsDto;
 import com.xjrsoft.module.classtime.entity.ClassTimeStatistics;
 import com.xjrsoft.module.classtime.entity.ClassTimeStatistics;
+import com.xjrsoft.module.classtime.entity.ClassTimeStatisticsRecord;
 import com.xjrsoft.module.classtime.entity.ClassTimeStatisticsSet;
 import com.xjrsoft.module.classtime.entity.ClassTimeStatisticsSet;
+import com.xjrsoft.module.classtime.service.IClassTimeStatisticsRecordService;
 import com.xjrsoft.module.classtime.service.IClassTimeStatisticsService;
 import com.xjrsoft.module.classtime.service.IClassTimeStatisticsService;
 import com.xjrsoft.module.classtime.service.IClassTimeStatisticsSetService;
 import com.xjrsoft.module.classtime.service.IClassTimeStatisticsSetService;
 import com.xjrsoft.module.classtime.vo.ClassTimeStatisticsPageVo;
 import com.xjrsoft.module.classtime.vo.ClassTimeStatisticsPageVo;
@@ -56,6 +58,7 @@ public class ClassTimeStatisticsController {
 
 
     private final IClassTimeStatisticsSetService statisticsSetService;
     private final IClassTimeStatisticsSetService statisticsSetService;
     private final IClassTimeStatisticsService classTimeStatisticsService;
     private final IClassTimeStatisticsService classTimeStatisticsService;
+    private final IClassTimeStatisticsRecordService recordService;
 
 
     @GetMapping(value = "/page")
     @GetMapping(value = "/page")
     @ApiOperation(value="课时统计列表(分页)")
     @ApiOperation(value="课时统计列表(分页)")
@@ -191,6 +194,15 @@ public class ClassTimeStatisticsController {
         return RT.ok(recordList);
         return RT.ok(recordList);
     }
     }
 
 
+    @GetMapping(value = "/record-detail-info")
+    @ApiOperation(value="课时统计详情明细")
+    @SaCheckPermission("classtimestatistics:detail")
+    public RT<String> recordDetailInfo(@Valid RefreshStatisticsDto dto){
+        ClassTimeStatisticsRecord record = recordService.getById(dto.getId());
+        return RT.ok(record.getAllClassTimeData());
+    }
+
+
     @PostMapping(value = "/record-export-query")
     @PostMapping(value = "/record-export-query")
     @ApiOperation(value="课时统计详情导出")
     @ApiOperation(value="课时统计详情导出")
     @SaCheckPermission("classtimestatistics:detail")
     @SaCheckPermission("classtimestatistics:detail")

+ 2 - 0
src/main/java/com/xjrsoft/module/classtime/entity/ClassTimeStatisticsRecord.java

@@ -165,4 +165,6 @@ public class ClassTimeStatisticsRecord implements Serializable {
     @ApiModelProperty("调课")
     @ApiModelProperty("调课")
     private Double classTime11;
     private Double classTime11;
 
 
+    @ApiModelProperty("总课时数据")
+    private String allClassTimeData;
 }
 }

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

@@ -36,11 +36,18 @@ public interface ClassTimeStatisticsMapper extends MPJBaseMapper<ClassTimeStatis
     List<CourseListVo> getCourseList(@Param("dto") ClassTimeStatistics dto);
     List<CourseListVo> getCourseList(@Param("dto") ClassTimeStatistics dto);
 
 
     /**
     /**
-     * 查询被顶课老师的信息
+     * 查询顶课数据
      * @param dto
      * @param dto
      * @return
      * @return
      */
      */
     List<CourseListVo> getSubstituteList(@Param("dto") ClassTimeStatistics dto);
     List<CourseListVo> getSubstituteList(@Param("dto") ClassTimeStatistics dto);
 
 
     List<ClassTimeStatisticsRecordVo> getRecordList(@Param("id") Long id);
     List<ClassTimeStatisticsRecordVo> getRecordList(@Param("id") Long id);
+
+    /**
+     * 查询节假日补班课程
+     * @param dto
+     * @return
+     */
+    List<CourseListVo> getHolidayReplaceCourseList(@Param("dto") ClassTimeStatistics dto);
 }
 }

+ 15 - 0
src/main/java/com/xjrsoft/module/classtime/service/IClassTimeStatisticsRecordService.java

@@ -0,0 +1,15 @@
+package com.xjrsoft.module.classtime.service;
+
+import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.classtime.entity.ClassTimeStatisticsRecord;
+
+/**
+* @title: 课时统计
+* @Author dzx
+* @Date: 2024-09-26
+* @Version 1.0
+*/
+
+public interface IClassTimeStatisticsRecordService extends MPJBaseService<ClassTimeStatisticsRecord> {
+
+}

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

@@ -63,7 +63,7 @@ public class ClassTimeCalendarServiceImpl extends MPJBaseServiceImpl<ClassTimeCa
             List<CourseTable> insertList = new ArrayList<>();
             List<CourseTable> insertList = new ArrayList<>();
             for (CourseTable courseTable : list) {
             for (CourseTable courseTable : list) {
                 courseTable.setId(null);
                 courseTable.setId(null);
-                courseTable.setWeek(getNumberDayOfWeek(dto.getSupplementDate().getDayOfWeek()));
+                courseTable.setWeeks(getNumberDayOfWeek(dto.getSupplementDate().getDayOfWeek()));
                 courseTable.setWeeksCn(getChineseDayOfWeek(dto.getSupplementDate().getDayOfWeek()));
                 courseTable.setWeeksCn(getChineseDayOfWeek(dto.getSupplementDate().getDayOfWeek()));
                 courseTable.setScheduleDate(dto.getSupplementDate());
                 courseTable.setScheduleDate(dto.getSupplementDate());
                 courseTable.setAdjustType(CourseAdjustTypeEnum.courseReplace.getCode());
                 courseTable.setAdjustType(CourseAdjustTypeEnum.courseReplace.getCode());

+ 242 - 55
src/main/java/com/xjrsoft/module/classtime/service/impl/ClassTimeStatisticsServiceImpl.java

@@ -12,6 +12,7 @@ import com.google.gson.JsonParser;
 import com.xjrsoft.common.enums.CourseAdjustTypeEnum;
 import com.xjrsoft.common.enums.CourseAdjustTypeEnum;
 import com.xjrsoft.common.enums.CourseTimeTypeEnum;
 import com.xjrsoft.common.enums.CourseTimeTypeEnum;
 import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.common.exception.MyException;
+import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
 import com.xjrsoft.module.classtime.dto.AddClassTimeStatisticsDto;
 import com.xjrsoft.module.classtime.dto.AddClassTimeStatisticsDto;
 import com.xjrsoft.module.classtime.entity.ClassTimeDelete;
 import com.xjrsoft.module.classtime.entity.ClassTimeDelete;
 import com.xjrsoft.module.classtime.entity.ClassTimeStatistics;
 import com.xjrsoft.module.classtime.entity.ClassTimeStatistics;
@@ -42,11 +43,11 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
 import java.io.ByteArrayOutputStream;
 import java.io.ByteArrayOutputStream;
-import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.time.DayOfWeek;
 import java.time.DayOfWeek;
 import java.time.LocalDate;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Arrays;
 import java.util.Date;
 import java.util.Date;
@@ -174,9 +175,11 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
             }
             }
             //计算出这个时间段内一共多少周
             //计算出这个时间段内一共多少周
             List<WeekTimeRangeVo> weekTimeRangeVos = calculateNaturalWeeks(statistics.getStartDate(), statistics.getEndDate());
             List<WeekTimeRangeVo> weekTimeRangeVos = calculateNaturalWeeks(statistics.getStartDate(), statistics.getEndDate());
-
+            //取出所有的日期
+            List<LocalDate> allDateList = getDatesBetween(statistics.getStartDate(), statistics.getEndDate());
             //查询课程数据,排除开节假日的数据
             //查询课程数据,排除开节假日的数据
             List<CourseListVo> allCourseList = this.baseMapper.getCourseList(statistics);
             List<CourseListVo> allCourseList = this.baseMapper.getCourseList(statistics);
+            allCourseList.addAll(this.baseMapper.getHolidayReplaceCourseList(statistics));
 
 
             //查询删除课时的数据,将每个班删除的具体日期统计出来
             //查询删除课时的数据,将每个班删除的具体日期统计出来
             List<ClassTimeDelete> deleteList = deleteService.list(
             List<ClassTimeDelete> deleteList = deleteService.list(
@@ -199,7 +202,7 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
             }
             }
             DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
             DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
 
 
-            //查询所有老师发起顶课通过的数量(只查询事假、病假),也要分别计算早自习、晚自习、正课、如果日期出入课时删除中,也需要跳过
+            //查询所有老师发起顶课通过的数量,也要分别计算早自习、晚自习、正课、如果日期出入课时删除中,也需要跳过
             List<CourseListVo> allSubstituteList = this.baseMapper.getSubstituteList(statistics);
             List<CourseListVo> allSubstituteList = this.baseMapper.getSubstituteList(statistics);
             List<ClassTimeStatisticsRecord> insertList = new ArrayList<>();
             List<ClassTimeStatisticsRecord> insertList = new ArrayList<>();
             //循环教师,准备开始计算
             //循环教师,准备开始计算
@@ -221,20 +224,86 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
                     allClassTime = allClassTime + sum;
                     allClassTime = allClassTime + sum;
                     if(CourseTimeTypeEnum.CTT001.getCode().equals(courseTimeType)){
                     if(CourseTimeTypeEnum.CTT001.getCode().equals(courseTimeType)){
                         record.setClassTime1(sum);
                         record.setClassTime1(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", CourseTimeTypeEnum.CTT001.getValue());
+                            courseJson.addProperty("scheduleDate", localDate.format(formatter));
+                            courseJson.addProperty("content", sum1);
+                            courseJson.addProperty("adjustType", "");
+                            allClassTimeDataArray.add(courseJson);
+                        }
                     }else if(CourseTimeTypeEnum.CTT002.getCode().equals(courseTimeType)){
                     }else if(CourseTimeTypeEnum.CTT002.getCode().equals(courseTimeType)){
                         record.setClassTime2(sum);
                         record.setClassTime2(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", CourseTimeTypeEnum.CTT001.getValue());
+                            courseJson.addProperty("scheduleDate", localDate.format(formatter));
+                            courseJson.addProperty("content", sum1);
+                            courseJson.addProperty("adjustType", "");
+                            allClassTimeDataArray.add(courseJson);
+                        }
                     }else if(CourseTimeTypeEnum.CTT003.getCode().equals(courseTimeType)){
                     }else if(CourseTimeTypeEnum.CTT003.getCode().equals(courseTimeType)){
                         record.setClassTime3(sum);
                         record.setClassTime3(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", CourseTimeTypeEnum.CTT001.getValue());
+                            courseJson.addProperty("scheduleDate", localDate.format(formatter));
+                            courseJson.addProperty("content", sum1);
+                            courseJson.addProperty("adjustType", "");
+                            allClassTimeDataArray.add(courseJson);
+                        }
                     }else if(CourseTimeTypeEnum.CTT004.getCode().equals(courseTimeType)){
                     }else if(CourseTimeTypeEnum.CTT004.getCode().equals(courseTimeType)){
                         record.setClassTime4(sum);
                         record.setClassTime4(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", CourseTimeTypeEnum.CTT001.getValue());
+                            courseJson.addProperty("scheduleDate", localDate.format(formatter));
+                            courseJson.addProperty("content", sum1);
+                            courseJson.addProperty("adjustType", "");
+                            allClassTimeDataArray.add(courseJson);
+                        }
                     }else if(CourseTimeTypeEnum.CTT005.getCode().equals(courseTimeType)){
                     }else if(CourseTimeTypeEnum.CTT005.getCode().equals(courseTimeType)){
                         record.setClassTime5(sum);
                         record.setClassTime5(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", CourseTimeTypeEnum.CTT001.getValue());
+                            courseJson.addProperty("scheduleDate", localDate.format(formatter));
+                            courseJson.addProperty("content", sum1);
+                            courseJson.addProperty("adjustType", "");
+                            allClassTimeDataArray.add(courseJson);
+                        }
                     }else if(CourseTimeTypeEnum.CTT006.getCode().equals(courseTimeType)){
                     }else if(CourseTimeTypeEnum.CTT006.getCode().equals(courseTimeType)){
                         record.setClassTime6(sum);
                         record.setClassTime6(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", CourseTimeTypeEnum.CTT001.getValue());
+                            courseJson.addProperty("scheduleDate", localDate.format(formatter));
+                            courseJson.addProperty("content", sum1);
+                            courseJson.addProperty("adjustType", "");
+                            allClassTimeDataArray.add(courseJson);
+                        }
                     }
                     }
                 }
                 }
                 //早自习、正课、晚辅、顶课、调课
                 //早自习、正课、晚辅、顶课、调课
-                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> zkList = Arrays.asList("上1","上2","上3","上4","下1","下2","下3","下4");
                 List<String> wzxList = Arrays.asList("晚1","晚2","晚3");
                 List<String> wzxList = Arrays.asList("晚1","晚2","晚3");
@@ -247,7 +316,13 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
                 for (CourseListVo courseListVo : courseList) {
                 for (CourseListVo courseListVo : courseList) {
                     //如果这个课程数据包含在被删除的课时中,跳过不计算
                     //如果这个课程数据包含在被删除的课时中,跳过不计算
                     Set<LocalDate> deleteDates = deleteMap.get(courseListVo.getClassId());
                     Set<LocalDate> deleteDates = deleteMap.get(courseListVo.getClassId());
+                    JsonObject courseJson = new JsonObject();
                     if(deleteDates != null && deleteDates.contains(courseListVo.getScheduleDate())){
                     if(deleteDates != null && deleteDates.contains(courseListVo.getScheduleDate())){
+                        courseJson.addProperty("type", courseListVo.getShortName());
+                        courseJson.addProperty("scheduleDate", courseListVo.getScheduleDate().format(formatter));
+                        courseJson.addProperty("content", "");
+                        courseJson.addProperty("adjustType", "course_delete");
+                        allClassTimeDataArray.add(courseJson);
                         continue;
                         continue;
                     }
                     }
                     if("早自习".equals(courseListVo.getShortName())){
                     if("早自习".equals(courseListVo.getShortName())){
@@ -263,11 +338,10 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
                             classTime11 += weightSetMap.get(courseListVo.getShortName());
                             classTime11 += weightSetMap.get(courseListVo.getShortName());
                         }
                         }
                     }
                     }
-                    JsonObject courseJson = new JsonObject();
                     courseJson.addProperty("type", courseListVo.getShortName());
                     courseJson.addProperty("type", courseListVo.getShortName());
                     courseJson.addProperty("scheduleDate", courseListVo.getScheduleDate().format(formatter));
                     courseJson.addProperty("scheduleDate", courseListVo.getScheduleDate().format(formatter));
                     courseJson.addProperty("content", courseListVo.getClassName() + "," + courseListVo.getCourseName());
                     courseJson.addProperty("content", courseListVo.getClassName() + "," + courseListVo.getCourseName());
-                    courseJson.addProperty("adjustType", courseListVo.getAdjustType());
+                    courseJson.addProperty("adjustType", courseListVo.getAdjustType() == null?"":courseListVo.getAdjustType());
                     allClassTimeDataArray.add(courseJson);
                     allClassTimeDataArray.add(courseJson);
                 }
                 }
                 record.setClassTime7(classTime7);
                 record.setClassTime7(classTime7);
@@ -330,30 +404,6 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
                 weekDataJson.add("weekData", new Gson().toJsonTree(weekTimeRangeVos));
                 weekDataJson.add("weekData", new Gson().toJsonTree(weekTimeRangeVos));
                 weekDataJson.addProperty("allTimes", allTimes);
                 weekDataJson.addProperty("allTimes", allTimes);
                 record.setWeekData(weekDataJson.toString());
                 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;
                 allClassTime = allClassTime + classTime7 + classTime8 + classTime9;
                 record.setAllClassTime(allClassTime);
                 record.setAllClassTime(allClassTime);
@@ -394,29 +444,61 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
                     wzxCost = BigDecimal.valueOf(costSetMap.get("cost6"));
                     wzxCost = BigDecimal.valueOf(costSetMap.get("cost6"));
                 }
                 }
                 classTimeAmount += BigDecimal.valueOf(classTime9).multiply(wzxCost).doubleValue();
                 classTimeAmount += BigDecimal.valueOf(classTime9).multiply(wzxCost).doubleValue();
-
+                /**
+                 * 顶课:
+                 * 1、流程发起人(被顶老师)的课被顶课老师上了,那么被顶老师的课时就会-1,顶课老师课时就会+1
+                 * 2、顶课老师会根据规则额外加一笔费用,根据设置1课时额外加4元
+                 * 3、顶课类型为事假和病假的时候会扣除被顶老师的费用,根据设置为扣除4元
+                 */
                 BigDecimal reduceTimeAmount = BigDecimal.ZERO;
                 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 dkClassTime = 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());
+                        dkClassTime += weightSetMap.get(courseListVo.getShortName());
+                    }
 
 
 
 
-                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()));
+                    Double bdkClassTime = 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());
+                        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);
                 record.setClassTimeAmount(classTimeAmount);
                 //计算超出的课时,需要先计算出每个周的开始结束时间
                 //计算超出的课时,需要先计算出每个周的开始结束时间
                 BigDecimal ccksCost = BigDecimal.ZERO;
                 BigDecimal ccksCost = BigDecimal.ZERO;
@@ -434,21 +516,20 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
                 //计算总金额,课时费+超课时费
                 //计算总金额,课时费+超课时费
                 Double totalAmount = classTimeAmount + beyondClassTimeAmount + reduceTimeAmount.doubleValue();
                 Double totalAmount = classTimeAmount + beyondClassTimeAmount + reduceTimeAmount.doubleValue();
                 record.setTotalAmount(totalAmount);
                 record.setTotalAmount(totalAmount);
+                record.setAllClassTimeData(calculateClassTime(allClassTimeDataArray, weightSetMap, allDateList));
+                record.setCreateDate(new Date());
 
 
                 insertList.add(record);
                 insertList.add(record);
             }
             }
 
 
             if(!insertList.isEmpty()){
             if(!insertList.isEmpty()){
                 //先删除
                 //先删除
-                recordMapper.delete(
-                        new QueryWrapper<ClassTimeStatisticsRecord>().lambda()
-                                .eq(ClassTimeStatisticsRecord::getClassTimeStatisticsId, statistics.getId())
-                );
+                String sql = "delete from class_time_statistics_record where class_time_statistics_id = " + statistics.getId();
+                SqlRunnerAdapter.db().delete(sql);
                 for (ClassTimeStatisticsRecord record : insertList) {
                 for (ClassTimeStatisticsRecord record : insertList) {
                     recordMapper.insert(record);
                     recordMapper.insert(record);
                 }
                 }
             }
             }
-
             statistics.setAllClassTime(insertList.stream().filter(x -> x.getAllClassTime() != null).mapToDouble(ClassTimeStatisticsRecord::getAllClassTime).sum());
             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.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.setBeyondClassTimeAmount(insertList.stream().filter(x -> x.getBeyondClassTimeAmount() != null).mapToDouble(ClassTimeStatisticsRecord::getBeyondClassTimeAmount).sum());
@@ -479,7 +560,7 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
      * @return
      * @return
      */
      */
     @Override
     @Override
-    public byte[] recordExport(Long id) throws IOException {
+    public byte[] recordExport(Long id) {
         try {
         try {
             //1、查询数据
             //1、查询数据
             List<ClassTimeStatisticsRecordVo> recordList = this.baseMapper.getRecordList(id);
             List<ClassTimeStatisticsRecordVo> recordList = this.baseMapper.getRecordList(id);
@@ -849,4 +930,110 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
         return result;
         return result;
     }
     }
 
 
+    /**
+     * 取出所有日期
+     * @param startDate 开始时间
+     * @param endDate 结束时间
+     * @return 返回所有日期的集合
+     */
+    private static List<LocalDate> getDatesBetween(LocalDate startDate, LocalDate endDate) {
+        List<LocalDate> dates = new ArrayList<>();
+
+        long numOfDaysBetween = ChronoUnit.DAYS.between(startDate, endDate) + 1; // +1 包含结束日期
+        for (long i = 0; i < numOfDaysBetween; i++) {
+            dates.add(startDate.plusDays(i));
+        }
+
+        return dates;
+    }
+
+    String calculateClassTime(JsonArray allClassTimeDataArray, Map<String, Double> weightSetMap, List<LocalDate> allDateList){
+        JsonObject result = new JsonObject();
+        //计算纵向的合计
+        Double allClassTime = 0d;
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM.dd");
+        JsonArray rowTitle = new JsonArray();
+        for (LocalDate localDate : allDateList) {
+            JsonObject rowTitleJson = new JsonObject();
+            rowTitleJson.addProperty("scheduleDate", localDate.format(formatter));
+            Double sum = 0d;
+            for (JsonElement jsonElement : allClassTimeDataArray) {
+                JsonObject object = jsonElement.getAsJsonObject();
+                LocalDate scheduleDate = LocalDate.parse(object.get("scheduleDate").getAsString());
+                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();
+                }else{
+                    sum += weightSetMap.get(object.get("type").getAsString());
+                    allClassTime += weightSetMap.get(object.get("type").getAsString());
+                }
+            }
+            rowTitleJson.addProperty("content", sum);
+            rowTitleJson.addProperty("type", "");
+            rowTitleJson.addProperty("adjustType", "");
+            rowTitle.add(rowTitleJson);
+        }
+        result.add("rowTitle", rowTitle);
+        
+        //计算横向的合计
+        JsonArray columnTitle = new JsonArray();
+        for (String type : weightSetMap.keySet()) {
+            Double sum = 0d;
+            JsonObject columnTitleJson = new JsonObject();
+            for (JsonElement jsonElement : allClassTimeDataArray) {
+                JsonObject object = jsonElement.getAsJsonObject();
+                String typeStr = object.get("type").getAsString();
+
+                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);
+            columnTitleJson.addProperty("content", sum);
+            columnTitleJson.addProperty("scheduleDate", "");
+            columnTitleJson.addProperty("adjustType", "");
+            columnTitle.add(columnTitleJson);
+        }
+        String[] courseTimeTypes = CourseTimeTypeEnum.getValues();
+        for (String courseTimeType : courseTimeTypes) {
+            double sum = 0d;
+            JsonObject columnTitleJson = new JsonObject();
+            for (JsonElement jsonElement : allClassTimeDataArray) {
+                JsonObject object = jsonElement.getAsJsonObject();
+                String typeStr = object.get("type").getAsString();
+                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);
+            columnTitleJson.addProperty("content", sum);
+            columnTitleJson.addProperty("scheduleDate", "");
+            columnTitleJson.addProperty("adjustType", "");
+            columnTitle.add(columnTitleJson);
+        }
+
+        result.add("columnTitle", columnTitle);
+
+        result.add("data", allClassTimeDataArray);
+        result.addProperty("allClassTime", allClassTime);
+        return result.toString();
+    }
+
 }
 }

+ 20 - 0
src/main/java/com/xjrsoft/module/classtime/service/impl/ClassTimeStatisticsServiceRecordImpl.java

@@ -0,0 +1,20 @@
+package com.xjrsoft.module.classtime.service.impl;
+
+import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.module.classtime.entity.ClassTimeStatisticsRecord;
+import com.xjrsoft.module.classtime.mapper.ClassTimeStatisticsRecordMapper;
+import com.xjrsoft.module.classtime.service.IClassTimeStatisticsRecordService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+* @title: 课时统计
+* @Author dzx
+* @Date: 2024-09-26
+* @Version 1.0
+*/
+@Service
+@AllArgsConstructor
+public class ClassTimeStatisticsServiceRecordImpl extends MPJBaseServiceImpl<ClassTimeStatisticsRecordMapper, ClassTimeStatisticsRecord> implements IClassTimeStatisticsRecordService {
+
+}

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

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

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

@@ -28,6 +28,19 @@
         )
         )
     </select>
     </select>
 
 
+    <select id="getHolidayReplaceCourseList" parameterType="com.xjrsoft.module.classtime.entity.ClassTimeStatistics" resultType="com.xjrsoft.module.classtime.vo.CourseListVo">
+        SELECT t1.class_id, t1.teacher_id, t2.short_name,t1.adjust_type,t4.reason,t1.schedule_date,t1.class_name,t1.course_name FROM course_table t1
+        LEFT JOIN class_time t2 ON t1.time_period = t2.time_period AND t1.time_number = t2.number
+        LEFT JOIN course_table_bak t3 ON t1.id = t3.id
+        LEFT JOIN wf_course_adjust t4 ON t4.id = t3.wf_course_adjust_id
+        WHERE t1.schedule_date BETWEEN #{dto.startDate} and #{dto.endDate}
+        AND t1.adjust_type = 'course_replace'
+        AND t1.schedule_date IN (
+            SELECT DATE FROM holiday_date WHERE STATUS = 3
+            AND DATE BETWEEN #{dto.startDate} and #{dto.endDate}
+        )
+    </select>
+
     <select id="getReplaceCourseList" parameterType="com.xjrsoft.module.classtime.entity.ClassTimeStatistics" resultType="com.xjrsoft.module.classtime.vo.CourseListVo">
     <select id="getReplaceCourseList" parameterType="com.xjrsoft.module.classtime.entity.ClassTimeStatistics" resultType="com.xjrsoft.module.classtime.vo.CourseListVo">
         SELECT t1.class_id, t1.teacher_id, t2.short_name,t1.adjust_type,t4.reason,t1.schedule_date FROM course_table t1
         SELECT t1.class_id, t1.teacher_id, t2.short_name,t1.adjust_type,t4.reason,t1.schedule_date FROM course_table t1
         LEFT JOIN class_time t2 ON t1.time_period = t2.time_period AND t1.time_number = t2.number
         LEFT JOIN class_time t2 ON t1.time_period = t2.time_period AND t1.time_number = t2.number
@@ -40,12 +53,13 @@
     </select>
     </select>
 
 
     <select id="getSubstituteList" parameterType="com.xjrsoft.module.classtime.entity.ClassTimeStatistics" resultType="com.xjrsoft.module.classtime.vo.CourseListVo">
     <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 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
         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
         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'
         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 BETWEEN #{dto.startDate} and #{dto.endDate}
         AND t3.schedule_date NOT IN (
         AND t3.schedule_date NOT IN (
             SELECT DATE FROM holiday_date WHERE STATUS = 3
             SELECT DATE FROM holiday_date WHERE STATUS = 3

+ 60 - 1
src/test/java/com/xjrsoft/module/job/JianyuekbScheduleTaskTest.java

@@ -14,7 +14,6 @@ import com.xjrsoft.module.base.service.IBaseClassService;
 import com.xjrsoft.module.schedule.entity.CourseReceiveMsg;
 import com.xjrsoft.module.schedule.entity.CourseReceiveMsg;
 import com.xjrsoft.module.schedule.util.DataUtil;
 import com.xjrsoft.module.schedule.util.DataUtil;
 import com.xjrsoft.module.schedule.util.ScheduleUtil;
 import com.xjrsoft.module.schedule.util.ScheduleUtil;
-import org.camunda.bpm.engine.impl.util.JsonUtil;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Test;
 import org.junit.runner.RunWith;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -26,6 +25,7 @@ import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
 import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.HashSet;
@@ -258,4 +258,63 @@ class JianyuekbScheduleTaskTest {
         SqlRunnerAdapter.db().dynamicInsertBatch(tableName, insertList);
         SqlRunnerAdapter.db().dynamicInsertBatch(tableName, insertList);
 
 
     }
     }
+
+    @Test
+    void test2(){
+        String sql = "SELECT schedule_date,weeks,time_period,time_number,teacher_id,class_id,COUNT(*) FROM course_table WHERE 1 = 1" +
+                " GROUP BY schedule_date,weeks,time_period,time_number,teacher_id,class_id HAVING COUNT(*) > 1";
+        List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
+        for (Map<String, Object> objectMap : list) {
+            sql = "SELECT * FROM course_table WHERE schedule_date = '" + objectMap.get("schedule_date").toString() +"'" +
+                    " AND weeks = " + objectMap.get("weeks").toString() +
+                    " AND time_period = " + objectMap.get("time_period").toString() +
+                    " AND time_number = " + objectMap.get("time_number").toString() +
+                    " AND teacher_id = " + objectMap.get("teacher_id").toString() +
+                    " AND class_id = " + objectMap.get("class_id").toString();
+            List<Map<String, Object>> list2 = SqlRunnerAdapter.db().selectList(sql);
+
+            String delSql = "delete from course_table where id = " + list2.get(0).get("id").toString();
+            SqlRunnerAdapter.db().delete(delSql);
+        }
+    }
+
+    @Test
+    void test3(){
+        String sql = "SELECT * FROM wf_course_adjust t1" +
+                " INNER JOIN xjr_workflow_form_relation t2 ON t1.id = t2.form_key_value" +
+                " WHERE adjust_type = 'course_substitute' AND t1.delete_mark = 0 AND t2.current_state = 'COMPLETED'";
+        List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
+        for (Map<String, Object> objectMap : list) {
+            List<String> split = Arrays.asList(objectMap.get("course_id").toString().split(","));
+            sql = "update course_table set teacher_id = '" + objectMap.get("exchange_teacher_id").toString() + "' WHERE id in (" + split.toString().replace("[", "").replace("]", "") + ")";
+
+            SqlRunnerAdapter.db().update(sql);
+        }
+    }
+
+    @Test
+    void test4(){
+        String sql = "SELECT t1.* FROM wf_course_adjust t1" +
+                " INNER JOIN xjr_workflow_form_relation t2 ON t1.id = t2.form_key_value" +
+                " LEFT JOIN course_table_bak t3 ON t1.id = t3.wf_course_adjust_id" +
+                " WHERE t1.adjust_type = 'course_substitute' " +
+                " AND t2.current_state = 'COMPLETED'" +
+                " AND t1.delete_mark = 0 " +
+                " AND t3.wf_course_adjust_id IS NULL";
+        List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
+        String tableName = "course_table_bak";
+        for (Map<String, Object> objectMap : list) {
+            List<String> split = Arrays.asList(objectMap.get("course_id").toString().split(","));
+            String insertSql = "INSERT INTO course_table_bak(id,base_semester_id,teacher_id,teacher_name,course_id,course_name,class_id,class_name,WEEK,weeks," +
+                    " weeks_cn,time_period,time_number,site_id,site_name,STATUS,err_msg,create_date,modify_date,jianyue_id,source_data,schedule_date,teacher_serial_no," +
+                    " wf_course_adjust_id,adjust_type)" +
+                    " SELECT id,base_semester_id,teacher_id,teacher_name,course_id,course_name,class_id,class_name,WEEK,weeks," +
+                    " weeks_cn,time_period,time_number,site_id,site_name,STATUS,err_msg,create_date,modify_date,jianyue_id,source_data,schedule_date,teacher_serial_no," +
+                    " " + objectMap.get("id").toString() + ",'course_substitute' FROM course_table " +
+                    " WHERE id IN (" + split.toString().replace("[", "").replace("]", "") + ")";
+            SqlRunnerAdapter.db().insert(insertSql);
+        }
+    }
+
+
 }
 }

+ 8 - 1
src/test/java/com/xjrsoft/xjrsoftboot/KbTest.java

@@ -4,12 +4,14 @@ package com.xjrsoft.xjrsoftboot;
 import cn.hutool.core.lang.Console;
 import cn.hutool.core.lang.Console;
 import cn.hutool.poi.excel.ExcelUtil;
 import cn.hutool.poi.excel.ExcelUtil;
 import cn.hutool.poi.excel.sax.handler.RowHandler;
 import cn.hutool.poi.excel.sax.handler.RowHandler;
+import org.junit.jupiter.api.Test;
 
 
 import java.io.BufferedReader;
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileNotFoundException;
 import java.io.FileReader;
 import java.io.FileReader;
 import java.io.IOException;
 import java.io.IOException;
+import java.util.Arrays;
 import java.util.List;
 import java.util.List;
 import java.util.Scanner;
 import java.util.Scanner;
 
 
@@ -18,7 +20,12 @@ import java.util.Scanner;
  * @date 2023/12/8
  * @date 2023/12/8
  */
  */
 public class KbTest {
 public class KbTest {
-
+    @Test
+    void test4(){
+        String[] split2 = {"1836067931570090015","1836067931570090028","1836067931570090033"};
+        List<String> split = Arrays.asList(split2);
+        System.out.println(split.toString().replace("[", "").replace("]", ""));
+    }
     public static void main(String[] args){
     public static void main(String[] args){
 //        String filePath = "C:\\Users\\建刚\\Desktop\\课表\\1数据_接口.H";
 //        String filePath = "C:\\Users\\建刚\\Desktop\\课表\\1数据_接口.H";
 //
 //