Kaynağa Gözat

新增报表统计接口

liu 1 yıl önce
ebeveyn
işleme
034fdf0ea9

+ 5 - 0
src/main/java/com/template/api/SmartUserControllerAPI.java

@@ -274,4 +274,9 @@ public interface SmartUserControllerAPI {
     void statisticsCampusManageExport(HttpServletResponse response,@RequestParam Integer gradeId,@RequestParam Integer classId,@RequestParam String dateTime,@RequestParam Integer type,String keyWord);
 
 
+    @GetMapping(value = "/statisticsStatementManag")
+    @ApiOperation(value = "管理端——统计报表", notes = "管理端——在校统计", httpMethod = "GET")
+    CommonResult statisticsStatementManag(@RequestParam String dateTime);
+
+
 }

+ 92 - 0
src/main/java/com/template/controller/SmartUserController.java

@@ -3,6 +3,7 @@ package com.template.controller;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -5166,6 +5167,97 @@ public class SmartUserController implements SmartUserControllerAPI {
 
     }
 
+    @Override
+    @DESRespondSecret(validated = false)
+    public CommonResult statisticsStatementManag(String dateTime) {
+        DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        LocalDateTime startTime = LocalDateTime.parse(dateTime, dateTimeFormatter1);
+        LocalDateTime endTime = startTime.plusDays(1);
+
+        Integer totalAbnormal=0;
+        Integer totalNormal=0;
+        Integer totalAck=0;
+
+//        获取年级
+        List<SmartGrade> smartGrades = smartGradeService.list(new LambdaQueryWrapper<>());
+
+
+//        获取每个班的请假人数
+        List<StatisticsStatement> ackList= smartUserService.getUserAckTotal(startTime,endTime);
+
+//        获取每个班级的人数
+        List<StatisticsStatement> totalList= smartUserService.getUserClassTotal();
+
+//        获取每个班级的正常人数
+        List<StatisticsStatement> normalList= smartUserService.getUserNormalTotal(startTime,endTime);
+
+
+        ArrayList<StatisticsStatementVo> vos = new ArrayList<>();
+        for (StatisticsStatement statisticsStatement : totalList) {
+            StatisticsStatementVo vo = new StatisticsStatementVo();
+            Integer classId = statisticsStatement.getClassId();
+            Integer gradeId = statisticsStatement.getGradeId();
+            vo.setGradeId(gradeId);
+            vo.setClassId(classId);
+            vo.setGradeName(statisticsStatement.getGradeName());
+            vo.setClassName(statisticsStatement.getClassName());
+
+//            总数
+            Integer total = statisticsStatement.getCount();
+            Integer normal=0;
+            Integer ack=0;
+
+            for (StatisticsStatement statement : normalList) {
+                Integer classId1 = statement.getClassId();
+                Integer gradeId1 = statement.getGradeId();
+                if (classId.equals(classId1)&&gradeId.equals(gradeId1)) {
+                    normal=statement.getCount();
+                    break;
+                }
+            }
+
+            for (StatisticsStatement statement : ackList) {
+                Integer classId1 = statement.getClassId();
+                Integer gradeId1 = statement.getGradeId();
+                if (classId.equals(classId1)&&gradeId.equals(gradeId1)) {
+//                  请假数量
+                    ack=statement.getCount();
+                    break;
+                }
+            }
+            Integer abnormal=total-normal;
+            vo.setAck(ack);
+            vo.setNormal(normal);
+            vo.setAbnormal(abnormal);
+
+            totalAbnormal=totalAbnormal+abnormal;
+            totalNormal=totalNormal+normal;
+            totalAck=totalAck+ack;
+
+            vos.add(vo);
+
+        }
+        ArrayList<StatisticsStatementManagVo> ssmVos = new ArrayList<>();
+        for (SmartGrade smartGrade : smartGrades) {
+            StatisticsStatementManagVo vo = new StatisticsStatementManagVo();
+            Integer id = smartGrade.getId();
+            vo.setGradeName(smartGrade.getName());
+            List<StatisticsStatementVo> ownerClasses = vos.stream().filter(e -> e.getGradeId().equals(id)).collect(Collectors.toList());
+            if (ownerClasses != null && ownerClasses.size() > 0) {
+                vo.setVos(ownerClasses);
+            }
+            ssmVos.add(vo);
+        }
+
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("list",ssmVos);
+        jsonObject.put("totalAbnormal",totalAbnormal);
+        jsonObject.put("totalNormal",totalNormal);
+        jsonObject.put("totalAck",totalAck);
+
+        return CommonResult.ok(jsonObject);
+    }
+
 
     //endregion
 

+ 6 - 0
src/main/java/com/template/mapper/SmartUserMapper.java

@@ -73,4 +73,10 @@ public interface SmartUserMapper extends BaseMapper<SmartUser> {
     List<StatisticsCampusManageVo> getClassStudentManage(@Param("gradeId") Integer gradeId, @Param("classId")Integer classId,@Param("keyWord")String keyWord);
 
     IPage<SmartUserPageVo> getPage(Page<SmartUserPageVo> page,@Param("keyWord") String keyWord,@Param("schoolClass") String schoolClass);
+
+    List<StatisticsStatement> getUserClassTotal();
+
+    List<StatisticsStatement> getUserAckTotal(@Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);
+
+    List<StatisticsStatement> getUserNormalTotal(@Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);
 }

+ 12 - 0
src/main/java/com/template/model/vo/StatisticsStatement.java

@@ -0,0 +1,12 @@
+package com.template.model.vo;
+
+import lombok.Data;
+
+@Data
+public class StatisticsStatement {
+    private String className;//班级名称
+    private String gradeName;//年级名称
+    private Integer count;//总数
+    private Integer classId;//班级id
+    private Integer gradeId;//年级id
+}

+ 11 - 0
src/main/java/com/template/model/vo/StatisticsStatementManagVo.java

@@ -0,0 +1,11 @@
+package com.template.model.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class StatisticsStatementManagVo {
+    private String gradeName;
+    private List<StatisticsStatementVo> vos;
+}

+ 14 - 0
src/main/java/com/template/model/vo/StatisticsStatementVo.java

@@ -0,0 +1,14 @@
+package com.template.model.vo;
+
+import lombok.Data;
+
+@Data
+public class StatisticsStatementVo {
+    private Integer classId;//班级id
+    private Integer gradeId;//年级id
+    private String className;//班级名称
+    private String gradeName;//年级名称
+    private Integer  abnormal;
+    private Integer normal;
+    private Integer ack;
+}

+ 6 - 0
src/main/java/com/template/services/SmartUserService.java

@@ -176,4 +176,10 @@ public interface SmartUserService extends IService<SmartUser> {
     SmartUser queryParentByPhone(String phone);
 
     PageUtils<SmartUserPageVo> getPage(int currentPage, int pageCount, String keyWord, String schoolClass);
+
+    List<StatisticsStatement> getUserClassTotal();
+
+    List<StatisticsStatement> getUserAckTotal(LocalDateTime startTime, LocalDateTime endTime);
+
+    List<StatisticsStatement> getUserNormalTotal(LocalDateTime startTime, LocalDateTime endTime);
 }

+ 15 - 0
src/main/java/com/template/services/impl/SmartUserServiceImpl.java

@@ -470,5 +470,20 @@ public class SmartUserServiceImpl extends ServiceImpl<SmartUserMapper, SmartUser
         return new PageUtils(result);
     }
 
+    @Override
+    public List<StatisticsStatement> getUserClassTotal() {
+        return smartUserMapper.getUserClassTotal();
+    }
+
+    @Override
+    public List<StatisticsStatement> getUserAckTotal(LocalDateTime startTime, LocalDateTime endTime) {
+        return smartUserMapper.getUserAckTotal(startTime,endTime);
+    }
+
+    @Override
+    public List<StatisticsStatement> getUserNormalTotal(LocalDateTime startTime, LocalDateTime endTime) {
+        return smartUserMapper.getUserNormalTotal(startTime,endTime);
+    }
+
 
 }

+ 70 - 0
src/main/resources/mapper/template/SmartUserMapper.xml

@@ -474,5 +474,75 @@
             and su.name like '%' #{keyWord} '%'
         </if>
     </select>
+    <select id="getUserClassTotal" resultType="com.template.model.vo.StatisticsStatement">
+        SELECT
+            sc.`name` AS className,
+            sg.`name` AS gradeName,
+            count( su.id ) as count,
+            sc.id as classId,
+            sg.id as gradeId
+        FROM
+            smart_user su
+                LEFT JOIN smart_class sc ON sc.id = su.school_class
+                LEFT JOIN smart_grade sg ON sg.id = sc.grade_id
+        WHERE
+            su.deleted = 0
+          AND su.is_cancel = 0
+          AND su.identity_id = 2
+        GROUP BY
+            sc.id
+    </select>
+    <select id="getUserAckTotal" resultType="com.template.model.vo.StatisticsStatement">
+        SELECT
+            sc.`name` AS className,
+            sg.`name` AS gradeName,
+            count( su.id ) as count,
+            sc.id as classId,
+            sg.id as gradeId
+        FROM
+            `smart_user` su
+                LEFT JOIN smart_class sc ON sc.id = su.school_class
+                LEFT JOIN smart_grade sg ON sg.id = sc.grade_id
+                LEFT JOIN smart_attendance sat ON sat.user_id = su.id
+        WHERE
+            su.deleted = 0
+          AND su.is_cancel = 0
+          AND su.identity_id = 2
+          AND sat.initiate_time >= #{startTime}
+          AND #{endTime} >= sat.initiate_time
+          AND sat.`status` = 6
+        GROUP BY
+            sc.id
+    </select>
+    <select id="getUserNormalTotal" resultType="com.template.model.vo.StatisticsStatement">
+        SELECT
+            sc.`name` AS className,
+            sg.`name` AS gradeName,
+            count( su.id ) as count,
+            sc.id as classId,
+            sg.id as gradeId
+        FROM
+            `smart_user` su
+                LEFT JOIN smart_class sc ON sc.id = su.school_class
+                LEFT JOIN smart_grade sg ON sg.id = sc.grade_id
+                LEFT JOIN ( SELECT DISTINCT ( user_id ) FROM smart_access sa WHERE sa.date_time >= #{startTime} AND #{endTime} >= sa.date_time ) a ON su.id = a.user_id
+                LEFT JOIN ( SELECT DISTINCT ( user_id ) FROM smart_face_discern sfd WHERE sfd.date_time >= #{startTime} AND #{endTime} >= sfd.date_time ) b ON su.id = b.user_id
+                LEFT JOIN (
+                SELECT DISTINCT
+                    ( user_id )
+                FROM
+                    smart_attendance sat
+                WHERE
+                    ( sat.attend_time >= #{startTime} AND #{endTime} >= sat.attend_time AND sat.`status` != 3 )
+                   OR ( sat.initiate_time >= #{startTime} AND #{endTime} >= sat.initiate_time AND sat.`status` = 6 )
+            ) c ON su.id = c.user_id
+        WHERE
+            su.deleted = 0
+          AND su.is_cancel = 0
+          AND su.identity_id = 2
+          AND ( a.user_id IS NOT NULL OR b.user_id IS NOT NULL OR c.user_id IS NOT NULL )
+        GROUP BY
+            sc.id
+    </select>
 
 </mapper>