|
@@ -8,6 +8,8 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.chuanghai.student_portrait.config.ChannelDetailInfos;
|
|
import com.chuanghai.student_portrait.config.ChannelDetailInfos;
|
|
|
import com.chuanghai.student_portrait.config.FacePassRecord;
|
|
import com.chuanghai.student_portrait.config.FacePassRecord;
|
|
|
|
|
+import com.chuanghai.student_portrait.config.JedisUtil;
|
|
|
|
|
+import com.chuanghai.student_portrait.config.SubscriptionConfig;
|
|
|
import com.chuanghai.student_portrait.entity.*;
|
|
import com.chuanghai.student_portrait.entity.*;
|
|
|
import com.chuanghai.student_portrait.entity.dto.AccessCountDto;
|
|
import com.chuanghai.student_portrait.entity.dto.AccessCountDto;
|
|
|
import com.chuanghai.student_portrait.entity.dto.FaceDisernDto;
|
|
import com.chuanghai.student_portrait.entity.dto.FaceDisernDto;
|
|
@@ -17,18 +19,26 @@ import com.chuanghai.student_portrait.response.BaseResponse;
|
|
|
import com.chuanghai.student_portrait.response.enums.StatusEnum;
|
|
import com.chuanghai.student_portrait.response.enums.StatusEnum;
|
|
|
import com.chuanghai.student_portrait.service.*;
|
|
import com.chuanghai.student_portrait.service.*;
|
|
|
import com.chuanghai.student_portrait.utils.*;
|
|
import com.chuanghai.student_portrait.utils.*;
|
|
|
|
|
+import com.chuanghai.student_portrait.utils.vo.SubscribePersonCondition;
|
|
|
|
|
+import com.chuanghai.student_portrait.utils.vo.SubscriptionVo;
|
|
|
import com.chuanghai.student_portrait.utils.vo.UniviewVO;
|
|
import com.chuanghai.student_portrait.utils.vo.UniviewVO;
|
|
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
|
-import com.fasterxml.jackson.core.type.TypeReference;
|
|
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.http.*;
|
|
import org.springframework.http.*;
|
|
|
import org.springframework.scheduling.annotation.Scheduled;
|
|
import org.springframework.scheduling.annotation.Scheduled;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.web.client.RestTemplate;
|
|
import org.springframework.web.client.RestTemplate;
|
|
|
|
|
|
|
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
+import java.io.BufferedReader;
|
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
|
|
|
+import java.io.InputStreamReader;
|
|
|
|
|
+import java.io.UnsupportedEncodingException;
|
|
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
import java.time.*;
|
|
import java.time.*;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
import java.util.*;
|
|
@@ -40,6 +50,7 @@ import java.util.*;
|
|
|
* @Version 1.0
|
|
* @Version 1.0
|
|
|
*/
|
|
*/
|
|
|
@Service
|
|
@Service
|
|
|
|
|
+@Slf4j
|
|
|
public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceDiscern> implements FaceDiscernService {
|
|
public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceDiscern> implements FaceDiscernService {
|
|
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
@@ -204,6 +215,7 @@ public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceD
|
|
|
jsonStr = objectMapper.writeValueAsString(accessCountDtos); //areaList序列化为json字符串
|
|
jsonStr = objectMapper.writeValueAsString(accessCountDtos); //areaList序列化为json字符串
|
|
|
} catch (JsonProcessingException e) {
|
|
} catch (JsonProcessingException e) {
|
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
|
|
|
+ LogUtils.logError(e);
|
|
|
}
|
|
}
|
|
|
jedisUtil.setnx("unitAccessCount" + id, jsonStr);
|
|
jedisUtil.setnx("unitAccessCount" + id, jsonStr);
|
|
|
return BaseResponse.ok(StatusEnum.SUCCESS, accessCountDtos);
|
|
return BaseResponse.ok(StatusEnum.SUCCESS, accessCountDtos);
|
|
@@ -233,14 +245,14 @@ public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceD
|
|
|
}
|
|
}
|
|
|
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
LocalDateTime now = LocalDateTime.now();
|
|
LocalDateTime now = LocalDateTime.now();
|
|
|
-// 前七天
|
|
|
|
|
- String oldDay = now.minusDays(7).withHour(0).withMinute(0).withSecond(0).format(pattern);
|
|
|
|
|
-// 今天凌晨
|
|
|
|
|
- String nowDay = now.withHour(0).withMinute(0).withSecond(0).format(pattern);
|
|
|
|
|
|
|
+//// 前七天
|
|
|
|
|
+// String oldDay = now.minusDays(7).withHour(0).withMinute(0).withSecond(0).format(pattern);
|
|
|
|
|
+//// 今天凌晨
|
|
|
|
|
+// String nowDay = now.withHour(0).withMinute(0).withSecond(0).format(pattern);
|
|
|
|
|
|
|
|
ArrayList<PersonalTrackDto> personalTrackDtos = new ArrayList<>();
|
|
ArrayList<PersonalTrackDto> personalTrackDtos = new ArrayList<>();
|
|
|
// 获取人脸轨迹
|
|
// 获取人脸轨迹
|
|
|
- List<FaceDiscern> list = this.list(Wrappers.<FaceDiscern>lambdaQuery().between(FaceDiscern::getFacediscernTime, oldDay, nowDay).eq(FaceDiscern::getShooluserId, id));
|
|
|
|
|
|
|
+ List<FaceDiscern> list = this.list(Wrappers.<FaceDiscern>lambdaQuery()/*.between(FaceDiscern::getFacediscernTime, oldDay, nowDay)*/.eq(FaceDiscern::getShooluserId, id));
|
|
|
if (ObjectUtils.isNotEmpty(list) && list.size() > 0) {
|
|
if (ObjectUtils.isNotEmpty(list) && list.size() > 0) {
|
|
|
for (FaceDiscern faceDiscern : list) {
|
|
for (FaceDiscern faceDiscern : list) {
|
|
|
PersonalTrackDto dto = new PersonalTrackDto();
|
|
PersonalTrackDto dto = new PersonalTrackDto();
|
|
@@ -270,7 +282,7 @@ public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceD
|
|
|
personalTrackDtos.add(dto);
|
|
personalTrackDtos.add(dto);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- List<Access> accessList = accessService.list(Wrappers.<Access>lambdaQuery().between(Access::getAccessTime, oldDay, nowDay).eq(Access::getCardNumber, id));
|
|
|
|
|
|
|
+ List<Access> accessList = accessService.list(Wrappers.<Access>lambdaQuery()/*.between(Access::getAccessTime, oldDay, nowDay)*/.eq(Access::getCardNumber, id));
|
|
|
if (ObjectUtils.isNotEmpty(accessList) && accessList.size() > 0) {
|
|
if (ObjectUtils.isNotEmpty(accessList) && accessList.size() > 0) {
|
|
|
for (Access access : accessList) {
|
|
for (Access access : accessList) {
|
|
|
PersonalTrackDto dto = new PersonalTrackDto();
|
|
PersonalTrackDto dto = new PersonalTrackDto();
|
|
@@ -292,7 +304,7 @@ public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceD
|
|
|
personalTrackDtos.add(dto);
|
|
personalTrackDtos.add(dto);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- List<HotWater> hotWaterList = hotWaterService.list(Wrappers.<HotWater>lambdaQuery().between(HotWater::getHotwaterTime, oldDay, nowDay).eq(HotWater::getCardNumber, id));
|
|
|
|
|
|
|
+ List<HotWater> hotWaterList = hotWaterService.list(Wrappers.<HotWater>lambdaQuery()/*.between(HotWater::getHotwaterTime, oldDay, nowDay)*/.eq(HotWater::getCardNumber, id));
|
|
|
if (ObjectUtils.isNotEmpty(hotWaterList) && hotWaterList.size() > 0) {
|
|
if (ObjectUtils.isNotEmpty(hotWaterList) && hotWaterList.size() > 0) {
|
|
|
for (HotWater hotWater : hotWaterList) {
|
|
for (HotWater hotWater : hotWaterList) {
|
|
|
PersonalTrackDto dto = new PersonalTrackDto();
|
|
PersonalTrackDto dto = new PersonalTrackDto();
|
|
@@ -316,7 +328,7 @@ public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceD
|
|
|
personalTrackDtos.add(dto);
|
|
personalTrackDtos.add(dto);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- List<Consume> consumeList = consumeService.list(Wrappers.<Consume>lambdaQuery().between(Consume::getConsumeTime, oldDay, nowDay).eq(Consume::getIdCard, id));
|
|
|
|
|
|
|
+ List<Consume> consumeList = consumeService.list(Wrappers.<Consume>lambdaQuery()/*.between(Consume::getConsumeTime, oldDay, nowDay)*/.eq(Consume::getIdCard, id));
|
|
|
if (ObjectUtils.isNotEmpty(consumeList) && consumeList.size() > 0) {
|
|
if (ObjectUtils.isNotEmpty(consumeList) && consumeList.size() > 0) {
|
|
|
for (Consume consume : consumeList) {
|
|
for (Consume consume : consumeList) {
|
|
|
PersonalTrackDto dto = new PersonalTrackDto();
|
|
PersonalTrackDto dto = new PersonalTrackDto();
|
|
@@ -382,11 +394,11 @@ public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceD
|
|
|
List<FaceDisernDto> dtoList = baseMapper.getStudentCount(startTime, endTime);
|
|
List<FaceDisernDto> dtoList = baseMapper.getStudentCount(startTime, endTime);
|
|
|
ArrayList<FaceDisernDto> faceDisernDtos = new ArrayList<>();
|
|
ArrayList<FaceDisernDto> faceDisernDtos = new ArrayList<>();
|
|
|
for (int i = 0; i <= 9; i++) {
|
|
for (int i = 0; i <= 9; i++) {
|
|
|
- if (i<dtoList.size()) {
|
|
|
|
|
|
|
+ if (i < dtoList.size()) {
|
|
|
faceDisernDtos.add(dtoList.get(i));
|
|
faceDisernDtos.add(dtoList.get(i));
|
|
|
- }else {
|
|
|
|
|
|
|
+ } else {
|
|
|
FaceDisernDto faceDisernDto = new FaceDisernDto();
|
|
FaceDisernDto faceDisernDto = new FaceDisernDto();
|
|
|
- faceDisernDto.setSchoolUserID(i+3+"");
|
|
|
|
|
|
|
+ faceDisernDto.setSchoolUserID(i + 3 + "");
|
|
|
faceDisernDtos.add(faceDisernDto);
|
|
faceDisernDtos.add(faceDisernDto);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -402,13 +414,13 @@ public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceD
|
|
|
*/
|
|
*/
|
|
|
@Override
|
|
@Override
|
|
|
public BaseResponse repetitionCoordinate(String id) {
|
|
public BaseResponse repetitionCoordinate(String id) {
|
|
|
- ObjectMapper objectMapper = new ObjectMapper();
|
|
|
|
|
- // redis 缓存
|
|
|
|
|
- if (jedisUtil.exists("repetitionCoordinate"+id)) {
|
|
|
|
|
- String address = jedisUtil.get("repetitionCoordinate"+id);
|
|
|
|
|
- List<Map> list = JSON.parseArray(address, Map.class);
|
|
|
|
|
- return BaseResponse.ok(StatusEnum.SUCCESS, list);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ ObjectMapper objectMapper = new ObjectMapper();
|
|
|
|
|
+ // redis 缓存
|
|
|
|
|
+ if (jedisUtil.exists("repetitionCoordinate" + id)) {
|
|
|
|
|
+ String address = jedisUtil.get("repetitionCoordinate" + id);
|
|
|
|
|
+ List<Map> list = JSON.parseArray(address, Map.class);
|
|
|
|
|
+ return BaseResponse.ok(StatusEnum.SUCCESS, list);
|
|
|
|
|
+ }
|
|
|
if (ObjectUtils.isEmpty(id)) {
|
|
if (ObjectUtils.isEmpty(id)) {
|
|
|
return BaseResponse.error(StatusEnum.FAIL, "参数异常");
|
|
return BaseResponse.error(StatusEnum.FAIL, "参数异常");
|
|
|
}
|
|
}
|
|
@@ -547,53 +559,337 @@ public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceD
|
|
|
return h.getDateTime();
|
|
return h.getDateTime();
|
|
|
}));
|
|
}));
|
|
|
// 以相反的顺序排列
|
|
// 以相反的顺序排列
|
|
|
- Collections.reverse(personalTrackDtos);
|
|
|
|
|
|
|
+// Collections.reverse(personalTrackDtos);
|
|
|
|
|
+
|
|
|
|
|
+ HashMap<String, PersonalTrackDto> coordMap = new HashMap<>();
|
|
|
|
|
+ List<Coord> coordList = coordService.list();
|
|
|
|
|
+ for (Coord coord : coordList) {
|
|
|
|
|
+ String buildingName = coord.getBuildingName();
|
|
|
|
|
+ PersonalTrackDto personalTrackDto = new PersonalTrackDto();
|
|
|
|
|
+ personalTrackDto.setLatitude(coord.getLatitude());
|
|
|
|
|
+ personalTrackDto.setLongitude(coord.getLongitude());
|
|
|
|
|
+ String latitude = coord.getLatitude();
|
|
|
|
|
+ String longitude = coord.getLongitude();
|
|
|
|
|
+ String coordinates = longitude + latitude;
|
|
|
|
|
+ switch (coordinates) {
|
|
|
|
|
+ case "581493":
|
|
|
|
|
+ personalTrackDto.setTotalName("1#学生公寓");
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "590436":
|
|
|
|
|
+ personalTrackDto.setTotalName("2#学生公寓");
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "605384":
|
|
|
|
|
+ personalTrackDto.setTotalName("3#学生公寓");
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "613333":
|
|
|
|
|
+ personalTrackDto.setTotalName("4#学生公寓");
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "677275":
|
|
|
|
|
+ personalTrackDto.setTotalName("5#学生公寓");
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "683233":
|
|
|
|
|
+ personalTrackDto.setTotalName("6#学生公寓");
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "690188":
|
|
|
|
|
+ personalTrackDto.setTotalName("7#学生公寓");
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "701148":
|
|
|
|
|
+ personalTrackDto.setTotalName("8#学生公寓");
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "429495":
|
|
|
|
|
+ personalTrackDto.setTotalName("9#学生公寓");
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "441441":
|
|
|
|
|
+ personalTrackDto.setTotalName("10#学生公寓");
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "466384":
|
|
|
|
|
+ personalTrackDto.setTotalName("11#学生公寓");
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "478337":
|
|
|
|
|
+ personalTrackDto.setTotalName("12#学生公寓");
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "541276":
|
|
|
|
|
+ personalTrackDto.setTotalName("13#学生公寓");
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "554232":
|
|
|
|
|
+ personalTrackDto.setTotalName("14#学生公寓");
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "566191":
|
|
|
|
|
+ personalTrackDto.setTotalName("15#学生公寓");
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "574151":
|
|
|
|
|
+ personalTrackDto.setTotalName("16#学生公寓");
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "132940":
|
|
|
|
|
+ personalTrackDto.setTotalName("礼堂");
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "548315":
|
|
|
|
|
+ personalTrackDto.setTotalName("前8栋路口");
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "1075983":
|
|
|
|
|
+ personalTrackDto.setTotalName("北校门进口");
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "997983":
|
|
|
|
|
+ personalTrackDto.setTotalName("北校门出口");
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "354639":
|
|
|
|
|
+ personalTrackDto.setTotalName("食堂");
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "641637":
|
|
|
|
|
+ personalTrackDto.setTotalName("学生创就业中心");
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "897421":
|
|
|
|
|
+ personalTrackDto.setTotalName("1#教学楼");
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "1283875":
|
|
|
|
|
+ personalTrackDto.setTotalName("行政楼");
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "811877":
|
|
|
|
|
+ personalTrackDto.setTotalName("科技楼");
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "1731013":
|
|
|
|
|
+ personalTrackDto.setTotalName("系办楼路口");
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "1296749":
|
|
|
|
|
+ personalTrackDto.setTotalName("系办楼篮球场");
|
|
|
|
|
+ break;
|
|
|
|
|
+ default:
|
|
|
|
|
+ personalTrackDto.setTotalName(buildingName);
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ coordMap.put(coordinates, personalTrackDto);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- HashMap<String, List<PersonalTrackDto>> map = new HashMap<>();
|
|
|
|
|
|
|
+// 更新出现的坐标
|
|
|
|
|
+ HashMap<String, PersonalTrackDto> personalTrackDtoMap = new HashMap<>();
|
|
|
for (PersonalTrackDto personalTrackDto : personalTrackDtos) {
|
|
for (PersonalTrackDto personalTrackDto : personalTrackDtos) {
|
|
|
- String longitude = personalTrackDto.getLongitude();
|
|
|
|
|
|
|
+// String name = personalTrackDto.getName();
|
|
|
String latitude = personalTrackDto.getLatitude();
|
|
String latitude = personalTrackDto.getLatitude();
|
|
|
- String s = longitude + "," + latitude;
|
|
|
|
|
- if (map.containsKey(s)) {
|
|
|
|
|
- List<PersonalTrackDto> dtos = map.get(s);
|
|
|
|
|
- dtos.add(personalTrackDto);
|
|
|
|
|
|
|
+ String longitude = personalTrackDto.getLongitude();
|
|
|
|
|
+ personalTrackDtoMap.put(longitude + latitude, personalTrackDto);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+// 所有的
|
|
|
|
|
+ Set<String> keySet = coordMap.keySet();
|
|
|
|
|
+// 出现的
|
|
|
|
|
+ Set<String> personalSet = personalTrackDtoMap.keySet();
|
|
|
|
|
+
|
|
|
|
|
+ ArrayList<PersonalTrackDto> trackDtoArrayList = new ArrayList<>();
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+// 有一样的坐标需要加一个总坐标
|
|
|
|
|
+ for (String name : keySet) {
|
|
|
|
|
+ PersonalTrackDto personalTrackDtoOld = coordMap.get(name);
|
|
|
|
|
+ if (personalTrackDtoMap.containsKey(name)) {
|
|
|
|
|
+ PersonalTrackDto personalTrackDto = personalTrackDtoMap.get(name);
|
|
|
|
|
+ personalTrackDto.setTotalName(personalTrackDtoOld.getTotalName());
|
|
|
|
|
+ trackDtoArrayList.add(personalTrackDto);
|
|
|
} else {
|
|
} else {
|
|
|
- List<PersonalTrackDto> dtos = new ArrayList<>();
|
|
|
|
|
- dtos.add(personalTrackDto);
|
|
|
|
|
- map.put(s, dtos);
|
|
|
|
|
|
|
+ trackDtoArrayList.add(personalTrackDtoOld);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
- ArrayList<Map> mapArrayList = new ArrayList<>();
|
|
|
|
|
- Set<String> strings = map.keySet();
|
|
|
|
|
- for (String string : strings) {
|
|
|
|
|
- HashMap<String, Object> map1 = new HashMap<>();
|
|
|
|
|
- String[] split = string.split(",");
|
|
|
|
|
- String s = split[0];
|
|
|
|
|
- String s1 = split[1];
|
|
|
|
|
- List<Coord> list1 = coordService.list(Wrappers.<Coord>lambdaQuery().eq(Coord::getLongitude, s).eq(Coord::getLatitude, s1));
|
|
|
|
|
- if (ObjectUtils.isNotEmpty(list1)&&list1.size()>0) {
|
|
|
|
|
- Coord coord = list1.get(0);
|
|
|
|
|
- List<PersonalTrackDto> personalTrackDtos1 = map.get(string);
|
|
|
|
|
- map1.put("name",coord.getBuildingName());
|
|
|
|
|
- map1.put("date",personalTrackDtos1);
|
|
|
|
|
- map1.put("longitude",s);
|
|
|
|
|
- map1.put("latitude",s1);
|
|
|
|
|
- mapArrayList.add(map1);
|
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+// HashMap<String, List<PersonalTrackDto>> map = new HashMap<>();
|
|
|
|
|
+// for (PersonalTrackDto personalTrackDto : personalTrackDtos) {
|
|
|
|
|
+// String longitude = personalTrackDto.getLongitude();
|
|
|
|
|
+// String latitude = personalTrackDto.getLatitude();
|
|
|
|
|
+// String s = longitude + "," + latitude;
|
|
|
|
|
+// if (map.containsKey(s)) {
|
|
|
|
|
+// List<PersonalTrackDto> dtos = map.get(s);
|
|
|
|
|
+// dtos.add(personalTrackDto);
|
|
|
|
|
+// } else {
|
|
|
|
|
+// List<PersonalTrackDto> dtos = new ArrayList<>();
|
|
|
|
|
+// dtos.add(personalTrackDto);
|
|
|
|
|
+// map.put(s, dtos);
|
|
|
|
|
+// }
|
|
|
|
|
+// }
|
|
|
|
|
+// ArrayList<Map> mapArrayList = new ArrayList<>();
|
|
|
|
|
+// Set<String> strings = map.keySet();
|
|
|
|
|
+// for (String string : strings) {
|
|
|
|
|
+// HashMap<String, Object> map1 = new HashMap<>();
|
|
|
|
|
+// String[] split = string.split(",");
|
|
|
|
|
+// String s = split[0];
|
|
|
|
|
+// String s1 = split[1];
|
|
|
|
|
+// List<Coord> list1 = coordService.list(Wrappers.<Coord>lambdaQuery().eq(Coord::getLongitude, s).eq(Coord::getLatitude, s1));
|
|
|
|
|
+// if (ObjectUtils.isNotEmpty(list1) && list1.size() > 0) {
|
|
|
|
|
+// Coord coord = list1.get(0);
|
|
|
|
|
+// List<PersonalTrackDto> personalTrackDtos1 = map.get(string);
|
|
|
|
|
+// map1.put("name", coord.getBuildingName());
|
|
|
|
|
+// map1.put("date", personalTrackDtos1);
|
|
|
|
|
+// map1.put("longitude", s);
|
|
|
|
|
+// map1.put("latitude", s1);
|
|
|
|
|
+// mapArrayList.add(map1);
|
|
|
|
|
+// }
|
|
|
|
|
+//
|
|
|
|
|
+// }
|
|
|
|
|
+
|
|
|
|
|
+ String jsonStr = null;
|
|
|
|
|
+ try {
|
|
|
|
|
+ jsonStr = objectMapper.writeValueAsString(trackDtoArrayList); //areaList序列化为json字符串
|
|
|
|
|
+ } catch (JsonProcessingException e) {
|
|
|
|
|
+ e.printStackTrace();
|
|
|
|
|
+ log.error("重复坐标序列化为json字符串报错");
|
|
|
}
|
|
}
|
|
|
|
|
+ jedisUtil.setnx("repetitionCoordinate" + id, jsonStr);
|
|
|
|
|
+
|
|
|
|
|
+ return BaseResponse.ok(StatusEnum.SUCCESS, trackDtoArrayList);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
|
|
|
- String jsonStr = null;
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 人脸对比上报解析
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param request
|
|
|
|
|
+ * @param response
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void saveFaceContrast(HttpServletRequest request, HttpServletResponse response, String url) {
|
|
|
|
|
+ if ("PersonInfo".equals(url)) {
|
|
|
|
|
+ LogUtils.logInfo("进入人脸对比预警接口");
|
|
|
|
|
+ FaceDiscern faceDiscern = new FaceDiscern();
|
|
|
|
|
+// 类型:宇视
|
|
|
|
|
+ faceDiscern.setFacediscernType("U");
|
|
|
|
|
+// 识别事项
|
|
|
|
|
+ faceDiscern.setFacediscernEvent("人脸识别");
|
|
|
try {
|
|
try {
|
|
|
- jsonStr = objectMapper.writeValueAsString(mapArrayList); //areaList序列化为json字符串
|
|
|
|
|
- } catch (JsonProcessingException e) {
|
|
|
|
|
- e.printStackTrace();
|
|
|
|
|
|
|
+ BufferedReader streamReader = new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF-8"));
|
|
|
|
|
+ StringBuilder responseStrBuilder = new StringBuilder();
|
|
|
|
|
+ String inputStr;
|
|
|
|
|
+ while ((inputStr = streamReader.readLine()) != null) {
|
|
|
|
|
+ responseStrBuilder.append(inputStr);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+// 人脸对比上报预警
|
|
|
|
|
+ JSONObject jsonObject = JSONObject.parseObject(responseStrBuilder.toString());
|
|
|
|
|
+ JSONObject personEventInfo = jsonObject.getJSONObject("PersonEventInfo");
|
|
|
|
|
+
|
|
|
|
|
+// 人员报警信息
|
|
|
|
|
+ JSONArray faceInfoList = personEventInfo.getJSONArray("FaceInfoList");
|
|
|
|
|
+
|
|
|
|
|
+ for (int i = 0; i < faceInfoList.size(); i++) {
|
|
|
|
|
+ JSONObject faceInfoListJSONObject = faceInfoList.getJSONObject(i);
|
|
|
|
|
+// 通道号
|
|
|
|
|
+ String channelID = faceInfoList.getJSONObject(i).get("ChannelID").toString();
|
|
|
|
|
+
|
|
|
|
|
+// 过人时间
|
|
|
|
|
+ String passingTime = faceInfoListJSONObject.getString("PassingTime");
|
|
|
|
|
+// 单位秒
|
|
|
|
|
+ Long aLong = Long.valueOf(passingTime);
|
|
|
|
|
+ faceDiscern.setFacediscernTime(new Date(aLong * 1000));
|
|
|
|
|
+ /*
|
|
|
|
|
+ 人脸通行记录类型。
|
|
|
|
|
+ 0:人脸抓拍
|
|
|
|
|
+ 1:比对成功告警
|
|
|
|
|
+ 2: 比对失败告警
|
|
|
|
|
+ */
|
|
|
|
|
+ String type = faceInfoListJSONObject.getString("Type");
|
|
|
|
|
+ faceDiscern.setFaceRecordType(type);
|
|
|
|
|
+// 通道名称
|
|
|
|
|
+ String channelName = faceInfoListJSONObject.getString("ChannelName");
|
|
|
|
|
+ faceDiscern.setFacediscernAddress(channelName);
|
|
|
|
|
+
|
|
|
|
|
+ JSONObject compareInfo = JSONObject.parseObject(faceInfoList.getJSONObject(i).get("CompareInfo").toString());
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ //对比信息
|
|
|
|
|
+ JSONObject personInfo = JSONObject.parseObject(compareInfo.getString("PersonInfo"));
|
|
|
|
|
+// 名字
|
|
|
|
|
+ String personName = personInfo.getString("PersonName");
|
|
|
|
|
+ faceDiscern.setName(personName);
|
|
|
|
|
+// 获取证件号
|
|
|
|
|
+ JSONArray identificationList = JSONArray.parseArray(personInfo.getString("IdentificationList"));
|
|
|
|
|
+ for (int j = 0; j < identificationList.size(); j++) {
|
|
|
|
|
+ JSONObject identification = JSONObject.parseObject(identificationList.get(j).toString());
|
|
|
|
|
+// 证件号
|
|
|
|
|
+ String number = identification.getString("Number");
|
|
|
|
|
+ NewSchooluser newSchooluser = newSchooluserService.getOne(Wrappers.<NewSchooluser>lambdaQuery().eq(NewSchooluser::getIdCard, number));
|
|
|
|
|
+ if (ObjectUtils.isNotEmpty(newSchooluser)) {
|
|
|
|
|
+// 图片
|
|
|
|
|
+ JSONObject snapshotImage = JSONObject.parseObject(compareInfo.getString("SnapshotImage"));
|
|
|
|
|
+ JSONObject bigImage = JSONObject.parseObject(snapshotImage.getString("BigImage"));
|
|
|
|
|
+
|
|
|
|
|
+// 获取base64为编码,并下载
|
|
|
|
|
+ String dataBase = "data:image/jpeg;base64," + bigImage.getString("Data");
|
|
|
|
|
+
|
|
|
|
|
+ String fileNameWithPath = FileUtil.getFileNameWithPath() + ".jpg";
|
|
|
|
|
+ FileUtil.makeDirs(fileNameWithPath, "/home/nginx/html/image");
|
|
|
|
|
+ String imgFilePath = "/home/nginx/html/image/" + fileNameWithPath;
|
|
|
|
|
+ try {
|
|
|
|
|
+ Base64Utils.GenerateImage(dataBase, imgFilePath);
|
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
|
+ LogUtils.logError("下载图片出问题");
|
|
|
|
|
+ }
|
|
|
|
|
+// 图片
|
|
|
|
|
+ faceDiscern.setPictureScene(fileNameWithPath);
|
|
|
|
|
+// 用户标识
|
|
|
|
|
+ faceDiscern.setShooluserId(newSchooluser.getId());
|
|
|
|
|
+// SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS" );
|
|
|
|
|
+// String format = sdf.format(new Date(aLong * 1000));
|
|
|
|
|
+ if (!exists(faceDiscern.getShooluserId(), aLong * 1000)) {
|
|
|
|
|
+ this.save(faceDiscern);
|
|
|
|
|
+ }
|
|
|
|
|
+// this.save(faceDiscern);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ } catch (UnsupportedEncodingException e) {
|
|
|
|
|
+ LogUtils.logError("订阅人脸对比上报解析出问题" + e);
|
|
|
|
|
+// e.printStackTrace();
|
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
|
+ LogUtils.logError("订阅人脸对比上报解析出问题" + e);
|
|
|
|
|
+// e.printStackTrace();
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ LogUtils.logError("订阅人脸对比上报解析时间出问题" + e);
|
|
|
}
|
|
}
|
|
|
- jedisUtil.setnx("repetitionCoordinate"+id, jsonStr);
|
|
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- return BaseResponse.ok(StatusEnum.SUCCESS, mapArrayList);
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public BaseResponse getCoords(String id, String longitude, String latitude) {
|
|
|
|
|
+ if (ObjectUtils.isEmpty(id) || ObjectUtils.isEmpty(longitude) || ObjectUtils.isEmpty(latitude)) {
|
|
|
|
|
+ return BaseResponse.error(StatusEnum.FAIL, "参数异常");
|
|
|
|
|
+ }
|
|
|
|
|
+ NewSchooluser byId = newSchooluserService.getById(id);
|
|
|
|
|
+ if (ObjectUtils.isEmpty(byId)) {
|
|
|
|
|
+ return BaseResponse.error(StatusEnum.FAIL, "该学生不存在");
|
|
|
|
|
+ }
|
|
|
|
|
+ DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
+// 前七天
|
|
|
|
|
+ String oldDay = now.minusDays(7).withHour(0).withMinute(0).withSecond(0).format(pattern);
|
|
|
|
|
+// 今天凌晨
|
|
|
|
|
+ String nowDay = now.withHour(0).withMinute(0).withSecond(0).format(pattern);
|
|
|
|
|
+ List<Coord> coordList = coordService.list(Wrappers.<Coord>lambdaQuery().select(Coord::getBuildingName).eq(Coord::getLatitude, latitude).eq(Coord::getLongitude, longitude));
|
|
|
|
|
+ ArrayList<String> strings = new ArrayList<>();
|
|
|
|
|
+ for (Coord coord : coordList) {
|
|
|
|
|
+ String buildingName = coord.getBuildingName();
|
|
|
|
|
+ strings.add(buildingName);
|
|
|
|
|
+ }
|
|
|
|
|
+ Object[] objects = strings.toArray();
|
|
|
|
|
+ List<FaceDiscern> faceDiscernList = this.list(Wrappers.<FaceDiscern>lambdaQuery().between(FaceDiscern::getFacediscernTime, oldDay, nowDay).eq(FaceDiscern::getShooluserId, id).in(FaceDiscern::getFacediscernAddress, objects));
|
|
|
|
|
+ ArrayList<FaceDiscern> faceDiscerns = new ArrayList<>();
|
|
|
|
|
+// 将图片地址完善
|
|
|
|
|
+ for (int i = 0; i < faceDiscernList.size(); i++) {
|
|
|
|
|
+ FaceDiscern faceDiscern = faceDiscernList.get(i);
|
|
|
|
|
+ String pictureScene = faceDiscern.getPictureScene();
|
|
|
|
|
+ faceDiscern.setPictureScene("https://chtech.ncjti.edu.cn/studentsportrait/dev-img/" + pictureScene);
|
|
|
|
|
+ faceDiscerns.add(faceDiscern);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ Collections.sort(faceDiscerns, Comparator.comparing((h) -> {
|
|
|
|
|
+ return h.getFacediscernTime();
|
|
|
|
|
+ }));
|
|
|
|
|
+ Collections.reverse(faceDiscerns);
|
|
|
|
|
+ return BaseResponse.ok(StatusEnum.SUCCESS, faceDiscerns);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
//用于记录查询百胜门禁机的页数
|
|
//用于记录查询百胜门禁机的页数
|
|
|
private Integer page = 20;
|
|
private Integer page = 20;
|
|
@@ -603,7 +899,7 @@ public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceD
|
|
|
private String api_key = "5C78D964F6C534DFA918EAC7854F4529";
|
|
private String api_key = "5C78D964F6C534DFA918EAC7854F4529";
|
|
|
|
|
|
|
|
// 每2小时就拉取一次
|
|
// 每2小时就拉取一次
|
|
|
- @Scheduled(cron = "0 0/20 * * * ? ")
|
|
|
|
|
|
|
+ @Scheduled(cron = "0 0/9 * * * ? ")
|
|
|
public void autoQueryOnline() {
|
|
public void autoQueryOnline() {
|
|
|
if (page > 1) {
|
|
if (page > 1) {
|
|
|
page -= 1;
|
|
page -= 1;
|
|
@@ -634,24 +930,40 @@ public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceD
|
|
|
HttpEntity<String> requestEntity = new HttpEntity<>(null, headers);
|
|
HttpEntity<String> requestEntity = new HttpEntity<>(null, headers);
|
|
|
ResponseEntity<String> responseEntity = restTemplate.exchange(getUrl, HttpMethod.GET, requestEntity, String.class);
|
|
ResponseEntity<String> responseEntity = restTemplate.exchange(getUrl, HttpMethod.GET, requestEntity, String.class);
|
|
|
JSONObject jsonObj = JSON.parseObject(responseEntity.getBody());
|
|
JSONObject jsonObj = JSON.parseObject(responseEntity.getBody());
|
|
|
- String data = jsonObj.getString("data");
|
|
|
|
|
|
|
+ if (jsonObj.containsKey("data")) {
|
|
|
|
|
+
|
|
|
|
|
+ String data = jsonObj.getString("data");
|
|
|
|
|
+
|
|
|
|
|
+// JSONObject dataJson = JSON.parseObject(data);
|
|
|
|
|
+ // String total_page = dataJson.getString("total_page");
|
|
|
|
|
+ JSONObject jsonData = JSONObject.parseObject(data);
|
|
|
|
|
|
|
|
- JSONObject dataJson = JSON.parseObject(data);
|
|
|
|
|
- // String total_page = dataJson.getString("total_page");
|
|
|
|
|
- JSONObject jsonData = JSONObject.parseObject(data);
|
|
|
|
|
-
|
|
|
|
|
- if (jsonData.getJSONArray("records") != null) {
|
|
|
|
|
- JSONArray list = jsonData.getJSONArray("records");
|
|
|
|
|
- ObjectMapper mapper = new ObjectMapper();
|
|
|
|
|
- list.forEach(array -> {
|
|
|
|
|
- try {
|
|
|
|
|
- Map<String, Object> jsonMap = mapper.readValue(JSONObject.toJSON(array).toString(), new TypeReference<Map<String, Object>>() {
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ if (jsonData.getJSONArray("records") != null) {
|
|
|
|
|
+ JSONArray list = jsonData.getJSONArray("records");
|
|
|
|
|
+
|
|
|
|
|
+ ObjectMapper mapper = new ObjectMapper();
|
|
|
|
|
+ for (int i = 0; i < list.size(); i++) {
|
|
|
|
|
+ JSONObject jsonMap = list.getJSONObject(i);
|
|
|
|
|
+// }
|
|
|
|
|
+// list.forEach(array -> {
|
|
|
|
|
+// Map<String, Object> jsonMap = null;
|
|
|
|
|
+// try {
|
|
|
|
|
+// jsonMap = mapper.readValue(JSONObject.toJSON(array).toString(), new TypeReference<Map<String, Object>>() {
|
|
|
|
|
+// });
|
|
|
|
|
+// } catch (JsonProcessingException e) {
|
|
|
|
|
+// throw new RuntimeException(e);
|
|
|
|
|
+// }
|
|
|
FaceDiscern faceDiscern = new FaceDiscern();
|
|
FaceDiscern faceDiscern = new FaceDiscern();
|
|
|
String deviceName = jsonMap.get("deviceName").toString();
|
|
String deviceName = jsonMap.get("deviceName").toString();
|
|
|
String personName = jsonMap.get("personName").toString();
|
|
String personName = jsonMap.get("personName").toString();
|
|
|
String serverLogTime = jsonMap.get("serverLogTime").toString();
|
|
String serverLogTime = jsonMap.get("serverLogTime").toString();
|
|
|
String devSno = jsonMap.get("dev_sno").toString();
|
|
String devSno = jsonMap.get("dev_sno").toString();
|
|
|
|
|
+ if (!jsonMap.containsKey("id")) {
|
|
|
|
|
+ log.error("百胜门禁缺少id");
|
|
|
|
|
+// break;
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
String id = jsonMap.get("id").toString();
|
|
String id = jsonMap.get("id").toString();
|
|
|
String workNo = getPersonInfo(Integer.parseInt(id));
|
|
String workNo = getPersonInfo(Integer.parseInt(id));
|
|
|
String captureImg = jsonMap.get("captureImg").toString();
|
|
String captureImg = jsonMap.get("captureImg").toString();
|
|
@@ -663,7 +975,11 @@ public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceD
|
|
|
if (ObjectUtils.isNotEmpty(newSchooluser)) {
|
|
if (ObjectUtils.isNotEmpty(newSchooluser)) {
|
|
|
faceDiscern.setShooluserId(newSchooluser.getId());
|
|
faceDiscern.setShooluserId(newSchooluser.getId());
|
|
|
faceDiscern.setFacediscernAddress(deviceName);
|
|
faceDiscern.setFacediscernAddress(deviceName);
|
|
|
- faceDiscern.setFacediscernTime(DateUtils.stringToDate(serverLogTime));
|
|
|
|
|
|
|
+ try {
|
|
|
|
|
+ faceDiscern.setFacediscernTime(DateUtils.stringToDate(serverLogTime));
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ throw new RuntimeException(e);
|
|
|
|
|
+ }
|
|
|
faceDiscern.setFacediscernEvent("人脸识别");
|
|
faceDiscern.setFacediscernEvent("人脸识别");
|
|
|
faceDiscern.setFacediscernType("Y");
|
|
faceDiscern.setFacediscernType("Y");
|
|
|
faceDiscern.setFaceRecordType("1");
|
|
faceDiscern.setFaceRecordType("1");
|
|
@@ -675,13 +991,13 @@ public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceD
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- } catch (Exception e) {
|
|
|
|
|
- e.printStackTrace();
|
|
|
|
|
}
|
|
}
|
|
|
- });
|
|
|
|
|
|
|
+// );
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
|
|
|
+ log.error("百胜添加异常");
|
|
|
return ReturnValueUtil.faceFiled();
|
|
return ReturnValueUtil.faceFiled();
|
|
|
}
|
|
}
|
|
|
return ReturnValueUtil.faceSuccess();
|
|
return ReturnValueUtil.faceSuccess();
|
|
@@ -734,6 +1050,7 @@ public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceD
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
|
|
|
+ log.error("百胜添加异常");
|
|
|
}
|
|
}
|
|
|
return workNo;
|
|
return workNo;
|
|
|
}
|
|
}
|
|
@@ -754,17 +1071,27 @@ public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceD
|
|
|
return exists;
|
|
return exists;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ public Boolean exists(String cardNumber, Long timeLong) {
|
|
|
|
|
+ QueryWrapper<FaceDiscern> wrapper = new QueryWrapper<>();
|
|
|
|
|
+ int time = 1000 * 60;
|
|
|
|
|
+ Date before = new Date(timeLong - time);
|
|
|
|
|
+ Date after = new Date(timeLong + time);
|
|
|
|
|
+ wrapper.eq("shooluser_id", cardNumber).between("faceDiscern_time", before, after);
|
|
|
|
|
+ boolean exists = this.getBaseMapper().exists(wrapper);
|
|
|
|
|
+ return exists;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 2小时拉取一次宇视人脸识别记录
|
|
* 2小时拉取一次宇视人脸识别记录
|
|
|
*/
|
|
*/
|
|
|
- @Scheduled(cron = "0 0/10 * * * ? ")
|
|
|
|
|
|
|
+// @Scheduled(cron = "0 0/6 * * * ? ")
|
|
|
|
|
+// @Async("myAsync")
|
|
|
public void autoQueryOrder() {
|
|
public void autoQueryOrder() {
|
|
|
try {
|
|
try {
|
|
|
DateUtils dateUtils = new DateUtils();
|
|
DateUtils dateUtils = new DateUtils();
|
|
|
dateUtils.addHours();
|
|
dateUtils.addHours();
|
|
|
- String yesterdayNow = String.valueOf(Long.parseLong(DateUtils.dateToStamp(dateUtils.getYesterNow())) / 1000);
|
|
|
|
|
- String afterTwoHours = String.valueOf(Long.parseLong(DateUtils.dateToStamp(dateUtils.getAfterTwoHours())) / 1000);
|
|
|
|
|
|
|
+ String yesterdayNow = String.valueOf(Long.parseLong(DateUtils.dateToStamp(dateUtils.getNow())) / 1000);
|
|
|
|
|
+ String afterFiveMinute = String.valueOf(Long.parseLong(DateUtils.dateToStamp(dateUtils.getAfterFiveMinute())) / 1000);
|
|
|
//获取人脸识别机通道ID
|
|
//获取人脸识别机通道ID
|
|
|
String channelID = ChannelDetailInfos.channelDetailInfos();
|
|
String channelID = ChannelDetailInfos.channelDetailInfos();
|
|
|
//人脸识别成功类型
|
|
//人脸识别成功类型
|
|
@@ -773,10 +1100,10 @@ public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceD
|
|
|
map1.put("QryCondition", 1);
|
|
map1.put("QryCondition", 1);
|
|
|
map1.put("QryData", "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
|
|
//人脸识别通道ID
|
|
|
HashMap<String, Object> map3 = new HashMap<>();
|
|
HashMap<String, Object> map3 = new HashMap<>();
|
|
|
map3.put("QryType", 35);
|
|
map3.put("QryType", 35);
|
|
@@ -791,16 +1118,16 @@ public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceD
|
|
|
HashMap<String, Object> map5 = new HashMap<>();
|
|
HashMap<String, Object> map5 = new HashMap<>();
|
|
|
map5.put("QryType", 4);
|
|
map5.put("QryType", 4);
|
|
|
map5.put("QryCondition", 4);
|
|
map5.put("QryCondition", 4);
|
|
|
- map5.put("QryData", afterTwoHours);
|
|
|
|
|
|
|
+ map5.put("QryData", afterFiveMinute);
|
|
|
JSONArray jsonArray = new JSONArray();
|
|
JSONArray jsonArray = new JSONArray();
|
|
|
jsonArray.add(map1);
|
|
jsonArray.add(map1);
|
|
|
- jsonArray.add(map2);
|
|
|
|
|
|
|
+// jsonArray.add(map2);
|
|
|
jsonArray.add(map3);
|
|
jsonArray.add(map3);
|
|
|
jsonArray.add(map4);
|
|
jsonArray.add(map4);
|
|
|
jsonArray.add(map5);
|
|
jsonArray.add(map5);
|
|
|
|
|
|
|
|
JSONObject obj = new JSONObject();
|
|
JSONObject obj = new JSONObject();
|
|
|
- obj.put("Num", 5);
|
|
|
|
|
|
|
+ obj.put("Num", 4);
|
|
|
obj.put("QueryInfos", jsonArray);
|
|
obj.put("QueryInfos", jsonArray);
|
|
|
obj.put("Limit", 32);
|
|
obj.put("Limit", 32);
|
|
|
obj.put("Offset", 0);
|
|
obj.put("Offset", 0);
|
|
@@ -820,8 +1147,46 @@ public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceD
|
|
|
FacePassRecord.passRecord(univiewVOList, "POST", jsonString);
|
|
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);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ for (UniviewVO univiewVO : vos) {
|
|
|
|
|
|
|
|
- univiewVOList.forEach(univiewVO -> {
|
|
|
|
|
FaceDiscern faceDiscern = new FaceDiscern();
|
|
FaceDiscern faceDiscern = new FaceDiscern();
|
|
|
faceDiscern.setShooluserId(univiewVO.getCardNumber());
|
|
faceDiscern.setShooluserId(univiewVO.getCardNumber());
|
|
|
faceDiscern.setFacediscernEvent(univiewVO.getActiveEvent());
|
|
faceDiscern.setFacediscernEvent(univiewVO.getActiveEvent());
|
|
@@ -830,32 +1195,57 @@ public class FaceDiscernServiceImpl extends ServiceImpl<FaceDiscernMapper, FaceD
|
|
|
faceDiscern.setFacediscernType("U");
|
|
faceDiscern.setFacediscernType("U");
|
|
|
faceDiscern.setFaceRecordType(univiewVO.getRecordType());
|
|
faceDiscern.setFaceRecordType(univiewVO.getRecordType());
|
|
|
faceDiscern.setName(univiewVO.getPersonName());
|
|
faceDiscern.setName(univiewVO.getPersonName());
|
|
|
- String dataBase = univiewVO.getPictureScene();
|
|
|
|
|
|
|
+ if (ObjectUtils.isEmpty(faceDiscern.getShooluserId())) {
|
|
|
|
|
+ log.error("宇视缺少人员身份 ");
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
NewSchooluser schooluser = newSchooluserService.getOne(Wrappers.<NewSchooluser>lambdaQuery().eq(NewSchooluser::getStudentNts, faceDiscern.getShooluserId()).or().eq(NewSchooluser::getStudentId, faceDiscern.getShooluserId()).or().eq(NewSchooluser::getIdCard, faceDiscern.getShooluserId()));
|
|
NewSchooluser schooluser = newSchooluserService.getOne(Wrappers.<NewSchooluser>lambdaQuery().eq(NewSchooluser::getStudentNts, faceDiscern.getShooluserId()).or().eq(NewSchooluser::getStudentId, faceDiscern.getShooluserId()).or().eq(NewSchooluser::getIdCard, faceDiscern.getShooluserId()));
|
|
|
if (schooluser != null) {
|
|
if (schooluser != null) {
|
|
|
faceDiscern.setShooluserId(schooluser.getId());
|
|
faceDiscern.setShooluserId(schooluser.getId());
|
|
|
if (!chackFaceActive(faceDiscern.getShooluserId(), DateUtils.dateToString(univiewVO.getActiveTime()))) {
|
|
if (!chackFaceActive(faceDiscern.getShooluserId(), DateUtils.dateToString(univiewVO.getActiveTime()))) {
|
|
|
|
|
+ String dataBase = univiewVO.getPictureScene();
|
|
|
String fileNameWithPath = FileUtil.getFileNameWithPath() + ".jpg";
|
|
String fileNameWithPath = FileUtil.getFileNameWithPath() + ".jpg";
|
|
|
FileUtil.makeDirs(fileNameWithPath, "/home/nginx/html/image");
|
|
FileUtil.makeDirs(fileNameWithPath, "/home/nginx/html/image");
|
|
|
String imgFilePath = "/home/nginx/html/image/" + fileNameWithPath;
|
|
String imgFilePath = "/home/nginx/html/image/" + fileNameWithPath;
|
|
|
try {
|
|
try {
|
|
|
Base64Utils.GenerateImage(dataBase, imgFilePath);
|
|
Base64Utils.GenerateImage(dataBase, imgFilePath);
|
|
|
} catch (IOException e) {
|
|
} catch (IOException e) {
|
|
|
|
|
+ e.printStackTrace();
|
|
|
throw new RuntimeException(e);
|
|
throw new RuntimeException(e);
|
|
|
}
|
|
}
|
|
|
faceDiscern.setPictureScene(fileNameWithPath);
|
|
faceDiscern.setPictureScene(fileNameWithPath);
|
|
|
|
|
+// this.save(faceDiscern);
|
|
|
|
|
|
|
|
- this.save(faceDiscern);
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+// });
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
|
|
+ log.error("宇视人脸异常");
|
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
|
-
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // @Scheduled(cron = "0 0/1 * ? * ? ")
|
|
|
|
|
+ public String getSubscription() {
|
|
|
|
|
+ log.info("定时订阅人脸对比上报预警");
|
|
|
|
|
+ SubscribePersonCondition subscribePersonCondition = new SubscribePersonCondition();
|
|
|
|
|
+ subscribePersonCondition.setLibIDNum(0);
|
|
|
|
|
+ JSONObject map = new JSONObject();
|
|
|
|
|
+ map.put("AddressType", 0);
|
|
|
|
|
+ map.put("IPAddress", "192.168.161.100");
|
|
|
|
|
+ map.put("Port", 8086);
|
|
|
|
|
+ map.put("Duration", 3600);
|
|
|
|
|
+ map.put("SubscribePersonCondition", subscribePersonCondition);
|
|
|
|
|
+ String jsonString = map.toJSONString();
|
|
|
|
|
+ SubscriptionVo subscriptionVo = new SubscriptionVo();
|
|
|
|
|
+ SubscriptionVo vo = SubscriptionConfig.subscriptionRecord(subscriptionVo, "POST", jsonString, "/LAPI/V1.0/System/Event/Subscription");
|
|
|
|
|
+ String id = vo.getID();
|
|
|
|
|
+ return id;
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
}
|
|
}
|