Quellcode durchsuchen

Merge branch 'pre'

dzx vor 1 Jahr
Ursprung
Commit
bdb55b2e0c

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

@@ -375,11 +375,15 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
                         .eq(CourseTableBak::getWfCourseAdjustId, courseAdjust.getId())
         );
         String[] courseIds = courseAdjust.getCourseId().split(",");
+
+        ArrayList<String> courseIdList = new ArrayList<>(Arrays.asList(courseIds));
+
         String[] exchangeCourseIds = null;
         int courseCount = courseIds.length;
         if (CourseAdjustTypeEnum.courseExchange.getCode().equals(courseAdjust.getAdjustType())) {
             exchangeCourseIds = courseAdjust.getExchangeCourseId().split(",");
             courseCount += exchangeCourseIds.length;
+            courseIdList.addAll(Arrays.asList(exchangeCourseIds));
         }
 
         if(list.isEmpty() || list.size() != courseCount){

+ 116 - 15
src/main/java/com/xjrsoft/module/ledger/controller/LedgerStatisticsController.java

@@ -19,7 +19,10 @@ import com.xjrsoft.module.ledger.vo.LedgerStatisticsListenExcelVo;
 import com.xjrsoft.module.ledger.vo.LedgerStatisticsListenVo;
 import com.xjrsoft.module.ledger.vo.LedgerStatisticsOvertimeExcelVo;
 import com.xjrsoft.module.ledger.vo.LedgerStatisticsOvertimeVo;
+import com.xjrsoft.module.organization.entity.Department;
 import com.xjrsoft.module.organization.entity.User;
+import com.xjrsoft.module.organization.entity.UserDeptRelation;
+import com.xjrsoft.module.organization.service.IUserDeptRelationService;
 import com.xjrsoft.module.organization.service.IUserService;
 import com.xjrsoft.module.organization.vo.UserPageVo;
 import com.xjrsoft.module.teacher.entity.BaseTeacher;
@@ -60,11 +63,24 @@ public class LedgerStatisticsController {
 
     private final IUserService userService;
     private final IWfTeacherleaveService teacherleaveService;
+    private final IUserDeptRelationService deptRelationService;
 
     @GetMapping(value = "/teacher-leave-page")
     @ApiOperation(value="教师请假统计(分页)")
     @SaCheckPermission("ledgerstatistics:detail")
     public RT<PageOutput<LedgerStatisticsLeaveVo>> teacherLeavePage(@Valid LedgerStatisticsPageDto dto){
+        List<Long> userIdList = new ArrayList<>();
+        if(StrUtil.isNotEmpty(dto.getDeptName())){
+            List<UserDeptRelation> userList = deptRelationService.list(
+                    new MPJLambdaWrapper<UserDeptRelation>()
+                            .select(UserDeptRelation::getId)
+                            .select(UserDeptRelation::getDeptId)
+                            .select(UserDeptRelation::getUserId)
+                            .innerJoin(Department.class, Department::getId, UserDeptRelation::getDeptId)
+                            .like(StrUtil.isNotEmpty(dto.getDeptName()), Department::getName, dto.getDeptName())
+            );
+            userIdList.addAll(userList.stream().map(UserDeptRelation::getUserId).collect(Collectors.toList()));
+        }
 
         LocalDateTime startTime = null;
         LocalDateTime endTime = null;
@@ -72,7 +88,7 @@ public class LedgerStatisticsController {
             startTime = dto.getStartDate().atTime(0,0,0);
             endTime = dto.getEndDate().atTime(23,59,59);
         }
-        Map<String, List<WfTeacherleave>> userLeaveMap = teacherleaveService.getUserLeaveList(startTime, endTime);
+        Map<String, List<WfTeacherleave>> userLeaveMap = teacherleaveService.getUserLeaveList(startTime, endTime, userIdList);
 
         List<String> userIds = new ArrayList<>(userLeaveMap.keySet());
         if(userIds.isEmpty()){
@@ -89,6 +105,7 @@ public class LedgerStatisticsController {
                                 " WHERE t1.delete_mark = 0 AND t2.user_id = t.id) as dept_name")
                         .innerJoin(BaseTeacher.class, BaseTeacher::getUserId, User::getId)
                         .like(StrUtil.isNotEmpty(dto.getName()), User::getName, dto.getName())
+                        .like(StrUtil.isNotEmpty(dto.getUserName()), User::getUserName, dto.getUserName())
                         .in(User::getId, userIds)
                         .orderByAsc(User::getId)
         );
@@ -113,13 +130,26 @@ public class LedgerStatisticsController {
     @ApiOperation(value="教师请假统计-导出")
     @SaCheckPermission("ledgerstatistics:detail")
     public ResponseEntity<byte[]> teacherLeaveExportQuery(@Valid @RequestBody LedgerStatisticsPageDto dto){
+        List<Long> userIdList = new ArrayList<>();
+        if(StrUtil.isNotEmpty(dto.getDeptName())){
+            List<UserDeptRelation> userList = deptRelationService.list(
+                    new MPJLambdaWrapper<UserDeptRelation>()
+                            .select(UserDeptRelation::getId)
+                            .select(UserDeptRelation::getDeptId)
+                            .select(UserDeptRelation::getUserId)
+                            .innerJoin(Department.class, Department::getId, UserDeptRelation::getDeptId)
+                            .like(StrUtil.isNotEmpty(dto.getDeptName()), Department::getName, dto.getDeptName())
+            );
+            userIdList.addAll(userList.stream().map(UserDeptRelation::getUserId).collect(Collectors.toList()));
+        }
+
         LocalDateTime startTime = null;
         LocalDateTime endTime = null;
         if(dto.getStartDate() != null && dto.getEndDate() != null){
             startTime = dto.getStartDate().atTime(0,0,0);
             endTime = dto.getEndDate().atTime(23,59,59);
         }
-        Map<String, List<WfTeacherleave>> userLeaveMap = teacherleaveService.getUserLeaveList(startTime, endTime);
+        Map<String, List<WfTeacherleave>> userLeaveMap = teacherleaveService.getUserLeaveList(startTime, endTime, userIdList);
 
         List<String> userIds = new ArrayList<>(userLeaveMap.keySet());
         if(userIds.isEmpty()){
@@ -140,6 +170,7 @@ public class LedgerStatisticsController {
                                 " WHERE t1.delete_mark = 0 AND t2.user_id = t.id) as dept_name")
                         .innerJoin(BaseTeacher.class, BaseTeacher::getUserId, User::getId)
                         .like(StrUtil.isNotEmpty(dto.getName()), User::getName, dto.getName())
+                        .like(StrUtil.isNotEmpty(dto.getUserName()), User::getUserName, dto.getUserName())
                         .in(User::getId, userIds)
                         .orderByAsc(User::getId)
         );
@@ -172,6 +203,20 @@ public class LedgerStatisticsController {
     @ApiOperation(value="教师加班统计(分页)")
     @SaCheckPermission("ledgerstatistics:detail")
     public RT<PageOutput<LedgerStatisticsOvertimeVo>> teacherOvertimePage(@Valid LedgerStatisticsPageDto dto){
+
+        List<Long> userIdList = new ArrayList<>();
+        if(StrUtil.isNotEmpty(dto.getDeptName())){
+            List<UserDeptRelation> list = deptRelationService.list(
+                    new MPJLambdaWrapper<UserDeptRelation>()
+                            .select(UserDeptRelation::getId)
+                            .select(UserDeptRelation::getDeptId)
+                            .select(UserDeptRelation::getUserId)
+                            .innerJoin(Department.class, Department::getId, UserDeptRelation::getDeptId)
+                            .like(StrUtil.isNotEmpty(dto.getDeptName()), Department::getName, dto.getDeptName())
+            );
+            userIdList.addAll(list.stream().map(UserDeptRelation::getUserId).collect(Collectors.toList()));
+        }
+
         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
 
         String sql = "SELECT t4.teacher_user_id,SUM(t.total_days) as total_days FROM wf_overtime t" +
@@ -190,6 +235,9 @@ public class LedgerStatisticsController {
                 "   OR ('" + startTime + "' > t.overtime_start_time and t.overtime_end_time > '" + endTime + "')" +
                 ")";
         }
+        if(!userIdList.isEmpty()){
+            sql = " AND t.teacher_user_id in (" + userIdList.toString().replace("[", "").replace("]", "") + ")";
+        }
         sql += " GROUP BY t4.teacher_user_id";
         List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
         Map<Long, String> userLeaveMap = list.stream().filter(x -> x.get("total_days") != null && x.get("teacher_user_id") != null).collect(
@@ -201,6 +249,7 @@ public class LedgerStatisticsController {
             return RT.ok(new PageOutput<>());
         }
 
+
         IPage<LedgerStatisticsOvertimeVo> userPage = userService.selectJoinListPage(ConventPage.getPage(dto), LedgerStatisticsOvertimeVo.class,
                 new MPJLambdaWrapper<User>()
                         .disableSubLogicDel()
@@ -211,6 +260,7 @@ public class LedgerStatisticsController {
                                 " WHERE t1.delete_mark = 0 AND t2.user_id = t.id) as dept_name")
                         .innerJoin(BaseTeacher.class, BaseTeacher::getUserId, User::getId)
                         .like(StrUtil.isNotEmpty(dto.getName()), User::getName, dto.getName())
+                        .like(StrUtil.isNotEmpty(dto.getUserName()), User::getUserName, dto.getUserName())
                         .in(User::getId, userIds)
                         .orderByAsc(User::getId)
         );
@@ -234,6 +284,18 @@ public class LedgerStatisticsController {
     @ApiOperation(value="教师加班统计-导出")
     @SaCheckPermission("ledgerstatistics:detail")
     public ResponseEntity<byte[]> teacherOvertimeExportQuery(@Valid @RequestBody LedgerStatisticsPageDto dto){
+        List<Long> userIdList = new ArrayList<>();
+        if(StrUtil.isNotEmpty(dto.getDeptName())){
+            List<UserDeptRelation> list = deptRelationService.list(
+                    new MPJLambdaWrapper<UserDeptRelation>()
+                            .select(UserDeptRelation::getId)
+                            .select(UserDeptRelation::getDeptId)
+                            .select(UserDeptRelation::getUserId)
+                            .innerJoin(Department.class, Department::getId, UserDeptRelation::getDeptId)
+                            .like(StrUtil.isNotEmpty(dto.getDeptName()), Department::getName, dto.getDeptName())
+            );
+            userIdList.addAll(list.stream().map(UserDeptRelation::getUserId).collect(Collectors.toList()));
+        }
         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
 
         String sql = "SELECT t4.teacher_user_id,SUM(t.total_days) as total_days FROM wf_overtime t" +
@@ -252,6 +314,9 @@ public class LedgerStatisticsController {
                     "   OR ('" + startTime + "' > t.overtime_start_time and t.overtime_end_time > '" + endTime + "')" +
                     ")";
         }
+        if(!userIdList.isEmpty()){
+            sql = " AND t.teacher_user_id in (" + userIdList.toString().replace("[", "").replace("]", "") + ")";
+        }
         sql += " GROUP BY t4.teacher_user_id";
         List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
         Map<Long, String> userLeaveMap = list.stream().filter(x -> x.get("total_days") != null && x.get("teacher_user_id") != null).collect(
@@ -277,6 +342,7 @@ public class LedgerStatisticsController {
                                 " WHERE t1.delete_mark = 0 AND t2.user_id = t.id) as dept_name")
                         .innerJoin(BaseTeacher.class, BaseTeacher::getUserId, User::getId)
                         .like(StrUtil.isNotEmpty(dto.getName()), User::getName, dto.getName())
+                        .like(StrUtil.isNotEmpty(dto.getUserName()), User::getUserName, dto.getUserName())
                         .in(User::getId, userIds)
                         .orderByAsc(User::getId)
         );
@@ -309,6 +375,18 @@ public class LedgerStatisticsController {
     @ApiOperation(value="教师听课统计(分页)")
     @SaCheckPermission("ledgerstatistics:detail")
     public RT<PageOutput<LedgerStatisticsListenVo>> teacherListenPage(@Valid LedgerStatisticsPageDto dto){
+        List<Long> userIdList = new ArrayList<>();
+        if(StrUtil.isNotEmpty(dto.getDeptName())){
+            List<UserDeptRelation> userList = deptRelationService.list(
+                    new MPJLambdaWrapper<UserDeptRelation>()
+                            .select(UserDeptRelation::getId)
+                            .select(UserDeptRelation::getDeptId)
+                            .select(UserDeptRelation::getUserId)
+                            .innerJoin(Department.class, Department::getId, UserDeptRelation::getDeptId)
+                            .like(StrUtil.isNotEmpty(dto.getDeptName()), Department::getName, dto.getDeptName())
+            );
+            userIdList.addAll(userList.stream().map(UserDeptRelation::getUserId).collect(Collectors.toList()));
+        }
         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
 
         String sql = "SELECT t1.user_id,count(t1.course_name) as course_count FROM wf_teacher_listen t1" +
@@ -319,6 +397,9 @@ public class LedgerStatisticsController {
             String endTime = dto.getEndDate().format(dtf);
             sql += " AND t1.schedule_date BETWEEN '" + startTime + "' and '" + endTime + "'";
         }
+        if(!userIdList.isEmpty()){
+            sql = " AND t1.user_id in (" + userIdList.toString().replace("[", "").replace("]", "") + ")";
+        }
         sql += " GROUP BY t1.user_id";
         List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
         Map<Long, String> userLeaveMap = list.stream().filter(x -> x.get("user_id") != null && x.get("course_count") != null).collect(
@@ -340,6 +421,7 @@ public class LedgerStatisticsController {
                                 " WHERE t1.delete_mark = 0 AND t2.user_id = t.id) as dept_name")
                         .innerJoin(BaseTeacher.class, BaseTeacher::getUserId, User::getId)
                         .like(StrUtil.isNotEmpty(dto.getName()), User::getName, dto.getName())
+                        .like(StrUtil.isNotEmpty(dto.getUserName()), User::getUserName, dto.getUserName())
                         .in(User::getId, userIds)
                         .orderByAsc(User::getId)
         );
@@ -359,22 +441,23 @@ public class LedgerStatisticsController {
         return RT.ok(pageOutput);
     }
 
-    @GetMapping(value = "/teacher-listen-export-query")
+    @PostMapping(value = "/teacher-listen-export-query")
     @ApiOperation(value="教师听课统计-导出")
     @SaCheckPermission("ledgerstatistics:detail")
     public ResponseEntity<byte[]> teacherListenExportQuery(@Valid @RequestBody LedgerStatisticsPageDto dto){
-        List<LedgerStatisticsListenVo> userPage = userService.selectJoinList(LedgerStatisticsListenVo.class,
-                new MPJLambdaWrapper<User>()
-                        .disableSubLogicDel()
-                        .select(User::getId)
-                        .select(User.class, x -> VoToColumnUtil.fieldsToColumns(UserPageVo.class).contains(x.getProperty()))
-                        .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")
-                        .innerJoin(BaseTeacher.class, BaseTeacher::getUserId, User::getId)
-                        .like(StrUtil.isNotEmpty(dto.getName()), User::getName, dto.getName())
-                        .orderByAsc(User::getId)
-        );
+        List<Long> userIdList = new ArrayList<>();
+        if(StrUtil.isNotEmpty(dto.getDeptName())){
+            List<UserDeptRelation> userList = deptRelationService.list(
+                    new MPJLambdaWrapper<UserDeptRelation>()
+                            .select(UserDeptRelation::getId)
+                            .select(UserDeptRelation::getDeptId)
+                            .select(UserDeptRelation::getUserId)
+                            .innerJoin(Department.class, Department::getId, UserDeptRelation::getDeptId)
+                            .like(StrUtil.isNotEmpty(dto.getDeptName()), Department::getName, dto.getDeptName())
+            );
+            userIdList.addAll(userList.stream().map(UserDeptRelation::getUserId).collect(Collectors.toList()));
+        }
+
         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
 
         String sql = "SELECT t1.user_id,count(t1.course_name) as course_count FROM wf_teacher_listen t1" +
@@ -385,6 +468,9 @@ public class LedgerStatisticsController {
             String endTime = dto.getEndDate().format(dtf);
             sql += " AND t1.schedule_date BETWEEN '" + startTime + "' and '" + endTime + "'";
         }
+        if(!userIdList.isEmpty()){
+            sql = " AND t1.user_id in (" + userIdList.toString().replace("[", "").replace("]", "") + ")";
+        }
         sql += " GROUP BY t1.user_id";
         List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
         Map<Long, String> userLeaveMap = list.stream().filter(x -> x.get("user_id") != null && x.get("course_count") != null).collect(
@@ -400,6 +486,21 @@ public class LedgerStatisticsController {
             return RT.fileStream(bot.toByteArray(), "teacher-leave" + ExcelTypeEnum.XLSX.getValue());
         }
 
+        List<LedgerStatisticsListenVo> userPage = userService.selectJoinList(LedgerStatisticsListenVo.class,
+                new MPJLambdaWrapper<User>()
+                        .disableSubLogicDel()
+                        .select(User::getId)
+                        .select(User.class, x -> VoToColumnUtil.fieldsToColumns(UserPageVo.class).contains(x.getProperty()))
+                        .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")
+                        .innerJoin(BaseTeacher.class, BaseTeacher::getUserId, User::getId)
+                        .like(StrUtil.isNotEmpty(dto.getName()), User::getName, dto.getName())
+                        .like(StrUtil.isNotEmpty(dto.getUserName()), User::getUserName, dto.getUserName())
+                        .in(User::getId, userIds)
+                        .orderByAsc(User::getId)
+        );
+
         List<LedgerStatisticsListenExcelVo> dataList = new ArrayList<>();
 
         int sortCode = 1;

+ 1 - 1
src/main/java/com/xjrsoft/module/teacher/mapper/WfTeacherleaveMapper.java

@@ -23,5 +23,5 @@ public interface WfTeacherleaveMapper extends MPJBaseMapper<WfTeacherleave> {
 
     WfTeacherleave getLeaveByUserId(@Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime, @Param("userId")Long userId);
 
-    List<WfTeacherleave> getUserLeaveList(@Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);
+    List<WfTeacherleave> getUserLeaveList(@Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime, @Param("userIds") List<Long> userIds);
 }

+ 1 - 1
src/main/java/com/xjrsoft/module/teacher/service/IWfTeacherleaveService.java

@@ -32,5 +32,5 @@ public interface IWfTeacherleaveService extends MPJBaseService<WfTeacherleave> {
 
     void updateAttendancestatus(Long id);
 
-    Map<String, List<WfTeacherleave>> getUserLeaveList(LocalDateTime startTime, LocalDateTime endTime);
+    Map<String, List<WfTeacherleave>> getUserLeaveList(LocalDateTime startTime, LocalDateTime endTime, List<Long> userIds);
 }

+ 3 - 2
src/main/java/com/xjrsoft/module/teacher/service/impl/WfTeacherleaveServiceImpl.java

@@ -21,6 +21,7 @@ import com.xjrsoft.module.teacher.service.IWfHeadTeacherLeaveService;
 import com.xjrsoft.module.teacher.service.IWfTeacherleaveService;
 import lombok.AllArgsConstructor;
 import lombok.Data;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Service;
 
 import java.text.SimpleDateFormat;
@@ -322,8 +323,8 @@ public class WfTeacherleaveServiceImpl extends MPJBaseServiceImpl<WfTeacherleave
     }
 
     @Override
-    public Map<String, List<WfTeacherleave>> getUserLeaveList(LocalDateTime startTime, LocalDateTime endTime) {
-        List<WfTeacherleave> leaveList = wfTeacherleaveMapper.getUserLeaveList(startTime, endTime);
+    public Map<String, List<WfTeacherleave>> getUserLeaveList(LocalDateTime startTime, LocalDateTime endTime, List<Long> userIds) {
+        List<WfTeacherleave> leaveList = wfTeacherleaveMapper.getUserLeaveList(startTime, endTime, userIds);
         Map<String, List<WfTeacherleave>> result = leaveList.stream().collect(Collectors.groupingBy(WfTeacherleave::getUserId));
 
         return result;

+ 2 - 7
src/main/resources/mapper/attendance/TeacherAttendanceRecordMapper.xml

@@ -5,12 +5,7 @@
 <mapper namespace="com.xjrsoft.module.attendance.mapper.TeacherAttendanceRecordMapper">
     <select id="getPage" parameterType="com.xjrsoft.module.attendance.dto.TeacherDetailsDto" resultType="com.xjrsoft.module.attendance.vo.TeacherStatisticsPageVo">
         SELECT t2.name AS teacher_name,t2.mobile,t1.attendance_status AS STATUS,t1.record_time,
-        replace(replace(t1.attendance_mode,1, '人脸'),2,'车辆') as attendance_mode,t1.car_number,t1.user_id,
-        (
-            select group_concat(c1.name) from xjr_department c1
-            inner join xjr_user_dept_relation c2 on c1.id = c2.dept_id
-            where c1.delete_mark = 0 and c2.user_id = t1.user_id
-        ) as dept_name
+        replace(replace(t1.attendance_mode,1, '人脸'),2,'车辆') as attendance_mode,t1.car_number,t1.user_id
         FROM teacher_attendance_record t1
         INNER JOIN xjr_user t2 ON t1.user_id = t2.id
         <if test="dto.deptId != null">
@@ -18,7 +13,7 @@
             and t3.dept_id = #{dto.deptId}
         </if>
         WHERE t1.delete_mark = 0
-        AND DATE_FORMAT(t1.attendance_date,'%Y-%m-%d') = #{dto.date}
+        AND t1.attendance_date = #{dto.date}
         AND t1.time_interval = #{dto.timePeriod}
         <if test="dto.name != null and dto.name != ''">
             and t2.name like concat('%', #{dto.name},'%')

+ 3 - 3
src/main/resources/mapper/courseTable/CourseTable.xml

@@ -103,12 +103,12 @@
         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
+        SELECT COUNT(t1.id) 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;
+        WHERE t2.wf_course_adjust_id = #{dto.wfCourseAdjustId}
+        AND t1.teacher_id LIKE concat('%', #{dto.teacherId},'%') AND t1.adjust_type IS NULL;
     </select>
 
 

+ 6 - 0
src/main/resources/mapper/teacher/WfTeacherleaveMapper.xml

@@ -55,5 +55,11 @@
                 OR (#{startTime} > leave_start_time and leave_end_time > #{endTime})
             )
         </if>
+        <if test="userIds != null and userIds.size() > 0">
+            AND t1.user_id in
+            <foreach item="userId" index="index" collection="userIds" open="(" separator="," close=")">
+                #{userId}
+            </foreach>
+        </if>
     </select>
 </mapper>

+ 11 - 6
src/test/java/com/xjrsoft/module/job/JianyuekbScheduleTaskTest2.java

@@ -20,6 +20,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;
@@ -137,7 +138,7 @@ class JianyuekbScheduleTaskTest2 {
         doExecute();
     }
     public void doExecute() {
-        String sql = "SELECT * FROM course_receive_msg WHERE delete_mark = 0 AND is_callback is null";
+        String sql = "SELECT * FROM course_receive_msg WHERE delete_mark = 0 AND is_callback = -1";
         List<Map<String, Object>> receiveMsgs = SqlRunnerAdapter.db().selectList(sql);
         if(receiveMsgs.isEmpty()){
             return;
@@ -316,7 +317,7 @@ class JianyuekbScheduleTaskTest2 {
                         .select(WfCourseAdjust.class, x -> VoToColumnUtil.fieldsToColumns(WfCourseAdjust.class).contains(x.getProperty()))
                         .innerJoin(WorkflowFormRelation.class, WorkflowFormRelation::getFormKeyValue, WfCourseAdjust::getId)
                         .in(!courseAdjustIds.isEmpty(), WfCourseAdjust::getId, courseAdjustIds)
-                        .between(WfCourseAdjust::getAdjustDate, startDate, endDate)
+                        .and(wq -> wq.between(WfCourseAdjust::getAdjustDate, startDate, endDate).or().between(WfCourseAdjust::getExchangeDate, startDate, endDate))
                         .eq(WorkflowFormRelation::getCurrentState, HistoricProcessInstance.STATE_COMPLETED)
         );
         List<WfCourseAdjust> cancelList = new ArrayList<>();//需要作废的申请
@@ -335,9 +336,6 @@ class JianyuekbScheduleTaskTest2 {
         }
 
         for (WfCourseAdjust courseAdjust : list) {
-            if(courseAdjust.getUserId() == 14954805813957L){
-                System.out.println(courseAdjust.getId());
-            }
             List<CourseTable> courseList = courseTableService.list(
                     new MPJLambdaWrapper<CourseTable>()
                             .select(CourseTable::getId)
@@ -353,7 +351,14 @@ class JianyuekbScheduleTaskTest2 {
                 exchangeCourseIds = courseAdjust.getExchangeCourseId().split(",");
                 courseCount += exchangeCourseIds.length;
             }
-            if(courseList.size() != courseCount){
+            Integer substituteTeacherCourseCount = courseTableService.getSubstituteTeacherCourseCountByParams(new ClassTeacherDto() {{
+                setWfCourseAdjustId(courseAdjust.getId());
+                setTeacherId(courseAdjust.getExchangeTeacherId());
+            }});
+            if(courseAdjust.getId() == 1865923439122493440L){
+                System.out.println(courseAdjust.getId());
+            }
+            if(courseList.size() != courseCount || substituteTeacherCourseCount > 0){
                 //表明课程变化了,需要重新申请,需要将原来的申请作废并进行微信消息通知
                 courseAdjust.setEnabledMark(EnabledMark.DISABLED.getCode());