dzx пре 1 година
родитељ
комит
579d1636e5

+ 103 - 45
src/main/java/com/xjrsoft/module/ledger/controller/LedgerStatisticsController.java

@@ -15,7 +15,9 @@ import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.ledger.dto.LedgerStatisticsPageDto;
 import com.xjrsoft.module.ledger.vo.LedgerStatisticsLeaveExcelVo;
 import com.xjrsoft.module.ledger.vo.LedgerStatisticsLeaveVo;
+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.User;
 import com.xjrsoft.module.organization.service.IUserService;
@@ -121,9 +123,9 @@ public class LedgerStatisticsController {
 
         List<String> userIds = new ArrayList<>(userLeaveMap.keySet());
         if(userIds.isEmpty()){
-            List<LedgerStatisticsLeaveVo> list = new ArrayList<>();
+            List<LedgerStatisticsLeaveExcelVo> list = new ArrayList<>();
             ByteArrayOutputStream bot = new ByteArrayOutputStream();
-            EasyExcel.write(bot, LedgerStatisticsLeaveVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(list);
+            EasyExcel.write(bot, LedgerStatisticsLeaveExcelVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(list);
 
             return RT.fileStream(bot.toByteArray(), "teacher-leave" + ExcelTypeEnum.XLSX.getValue());
         }
@@ -141,6 +143,7 @@ public class LedgerStatisticsController {
                         .in(User::getId, userIds)
                         .orderByAsc(User::getId)
         );
+        List<LedgerStatisticsLeaveExcelVo> dataList = new ArrayList<>();
 
         int sortCode = 1;
         for (LedgerStatisticsLeaveVo record : list) {
@@ -154,12 +157,13 @@ public class LedgerStatisticsController {
             String formattedValue = df.format(value);
             record.setLeaveDays(formattedValue);
             record.setSortCode(sortCode);
-//            BeanUtil.toBean(, LedgerStatisticsLeaveExcelVo.class);
+            LedgerStatisticsLeaveExcelVo bean = BeanUtil.toBean(record, LedgerStatisticsLeaveExcelVo.class);
+            dataList.add(bean);
             sortCode ++;
         }
 
         ByteArrayOutputStream bot = new ByteArrayOutputStream();
-        EasyExcel.write(bot, LedgerStatisticsLeaveExcelVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(list);
+        EasyExcel.write(bot, LedgerStatisticsLeaveExcelVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(dataList);
 
         return RT.fileStream(bot.toByteArray(), "teacher-leave" + ExcelTypeEnum.XLSX.getValue());
     }
@@ -168,18 +172,6 @@ public class LedgerStatisticsController {
     @ApiOperation(value="教师加班统计(分页)")
     @SaCheckPermission("ledgerstatistics:detail")
     public RT<PageOutput<LedgerStatisticsOvertimeVo>> teacherOvertimePage(@Valid LedgerStatisticsPageDto dto){
-        IPage<LedgerStatisticsOvertimeVo> userPage = userService.selectJoinListPage(ConventPage.getPage(dto), LedgerStatisticsOvertimeVo.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)
-        );
         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" +
@@ -203,6 +195,26 @@ public class LedgerStatisticsController {
         Map<Long, String> userLeaveMap = list.stream().filter(x -> x.get("total_days") != null && x.get("teacher_user_id") != null).collect(
                 Collectors.toMap(x -> Long.parseLong(x.get("teacher_user_id").toString()), x -> x.get("total_days").toString())
         );
+
+        List<Long> userIds = new ArrayList<>(userLeaveMap.keySet());
+        if(userIds.isEmpty()){
+            return RT.ok(new PageOutput<>());
+        }
+
+        IPage<LedgerStatisticsOvertimeVo> userPage = userService.selectJoinListPage(ConventPage.getPage(dto), LedgerStatisticsOvertimeVo.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())
+                        .in(User::getId, userIds)
+                        .orderByAsc(User::getId)
+        );
+
         for (LedgerStatisticsOvertimeVo record : userPage.getRecords()) {
             if(!userLeaveMap.containsKey(record.getId())){
                 continue;
@@ -222,18 +234,6 @@ public class LedgerStatisticsController {
     @ApiOperation(value="教师加班统计-导出")
     @SaCheckPermission("ledgerstatistics:detail")
     public ResponseEntity<byte[]> teacherOvertimeExportQuery(@Valid @RequestBody LedgerStatisticsPageDto dto){
-        List<LedgerStatisticsOvertimeVo> userPage = userService.selectJoinList(LedgerStatisticsOvertimeVo.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)
-        );
         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" +
@@ -254,9 +254,36 @@ public class LedgerStatisticsController {
         }
         sql += " GROUP BY t4.teacher_user_id";
         List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
-        Map<Long, String> userLeaveMap = list.stream().collect(
+        Map<Long, String> userLeaveMap = list.stream().filter(x -> x.get("total_days") != null && x.get("teacher_user_id") != null).collect(
                 Collectors.toMap(x -> Long.parseLong(x.get("teacher_user_id").toString()), x -> x.get("total_days").toString())
         );
+
+        List<Long> userIds = new ArrayList<>(userLeaveMap.keySet());
+        if(userIds.isEmpty()){
+            List<LedgerStatisticsOvertimeExcelVo> dataList = new ArrayList<>();
+            ByteArrayOutputStream bot = new ByteArrayOutputStream();
+            EasyExcel.write(bot, LedgerStatisticsOvertimeExcelVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(dataList);
+
+            return RT.fileStream(bot.toByteArray(), "teacher-leave" + ExcelTypeEnum.XLSX.getValue());
+        }
+
+        List<LedgerStatisticsOvertimeVo> userPage = userService.selectJoinList(LedgerStatisticsOvertimeVo.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())
+                        .in(User::getId, userIds)
+                        .orderByAsc(User::getId)
+        );
+
+        List<LedgerStatisticsOvertimeExcelVo> dataList = new ArrayList<>();
+
+        int sortCode = 1;
         for (LedgerStatisticsOvertimeVo record : userPage) {
             if(!userLeaveMap.containsKey(record.getId())){
                 continue;
@@ -266,10 +293,14 @@ public class LedgerStatisticsController {
             DecimalFormat df = new DecimalFormat(isInteger ? "0" : "#.##");
             String formattedValue = df.format(value);
             record.setTotalDays(formattedValue);
+            LedgerStatisticsOvertimeExcelVo bean = BeanUtil.toBean(record, LedgerStatisticsOvertimeExcelVo.class);
+            bean.setSortCode(sortCode);
+            dataList.add(bean);
+            sortCode ++;
         }
 
         ByteArrayOutputStream bot = new ByteArrayOutputStream();
-        EasyExcel.write(bot, LedgerStatisticsOvertimeVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(list);
+        EasyExcel.write(bot, LedgerStatisticsOvertimeExcelVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(dataList);
 
         return RT.fileStream(bot.toByteArray(), "teacher-overtime" + ExcelTypeEnum.XLSX.getValue());
     }
@@ -278,18 +309,6 @@ public class LedgerStatisticsController {
     @ApiOperation(value="教师听课统计(分页)")
     @SaCheckPermission("ledgerstatistics:detail")
     public RT<PageOutput<LedgerStatisticsListenVo>> teacherListenPage(@Valid LedgerStatisticsPageDto dto){
-        IPage<LedgerStatisticsListenVo> userPage = userService.selectJoinListPage(ConventPage.getPage(dto), 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)
-        );
         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" +
@@ -302,9 +321,29 @@ public class LedgerStatisticsController {
         }
         sql += " GROUP BY t1.user_id";
         List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
-        Map<Long, String> userLeaveMap = list.stream().collect(
+        Map<Long, String> userLeaveMap = list.stream().filter(x -> x.get("user_id") != null && x.get("course_count") != null).collect(
                 Collectors.toMap(x -> Long.parseLong(x.get("user_id").toString()), x -> x.get("course_count").toString())
         );
+
+        List<Long> userIds = new ArrayList<>(userLeaveMap.keySet());
+        if(userIds.isEmpty()){
+            return RT.ok(new PageOutput<>());
+        }
+
+        IPage<LedgerStatisticsListenVo> userPage = userService.selectJoinListPage(ConventPage.getPage(dto), 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())
+                        .in(User::getId, userIds)
+                        .orderByAsc(User::getId)
+        );
+
         for (LedgerStatisticsListenVo record : userPage.getRecords()) {
             if(!userLeaveMap.containsKey(record.getId())){
                 continue;
@@ -348,9 +387,23 @@ public class LedgerStatisticsController {
         }
         sql += " GROUP BY t1.user_id";
         List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
-        Map<Long, String> userLeaveMap = list.stream().collect(
+        Map<Long, String> userLeaveMap = list.stream().filter(x -> x.get("user_id") != null && x.get("course_count") != null).collect(
                 Collectors.toMap(x -> Long.parseLong(x.get("user_id").toString()), x -> x.get("course_count").toString())
         );
+
+        List<Long> userIds = new ArrayList<>(userLeaveMap.keySet());
+        if(userIds.isEmpty()){
+            List<LedgerStatisticsListenExcelVo> dataList = new ArrayList<>();
+            ByteArrayOutputStream bot = new ByteArrayOutputStream();
+            EasyExcel.write(bot, LedgerStatisticsListenExcelVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(dataList);
+
+            return RT.fileStream(bot.toByteArray(), "teacher-leave" + ExcelTypeEnum.XLSX.getValue());
+        }
+
+        List<LedgerStatisticsListenExcelVo> dataList = new ArrayList<>();
+
+        int sortCode = 1;
+
         for (LedgerStatisticsListenVo record : userPage) {
             if(!userLeaveMap.containsKey(record.getId())){
                 continue;
@@ -360,10 +413,15 @@ public class LedgerStatisticsController {
             DecimalFormat df = new DecimalFormat(isInteger ? "0" : "#.##");
             String formattedValue = df.format(value);
             record.setCourseCount(formattedValue);
+
+            LedgerStatisticsListenExcelVo bean = BeanUtil.toBean(record, LedgerStatisticsListenExcelVo.class);
+            bean.setSortCode(sortCode);
+            dataList.add(bean);
+            sortCode ++;
         }
 
         ByteArrayOutputStream bot = new ByteArrayOutputStream();
-        EasyExcel.write(bot, LedgerStatisticsListenVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(list);
+        EasyExcel.write(bot, LedgerStatisticsListenExcelVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(dataList);
 
         return RT.fileStream(bot.toByteArray(), "teacher-listen" + ExcelTypeEnum.XLSX.getValue());
     }

+ 37 - 0
src/main/java/com/xjrsoft/module/ledger/vo/LedgerStatisticsListenExcelVo.java

@@ -0,0 +1,37 @@
+package com.xjrsoft.module.ledger.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+* @title: 台账配置表分页查询入参
+* @Author dzx
+* @Date: 2024-03-06
+* @Version 1.0
+*/
+@Data
+public class LedgerStatisticsListenExcelVo extends LedgerStatisticsPageVo{
+
+    @ExcelProperty("序号")
+    @ApiModelProperty("序号")
+    private Integer sortCode;
+
+    @ExcelProperty("请假人")
+    @ApiModelProperty("请假人")
+    private String name;
+
+    @ExcelProperty("工号")
+    @ApiModelProperty("工号")
+    private String userName;
+
+    @ExcelProperty("所属部门")
+    @ApiModelProperty("所属部门")
+    private String deptName;
+
+    @ExcelProperty("听课次数")
+    @ApiModelProperty("听课次数")
+    private String courseCount;
+
+}

+ 37 - 0
src/main/java/com/xjrsoft/module/ledger/vo/LedgerStatisticsOvertimeExcelVo.java

@@ -0,0 +1,37 @@
+package com.xjrsoft.module.ledger.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+* @title: 台账配置表分页查询入参
+* @Author dzx
+* @Date: 2024-03-06
+* @Version 1.0
+*/
+@Data
+public class LedgerStatisticsOvertimeExcelVo{
+
+    @ExcelProperty("序号")
+    @ApiModelProperty("序号")
+    private Integer sortCode;
+
+    @ExcelProperty("请假人")
+    @ApiModelProperty("请假人")
+    private String name;
+
+    @ExcelProperty("工号")
+    @ApiModelProperty("工号")
+    private String userName;
+
+    @ExcelProperty("所属部门")
+    @ApiModelProperty("所属部门")
+    private String deptName;
+
+    @ExcelProperty("加班天数")
+    @ApiModelProperty("加班天数")
+    private String totalDays;
+
+}