瀏覽代碼

台账统计调整

dzx 1 年之前
父節點
當前提交
963fc2a31f

+ 115 - 14
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)
         );
@@ -363,18 +445,19 @@ public class LedgerStatisticsController {
     @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},'%')

+ 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>