liu 2 år sedan
förälder
incheckning
162d2f685e

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

@@ -256,4 +256,8 @@ public interface SmartUserControllerAPI {
     @ApiOperation(value = "保安端——学生查询", notes = "保安端——学生查询", httpMethod = "GET")
     CommonResult studentSelect(@RequestParam String keyWord);
 
+    @GetMapping(value = "/statisticsCampus")
+    @ApiOperation(value = "在校统计", notes = "在校统计", httpMethod = "GET")
+    CommonResult statisticsCampus(@RequestParam Integer classId,@RequestParam String dateTime);
+
 }

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

@@ -58,6 +58,7 @@ import java.nio.charset.Charset;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.Year;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -132,6 +133,8 @@ public class SmartUserController implements SmartUserControllerAPI {
     @Autowired
     private SmartOperationUserService smartOperationUserService;
 
+
+
     private static Logger logger = LoggerFactory.getLogger(SmartUserController.class);
 
     //region 开发自己导数据用的接口
@@ -4890,6 +4893,69 @@ public class SmartUserController implements SmartUserControllerAPI {
 
         return CommonResult.ok(list);
     }
+
+    @Override
+    @DESRespondSecret(validated = true)
+    public CommonResult statisticsCampus(Integer classId, String dateTime) {
+        DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        LocalDateTime startTime = LocalDateTime.parse(dateTime, dateTimeFormatter1);
+        LocalDateTime endTime = startTime.plusDays(1);
+//        正常
+        Set<StatisticsCampusVo> vos = new HashSet<>();
+
+//        查找门禁记录
+        List<StatisticsCampusVo> accessVos=smartUserService.getAccessStatisticsCampus(classId,startTime,endTime);
+        for (StatisticsCampusVo accessVo : accessVos) {
+            vos.add(accessVo);
+        }
+//        查找打卡记录
+        List<StatisticsCampusVo> attendanceVos=smartUserService.getAttendanceStatisticsCampus(classId,startTime,endTime);
+        for (StatisticsCampusVo attendanceVo : attendanceVos) {
+            vos.add(attendanceVo);
+        }
+//        查找人脸记录
+        List<StatisticsCampusVo> faceDiscernVos=smartUserService.getFaceDiscernStatisticsCampus(classId,startTime,endTime);
+        for (StatisticsCampusVo faceDiscernVo : faceDiscernVos) {
+            vos.add(faceDiscernVo);
+        }
+
+//        查找请假记录
+        List<StatisticsCampusVo> ackVos= smartUserService.getAckStatisticsCampus(classId,startTime,endTime);
+        for (StatisticsCampusVo ackVo : ackVos) {
+            vos.add(ackVo);
+        }
+
+//        查找该班级下的所有人
+        List<StatisticsCampusVo> campusVos= smartUserService.getClassStudent(classId);
+
+//        不在正常记录里面的就是异常记录
+        ArrayList<StatisticsCampusVo> abnormalVos = new ArrayList<>();
+        for (StatisticsCampusVo campusVo : campusVos) {
+            if (!vos.contains(campusVo)) {
+                abnormalVos.add(campusVo);
+            }
+        }
+
+
+        HashMap<String, Object> normal = new HashMap<>();
+        normal.put("date",vos);
+        normal.put("count",vos.size());
+
+        HashMap<String, Object> ack = new HashMap<>();
+        ack.put("date",ackVos);
+        ack.put("count",ackVos.size());
+
+        HashMap<String, Object> abnormal = new HashMap<>();
+        abnormal.put("date",abnormalVos);
+        abnormal.put("count",abnormalVos.size());
+
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("normal",normal);
+        jsonObject.put("ack",ack);
+        jsonObject.put("abnormal",abnormal);
+
+        return CommonResult.ok(jsonObject);
+    }
     //endregion
 
     //region 用户导出

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

@@ -9,6 +9,7 @@ import com.template.model.vo.*;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
+import java.time.LocalDateTime;
 import java.util.List;
 
 /**
@@ -51,4 +52,13 @@ public interface SmartUserMapper extends BaseMapper<SmartUser> {
 
     List<SmartUser> querySmartParentByIds(@Param("studentIds") List<Integer> studentIds);
 
+    List<StatisticsCampusVo> getAccessStatisticsCampus(@Param("classId") Integer classId,@Param("startTime") LocalDateTime startTime,@Param("endTime") LocalDateTime endTime);
+
+    List<StatisticsCampusVo> getAttendanceStatisticsCampus(@Param("classId") Integer classId,@Param("startTime") LocalDateTime startTime,@Param("endTime") LocalDateTime endTime);
+
+    List<StatisticsCampusVo> getFaceDiscernStatisticsCampus(@Param("classId") Integer classId,@Param("startTime") LocalDateTime startTime,@Param("endTime") LocalDateTime endTime);
+
+    List<StatisticsCampusVo> getAckStatisticsCampus(@Param("classId") Integer classId,@Param("startTime") LocalDateTime startTime,@Param("endTime") LocalDateTime endTime);
+
+    List<StatisticsCampusVo> getClassStudent(@Param("classId") Integer classId);
 }

+ 21 - 0
src/main/java/com/template/model/vo/StatisticsCampusVo.java

@@ -0,0 +1,21 @@
+package com.template.model.vo;
+
+import lombok.Data;
+
+@Data
+public class StatisticsCampusVo {
+    private Integer userId;
+
+    private String name;
+
+    private String cardNo;
+
+    @Override
+    public String toString() {
+        return "StatisticsCampusVo{" +
+                "userId=" + userId +
+                ", name='" + name + '\'' +
+                ", cardNo='" + cardNo + '\'' +
+                '}';
+    }
+}

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

@@ -8,6 +8,7 @@ import com.template.model.result.PageUtils;
 import com.template.model.vo.*;
 import org.apache.ibatis.annotations.Param;
 
+import java.time.LocalDateTime;
 import java.util.List;
 
 /**
@@ -144,5 +145,16 @@ public interface SmartUserService extends IService<SmartUser> {
 
     int queryStudentCount();
 
+
+    List<StatisticsCampusVo> getAccessStatisticsCampus(Integer classId, LocalDateTime startTime, LocalDateTime endTime);
+
+    List<StatisticsCampusVo> getAttendanceStatisticsCampus(Integer classId, LocalDateTime startTime, LocalDateTime endTime);
+
+    List<StatisticsCampusVo> getFaceDiscernStatisticsCampus(Integer classId, LocalDateTime startTime, LocalDateTime endTime);
+
+    List<StatisticsCampusVo> getAckStatisticsCampus(Integer classId, LocalDateTime startTime, LocalDateTime endTime);
+
+    List<StatisticsCampusVo> getClassStudent(Integer classId);
+
     List<SmartUser> queryTeachers();
 }

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

@@ -19,6 +19,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
+import java.time.LocalDateTime;
 import java.util.List;
 
 /**
@@ -377,6 +378,30 @@ public class SmartUserServiceImpl extends ServiceImpl<SmartUserMapper, SmartUser
     }
 
     @Override
+    public List<StatisticsCampusVo> getAccessStatisticsCampus(Integer classId, LocalDateTime startTime, LocalDateTime endTime) {
+        return smartUserMapper.getAccessStatisticsCampus(classId,startTime,endTime);
+    }
+
+    @Override
+    public List<StatisticsCampusVo> getAttendanceStatisticsCampus(Integer classId, LocalDateTime startTime, LocalDateTime endTime) {
+        return smartUserMapper.getAttendanceStatisticsCampus(classId,startTime,endTime);
+    }
+
+    @Override
+    public List<StatisticsCampusVo> getFaceDiscernStatisticsCampus(Integer classId, LocalDateTime startTime, LocalDateTime endTime) {
+        return smartUserMapper.getFaceDiscernStatisticsCampus(classId,startTime,endTime);
+    }
+
+    @Override
+    public List<StatisticsCampusVo> getAckStatisticsCampus(Integer classId, LocalDateTime startTime, LocalDateTime endTime) {
+        return smartUserMapper.getAckStatisticsCampus(classId,startTime,endTime);
+    }
+
+    @Override
+    public List<StatisticsCampusVo> getClassStudent(Integer classId) {
+        return smartUserMapper.getClassStudent(classId);
+    }
+
     public List<SmartUser> queryTeachers() {
         QueryWrapper<SmartUser> queryWrapper = new QueryWrapper();
         queryWrapper.eq("identity_id", eIdentityStatu.Teacher.getValue());

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

@@ -270,4 +270,75 @@
             </foreach>
         </if>
     </select>
+    <select id="getAccessStatisticsCampus" resultType="com.template.model.vo.StatisticsCampusVo">
+        SELECT su.id      as userId,
+               su.`name`  as name,
+               su.card_no as cardNo
+        FROM `smart_user` su
+                 LEFT JOIN smart_access sa on sa.user_id = su.id
+        WHERE su.deleted = 0
+          AND su.is_cancel = 0
+          AND su.identity_id = 2
+          AND su.school_class = #{classId}
+          AND sa.date_time >= #{startTime}
+          AND #{endTime} >= sa.date_time
+        GROUP BY su.id
+    </select>
+    <select id="getAttendanceStatisticsCampus" resultType="com.template.model.vo.StatisticsCampusVo">
+        SELECT su.id      as userId,
+               su.`name`  as name,
+               su.card_no as cardNo
+        FROM `smart_user` su
+                 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 su.school_class = #{classId}
+          AND sat.`status`!=3
+          AND sat.attend_time >= #{startTime}
+          AND #{endTime} >= sat.attend_time
+        GROUP BY su.id
+    </select>
+    <select id="getFaceDiscernStatisticsCampus" resultType="com.template.model.vo.StatisticsCampusVo">
+        SELECT su.id      as userId,
+               su.`name`  as name,
+               su.card_no as cardNo
+        FROM `smart_user` su
+                 LEFT JOIN smart_face_discern sfd on sfd.user_id = su.id
+        WHERE su.deleted = 0
+          AND su.is_cancel = 0
+          AND su.identity_id = 2
+          AND su.school_class = #{classId}
+          AND sfd.date_time >= #{startTime}
+          AND #{endTime} >= sfd.date_time
+        GROUP BY su.id
+    </select>
+    <select id="getAckStatisticsCampus" resultType="com.template.model.vo.StatisticsCampusVo">
+        SELECT su.id      as userId,
+               su.`name`  as name,
+               su.card_no as cardNo
+        FROM `smart_user` su
+                 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 su.school_class = #{classId}
+          AND sat.`status` = 6
+          AND sat.initiate_time >= #{startTime}
+          AND #{endTime} >= sat.initiate_time
+        GROUP BY su.id
+    </select>
+    <select id="getClassStudent" resultType="com.template.model.vo.StatisticsCampusVo">
+        SELECT
+            su.id      as userId,
+            su.`name`  as name,
+            su.card_no as cardNo
+        FROM
+            `smart_user` su
+        WHERE
+            su.deleted = 0
+          AND su.is_cancel = 0
+          AND su.identity_id = 2
+          AND su.school_class=#{classId}
+    </select>
 </mapper>