Sfoglia il codice sorgente

优化首页门禁管理模块

夏文涛 2 anni fa
parent
commit
28f88da189

+ 12 - 7
src/main/java/com/template/api/SmartAttendanceControllerAPI.java

@@ -55,6 +55,7 @@ public interface SmartAttendanceControllerAPI {
 
     /**
      * 百胜学生请假接口
+     *
      * @param request
      * @param bindingResult
      * @return
@@ -66,16 +67,18 @@ public interface SmartAttendanceControllerAPI {
 
     /**
      * 领导驾驶舱——学生个人画像——历史出勤
+     *
      * @param userId
      * @param dateTime
      * @return
      */
     @GetMapping(value = "/historicalAttendance")
     @ApiOperation(value = "历史出勤", notes = "历史出勤", httpMethod = "GET")
-    CommonResult historicalAttendance(@RequestParam int userId,@RequestParam String dateTime);
+    CommonResult historicalAttendance(@RequestParam int userId, @RequestParam String dateTime);
 
     /**
      * 请假管理
+     *
      * @param name
      * @param cardNo
      * @param startTime
@@ -84,11 +87,11 @@ public interface SmartAttendanceControllerAPI {
      */
     @GetMapping(value = "/askForLeavePage")
     @ApiOperation(value = "请假管理", notes = "请假管理", httpMethod = "GET")
-    CommonResult askForLeavePage(@RequestParam int currentPage, @RequestParam int pageCount,String name,String cardNo,String startTime,String endTime,String ifVerification,String classId);
+    CommonResult askForLeavePage(@RequestParam int currentPage, @RequestParam int pageCount, String name, String cardNo, String startTime, String endTime, String ifVerification, String classId);
 
     @GetMapping(value = "/queryPage")
     @ApiOperation(value = "学生考勤记录", notes = "学生考勤记录", httpMethod = "GET")
-    CommonResult queryPage(@RequestParam int currentPage, @RequestParam int pageCount,Integer gradeId,Integer classId,String status,String studentNo ,String name,String startTime,String endTime);
+    CommonResult queryPage(@RequestParam int currentPage, @RequestParam int pageCount, Integer gradeId, Integer classId, String status, String studentNo, String name, String startTime, String endTime);
 
     @GetMapping(value = "/verification")
     @ApiOperation(value = "核销", notes = "核销", httpMethod = "GET")
@@ -96,15 +99,16 @@ public interface SmartAttendanceControllerAPI {
 
     @GetMapping(value = "/queryPageExport")
     @ApiOperation(value = "学生考勤记录导出", notes = "学生考勤记录导出", httpMethod = "GET")
-    void queryPageExport(HttpServletResponse response, Integer gradeId, Integer classId, String status, String studentNo , String name, @RequestParam String startTime, @RequestParam String endTime);
+    void queryPageExport(HttpServletResponse response, Integer gradeId, Integer classId, String status, String studentNo, String name, @RequestParam String startTime, @RequestParam String endTime);
 
 
     @GetMapping(value = "/askForLeaveScreenPage")
     @ApiOperation(value = "大屏——请假数据展示", notes = "大屏——请假数据展示", httpMethod = "GET")
-    CommonResult askForLeaveScreenPage(@RequestParam int currentPage, @RequestParam int pageCount,String cardNo,String ifVerification);
+    CommonResult askForLeaveScreenPage(@RequestParam int currentPage, @RequestParam int pageCount, String cardNo, String ifVerification);
 
     /**
      * 领导驾驶舱——考勤管理——学生考勤
+     *
      * @param dateTime
      * @return
      */
@@ -115,16 +119,17 @@ public interface SmartAttendanceControllerAPI {
 
     /**
      * 领导驾驶舱——考勤管理——班级考勤数据
+     *
      * @param dateTime
      * @return
      */
     @GetMapping(value = "/classHistoricalAttendance")
     @ApiOperation(value = "班级考勤统计", notes = "班级考勤统计", httpMethod = "GET")
-    CommonResult classHistoricalAttendance(@RequestParam String dateTime,@RequestParam int currentPage, @RequestParam int pageCount,String className);
+    CommonResult classHistoricalAttendance(@RequestParam String dateTime, @RequestParam int currentPage, @RequestParam int pageCount, String className);
 
 
     @GetMapping(value = "/ackDetail")
     @ApiOperation(value = "个人请假详情", notes = "个人请假详情", httpMethod = "GET")
-    CommonResult ackDetail(@RequestParam Integer userId,@RequestParam String dateTime);
+    CommonResult ackDetail(@RequestParam Integer userId, @RequestParam String dateTime);
 
 }

+ 63 - 46
src/main/java/com/template/controller/SmartFaceDiscernController.java

@@ -41,6 +41,7 @@ import java.net.URLDecoder;
 import java.net.URLEncoder;
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
+import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 
@@ -105,7 +106,7 @@ public class SmartFaceDiscernController implements SmartFaceDiscernControllerAPI
         ArrayList<LastSevenDaysTrackVo> vos = new ArrayList<>();
         for (SmartFaceDiscern faceDiscern : smartFaceDiscerns) {
             //            人脸通过type查询对应的坐标
-            SmartCoord smartCoord=smartCoordService.getBytype(faceDiscern.getLocation());
+            SmartCoord smartCoord = smartCoordService.getBytype(faceDiscern.getLocation());
             LastSevenDaysTrackVo lastSevenDaysTrackVo = new LastSevenDaysTrackVo();
             if (ObjectUtils.isNotEmpty(smartCoord)) {
                 lastSevenDaysTrackVo.setLocation(smartCoord.getType());
@@ -124,7 +125,7 @@ public class SmartFaceDiscernController implements SmartFaceDiscernControllerAPI
         SmartClass smartClass = smartClassService.getSmartClassById(smartUser.getSchoolClass());
         String className = smartClass.getName();
         //            通过班级找到对应的坐标
-        SmartCoord coord=smartCoordService.getBytype(className);
+        SmartCoord coord = smartCoordService.getBytype(className);
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         for (SmartAttendance attendance : attendances) {
             LastSevenDaysTrackVo lastSevenDaysTrackVo = new LastSevenDaysTrackVo();
@@ -134,13 +135,13 @@ public class SmartFaceDiscernController implements SmartFaceDiscernControllerAPI
 
             lastSevenDaysTrackVo.setName(attendance.getXwUserName());
             Integer status = attendance.getStatus();
-            if (status==0) {
+            if (status == 0) {
                 lastSevenDaysTrackVo.setType("准时打卡");
-            }else if (1==status){
+            } else if (1 == status) {
                 lastSevenDaysTrackVo.setType("迟到打卡");
-            }else if (7==status){
+            } else if (7 == status) {
                 lastSevenDaysTrackVo.setType("超时打卡");
-            }else if (6==status){
+            } else if (6 == status) {
                 lastSevenDaysTrackVo.setType("请假");
             }
 
@@ -154,7 +155,7 @@ public class SmartFaceDiscernController implements SmartFaceDiscernControllerAPI
         List<SmartAccess> smartAccesses = smartAccessService.track(startTime, endTime, id);
         for (SmartAccess faceDiscern : smartAccesses) {
             //            门禁的通过type找到对应的坐标
-            SmartCoord smartCoord=smartCoordService.getBytype(faceDiscern.getType());
+            SmartCoord smartCoord = smartCoordService.getBytype(faceDiscern.getType());
 
             LastSevenDaysTrackVo lastSevenDaysTrackVo = new LastSevenDaysTrackVo();
 
@@ -184,25 +185,41 @@ public class SmartFaceDiscernController implements SmartFaceDiscernControllerAPI
     public CommonResult access() {
 
         LocalDateTime now = LocalDateTime.now();
-
+        LocalDateTime stateTime = now.minusDays(29);
+        LocalDateTime endTime = now.minusDays(1);
         DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        Date stateDTime = Date.from(stateTime.atZone(ZoneId.systemDefault()).toInstant());
+        Date endDTime = Date.from(endTime.atZone(ZoneId.systemDefault()).toInstant());
+        String startStr = TimeExchange.getStartOfDayStr(stateDTime);
+        String endStr = TimeExchange.getEndOfDayStr(endDTime);
+        List<FaceDiscernVo> smartAccesses = smartFaceDiscernService.queryFaceCountByDate(startStr, endStr);
+        LambdaQueryWrapper<SmartQrcode> qrcodeWrapper = new LambdaQueryWrapper<>();
+        qrcodeWrapper.between(SmartQrcode::getCreateTime, stateTime, endTime);
+        List<SmartQrcode> smartQrcodes = smartQrcodeService.list(qrcodeWrapper);
+        LambdaQueryWrapper<SmartCarAccess> smartCarAccessWrapper = new LambdaQueryWrapper<>();
+        smartCarAccessWrapper.between(SmartCarAccess::getDataTime, stateTime, endTime);
+        List<SmartCarAccess> smartCarAccesses = smartCarAccessService.list(smartCarAccessWrapper);
 
         JSONArray jsonArray = new JSONArray();
         for (int i = 0; i < 30; i++) {
-            LocalDateTime stateTime = now.minusDays(i + 1);
-            LocalDateTime endTime = now.minusDays(i);
-            String dateTime = endTime.format(dateTimeFormatter);
-            LambdaQueryWrapper<SmartAccess> smartAccessWrapper = new LambdaQueryWrapper<>();
-            smartAccessWrapper.between(SmartAccess::getDateTime, stateTime, endTime);
-            int faceDiscernCount = smartAccessService.count(smartAccessWrapper);
-
-            LambdaQueryWrapper<SmartQrcode> qrcodeWrapper = new LambdaQueryWrapper<>();
-            qrcodeWrapper.between(SmartQrcode::getCreateTime, stateTime, endTime);
-            int qrcodeCount = smartQrcodeService.count(qrcodeWrapper);
+            LocalDateTime eachStateTime = now.minusDays(i + 1);
+            LocalDateTime eachEndTime = now.minusDays(i);
+            String dateTime = eachEndTime.format(dateTimeFormatter);
+            Date startDate = Date.from(eachStateTime.atZone(ZoneId.systemDefault()).toInstant());
+            Date endDate = Date.from(eachEndTime.atZone(ZoneId.systemDefault()).toInstant());
+
+            //<0 : A < B
+            //=0 : A = B
+            //>0 : A > B
+            int faceDiscernCount = 0;
+            Optional<FaceDiscernVo> oFaceDiscern =smartAccesses.stream().filter(e -> e.getDateStr().equals(dateTime)).findFirst();
+            if(oFaceDiscern != null && oFaceDiscern.isPresent()){
+                faceDiscernCount = oFaceDiscern.get().getCount();
+            }
 
-            LambdaQueryWrapper<SmartCarAccess> smartCarAccessWrapper = new LambdaQueryWrapper<>();
-            smartCarAccessWrapper.between(SmartCarAccess::getDataTime, stateTime, endTime);
-            int carCount = smartCarAccessService.count(smartCarAccessWrapper);
+            long qrcodeCount = smartQrcodes.stream().filter(e -> e.getCreateTime().compareTo(startDate) >= 0 && e.getCreateTime().compareTo(endDate) <= 0).count();
+            long carCount = smartCarAccesses.stream().filter(e -> TimeExchange.StringToDate(e.getDataTime(), "yyyy-MM-dd HH:mm:ss").compareTo(startDate) >= 0
+                    && TimeExchange.StringToDate(e.getDataTime(), "yyyy-MM-dd HH:mm:ss").compareTo(endDate) <= 0).count();
 
             JSONObject jsonObject = new JSONObject();
             jsonObject.put("date", dateTime);
@@ -249,13 +266,13 @@ public class SmartFaceDiscernController implements SmartFaceDiscernControllerAPI
             LastSevenDaysTrackVo lastSevenDaysTrackVo = new LastSevenDaysTrackVo();
             lastSevenDaysTrackVo.setName(attendance.getXwUserName());
             Integer status = attendance.getStatus();
-            if (status==0) {
+            if (status == 0) {
                 lastSevenDaysTrackVo.setType("准时打卡");
-            }else if (1==status){
+            } else if (1 == status) {
                 lastSevenDaysTrackVo.setType("迟到打卡");
-            }else if (7==status){
+            } else if (7 == status) {
                 lastSevenDaysTrackVo.setType("超时打卡");
-            }else if (6==status){
+            } else if (6 == status) {
                 lastSevenDaysTrackVo.setType("请假");
             }
             lastSevenDaysTrackVo.setLocation(className);
@@ -387,7 +404,7 @@ public class SmartFaceDiscernController implements SmartFaceDiscernControllerAPI
 
                     Integer identityId = smartUser.getIdentityId();
 //                    判断是否是学生
-                    if (2==identityId) {
+                    if (2 == identityId) {
                         //                    获取推送配置
                         List<SmartPushConfig> pushConfigs = smartPushConfigService.list(new LambdaQueryWrapper<>());
                         SmartPushConfig smartPushConfig = pushConfigs.get(0);
@@ -407,15 +424,15 @@ public class SmartFaceDiscernController implements SmartFaceDiscernControllerAPI
                                             pushType = "进入大门";
                                         } else if (type.contains("出校")) {
                                             pushType = "离开大门";
-                                        }else if (type.contains("进地下室")){
+                                        } else if (type.contains("进地下室")) {
                                             pushType = "进入地下室";
-                                        }else if (type.contains("出地下室")){
+                                        } else if (type.contains("出地下室")) {
                                             pushType = "离开地下室";
                                         }
                                         LocalDateTime date = LocalDateTime.now();
                                         String format = date.format(dateTimeFormatter1);
                                         //                    公众号信息推送
-                                        Message2.send2(gzhOpenId,s,format,address);
+                                        Message2.send2(gzhOpenId, s, format, address);
 
                                         SmartNotification smartNotification = new SmartNotification();
                                         smartNotification.setUserId(user.getId());
@@ -434,7 +451,7 @@ public class SmartFaceDiscernController implements SmartFaceDiscernControllerAPI
                             }
                         }
 
-                        if (1==chargeTeacherPush) {
+                        if (1 == chargeTeacherPush) {
                             Integer schoolClass = smartUser.getSchoolClass();
 //                        通过班级找到对应的班主任
                             List<SmartUser> userLists = smartUserService.getChargeTeacher(schoolClass);
@@ -448,15 +465,15 @@ public class SmartFaceDiscernController implements SmartFaceDiscernControllerAPI
                                             pushType = "进入大门";
                                         } else if (type.contains("出校")) {
                                             pushType = "离开大门";
-                                        }else if (type.contains("进地下室")){
+                                        } else if (type.contains("进地下室")) {
                                             pushType = "进入地下室";
-                                        }else if (type.contains("出地下室")){
+                                        } else if (type.contains("出地下室")) {
                                             pushType = "离开地下室";
                                         }
                                         LocalDateTime date = LocalDateTime.now();
                                         String format = date.format(dateTimeFormatter1);
                                         //                    公众号信息推送
-                                        Message2.send2(gzhOpenId,s,format,address);
+                                        Message2.send2(gzhOpenId, s, format, address);
 
                                         SmartNotification smartNotification = new SmartNotification();
                                         smartNotification.setUserId(user.getId());
@@ -535,7 +552,7 @@ public class SmartFaceDiscernController implements SmartFaceDiscernControllerAPI
         List<SmartFaceDiscern> faceDiscerns = smartFaceDiscernService.track(startTime, endTime, userId);
         for (SmartFaceDiscern faceDiscern : faceDiscerns) {
 //            人脸通过type查询对应的坐标
-            SmartCoord smartCoord=smartCoordService.getBytype(faceDiscern.getLocation());
+            SmartCoord smartCoord = smartCoordService.getBytype(faceDiscern.getLocation());
             SelectTrackVo vo = new SelectTrackVo();
             if (ObjectUtils.isNotEmpty(smartCoord)) {
                 vo.setX(smartCoord.getX());
@@ -557,7 +574,7 @@ public class SmartFaceDiscernController implements SmartFaceDiscernControllerAPI
         String className = smartClass.getName();
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         //            通过班级找到对应的坐标
-        SmartCoord coord=smartCoordService.getBytype(className);
+        SmartCoord coord = smartCoordService.getBytype(className);
         for (SmartAttendance attendance : attendances) {
             SelectTrackVo vo = new SelectTrackVo();
             if (ObjectUtils.isNotEmpty(coord)) {
@@ -567,13 +584,13 @@ public class SmartFaceDiscernController implements SmartFaceDiscernControllerAPI
             }
             vo.setName(attendance.getXwUserName());
             Integer status = attendance.getStatus();
-            if (status==0) {
+            if (status == 0) {
                 vo.setType("准时打卡");
-            }else if (1==status){
+            } else if (1 == status) {
                 vo.setType("迟到打卡");
-            }else if (7==status){
+            } else if (7 == status) {
                 vo.setType("超时打卡");
-            }else if (6==status){
+            } else if (6 == status) {
                 vo.setType("请假");
             }
             Date attendTime = attendance.getAttendTime();
@@ -585,7 +602,7 @@ public class SmartFaceDiscernController implements SmartFaceDiscernControllerAPI
         List<SmartAccess> smartAccesses = smartAccessService.track(startTime, endTime, userId);
         for (SmartAccess smartAccesse : smartAccesses) {
             //            门禁的通过type找到对应的坐标
-            SmartCoord smartCoord=smartCoordService.getBytype(smartAccesse.getType());
+            SmartCoord smartCoord = smartCoordService.getBytype(smartAccesse.getType());
             SelectTrackVo vo = new SelectTrackVo();
             if (ObjectUtils.isNotEmpty(smartCoord)) {
                 vo.setX(smartCoord.getX());
@@ -611,8 +628,8 @@ public class SmartFaceDiscernController implements SmartFaceDiscernControllerAPI
 
     @Override
     @DESRespondSecret(validated = true)
-    public CommonResult faceManagement(int currentPage, int pageCount, String keyWord,String gradeId,String classId,String startTime,String endTime) {
-        PageUtils<FaceManagementVo> result= smartFaceDiscernService.faceManagement(currentPage,pageCount,keyWord,gradeId,classId,startTime,endTime);
+    public CommonResult faceManagement(int currentPage, int pageCount, String keyWord, String gradeId, String classId, String startTime, String endTime) {
+        PageUtils<FaceManagementVo> result = smartFaceDiscernService.faceManagement(currentPage, pageCount, keyWord, gradeId, classId, startTime, endTime);
 
         return CommonResult.ok(result);
     }
@@ -633,14 +650,14 @@ public class SmartFaceDiscernController implements SmartFaceDiscernControllerAPI
 
         DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         //        默认前一天的
-        if (ObjectUtils.isEmpty(startTime)||ObjectUtils.isEmpty(endTime)) {
+        if (ObjectUtils.isEmpty(startTime) || ObjectUtils.isEmpty(endTime)) {
             LocalDateTime now = LocalDateTime.now().withHour(0).withMinute(0).withSecond(0);
             LocalDateTime end = now.plusDays(1);
-            startTime=now.format(dateTimeFormatter);
-            endTime=end.format(dateTimeFormatter);
+            startTime = now.format(dateTimeFormatter);
+            endTime = end.format(dateTimeFormatter);
         }
 
-        List<FaceManagementVo> vos= smartFaceDiscernService.faceManagementExport(keyWord,gradeId,classId,startTime,endTime);
+        List<FaceManagementVo> vos = smartFaceDiscernService.faceManagementExport(keyWord, gradeId, classId, startTime, endTime);
 
         for (int i = 0; i < vos.size(); i++) {
             FaceManagementVo vo = vos.get(i);

+ 2 - 0
src/main/java/com/template/mapper/SmartFaceDiscernMapper.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.template.model.pojo.SmartFaceDiscern;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.template.model.vo.FaceDiscernVo;
 import com.template.model.vo.FaceManagementVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -26,4 +27,5 @@ public interface SmartFaceDiscernMapper extends BaseMapper<SmartFaceDiscern> {
 
     List<FaceManagementVo> faceManagementExport(@Param("keyWord") String keyWord, @Param("gradeId") String gradeId, @Param("classId") String classId, @Param("startTime") String startTime, @Param("endTime") String endTime);
 
+    List<FaceDiscernVo> queryFaceCountByDate(@Param("startTime") String startTime, @Param("endTime") String endTime);
 }

+ 17 - 0
src/main/java/com/template/model/vo/FaceDiscernVo.java

@@ -0,0 +1,17 @@
+package com.template.model.vo;
+
+import lombok.Data;
+
+@Data
+public class FaceDiscernVo {
+    /**
+     * 日期
+     */
+    private String dateStr;
+
+    /**
+     * 个数
+     */
+    private Integer count;
+
+}

+ 4 - 0
src/main/java/com/template/services/SmartFaceDiscernService.java

@@ -12,7 +12,9 @@ import com.template.model.pojo.SmartFaceDiscern;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.template.model.pojo.SmartUser;
 import com.template.model.result.PageUtils;
+import com.template.model.vo.FaceDiscernVo;
 import com.template.model.vo.FaceManagementVo;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
@@ -44,4 +46,6 @@ public interface SmartFaceDiscernService extends IService<SmartFaceDiscern> {
     List<FaceManagementVo> faceManagementExport(String keyWord, String gradeId, String classId, String startTime, String endTime);
 
     List<SmartFaceDiscern> toDateList(LocalDateTime start, LocalDateTime end);
+
+    List<FaceDiscernVo> queryFaceCountByDate(String startTime, String endTime);
 }

+ 7 - 0
src/main/java/com/template/services/impl/SmartFaceDiscernServiceImpl.java

@@ -15,6 +15,7 @@ import com.template.model.pojo.SmartNotification;
 import com.template.model.pojo.SmartUser;
 import com.template.model.result.PageUtils;
 import com.template.model.vo.AskForLeaveScreenVo;
+import com.template.model.vo.FaceDiscernVo;
 import com.template.model.vo.FaceManagementVo;
 import com.template.services.SmartFaceDiscernService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -319,4 +320,10 @@ public class SmartFaceDiscernServiceImpl extends ServiceImpl<SmartFaceDiscernMap
         List<SmartFaceDiscern> list = this.list(wrapper);
         return list;
     }
+
+    @Override
+    public List<FaceDiscernVo> queryFaceCountByDate(String startTime, String endTime) {
+        List<FaceDiscernVo> fdv = smartFaceDiscernMapper.queryFaceCountByDate(startTime,endTime);
+        return fdv;
+    }
 }

+ 26 - 15
src/main/resources/mapper/template/SmartFaceDiscernMapper.xml

@@ -4,23 +4,23 @@
 
     <select id="faceManagement" resultType="com.template.model.vo.FaceManagementVo">
         SELECT
-            sfd.id,
-            sfd.`name`,
-            sc.`name` as className,
-            sg.`name` as gradeName,
-            sfd.type,
-            sfd.location,
-            sfd.image,
-            sfd.date_time AS dateTime
+        sfd.id,
+        sfd.`name`,
+        sc.`name` as className,
+        sg.`name` as gradeName,
+        sfd.type,
+        sfd.location,
+        sfd.image,
+        sfd.date_time AS dateTime
         FROM
-            `smart_face_discern` sfd
-                LEFT JOIN smart_user su ON sfd.user_id = su.id
-                LEFT JOIN smart_class sc ON su.school_class = sc.id
-                LEFT JOIN smart_grade sg ON sc.grade_id = sg.id
+        `smart_face_discern` sfd
+        LEFT JOIN smart_user su ON sfd.user_id = su.id
+        LEFT JOIN smart_class sc ON su.school_class = sc.id
+        LEFT JOIN smart_grade sg ON sc.grade_id = sg.id
         WHERE
-            sfd.deleted =0
+        sfd.deleted =0
         <if test="keyWord != null and keyWord != ''">
-            and (sfd.`name` like '%' #{keyWord} '%'  or sfd.location like '%' #{keyWord} '%')
+            and (sfd.`name` like '%' #{keyWord} '%' or sfd.location like '%' #{keyWord} '%')
         </if>
         <if test="gradeId != null and gradeId != ''">
             and sc.grade_id= #{gradeId}
@@ -52,7 +52,7 @@
         WHERE
         sfd.deleted =0
         <if test="keyWord != null and keyWord != ''">
-            and (sfd.`name` like '%' #{keyWord} '%'  or sfd.location like '%' #{keyWord} '%')
+            and (sfd.`name` like '%' #{keyWord} '%' or sfd.location like '%' #{keyWord} '%')
         </if>
         <if test="gradeId != null and gradeId != ''">
             and sc.grade_id= #{gradeId}
@@ -66,4 +66,15 @@
         ORDER BY sfd.date_time desc
     </select>
 
+
+    <resultMap type="com.template.model.vo.FaceDiscernVo" id="faceCountMap">
+        <result property="dateStr" column="date_str"/>
+        <result property="count" column="count"/>
+    </resultMap>
+
+    <select id="queryFaceCountByDate" resultType="com.template.model.vo.FaceDiscernVo" resultMap="faceCountMap">
+        select DATE_FORMAT(date_time,'%Y-%m-%d') as date_str,Count(*) as count from smart_access
+        WHERE deleted=0 AND date_time BETWEEN #{startTime} AND #{endTime}
+        group by DATE_FORMAT(date_time,'%Y-%m-%d')
+    </select>
 </mapper>