|
|
@@ -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);
|