|
|
@@ -22,7 +22,9 @@ import com.sptg.estate.api.entity.User;
|
|
|
import com.sptg.estate.api.feigns.AccessRecordsFeign;
|
|
|
import com.sptg.estate.api.feigns.UserFeign;
|
|
|
import com.sptg.gateway.util.MultipartFileUpload;
|
|
|
+import com.sptg.permissions.api.entity.ApiLog;
|
|
|
import com.sptg.permissions.api.feigns.ConfFeign;
|
|
|
+import com.sptg.permissions.api.feigns.SysApiLogFeign;
|
|
|
import com.sptg.statistics.api.entity.SysDeviceLog;
|
|
|
import com.sptg.statistics.api.feigns.SysDeviceLogFeign;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
@@ -68,6 +70,7 @@ public class DeviceController {
|
|
|
private final UserFeign userFeign;
|
|
|
private final RedisTemplate<String, String> redisTemplate;
|
|
|
private final AccessRecordsFeign accessRecordsFeign;
|
|
|
+ private final SysApiLogFeign sysApiLogFeign;
|
|
|
|
|
|
/**
|
|
|
* 设备心跳检测接口
|
|
|
@@ -282,14 +285,12 @@ public class DeviceController {
|
|
|
@PostMapping(value = "/DeviceEndianEvent")
|
|
|
public Map<String, Object> DeviceEndianEvent(HttpServletRequest request) throws IOException {
|
|
|
MultipartHttpServletRequest params=((MultipartHttpServletRequest) request);
|
|
|
- System.out.println("【DeviceEndianEvent事件推送】\n" + request);
|
|
|
MultiValueMap<String, MultipartFile> multiFileMap = params.getMultiFileMap();
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
MultipartFile eventInfo = multiFileMap.get("EventInfo").get(0);
|
|
|
byte[] bytes = eventInfo.getBytes();
|
|
|
Object object = JSONObject.parseObject(bytes, Map.class);
|
|
|
ZHAccessRecordDto zhAccessRecordDto = BeanUtil.toBean(object, ZHAccessRecordDto.class);
|
|
|
- System.out.println("------------" + zhAccessRecordDto);
|
|
|
List<MultipartFile> fileList = multiFileMap.get("file");
|
|
|
AccessRecords accessRecords = new AccessRecords();
|
|
|
for(MultipartFile multipartFile : fileList){
|
|
|
@@ -300,8 +301,11 @@ public class DeviceController {
|
|
|
accessRecords.setSnapshoUri(path);
|
|
|
}
|
|
|
}
|
|
|
+ ApiLog apiLog = new ApiLog();
|
|
|
+ apiLog.setMethodDesc("【DeviceEndianEvent】");
|
|
|
+ apiLog.setReqData(JSONUtil.toJsonStr(zhAccessRecordDto));
|
|
|
+ sysApiLogFeign.create(apiLog);
|
|
|
//出入门记录:
|
|
|
- //serialNumber,userId,snapshoUri,openDoorType,accessCardNo,accessDate,compareUrl,contrast
|
|
|
accessRecords.setSerialNumber(zhAccessRecordDto.getSerialNum());
|
|
|
ZHFaceCompareInfoDto faceCompareInfo = zhAccessRecordDto.getFaceCompareInfo();
|
|
|
ZHSnapDto zhSnapDto = faceCompareInfo.getSnap().get(0);
|
|
|
@@ -351,7 +355,6 @@ public class DeviceController {
|
|
|
*/
|
|
|
@PutMapping(value = "/DeviceEndianHeartbeat")
|
|
|
public Map<String, Object> DeviceEndianHeartbeat(@RequestBody Map<String, Object> deviceRequest){
|
|
|
- System.out.println("【DeviceEndianHeartbeat心跳推送】\n" + deviceRequest);
|
|
|
String serialNum = (String)deviceRequest.get("SerialNum");
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
map.put("ReturnCode", 0);
|
|
|
@@ -376,9 +379,9 @@ public class DeviceController {
|
|
|
* @throws IOException
|
|
|
*/
|
|
|
private final static String ZH_DEVICE_INSTRUCT_CALLBACK = "zh:device:instruct:callback";
|
|
|
+
|
|
|
@PutMapping("/DeviceEndianCommand")
|
|
|
public Map<String, Object> DeviceEndianCommand(@RequestBody Map<String, Object> deviceRequest){
|
|
|
- System.out.println("【DeviceEndianCommand】指令处理回调------------------" + deviceRequest);
|
|
|
String serialNum = (String)deviceRequest.get("SerialNum");
|
|
|
Integer result = (Integer)deviceRequest.get("Result");
|
|
|
Map<String, Object> commandMap = new HashMap<>();
|
|
|
@@ -387,58 +390,63 @@ public class DeviceController {
|
|
|
String openDoorCommandStr = this.redisTemplate.opsForList().rightPop(serialNum + "_openDoor");
|
|
|
if(StringUtils.isNotBlank(openDoorCommandStr)){ //先处理开门
|
|
|
commandMap = JSONUtil.toBean(openDoorCommandStr, Map.class);
|
|
|
- }else{
|
|
|
+ Integer openDoor = (Integer)commandMap.get("OpenDoor");
|
|
|
+ if(openDoor == 0){
|
|
|
+ Timer timer = new Timer();
|
|
|
+ timer.schedule(new TimerTask() {
|
|
|
+ @Override
|
|
|
+ public void run() {
|
|
|
+ //下发关门指令到redis,等下一次设备回来消费,定时6秒后发送
|
|
|
+ Map<String, Object> map = JSONUtil.toBean(openDoorCommandStr, Map.class);
|
|
|
+ Map<String, Object> dataMap = new HashMap<>();
|
|
|
+ dataMap.put("WorkState", 1);
|
|
|
+ map.put("Data", dataMap);
|
|
|
+ map.put("OpenDoor", 1);
|
|
|
+ String closeCommand = JSONUtil.toJsonStr(map);
|
|
|
+ redisTemplate.opsForList().leftPush(serialNum + "_openDoor", closeCommand);
|
|
|
+ timer.cancel();
|
|
|
+ }
|
|
|
+ }, 6 * 1000);
|
|
|
+ String instructId = (String) commandMap.get("InstructId");
|
|
|
+ Integer commandSeq = (Integer) commandMap.get("CommandSeq");
|
|
|
+ this.redisTemplate.opsForList().leftPush(ZH_DEVICE_INSTRUCT_CALLBACK + ":" + serialNum + ":" + commandSeq, instructId);
|
|
|
+ }
|
|
|
+ return commandMap;
|
|
|
+ }else if(StringUtils.isNotBlank(commandStr)){
|
|
|
commandMap = JSONUtil.toBean(commandStr, Map.class);
|
|
|
- Timer timer = new Timer();
|
|
|
- timer.schedule(new TimerTask() {
|
|
|
- @Override
|
|
|
- public void run() {
|
|
|
- //下发关门指令到redis,等下一次设备回来消费,定时6秒后发送
|
|
|
- Map map = JSONUtil.toBean(commandStr, Map.class);
|
|
|
- Map<String, Integer> dataMap = new HashMap<>();
|
|
|
- dataMap.put("WorkState", 1);
|
|
|
- map.put("Data", dataMap);
|
|
|
- String closeCommand = JSONUtil.toJsonStr(map);
|
|
|
- redisTemplate.opsForList().leftPush(serialNum + "_openDoor", closeCommand);
|
|
|
- timer.cancel();
|
|
|
- }
|
|
|
- }, 6 * 1000);
|
|
|
+ String instructId = (String) commandMap.get("InstructId");
|
|
|
+ Integer commandSeq = (Integer) commandMap.get("CommandSeq");
|
|
|
+ this.redisTemplate.opsForList().leftPush(ZH_DEVICE_INSTRUCT_CALLBACK + ":" + serialNum + ":" + commandSeq, instructId);
|
|
|
+ return commandMap;
|
|
|
}
|
|
|
- String instructId = (String) commandMap.get("InstructId");
|
|
|
- Integer commandSeq = (Integer) commandMap.get("CommandSeq");
|
|
|
- this.redisTemplate.opsForHash().put(ZH_DEVICE_INSTRUCT_CALLBACK, serialNum + "_" + commandSeq, instructId);
|
|
|
return commandMap;
|
|
|
}else{ //表示返回下发的配置命令处理结果
|
|
|
- System.out.println("【DeviceEndianCommand】指令处理回调------------------");
|
|
|
- if(deviceRequest.get("CommandSeq") != null){
|
|
|
- Integer commandSeq = (Integer)deviceRequest.get("CommandSeq");
|
|
|
- HashOperations<String, String, String> operations = this.redisTemplate.opsForHash();
|
|
|
- String instructId = operations.get(ZH_DEVICE_INSTRUCT_CALLBACK, serialNum + "_" + commandSeq);
|
|
|
- if(StringUtils.isNotBlank(instructId)){
|
|
|
- if(result == 0){ //指令处理成功
|
|
|
- InstructPublishLog instructPublishLog = new InstructPublishLog();
|
|
|
- instructPublishLog.setId(Long.parseLong(instructId));
|
|
|
- instructPublishLog.setSerialNumber(serialNum);
|
|
|
- instructPublishLog.setHandleStatus(OperationConstant.TWO);
|
|
|
- instructPublishLogFeign.instructHandleCallback(instructPublishLog);
|
|
|
- operations.delete(ZH_DEVICE_INSTRUCT_CALLBACK, serialNum + "_" + commandSeq);
|
|
|
- }else{ //处理异常
|
|
|
- InstructPublishLog instructPublishLog = new InstructPublishLog();
|
|
|
- instructPublishLog.setId(Long.parseLong(instructId));
|
|
|
- instructPublishLog.setSerialNumber(serialNum);
|
|
|
- instructPublishLog.setHandleStatus(OperationConstant.THREE);
|
|
|
- instructPublishLog.setErrorMsg("OK");
|
|
|
- instructPublishLogFeign.instructHandleCallback(instructPublishLog);
|
|
|
- operations.delete(ZH_DEVICE_INSTRUCT_CALLBACK, serialNum + "_" + commandSeq);
|
|
|
- }
|
|
|
- }
|
|
|
- //继续取下一个缓存下发给设备
|
|
|
- ListOperations<String, String> opsForList = this.redisTemplate.opsForList();
|
|
|
- String commandStr = opsForList.rightPop(serialNum);
|
|
|
- if(StringUtils.isNotBlank(commandStr)){
|
|
|
- commandMap = JSONUtil.toBean(commandStr, Map.class);
|
|
|
+ Integer commandSeq = (Integer)deviceRequest.get("CommandSeq");
|
|
|
+ String instructId = this.redisTemplate.opsForList().rightPop(ZH_DEVICE_INSTRUCT_CALLBACK + ":" + serialNum + ":" + commandSeq);
|
|
|
+ if(StringUtils.isNotBlank(instructId)){
|
|
|
+ if(result == 0){ //指令处理成功
|
|
|
+ InstructPublishLog instructPublishLog = new InstructPublishLog();
|
|
|
+ instructPublishLog.setId(Long.parseLong(instructId));
|
|
|
+ instructPublishLog.setSerialNumber(serialNum);
|
|
|
+ instructPublishLog.setHandleStatus(OperationConstant.TWO);
|
|
|
+ instructPublishLog.setStatus(OperationConstant.TWO);
|
|
|
+ instructPublishLogFeign.instructHandleCallback(instructPublishLog);
|
|
|
+ }else{ //处理异常
|
|
|
+ InstructPublishLog instructPublishLog = new InstructPublishLog();
|
|
|
+ instructPublishLog.setId(Long.parseLong(instructId));
|
|
|
+ instructPublishLog.setSerialNumber(serialNum);
|
|
|
+ instructPublishLog.setHandleStatus(OperationConstant.THREE);
|
|
|
+ instructPublishLog.setStatus(OperationConstant.TWO);
|
|
|
+ instructPublishLog.setErrorMsg(JSONUtil.toJsonStr(deviceRequest));
|
|
|
+ instructPublishLogFeign.instructHandleCallback(instructPublishLog);
|
|
|
}
|
|
|
}
|
|
|
+ //继续取下一个缓存下发给设备
|
|
|
+ ListOperations<String, String> opsForList = this.redisTemplate.opsForList();
|
|
|
+ String commandStr = opsForList.rightPop(serialNum);
|
|
|
+ if(StringUtils.isNotBlank(commandStr)){
|
|
|
+ commandMap = JSONUtil.toBean(commandStr, Map.class);
|
|
|
+ }
|
|
|
return commandMap;
|
|
|
}
|
|
|
}
|