liu пре 2 година
родитељ
комит
8c83ba0535

+ 82 - 22
.idea/workspace.xml

@@ -4,7 +4,17 @@
     <option name="autoReloadType" value="SELECTIVE" />
   </component>
   <component name="ChangeListManager">
-    <list default="true" id="7a163def-d787-4487-8cde-7ee0e8a2f101" name="Changes" comment="" />
+    <list default="true" id="7a163def-d787-4487-8cde-7ee0e8a2f101" name="Changes" comment="add 添加全部代码">
+      <change afterPath="$PROJECT_DIR$/src/main/java/com/chuanghai/access_record_api/entity/HourlyPerson.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/java/com/chuanghai/access_record_api/mapper/HourlyPersonMapper.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/java/com/chuanghai/access_record_api/service/HourlyPersonService.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/java/com/chuanghai/access_record_api/service/impl/HourlyPersonServiceImpl.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/chuanghai/access_record_api/entity/dto/PersonalRatiosDto.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/chuanghai/access_record_api/entity/dto/PersonalRatiosDto.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/chuanghai/access_record_api/service/impl/AccessRecordServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/chuanghai/access_record_api/service/impl/AccessRecordServiceImpl.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/chuanghai/access_record_api/utils/DateUtils.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/chuanghai/access_record_api/utils/DateUtils.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/resources/application.yml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/application.yml" afterDir="false" />
+    </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
     <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
@@ -40,28 +50,28 @@
     <option name="showExcludedFiles" value="false" />
     <option name="showLibraryContents" value="true" />
   </component>
-  <component name="PropertiesComponent">{
-  &quot;keyToString&quot;: {
-    &quot;RequestMappingsPanelOrder0&quot;: &quot;0&quot;,
-    &quot;RequestMappingsPanelOrder1&quot;: &quot;1&quot;,
-    &quot;RequestMappingsPanelWidth0&quot;: &quot;75&quot;,
-    &quot;RequestMappingsPanelWidth1&quot;: &quot;75&quot;,
-    &quot;RunOnceActivity.OpenProjectViewOnStart&quot;: &quot;true&quot;,
-    &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
-    &quot;WebServerToolWindowFactoryState&quot;: &quot;false&quot;,
-    &quot;last_opened_file_path&quot;: &quot;E:/company/access_record_api/src/main/java/com/chuanghai/access_record_api&quot;,
-    &quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
-    &quot;node.js.detected.package.tslint&quot;: &quot;true&quot;,
-    &quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
-    &quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;,
-    &quot;nodejs_package_manager_path&quot;: &quot;npm&quot;,
-    &quot;project.structure.last.edited&quot;: &quot;Modules&quot;,
-    &quot;project.structure.proportion&quot;: &quot;0.15&quot;,
-    &quot;project.structure.side.proportion&quot;: &quot;0.2&quot;,
-    &quot;settings.editor.selected.configurable&quot;: &quot;configurable.group.appearance&quot;,
-    &quot;spring.configuration.checksum&quot;: &quot;1db00effd37f18c9952b8708b8be3be9&quot;
+  <component name="PropertiesComponent"><![CDATA[{
+  "keyToString": {
+    "RequestMappingsPanelOrder0": "0",
+    "RequestMappingsPanelOrder1": "1",
+    "RequestMappingsPanelWidth0": "75",
+    "RequestMappingsPanelWidth1": "75",
+    "RunOnceActivity.OpenProjectViewOnStart": "true",
+    "RunOnceActivity.ShowReadmeOnStart": "true",
+    "WebServerToolWindowFactoryState": "false",
+    "last_opened_file_path": "E:/company/access_record_api/src/main/java/com/chuanghai/access_record_api",
+    "node.js.detected.package.eslint": "true",
+    "node.js.detected.package.tslint": "true",
+    "node.js.selected.package.eslint": "(autodetect)",
+    "node.js.selected.package.tslint": "(autodetect)",
+    "nodejs_package_manager_path": "npm",
+    "project.structure.last.edited": "Modules",
+    "project.structure.proportion": "0.15",
+    "project.structure.side.proportion": "0.2",
+    "settings.editor.selected.configurable": "MavenSettings",
+    "spring.configuration.checksum": "1db00effd37f18c9952b8708b8be3be9"
   }
-}</component>
+}]]></component>
   <component name="ReactorSettings">
     <option name="notificationShown" value="true" />
   </component>
@@ -141,7 +151,24 @@
       <workItem from="1676603571940" duration="12000" />
       <workItem from="1678240100306" duration="691000" />
       <workItem from="1678240907347" duration="10000" />
+      <workItem from="1678241224611" duration="163000" />
+      <workItem from="1678256895189" duration="245000" />
+      <workItem from="1678257304311" duration="469000" />
+      <workItem from="1678878529800" duration="21394000" />
+      <workItem from="1679560216727" duration="1956000" />
+      <workItem from="1684725553274" duration="1980000" />
+      <workItem from="1684896027529" duration="1304000" />
+      <workItem from="1694768434487" duration="71000" />
+      <workItem from="1698227258311" duration="14803000" />
     </task>
+    <task id="LOCAL-00001" summary="add 添加全部代码">
+      <created>1678241314651</created>
+      <option name="number" value="00001" />
+      <option name="presentableId" value="LOCAL-00001" />
+      <option name="project" value="LOCAL" />
+      <updated>1678241314651</updated>
+    </task>
+    <option name="localTasksCounter" value="2" />
     <servers />
   </component>
   <component name="TypeScriptGeneratedFilesManager">
@@ -158,7 +185,40 @@
       </map>
     </option>
   </component>
+  <component name="VcsManagerConfiguration">
+    <MESSAGE value="add 添加全部代码" />
+    <option name="LAST_COMMIT_MESSAGE" value="add 添加全部代码" />
+  </component>
   <component name="XDebuggerManager">
+    <breakpoint-manager>
+      <breakpoints>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/main/java/com/chuanghai/access_record_api/service/impl/AccessRecordServiceImpl.java</url>
+          <line>428</line>
+          <option name="timeStamp" value="8" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/main/java/com/chuanghai/access_record_api/service/impl/AccessRecordServiceImpl.java</url>
+          <line>827</line>
+          <option name="timeStamp" value="10" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/main/java/com/chuanghai/access_record_api/service/impl/AccessRecordServiceImpl.java</url>
+          <line>639</line>
+          <option name="timeStamp" value="12" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/main/java/com/chuanghai/access_record_api/service/impl/AccessRecordServiceImpl.java</url>
+          <line>602</line>
+          <option name="timeStamp" value="13" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/main/java/com/chuanghai/access_record_api/service/impl/AccessRecordServiceImpl.java</url>
+          <line>603</line>
+          <option name="timeStamp" value="14" />
+        </line-breakpoint>
+      </breakpoints>
+    </breakpoint-manager>
     <watches-manager>
       <configuration name="SpringBootApplicationConfigurationType">
         <watch expression="((com.alibaba.fastjson.JSONObject)((com.alibaba.fastjson.JSONArray)((HashMap.Node)((com.alibaba.fastjson.JSONObject)((HashMap.Node)jsonObj.entrySet().toArray()[2]).getValue()).entrySet().toArray()[3]).getValue()).get(0)).entrySet().toArray()[0]" custom="com.alibaba.fastjson.JSONArray,java.util.HashMap.Node,com.alibaba.fastjson.JSONObject" />

+ 16 - 0
src/main/java/com/chuanghai/access_record_api/entity/HourlyPerson.java

@@ -0,0 +1,16 @@
+package com.chuanghai.access_record_api.entity;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class HourlyPerson {
+    private Integer id;
+
+    private String type;
+
+    private String dateTime;
+
+    private Long count;
+}

+ 1 - 1
src/main/java/com/chuanghai/access_record_api/entity/dto/PersonalRatiosDto.java

@@ -9,5 +9,5 @@ import lombok.NoArgsConstructor;
 @AllArgsConstructor
 public class PersonalRatiosDto {
     private String name;
-    private Integer value;
+    private Long value;
 }

+ 9 - 0
src/main/java/com/chuanghai/access_record_api/mapper/HourlyPersonMapper.java

@@ -0,0 +1,9 @@
+package com.chuanghai.access_record_api.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chuanghai.access_record_api.entity.HourlyPerson;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface HourlyPersonMapper extends BaseMapper<HourlyPerson> {
+}

+ 7 - 0
src/main/java/com/chuanghai/access_record_api/service/HourlyPersonService.java

@@ -0,0 +1,7 @@
+package com.chuanghai.access_record_api.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.chuanghai.access_record_api.entity.HourlyPerson;
+
+public interface HourlyPersonService extends IService<HourlyPerson> {
+}

+ 113 - 35
src/main/java/com/chuanghai/access_record_api/service/impl/AccessRecordServiceImpl.java

@@ -14,12 +14,14 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.chuanghai.access_record_api.comfig.ChannelDetailInfos;
 import com.chuanghai.access_record_api.comfig.FacePassRecord;
 import com.chuanghai.access_record_api.entity.AccessRecord;
+import com.chuanghai.access_record_api.entity.HourlyPerson;
 import com.chuanghai.access_record_api.entity.dto.AccessRecordDto;
 import com.chuanghai.access_record_api.entity.SchoolUser;
 import com.chuanghai.access_record_api.entity.dto.PersonalRatiosDto;
 import com.chuanghai.access_record_api.mapper.AccessRecordMapper;
 import com.chuanghai.access_record_api.response.BaseResponse;
 import com.chuanghai.access_record_api.service.AccessRecordService;
+import com.chuanghai.access_record_api.service.HourlyPersonService;
 import com.chuanghai.access_record_api.service.SchoolUserService;
 import com.chuanghai.access_record_api.utils.*;
 import com.chuanghai.access_record_api.utils.vo.BsmjVo;
@@ -35,12 +37,13 @@ import org.springframework.web.client.RestTemplate;
 
 
 import java.io.IOException;
+import java.lang.reflect.Array;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
+import java.time.*;
 import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
+import java.time.temporal.Temporal;
 import java.util.*;
 
 @Service
@@ -54,6 +57,8 @@ public class AccessRecordServiceImpl extends ServiceImpl<AccessRecordMapper, Acc
     @Autowired
     SchoolUserService schoolUserService;
 
+    @Autowired
+    HourlyPersonService hourlyPersonService;
 
     @Scheduled(cron = "0 0/3 * * * ? ")
     public void autoQueryOnline() {
@@ -258,13 +263,18 @@ public class AccessRecordServiceImpl extends ServiceImpl<AccessRecordMapper, Acc
     public Boolean existsAccessRecord(AccessRecord accessRecord) {
         String schoolUserId = accessRecord.getSchoolUserId();
         Date dateTime = accessRecord.getDateTime();
+//        date转localDateTime
+        LocalDateTime localDateTime = LocalDateTime.ofInstant(dateTime.toInstant(), ZoneId.systemDefault());
+        LocalDateTime minus = localDateTime.minus(1, ChronoUnit.MINUTES);
+//        localDateTime转date
+        Date date = Date.from(minus.atZone(ZoneId.systemDefault()).toInstant());
         String personName = accessRecord.getPersonName();
         String address = accessRecord.getAddress();
         LambdaQueryWrapper<AccessRecord> wrapper = new LambdaQueryWrapper<>();
         if (ObjectUtils.isNotEmpty(schoolUserId)) {
-            wrapper.eq(AccessRecord::getSchoolUserId, schoolUserId).eq(AccessRecord::getDateTime, dateTime).eq(AccessRecord::getAddress, address);
+            wrapper.eq(AccessRecord::getSchoolUserId, schoolUserId).between(AccessRecord::getDateTime, dateTime,date).eq(AccessRecord::getAddress, address);
         } else {
-            wrapper.eq(AccessRecord::getDateTime, dateTime).eq(AccessRecord::getPersonName, personName).eq(AccessRecord::getAddress, address);
+            wrapper.between(AccessRecord::getDateTime, dateTime,date).eq(AccessRecord::getPersonName, personName).eq(AccessRecord::getAddress, address);
         }
 
         boolean exists = this.getBaseMapper().exists(wrapper);
@@ -313,13 +323,13 @@ public class AccessRecordServiceImpl extends ServiceImpl<AccessRecordMapper, Acc
         dateUtils.addHours();
         String yesterdayNow = null;
         try {
-            yesterdayNow = String.valueOf(Long.parseLong(DateUtils.dateToStamp(dateUtils.getYesterNow())) / 1000);
+            yesterdayNow = String.valueOf(Long.parseLong(DateUtils.dateToStamp(dateUtils.getNow())) / 1000);
         } catch (Exception ex) {
             throw new RuntimeException(ex);
         }
         String afterTwoHours = null;
         try {
-            afterTwoHours = String.valueOf(Long.parseLong(DateUtils.dateToStamp(dateUtils.getAfterTwoHours())) / 1000);
+            afterTwoHours = String.valueOf(Long.parseLong(DateUtils.dateToStamp(dateUtils.getAfterTenMinute())) / 1000);
         } catch (Exception ex) {
             throw new RuntimeException(ex);
         }
@@ -330,11 +340,11 @@ public class AccessRecordServiceImpl extends ServiceImpl<AccessRecordMapper, Acc
         map1.put("QryType", 57);
         map1.put("QryCondition", 1);
         map1.put("QryData", "1");
-        //人脸识别失败类型
-        HashMap<String, Object> map2 = new HashMap<>();
-        map2.put("QryType", 57);
-        map2.put("QryCondition", 1);
-        map2.put("QryData", "2");
+//        //人脸识别失败类型
+//        HashMap<String, Object> map2 = new HashMap<>();
+//        map2.put("QryType", 57);
+//        map2.put("QryCondition", 1);
+//        map2.put("QryData", "2");
         //人脸识别通道ID
         HashMap<String, Object> map3 = new HashMap<>();
         map3.put("QryType", 35);
@@ -352,13 +362,13 @@ public class AccessRecordServiceImpl extends ServiceImpl<AccessRecordMapper, Acc
         map5.put("QryData", afterTwoHours);
         JSONArray jsonArray = new JSONArray();
         jsonArray.add(map1);
-        jsonArray.add(map2);
+//        jsonArray.add(map2);
         jsonArray.add(map3);
         jsonArray.add(map4);
         jsonArray.add(map5);
 
         JSONObject obj = new JSONObject();
-        obj.put("Num", 5);
+        obj.put("Num", 4);
         obj.put("QueryInfos", jsonArray);
         obj.put("Limit", 32);
         obj.put("Offset", 0);
@@ -378,9 +388,45 @@ public class AccessRecordServiceImpl extends ServiceImpl<AccessRecordMapper, Acc
                 FacePassRecord.passRecord(univiewVOList, "POST", jsonString);
             }
         }
+//        去掉在一分钟内多次出现的
+        HashMap<String, List<UniviewVO>> map = new HashMap<>();
+        ArrayList<UniviewVO> vos = new ArrayList<>();
+        for (UniviewVO univiewVO : univiewVOList) {
+            String cardNumber = univiewVO.getCardNumber();
+            Date activeTime = univiewVO.getActiveTime();
+            if (map.containsKey(cardNumber)) {
+                List<UniviewVO> univiewVOS = map.get(cardNumber);
+                for (int i = 0; i < univiewVOS.size(); i++) {
+                    UniviewVO vo = univiewVOS.get(i);
+                    Date time = vo.getActiveTime();
+//                    date转localDateTime
+                    LocalDateTime localDateTime = LocalDateTime.ofInstant(time.toInstant(), ZoneId.systemDefault());
+                    LocalDateTime localDateTime2 = LocalDateTime.ofInstant(activeTime.toInstant(), ZoneId.systemDefault());
+
+                    Duration duration = Duration.between(localDateTime,localDateTime2);
+                    Duration duration2 = Duration.between(localDateTime2,localDateTime);
+                    long minutes = duration.toMillis();
+                    long minutes2 = duration2.toMillis();
+                    if (minutes>=60000L||minutes2>=60000L) {
+                        int size = univiewVOS.size();
+                        if (size==i) {
+                            univiewVOS.add(univiewVO);
+                            vos.add(univiewVO);
+                        }
+                    }else {
+                        break;
+                    }
+                }
+            }else {
+                List<UniviewVO> univiewVOS = new ArrayList<>();
+                univiewVOS.add(univiewVO);
+                map.put(cardNumber,univiewVOS);
+                vos.add(univiewVO);
+            }
+        }
 
 //        univiewVOList.forEach(univiewVO -> {
-        for (UniviewVO univiewVO : univiewVOList) {
+        for (UniviewVO univiewVO : vos) {
             AccessRecord accessRecord = new AccessRecord();
             String activePlace = univiewVO.getActivePlace();
             if (activePlace.contains("学生公寓")) {
@@ -419,7 +465,7 @@ public class AccessRecordServiceImpl extends ServiceImpl<AccessRecordMapper, Acc
                         }
                         String path2 = "https://chtech.ncjti.edu.cn/studentsportrait/dev-img/" + fileNameWithPath2;
                         accessRecord.setPictureTemplate(path2);
-//                        this.save(accessRecord);
+                        this.save(accessRecord);
                     }
 
                 }
@@ -429,6 +475,14 @@ public class AccessRecordServiceImpl extends ServiceImpl<AccessRecordMapper, Acc
 
     }
 
+    public static void main(String[] args) {
+        LocalDateTime localDateTime=LocalDateTime.now();
+        LocalDateTime localDateTime2 = localDateTime.plusMinutes(1);
+        LocalDateTime localDateTime3 = localDateTime.plusSeconds(60);
+        Duration duration = Duration.between(localDateTime,localDateTime2);
+        long minutes = duration.toMillis();
+        System.out.println("minutes = " + minutes);
+    }
 
     /**
      * 历史记录
@@ -545,13 +599,15 @@ public class AccessRecordServiceImpl extends ServiceImpl<AccessRecordMapper, Acc
 //        七
         LocalDateTime localDateTime7 = localDateTime6.minusHours(one);
 
+//
+        List<Long> restsList = countAccessRecord("其他");
+        List<Long> studentList = countAccessRecord("学生");
+        List<Long> staffList = countAccessRecord("教职工");
+        List<Long> alumniList = countAccessRecord("校友");
+        List<Long> visitorList = countAccessRecord("访客");
+        List<Long> temporaryWorkerList = countAccessRecord("临时人员");
+
 
-        List<Integer> restsList = countAccessRecord("其他");
-        List<Integer> studentList = countAccessRecord("学生");
-        List<Integer> staffList = countAccessRecord("教职工");
-        List<Integer> alumniList = countAccessRecord("校友");
-        List<Integer> visitorList = countAccessRecord("访客");
-        List<Integer> temporaryWorkerList = countAccessRecord("临时人员");
 
         List<Integer> list = new ArrayList<>();
         list.add(localDateTime7.getHour());
@@ -767,7 +823,8 @@ public class AccessRecordServiceImpl extends ServiceImpl<AccessRecordMapper, Acc
      * @param name
      * @return
      */
-    public List<Integer> countAccessRecord(String name) {
+    public List<Long> countAccessRecord(String name) {
+        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         LocalDateTime now = LocalDateTime.now();
 //        当时时间
         LocalDateTime end = now.withMinute(zeroNumber).withSecond(zeroNumber);
@@ -784,17 +841,24 @@ public class AccessRecordServiceImpl extends ServiceImpl<AccessRecordMapper, Acc
 //        六
         LocalDateTime localDateTime6 = localDateTime5.minusHours(one);
 //        七
-        LocalDateTime localDateTime7 = localDateTime6.minusHours(one);
-
-        int count1 = this.list(Wrappers.<AccessRecord>lambdaQuery().between(AccessRecord::getDateTime, localDateTime7, localDateTime6).eq(AccessRecord::getIdentity, name)).size();
-        int count2 = this.list(Wrappers.<AccessRecord>lambdaQuery().between(AccessRecord::getDateTime, localDateTime6, localDateTime5).eq(AccessRecord::getIdentity, name)).size();
-        int count3 = this.list(Wrappers.<AccessRecord>lambdaQuery().between(AccessRecord::getDateTime, localDateTime5, localDateTime4).eq(AccessRecord::getIdentity, name)).size();
-        int count4 = this.list(Wrappers.<AccessRecord>lambdaQuery().between(AccessRecord::getDateTime, localDateTime4, localDateTime3).eq(AccessRecord::getIdentity, name)).size();
-        int count5 = this.list(Wrappers.<AccessRecord>lambdaQuery().between(AccessRecord::getDateTime, localDateTime3, localDateTime2).eq(AccessRecord::getIdentity, name)).size();
-        int count6 = this.list(Wrappers.<AccessRecord>lambdaQuery().between(AccessRecord::getDateTime, localDateTime2, localDateTime1).eq(AccessRecord::getIdentity, name)).size();
-        int count7 = this.list(Wrappers.<AccessRecord>lambdaQuery().between(AccessRecord::getDateTime, localDateTime1, end).eq(AccessRecord::getIdentity, name)).size();
-
-        List<Integer> list = new ArrayList<>();
+//        LocalDateTime localDateTime7 = localDateTime6.minusHours(one);
+
+//        long count1 = this.count(Wrappers.<AccessRecord>lambdaQuery().between(AccessRecord::getDateTime, localDateTime7, localDateTime6).eq(AccessRecord::getIdentity, name));
+//        long count2 = this.count(Wrappers.<AccessRecord>lambdaQuery().between(AccessRecord::getDateTime, localDateTime6, localDateTime5).eq(AccessRecord::getIdentity, name));
+//        long count3 = this.count(Wrappers.<AccessRecord>lambdaQuery().between(AccessRecord::getDateTime, localDateTime5, localDateTime4).eq(AccessRecord::getIdentity, name));
+//        long count4 = this.count(Wrappers.<AccessRecord>lambdaQuery().between(AccessRecord::getDateTime, localDateTime4, localDateTime3).eq(AccessRecord::getIdentity, name));
+//        long count5 = this.count(Wrappers.<AccessRecord>lambdaQuery().between(AccessRecord::getDateTime, localDateTime3, localDateTime2).eq(AccessRecord::getIdentity, name));
+//        long count6 = this.count(Wrappers.<AccessRecord>lambdaQuery().between(AccessRecord::getDateTime, localDateTime2, localDateTime1).eq(AccessRecord::getIdentity, name));
+//        long count7 = this.count(Wrappers.<AccessRecord>lambdaQuery().between(AccessRecord::getDateTime, localDateTime1, end).eq(AccessRecord::getIdentity, name));
+        Long count1 = getCount(name, localDateTime6.format(dateTimeFormatter));
+        Long count2 = getCount(name, localDateTime5.format(dateTimeFormatter));
+        Long count3 = getCount(name, localDateTime4.format(dateTimeFormatter));
+        Long count4 = getCount(name, localDateTime3.format(dateTimeFormatter));
+        Long count5 = getCount(name, localDateTime2.format(dateTimeFormatter));
+        Long count6 = getCount(name, localDateTime1.format(dateTimeFormatter));
+        Long count7 = getCount(name, end.format(dateTimeFormatter));
+
+        List<Long> list = new ArrayList<>();
         list.add(count1);
         list.add(count2);
         list.add(count3);
@@ -806,6 +870,20 @@ public class AccessRecordServiceImpl extends ServiceImpl<AccessRecordMapper, Acc
     }
 
     /**
+     * 通过时间和名字返回次数
+     * @return
+     */
+    public Long getCount(String name,String dateTime){
+        HourlyPerson hp = hourlyPersonService.getOne(Wrappers.<HourlyPerson>lambdaQuery().eq(HourlyPerson::getType, name).eq(HourlyPerson::getDateTime, dateTime));
+        if (ObjectUtils.isNotEmpty(hp)) {
+            return hp.getCount();
+        }else {
+            return 0L;
+        }
+    }
+
+
+    /**
      * 通过总次数和名字,返回占比率
      *
      * @param total
@@ -828,7 +906,7 @@ public class AccessRecordServiceImpl extends ServiceImpl<AccessRecordMapper, Acc
      * @return
      */
     public PersonalRatiosDto getPersonalRatiosDto(String name) {
-        int count = this.list(Wrappers.<AccessRecord>lambdaQuery().eq(AccessRecord::getIdentity, name)).size();
+        Long count = this.count(Wrappers.<AccessRecord>lambdaQuery().eq(AccessRecord::getIdentity, name));
         PersonalRatiosDto personalRatiosDto = new PersonalRatiosDto();
         personalRatiosDto.setName(name);
         personalRatiosDto.setValue(count);

+ 80 - 0
src/main/java/com/chuanghai/access_record_api/service/impl/HourlyPersonServiceImpl.java

@@ -0,0 +1,80 @@
+package com.chuanghai.access_record_api.service.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.chuanghai.access_record_api.entity.AccessRecord;
+import com.chuanghai.access_record_api.entity.HourlyPerson;
+import com.chuanghai.access_record_api.mapper.HourlyPersonMapper;
+import com.chuanghai.access_record_api.service.AccessRecordService;
+import com.chuanghai.access_record_api.service.HourlyPersonService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+import sun.reflect.generics.tree.VoidDescriptor;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+
+@Service
+public class HourlyPersonServiceImpl extends ServiceImpl<HourlyPersonMapper, HourlyPerson> implements HourlyPersonService {
+
+    @Autowired
+    AccessRecordService accessRecordService;
+
+    static int zeroNumber = 0;
+    static Integer one = 1;
+
+    //    每小时定时计算每种类型的总次数
+    public HourlyPerson getHour(String name) {
+        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        LocalDateTime now = LocalDateTime.now();
+//        当时时间
+        LocalDateTime end = now.withMinute(zeroNumber).withSecond(zeroNumber);
+//        减一
+        LocalDateTime localDateTime1 = end.minusHours(one);
+        long count = accessRecordService.count(Wrappers.<AccessRecord>lambdaQuery().between(AccessRecord::getDateTime, localDateTime1, end).eq(AccessRecord::getIdentity, name));
+
+        HourlyPerson hourlyPerson = new HourlyPerson();
+        hourlyPerson.setType(name);
+        hourlyPerson.setCount(count);
+        String dateTime = end.format(dateTimeFormatter);
+        hourlyPerson.setDateTime(dateTime);
+        if (!isExist(name, dateTime)) {
+            this.save(hourlyPerson);
+        }else {
+            this.update(Wrappers.<HourlyPerson>lambdaQuery().eq(HourlyPerson::getType,name).eq(HourlyPerson::getDateTime,dateTime));
+        }
+
+        return hourlyPerson;
+    }
+
+    //每小时第一分钟运行
+    @Scheduled(cron = "0 1 * * * ? ")
+    public void saveHourlyPerson() {
+       getHour("其他");
+       getHour("学生");
+       getHour("教职工");
+       getHour("校友");
+       getHour("访客");
+       getHour("临时人员");
+    }
+
+    /**
+     * 判断是否已添加
+     *
+     * @param name
+     * @param dateTime
+     * @return
+     */
+    public Boolean isExist(String name, String dateTime) {
+        List<HourlyPerson> list = this.list(Wrappers.<HourlyPerson>lambdaQuery().eq(HourlyPerson::getType, name).eq(HourlyPerson::getDateTime, dateTime));
+        if (ObjectUtils.isNotEmpty(list) && list.size() > 0) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+}

+ 7 - 0
src/main/java/com/chuanghai/access_record_api/utils/DateUtils.java

@@ -26,6 +26,8 @@ public class DateUtils {
     private Date yesterdayUTC;
     private String timeNow;
     private String yesterNow;
+    private String afterTenMinute;
+    private String now;
     private String afterTwoHours;
     private String beforeOneMinutes;
     private Long zero;
@@ -93,6 +95,11 @@ public class DateUtils {
         //前端日期数据由 String转Date
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         Calendar calendar = Calendar.getInstance();
+        now = sdf.format(calendar.getTime());
+
+//        在当前增加10分钟
+        calendar.add(Calendar.MINUTE,120);
+        afterTenMinute = sdf.format(calendar.getTime());
 
         timeNow = sdf.format(calendar.getTime());
         //在此时间上向前减一天

+ 3 - 3
src/main/resources/application.yml

@@ -2,9 +2,9 @@ server:
   port: 8087
 spring:
   profiles:
-    #    active: dev #开发环境配置文件
-    active: test  #测试环境配置文件
-  #    active: pro  #生产环境配置文件
+        active: dev #开发环境配置文件
+#    active: test  #测试环境配置文件
+#      active: pro  #生产环境配置文件
   application:
     name: access_record_api
   datasource:

+ 77 - 0
src/main/resources/sql/access_record_api.sql

@@ -0,0 +1,77 @@
+/*
+ Navicat Premium Data Transfer
+
+ Source Server         : 学生肖像69数据库
+ Source Server Type    : MySQL
+ Source Server Version : 80030
+ Source Host           : 172.16.20.69:3306
+ Source Schema         : access_record_api
+
+ Target Server Type    : MySQL
+ Target Server Version : 80030
+ File Encoding         : 65001
+
+ Date: 05/02/2024 16:29:28
+*/
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for access_record
+-- ----------------------------
+DROP TABLE IF EXISTS `access_record`;
+CREATE TABLE `access_record`  (
+  `id` int(0) NOT NULL AUTO_INCREMENT,
+  `recognition_id` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '识别ID',
+  `address` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '记录地点',
+  `date_time` datetime(0) NULL DEFAULT NULL COMMENT '记录时间',
+  `school_user_id` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '人脸识别记录用户标识',
+  `person_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '名字',
+  `picture_scene` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '抓拍的现场图片',
+  `picture_template` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '模板照片',
+  `identity` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '身份类型 0为其他,1为学生,4为教职工,5为校友,6为访问应用身份(访客),7为临时人员',
+  PRIMARY KEY (`id`) USING BTREE,
+  INDEX `card_number`(`school_user_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 2159702 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for hourly_person
+-- ----------------------------
+DROP TABLE IF EXISTS `hourly_person`;
+CREATE TABLE `hourly_person`  (
+  `id` int(0) NOT NULL AUTO_INCREMENT,
+  `type` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '身份类型',
+  `date_time` datetime(0) NULL DEFAULT NULL COMMENT '时间',
+  `count` bigint(0) NULL DEFAULT NULL COMMENT '次数',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 14719 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for school_user
+-- ----------------------------
+DROP TABLE IF EXISTS `school_user`;
+CREATE TABLE `school_user`  (
+  `id` int(0) NOT NULL AUTO_INCREMENT COMMENT 'id',
+  `card_number` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT ' 电子卡号',
+  `name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '姓名',
+  `gender` varchar(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '性别,0为未知,1为男,2为女',
+  `identity_type` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '身份类型,0为其他,1为学生,4为教职工,5为校友,6为访问应用身份,7为临时人员',
+  `id_card` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '身份证',
+  `phone` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '手机号',
+  `serial_number` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '编号',
+  `student_nts` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '准考证号',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 71349 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for student_nts
+-- ----------------------------
+DROP TABLE IF EXISTS `student_nts`;
+CREATE TABLE `student_nts`  (
+  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+  `student_nts` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+  `id_card` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+SET FOREIGN_KEY_CHECKS = 1;

BIN
target/access_record_api-0.0.1-SNAPSHOT.jar.original


+ 58 - 0
target/classes/application.yml

@@ -0,0 +1,58 @@
+server:
+  port: 8087
+spring:
+  profiles:
+        active: dev #开发环境配置文件
+#    active: test  #测试环境配置文件
+#      active: pro  #生产环境配置文件
+  application:
+    name: access_record_api
+  datasource:
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    url: jdbc:mysql://172.16.20.69:3306/access_record_api?characterEncoding=utf-8&useSSL=FALSE&useAffectedRows=TRUE&allowMultiQueries=true&serverTimezone=GMT%2B8
+    username: root
+    password: chuanghai@2022
+#    driver-class-name: com.mysql.cj.jdbc.Driver
+#    url: jdbc:mysql://127.0.0.1:3306/access_record_api?characterEncoding=utf-8&useSSL=FALSE&useAffectedRows=TRUE&allowMultiQueries=true&serverTimezone=GMT%2B8
+#    username: root
+#    password: root
+  servlet:
+    multipart:
+      enabled: true
+      file-size-threshold: 0
+      max-file-size: 10MB
+      max-request-size: 10MB
+
+mybatis-plus:
+  configuration:
+    # 驼峰命名和底杠命名自动转换
+    map-underscore-to-camel-case: true
+    # Mybatis默认简单日志
+#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  #mybatis 的运行日志,测试时需注释
+    # MyBatis 自动映射策略,通过该配置可指定 MyBatis 是否并且如何来自动映射数据表字段与对象的属性,总共有 3 种可选值:
+    # AutoMappingBehavior.NONE:不启用自动映射
+    # AutoMappingBehavior.PARTIAL:只对非嵌套的 resultMap 进行自动映射
+    # AutoMappingBehavior.FULL:对所有的 resultMap 都进行自动映射
+    auto-mapping-behavior: full
+  global-config:
+    db-config:
+      # MybatisPlus 设置全局主键生成策略:自增
+      id-type: auto
+      # 逻辑删除字段名
+      logic-delete-field: isDeleted
+      # 逻辑删除字面值:未删除为0
+      logic-not-delete-value: 0
+      # 逻辑删除字面值:删除为1
+      logic-delete-value: 1
+
+#微校相关配置
+weixiao:
+  app_key: DB60250B489345ED
+  response_type: code
+  scope: snsapi_sso
+  ocode: 1015730314
+  app_secret: 68ED5D4B98DD8817C1558A8FCAF9D1BF
+  redirect_uri: http://5d519a3d.cpolar.top/
+
+
+

+ 7 - 0
target/classes/log4j.properties

@@ -0,0 +1,7 @@
+### ???Logger###
+log4j.rootLogger=debug,stdout
+### ???????? ###
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS}  %l   %m%n

+ 5 - 0
target/maven-archiver/pom.properties

@@ -0,0 +1,5 @@
+#Generated by Maven
+#Thu Oct 26 14:43:33 CST 2023
+version=0.0.1-SNAPSHOT
+groupId=com.chuanghai
+artifactId=access_record_api

+ 42 - 0
target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst

@@ -0,0 +1,42 @@
+com\chuanghai\access_record_api\utils\FileUtil.class
+com\chuanghai\access_record_api\comfig\FacePassRecord.class
+com\chuanghai\access_record_api\AccessRecordApiApplication.class
+com\chuanghai\access_record_api\service\HourlyPersonService.class
+com\chuanghai\access_record_api\response\BaseResponse.class
+com\chuanghai\access_record_api\service\impl\SchoolUserServiceImpl$2.class
+com\chuanghai\access_record_api\utils\LogUtils.class
+com\chuanghai\access_record_api\service\SchoolUserService.class
+com\chuanghai\access_record_api\service\impl\AccessRecordServiceImpl$1.class
+com\chuanghai\access_record_api\comfig\BaseClass.class
+com\chuanghai\access_record_api\comfig\PageConfig.class
+com\chuanghai\access_record_api\entity\HourlyPerson.class
+com\chuanghai\access_record_api\mapper\HourlyPersonMapper.class
+com\chuanghai\access_record_api\utils\HMAC.class
+com\chuanghai\access_record_api\entity\AccessRecord.class
+com\chuanghai\access_record_api\service\impl\StudentNtsServiceImpl.class
+com\chuanghai\access_record_api\mapper\SchoolUserMapper.class
+com\chuanghai\access_record_api\mapper\StudentNtsMapper.class
+com\chuanghai\access_record_api\service\StudentNtsService.class
+com\chuanghai\access_record_api\utils\Base64Utils.class
+com\chuanghai\access_record_api\comfig\ChannelDetailInfos.class
+com\chuanghai\access_record_api\service\impl\HourlyPersonServiceImpl.class
+com\chuanghai\access_record_api\comfig\RestTemplastConfig.class
+com\chuanghai\access_record_api\service\impl\AccessRecordServiceImpl.class
+com\chuanghai\access_record_api\controller\AccessRecordController.class
+com\chuanghai\access_record_api\entity\dto\HistoryDto.class
+com\chuanghai\access_record_api\entity\dto\AccessRecordDto.class
+com\chuanghai\access_record_api\mapper\AccessRecordMapper.class
+com\chuanghai\access_record_api\response\enums\StatusEnum.class
+com\chuanghai\access_record_api\utils\vo\UniviewVO.class
+com\chuanghai\access_record_api\utils\DateUtils.class
+com\chuanghai\access_record_api\comfig\SwaggerConfig.class
+com\chuanghai\access_record_api\entity\SchoolUser.class
+com\chuanghai\access_record_api\service\impl\SchoolUserServiceImpl$1.class
+com\chuanghai\access_record_api\response\enums\Code.class
+com\chuanghai\access_record_api\entity\dto\TrafficCountDto.class
+com\chuanghai\access_record_api\controller\SchoolUserController.class
+com\chuanghai\access_record_api\entity\StudentNts.class
+com\chuanghai\access_record_api\service\AccessRecordService.class
+com\chuanghai\access_record_api\service\impl\SchoolUserServiceImpl.class
+com\chuanghai\access_record_api\utils\vo\BsmjVo.class
+com\chuanghai\access_record_api\entity\dto\PersonalRatiosDto.class

+ 39 - 0
target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst

@@ -0,0 +1,39 @@
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\utils\FileUtil.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\mapper\AccessRecordMapper.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\controller\SchoolUserController.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\entity\StudentNts.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\utils\vo\UniviewVO.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\comfig\ChannelDetailInfos.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\comfig\RestTemplastConfig.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\entity\dto\HistoryDto.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\comfig\PageConfig.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\mapper\HourlyPersonMapper.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\comfig\SwaggerConfig.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\utils\Base64Utils.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\service\impl\SchoolUserServiceImpl.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\comfig\BaseClass.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\response\BaseResponse.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\mapper\StudentNtsMapper.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\entity\dto\AccessRecordDto.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\utils\HMAC.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\service\StudentNtsService.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\service\impl\StudentNtsServiceImpl.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\entity\dto\TrafficCountDto.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\AccessRecordApiApplication.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\comfig\FacePassRecord.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\entity\HourlyPerson.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\entity\SchoolUser.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\utils\DateUtils.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\utils\LogUtils.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\utils\vo\BsmjVo.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\response\enums\Code.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\service\HourlyPersonService.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\mapper\SchoolUserMapper.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\response\enums\StatusEnum.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\service\SchoolUserService.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\service\impl\HourlyPersonServiceImpl.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\controller\AccessRecordController.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\entity\dto\PersonalRatiosDto.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\service\impl\AccessRecordServiceImpl.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\entity\AccessRecord.java
+E:\company\access_record_api\src\main\java\com\chuanghai\access_record_api\service\AccessRecordService.java