dzx před 1 rokem
rodič
revize
b3b7f3b8d5

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

@@ -0,0 +1,38 @@
+package com.xjrsoft.common.enums;
+
+/**
+ * @description: 教师课时补充类型 course_time_type
+ * @author: dzx
+ * @create: 2024年9月27日
+ * @Version 1.0
+ */
+public enum CourseTimeTypeEnum {
+
+    CTT001("CTT001", "教研会"),
+
+    CTT002("CTT002", "督导听课"),
+
+    CTT003("CTT003", "临近三年退休政策"),
+
+    CTT004("CTT004", "出题"),
+
+    CTT005("CTT005", "阅卷"),
+
+    CTT006("CTT006", "周末培优");
+
+    final String code;
+    final String value;
+
+    public String getCode() {
+        return this.code;
+    }
+
+    public String getValue() {
+        return this.value;
+    }
+
+    CourseTimeTypeEnum(final String code, final String message) {
+        this.code = code;
+        this.value = message;
+    }
+}

+ 5 - 4
src/main/java/com/xjrsoft/module/classtime/entity/ClassTimeDelete.java

@@ -10,6 +10,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.time.LocalDate;
 import java.util.Date;
 
 
@@ -77,8 +78,8 @@ public class ClassTimeDelete implements Serializable {
     /**
     * 类别(1:权重 2:费用设置)
     */
-    @ApiModelProperty("类别(1:权重 2:费用设置)")
-    private Integer classId;
+    @ApiModelProperty("班级id")
+    private Long classId;
     /**
     * 删除说明
     */
@@ -88,12 +89,12 @@ public class ClassTimeDelete implements Serializable {
     * 开始日期
     */
     @ApiModelProperty("开始日期")
-    private Date startDate;
+    private LocalDate startDate;
     /**
     * 结束日期
     */
     @ApiModelProperty("结束日期")
-    private Date endDate;
+    private LocalDate endDate;
 
 
 }

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

@@ -83,7 +83,7 @@ public class ClassTimeStatisticsRecord implements Serializable {
     * 聘用类型
     */
     @ApiModelProperty("聘用类型")
-    private Date employType;
+    private String employType;
     /**
     * 总课时
     */

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

@@ -2,8 +2,13 @@ package com.xjrsoft.module.classtime.mapper;
 
 import com.github.yulichang.base.MPJBaseMapper;
 import com.xjrsoft.module.classtime.entity.ClassTimeStatistics;
+import com.xjrsoft.module.classtime.vo.CourseListVo;
+import com.xjrsoft.module.classtime.vo.TeacherListVo;
+import com.xjrsoft.module.oa.entity.WfTeacherCourseTime;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+
 /**
 * @title: 课时统计
 * @Author dzx
@@ -13,4 +18,17 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface ClassTimeStatisticsMapper extends MPJBaseMapper<ClassTimeStatistics> {
 
+    /**
+     * 查询正式聘用和外聘教师的id、姓名、聘用方式
+     * @return 数据集合
+     */
+    List<TeacherListVo> getTeacherList();
+
+    /**
+     * 查询所有课时补充数据
+     * @return 数据集合
+     */
+    List<WfTeacherCourseTime> getWfTeacherCourseTimeList();
+
+    List<CourseListVo> getCourseList(ClassTimeStatistics dto);
 }

+ 107 - 0
src/main/java/com/xjrsoft/module/classtime/service/impl/ClassTimeStatisticsServiceImpl.java

@@ -4,21 +4,37 @@ import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonParser;
+import com.xjrsoft.common.enums.CourseTimeTypeEnum;
+import com.xjrsoft.common.enums.EnabledMark;
 import com.xjrsoft.module.classtime.dto.AddClassTimeStatisticsDto;
+import com.xjrsoft.module.classtime.entity.ClassTimeDelete;
 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.mapper.ClassTimeStatisticsMapper;
 import com.xjrsoft.module.classtime.mapper.ClassTimeStatisticsRecordMapper;
+import com.xjrsoft.module.classtime.service.IClassTimeDeleteService;
 import com.xjrsoft.module.classtime.service.IClassTimeStatisticsService;
 import com.xjrsoft.module.classtime.service.IClassTimeStatisticsSetService;
+import com.xjrsoft.module.classtime.vo.CourseListVo;
+import com.xjrsoft.module.classtime.vo.TeacherListVo;
+import com.xjrsoft.module.oa.entity.WfTeacherCourseTime;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.time.LocalDate;
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.CompletableFuture;
+import java.util.stream.Collectors;
 
 /**
 * @title: 课时统计
@@ -34,6 +50,9 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
     private final ClassTimeStatisticsRecordMapper recordMapper;
 
     private final IClassTimeStatisticsSetService statisticsSetService;
+
+    private final IClassTimeDeleteService deleteService;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean add(ClassTimeStatistics classTimeStatistics) {
@@ -94,10 +113,98 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
         return true;
     }
 
+    /**
+     * 1、通过xjr_user和base_teacher查询所有教师,查询聘用类型为:正式聘用和外聘的
+     * 2、根据统计的开始日期和结束日期查询课时补充(wf_teacher_course_time)中的教研会、督导听课、临近三年退休政策、出题、阅卷、周末培优
+     * 3、根绝统计的开始日期和结束日期查询课程表(course_table)中的所有课程数据
+     *
+     * @param statistics
+     * @return
+     */
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean refreshRecord(ClassTimeStatistics statistics) {
+        // 1、查询教师
+        List<TeacherListVo> teacherList = this.baseMapper.getTeacherList();
+        // 2、查询补课课时
+        List<WfTeacherCourseTime> courseTimeList = this.baseMapper.getWfTeacherCourseTimeList();
+        //按照课时补充类型分类统计
+        Map<String, List<WfTeacherCourseTime>> courseTimeMap = courseTimeList.stream().collect(Collectors.groupingBy(WfTeacherCourseTime::getCourseTimeType));
+        JsonParser parser = new JsonParser();
+
+        //费用设置jsonArray
+        JsonArray costSetArray = parser.parse(statistics.getCostSetJson()).getAsJsonArray();
+        //权重设置jsonArray
+        JsonArray weightSetArray = parser.parse(statistics.getWeightSetJson()).getAsJsonArray();
+
+        //查询课程数据
+        List<CourseListVo> allCourseList = this.baseMapper.getCourseList(statistics);
+
+        //查询删除课时的数据,将每个班删除的具体日期统计出来
+        List<ClassTimeDelete> deleteList = deleteService.list(
+                new QueryWrapper<ClassTimeDelete>().lambda()
+                        .ne(ClassTimeDelete::getEnabledMark, EnabledMark.DISABLED)
+        );
+        Map<Long, List<ClassTimeDelete>> deleteDataMap = deleteList.stream().collect(Collectors.groupingBy(ClassTimeDelete::getClassId));
+        Map<Long, Set<LocalDate>> deleteMap = new HashMap<>();//将每个班级计算出来所有被删除的日期存入map
+        for (Long classId : deleteDataMap.keySet()) {
+            List<LocalDate> dateList = new ArrayList<>();
+            for (ClassTimeDelete classTimeDelete : deleteDataMap.get(classId)) {
+                LocalDate currentDate = classTimeDelete.getStartDate();
+                while (!currentDate.isAfter(classTimeDelete.getEndDate())) {
+                    dateList.add(currentDate);
+                    currentDate = currentDate.plusDays(1); // 增加一天
+                }
+            }
+            //去重并存到map中
+            deleteMap.put(classId, new HashSet<>(dateList));
+        }
+
 
+        //循环教师,准备开始计算
+        for (TeacherListVo teacher : teacherList) {
+            ClassTimeStatisticsRecord record = new ClassTimeStatisticsRecord();
+            record.setUserId(teacher.getId());
+            record.setEmployType(teacher.getEmployType());
+
+            Double allClassTime = 0D;
+            //计算补充课时,算作正课课时,但是计算超出课时时不计算这部分
+            for (String courseTimeType : courseTimeMap.keySet()) {
+                List<WfTeacherCourseTime> courseTimes = courseTimeMap.get(courseTimeType);
+                double sum = courseTimes.stream()
+                        .filter(x -> x.getTeacherIds().contains(teacher.getId().toString()))
+                        .mapToDouble(WfTeacherCourseTime::getCourseTime).sum();
+                allClassTime = allClassTime + sum;
+                if(CourseTimeTypeEnum.CTT001.getCode().equals(courseTimeType)){
+                    record.setClassTime1(sum);
+                }else if(CourseTimeTypeEnum.CTT002.getCode().equals(courseTimeType)){
+                    record.setClassTime2(sum);
+                }else if(CourseTimeTypeEnum.CTT003.getCode().equals(courseTimeType)){
+                    record.setClassTime3(sum);
+                }else if(CourseTimeTypeEnum.CTT004.getCode().equals(courseTimeType)){
+                    record.setClassTime4(sum);
+                }else if(CourseTimeTypeEnum.CTT005.getCode().equals(courseTimeType)){
+                    record.setClassTime5(sum);
+                }else if(CourseTimeTypeEnum.CTT006.getCode().equals(courseTimeType)){
+                    record.setClassTime6(sum);
+                }
+            }
+
+            //查询出老师的课程
+            List<CourseListVo> courseList = allCourseList.stream()
+                    .filter(x -> x.getTeacherId().contains(teacher.getId().toString()))
+                    .collect(Collectors.toList());
+            //循环,统计出各项数据
+            for (CourseListVo courseListVo : courseList) {
+                //如果这个课程数据包含在被删除的课时中,跳过不计算
+                Set<LocalDate> deleteDates = deleteMap.get(courseListVo.getClassId());
+                if(deleteDates.contains(courseListVo.getScheduleDate())){
+                    continue;
+                }
+            }
+            record.setAllClassTime(allClassTime);
+            
+        }
         return true;
     }
 

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

@@ -0,0 +1,36 @@
+package com.xjrsoft.module.classtime.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDate;
+
+/**
+* @title: 教师课程信息
+* @Author dzx
+* @Date: 2024-09-26
+* @Version 1.0
+*/
+@Data
+public class CourseListVo {
+
+
+    @ApiModelProperty("班级id")
+    private Long classId;
+
+    @ApiModelProperty("教师id")
+    private String teacherId;
+
+    @ApiModelProperty("所属节次")
+    private String shortName;
+
+    @ApiModelProperty("调顶课类型")
+    private String adjustType;
+
+    @ApiModelProperty("调顶课类型")
+    private String reason;
+
+    @ApiModelProperty("上课日期")
+    private LocalDate scheduleDate;
+
+}

+ 27 - 0
src/main/java/com/xjrsoft/module/classtime/vo/TeacherListVo.java

@@ -0,0 +1,27 @@
+package com.xjrsoft.module.classtime.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+* @title: 教师信息
+* @Author dzx
+* @Date: 2024-09-26
+* @Version 1.0
+*/
+@Data
+public class TeacherListVo {
+
+
+    @ApiModelProperty("主键编号")
+    private Long id;
+
+    @ApiModelProperty("姓名")
+    private String name;
+
+    @ApiModelProperty("聘用方式")
+    private String employType;
+
+}

+ 3 - 1
src/main/java/com/xjrsoft/module/concat/controller/ConcatController.java

@@ -56,10 +56,11 @@ public class ConcatController {
                 }}
             );
         }
-        String sql = "SELECT t1.name, t1.mobile,t2.dept_id FROM xjr_user t1" +
+        String sql = "SELECT t1.name, t1.mobile,t2.dept_id,t6.name as gender_cn FROM xjr_user t1" +
                 " LEFT JOIN xjr_user_dept_relation t2 ON t1.id = t2.user_id" +
                 " LEFT JOIN xjr_user_role_relation t3 ON t1.id = t3.user_id" +
                 " LEFT JOIN xjr_department t5 ON t2.dept_id = t5.id" +
+                " left join xjr_dictionary_detail t6 on t1.gender = t6.code" +
                 " WHERE t1.delete_mark = 0" +
                 " AND t3.role_id = 2";
         if(dto.getDeptId() != null){
@@ -81,6 +82,7 @@ public class ConcatController {
                         setName(user.get("name").toString());
                         setMobile(user.get("mobile").toString());
                         setType(2);
+                        setGender(user.get("gender_cn").toString());
                     }}
             );
         }

+ 53 - 0
src/main/java/com/xjrsoft/module/oa/entity/WfTeacherCourseTime.java

@@ -0,0 +1,53 @@
+package com.xjrsoft.module.oa.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+
+/**
+* @title: 课时补充
+* @Author dzx
+* @Date: 2024年9月27日
+* @Version 1.0
+*/
+@Data
+@TableName("wf_teacher_course_time")
+@ApiModel(value = "wf_teacher_course_time", description = "课时补充")
+public class WfTeacherCourseTime implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("")
+    @TableId
+    private Long id;
+
+    @ApiModelProperty("教师(xjr_user)")
+    private Long applyUserId;
+
+    @ApiModelProperty("部门id(xjr_department)")
+    private Long deptId;
+
+    @ApiModelProperty("课时类型(xjr_dictionary_item[course_time_type])")
+    private String courseTimeType;
+
+    @ApiModelProperty("补充课时")
+    private Double courseTime;
+
+    @ApiModelProperty("上课日期")
+    private LocalDate scheduleDate;
+
+    @ApiModelProperty("备注")
+    private String remark;
+
+    @ApiModelProperty("说明")
+    private String explains;
+
+    @ApiModelProperty("补课人员")
+    private String teacherIds;
+}

+ 26 - 0
src/main/resources/mapper/classtime/ClassTimeStatisticsMapper.xml

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xjrsoft.module.classtime.mapper.ClassTimeStatisticsMapper">
+    <select id="getTeacherList" resultType="com.xjrsoft.module.classtime.vo.TeacherListVo">
+        SELECT t1.id,t1.name,t2.employ_type FROM xjr_user t1
+        INNER JOIN base_teacher t2 ON t1.id = t2.user_id
+        WHERE t1.delete_mark = 0 AND t2.employ_type IN ('FB1601','FB1602')
+    </select>
+
+    <select id="getWfTeacherCourseTimeList" 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'
+    </select>
+
+    <select id="getCourseList" 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
+        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.statrDate} and #{dto.endDate}
+    </select>
+
+</mapper>