dzx 1 år sedan
förälder
incheckning
0fac4f5f65

+ 4 - 3
src/main/java/com/xjrsoft/module/attendance/controller/TeacherStatisticsController.java

@@ -88,6 +88,9 @@ public class TeacherStatisticsController {
         }else{
             MPJLambdaWrapper<User> queryUser = new MPJLambdaWrapper<>();
             queryUser.disableSubLogicDel().distinct()
+                    .select(" (SELECT GROUP_CONCAT(t1.name) FROM xjr_department t1" +
+                            " INNER JOIN xjr_user_dept_relation t2 ON t1.id = t2.dept_id" +
+                            " WHERE t1.delete_mark = 0 AND t2.user_id = t.id) as dept_name")
                     .eq(ObjectUtil.isNotNull(dto.getDeptId()), UserDeptRelation::getDeptId, dto.getDeptId())
                     .eq(StrUtil.isNotEmpty(dto.getAttendanceMode()), AttendanceUserRelation::getAttendanceMode, dto.getAttendanceMode())
                     .like(StrUtil.isNotEmpty(dto.getCarNumber()), AttendanceUserRelation::getCarNumber, dto.getCarNumber())
@@ -95,11 +98,9 @@ public class TeacherStatisticsController {
                     .selectAs(User::getName, TeacherStatisticsPageVo::getTeacherName)
                     .selectAs(User::getId, TeacherStatisticsPageVo::getUserId)
                     .selectAs(User::getMobile, TeacherStatisticsPageVo::getMobile)
-                    .selectAs(Department::getName, TeacherStatisticsPageVo::getDeptName)
                     .innerJoin(BaseTeacher.class, BaseTeacher::getUserId, User::getId)
                     .innerJoin(UserDeptRelation.class, UserDeptRelation::getUserId, User::getId)
-                    .leftJoin(AttendanceUserRelation.class, AttendanceUserRelation::getUserId, User::getId)
-                    .leftJoin(Department.class, Department::getId, UserDeptRelation::getDeptId);
+                    .leftJoin(AttendanceUserRelation.class, AttendanceUserRelation::getUserId, User::getId);
             IPage<TeacherStatisticsPageVo> voIPage = xjrUserService.selectJoinListPage(ConventPage.getPage(dto), TeacherStatisticsPageVo.class, queryUser);
 
             if(dto.getDate() != null && !"".equals(dto.getDate())){

+ 6 - 0
src/main/java/com/xjrsoft/module/courseTable/dto/ClassTeacherDto.java

@@ -30,4 +30,10 @@ public class ClassTeacherDto implements Serializable {
 
     @ApiModelProperty("结束日期")
     private LocalDate endDate;
+
+    @ApiModelProperty("调顶课申请id")
+    private Long wfCourseAdjustId;
+
+    @ApiModelProperty("顶课老师id")
+    private Long teacherId;
 }

+ 2 - 0
src/main/java/com/xjrsoft/module/courseTable/mapper/CourseTableMapper.java

@@ -38,4 +38,6 @@ public interface CourseTableMapper extends MPJBaseMapper<CourseTable> {
     List<ClassTeacherVo> getClassTeacherIds(@Param("dto") ClassTeacherDto dto);
 
     List<Long> getExceptCourseIds(@Param("userId") Long userId);
+
+    Integer getSubstituteTeacherCourseCountByParams(@Param("dto") ClassTeacherDto dto);
 }

+ 5 - 0
src/main/java/com/xjrsoft/module/courseTable/service/ICourseTableService.java

@@ -2,6 +2,7 @@ package com.xjrsoft.module.courseTable.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.xjrsoft.module.courseTable.dto.ClassListDto;
+import com.xjrsoft.module.courseTable.dto.ClassTeacherDto;
 import com.xjrsoft.module.courseTable.entity.CourseTable;
 import com.xjrsoft.module.courseTable.vo.ClassListVo;
 import com.xjrsoft.module.schedule.dto.ClassOptionDto;
@@ -11,6 +12,7 @@ import com.xjrsoft.module.schedule.entity.WfCourseAdjust;
 import com.xjrsoft.module.schedule.vo.ClassOptionVo;
 import com.xjrsoft.module.schedule.vo.CourseListVo;
 import com.xjrsoft.module.schedule.vo.CourseTableVo;
+import org.apache.ibatis.annotations.Param;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -55,4 +57,7 @@ public interface ICourseTableService extends IService<CourseTable> {
     ByteArrayOutputStream scheduleWeekExportQuery(CourseTableDto dto);
 
 
+    Integer getSubstituteTeacherCourseCountByParams(ClassTeacherDto dto);
+
+
 }

+ 6 - 0
src/main/java/com/xjrsoft/module/courseTable/service/impl/CourseTableServiceImpl.java

@@ -36,6 +36,7 @@ import com.xjrsoft.module.base.mapper.BaseSemesterMapper;
 import com.xjrsoft.module.base.service.IBaseClassService;
 import com.xjrsoft.module.base.service.IBaseSemesterService;
 import com.xjrsoft.module.courseTable.dto.ClassListDto;
+import com.xjrsoft.module.courseTable.dto.ClassTeacherDto;
 import com.xjrsoft.module.courseTable.dto.CourseTableParse;
 import com.xjrsoft.module.courseTable.entity.ClassTime;
 import com.xjrsoft.module.courseTable.entity.CourseTable;
@@ -65,6 +66,7 @@ import com.xjrsoft.module.teacher.entity.XjrUser;
 import com.xjrsoft.module.teacher.service.ITeacherbaseManagerService;
 import lombok.AllArgsConstructor;
 import me.zhyd.oauth.log.Log;
+import org.apache.ibatis.annotations.Param;
 import org.apache.poi.ss.usermodel.BorderStyle;
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.CellStyle;
@@ -1249,4 +1251,8 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
 //        sheet.setColumnWidth(0, 335 * 256);
     }
 
+    public Integer getSubstituteTeacherCourseCountByParams(ClassTeacherDto dto){
+        return this.baseMapper.getSubstituteTeacherCourseCountByParams(dto);
+    }
+
 }

+ 8 - 1
src/main/java/com/xjrsoft/module/job/JianyuekbScheduleTask.java

@@ -19,6 +19,7 @@ import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.config.CommonPropertiesConfig;
 import com.xjrsoft.module.base.entity.BaseClass;
 import com.xjrsoft.module.base.service.IBaseClassService;
+import com.xjrsoft.module.courseTable.dto.ClassTeacherDto;
 import com.xjrsoft.module.courseTable.entity.CourseTable;
 import com.xjrsoft.module.courseTable.service.ICourseTableService;
 import com.xjrsoft.module.organization.dto.WeChatSendMessageDto;
@@ -297,6 +298,7 @@ public class JianyuekbScheduleTask {
      * 课程数据同步完之后,处理调课和顶课申请
      * 1、课程数据入库后,将新课表日期之后的的调课顶课数据再次更新到课表中
      * 2、筛选出课表变化了的调课和顶课申请,通知发起人
+     * 3、顶课数据,如果顶课日期那天那个老师没有课,但是新发布的课表又有课了,需要把原来的顶课数据作废
      */
     public void handleCourseAdjust(List<BaseClass> classList, String startDate, String endDate){
         List<Long> classIds = classList.stream().map(BaseClass::getId).collect(Collectors.toList());
@@ -348,7 +350,12 @@ public class JianyuekbScheduleTask {
                 exchangeCourseIds = courseAdjust.getExchangeCourseId().split(",");
                 courseCount += exchangeCourseIds.length;
             }
-            if(courseList.size() != courseCount){
+            //查询顶课老师在本条申请的课程中的节次是否包含课
+            Integer substituteTeacherCourseCount = courseTableService.getSubstituteTeacherCourseCountByParams(new ClassTeacherDto() {{
+                setWfCourseAdjustId(courseAdjust.getId());
+                setTeacherId(courseAdjust.getExchangeTeacherId());
+            }});
+            if(courseList.size() != courseCount || substituteTeacherCourseCount > 0){
                 //表明课程变化了,需要重新申请,需要将原来的申请作废并进行微信消息通知
                 courseAdjust.setEnabledMark(EnabledMark.DISABLED.getCode());
                 courseAdjust.setModifyDate(new Date());

+ 8 - 0
src/main/resources/mapper/courseTable/CourseTable.xml

@@ -102,6 +102,14 @@
         AND t1.schedule_date BETWEEN #{dto.startDate} AND #{dto.endDate}
         AND (t1.adjust_type = 'course_exchange' OR t1.adjust_type = 'course_replace' OR t1.adjust_type IS NULL)
     </select>
+    <select id="getSubstituteTeacherCourseCountByParams" parameterType="com.xjrsoft.module.courseTable.dto.ClassTeacherDto" resultType="java.lang.Integer">
+        SELECT COUNT(t1.*) FROM course_table t1
+        INNER JOIN course_table_bak t2 ON t1.schedule_date = t2.schedule_date
+        AND t1.time_number = t2.time_number
+        AND t1.time_period = t2.time_number
+        WHERE t1.wf_course_adjust_id = #{dto.wfCourseAdjustId}
+        AND t1.teacher_id LIKE concat('', #{dto.teacherId},'') AND t1.adjust_type IS NULL;
+    </select>
 
 
 </mapper>