|
|
|
|
@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; |
|
|
|
|
import com.google.protobuf.ByteString; |
|
|
|
|
import com.hisense.device.agent.grpc.Point; |
|
|
|
|
import io.swagger.models.auth.In; |
|
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
|
|
import org.springblade.common.cache.ParamCache; |
|
|
|
|
import org.springblade.core.cache.utils.CacheUtil; |
|
|
|
|
@ -22,6 +23,7 @@ import org.springframework.http.*; |
|
|
|
|
import org.springframework.stereotype.Component; |
|
|
|
|
import org.springframework.web.client.RestTemplate; |
|
|
|
|
|
|
|
|
|
import java.io.IOException; |
|
|
|
|
import java.util.HashMap; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.Map; |
|
|
|
|
@ -32,6 +34,7 @@ import static org.springblade.common.constant.CommonConstant.IOT_PLATFORM_URL; |
|
|
|
|
import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE; |
|
|
|
|
|
|
|
|
|
@Component |
|
|
|
|
@Slf4j |
|
|
|
|
public class ExternalUtils { |
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
|
@ -63,7 +66,7 @@ public class ExternalUtils { |
|
|
|
|
String data = JSON.toJSONString(r.getData()); |
|
|
|
|
Map<String, String> map = JSONObject.parseObject(data, Map.class); |
|
|
|
|
String token = map.get("token"); |
|
|
|
|
System.out.println("token" + token); |
|
|
|
|
// System.out.println("token" + token);
|
|
|
|
|
|
|
|
|
|
return token; |
|
|
|
|
} |
|
|
|
|
@ -138,145 +141,154 @@ public class ExternalUtils { |
|
|
|
|
* 更新设备状态 |
|
|
|
|
*/ |
|
|
|
|
public void updateStatus() { |
|
|
|
|
// 报警主机信息
|
|
|
|
|
List<Map> hosts = getList(0, 0, null, null, "105", null); |
|
|
|
|
List<Map> hosts = null; |
|
|
|
|
List<Map> mapList = null; |
|
|
|
|
try { |
|
|
|
|
// 报警主机信息
|
|
|
|
|
hosts = getList(0, 0, null, null, "105", null); |
|
|
|
|
|
|
|
|
|
// 子系统、防区信息
|
|
|
|
|
List<Map> mapList = getList(0, 0, null, null, "100", null); |
|
|
|
|
// 子系统、防区信息
|
|
|
|
|
mapList = getList(0, 0, null, null, "100", null); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
log.info("获取设备信息失败!"); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 遍历设备列表更新设备状态信息
|
|
|
|
|
if (CollectionUtils.isNotEmpty(hosts)) { |
|
|
|
|
try { |
|
|
|
|
for (Map hostMap : hosts) { |
|
|
|
|
String tags = JSON.toJSONString(hostMap.get("tags")).replace("\\", ""); |
|
|
|
|
tags = tags.substring(1, tags.length() - 1); |
|
|
|
|
Map tagMap = JSONObject.parseObject(tags, Map.class); |
|
|
|
|
String number = tagMap.get("hostNumber").toString(); // 序列号
|
|
|
|
|
String mac = tagMap.get("mac").toString(); // 自定义mac
|
|
|
|
|
|
|
|
|
|
// 认证
|
|
|
|
|
for (Map hostMap : hosts) { |
|
|
|
|
String tags = JSON.toJSONString(hostMap.get("tags")).replace("\\", ""); |
|
|
|
|
tags = tags.substring(1, tags.length() - 1); |
|
|
|
|
Map tagMap = JSONObject.parseObject(tags, Map.class); |
|
|
|
|
String number = tagMap.get("hostNumber").toString(); // 序列号
|
|
|
|
|
String mac = tagMap.get("mac").toString(); // 自定义mac
|
|
|
|
|
|
|
|
|
|
// 认证
|
|
|
|
|
String renzheng = null; |
|
|
|
|
try { |
|
|
|
|
String rzUrl = "http://" + Alarm.ipMap.get(number) + ":" + Alarm.portMap.get(number) + "/ISAPI/System/deviceInfo"; |
|
|
|
|
String renzheng = HTTPClientUtil.renzheng(rzUrl, HTTPClientUtil.client); |
|
|
|
|
renzheng = HTTPClientUtil.statusRz(rzUrl, HTTPClientUtil.client); |
|
|
|
|
} catch (IOException e) { |
|
|
|
|
log.info("该设备连接失败!"); |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (renzheng.contains(number)) { |
|
|
|
|
// 获取该报警主机的所有状态
|
|
|
|
|
String status = "http://" + Alarm.ipMap.get(number) + ":" + Alarm.portMap.get(number) + "/ISAPI/SecurityCP/status/host?format=json"; |
|
|
|
|
String statusData = HTTPClientUtil.doGet(status, HTTPClientUtil.client); |
|
|
|
|
if (renzheng.contains(number)) { |
|
|
|
|
// 获取该报警主机的所有状态
|
|
|
|
|
String status = "http://" + Alarm.ipMap.get(number) + ":" + Alarm.portMap.get(number) + "/ISAPI/SecurityCP/status/host?format=json"; |
|
|
|
|
String statusData = HTTPClientUtil.doGet(status, HTTPClientUtil.client); |
|
|
|
|
|
|
|
|
|
Map statusMap = JSONObject.parseObject(statusData, Map.class); |
|
|
|
|
Map alarmHostStatus = JSONObject.parseObject(statusMap.get("AlarmHostStatus").toString(), Map.class); |
|
|
|
|
Map communiStatus = JSONObject.parseObject(alarmHostStatus.get("CommuniStatus").toString(), Map.class); |
|
|
|
|
System.out.println("CommuniStatus" + communiStatus); |
|
|
|
|
Map statusMap = JSONObject.parseObject(statusData, Map.class); |
|
|
|
|
Map alarmHostStatus = JSONObject.parseObject(statusMap.get("AlarmHostStatus").toString(), Map.class); |
|
|
|
|
Map communiStatus = JSONObject.parseObject(alarmHostStatus.get("CommuniStatus").toString(), Map.class); |
|
|
|
|
// System.out.println("CommuniStatus" + communiStatus);
|
|
|
|
|
|
|
|
|
|
// 如果通讯断开跳过
|
|
|
|
|
if (!"normal".equals(communiStatus.get("wired"))) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
// 如果通讯断开跳过
|
|
|
|
|
if (!"normal".equals(communiStatus.get("wired"))) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 防区状态
|
|
|
|
|
List<Map> zoneList = JSONObject.parseObject(alarmHostStatus.get("ZoneList").toString(), List.class); |
|
|
|
|
System.out.println("ZoneList" + zoneList); |
|
|
|
|
// 子系统状态
|
|
|
|
|
List<Map> subSysList = JSONObject.parseObject(alarmHostStatus.get("SubSysList").toString(), List.class); |
|
|
|
|
System.out.println("SubSysList" + subSysList); |
|
|
|
|
|
|
|
|
|
// 过滤只有该报警主机下的子系统、防区
|
|
|
|
|
List<Map> list = mapList.stream().filter(map -> JSON.toJSONString(map.get("tags")).contains(number)).collect(Collectors.toList()); |
|
|
|
|
for (Map map : list) { |
|
|
|
|
// 物联网设备状态
|
|
|
|
|
int state = Integer.parseInt(String.valueOf(map.get("status"))); |
|
|
|
|
|
|
|
|
|
String s = JSON.toJSONString(map.get("tags")).replace("\\", ""); |
|
|
|
|
s = s.substring(1, s.length() - 1); |
|
|
|
|
Map tagsMap = JSONObject.parseObject(s, Map.class); |
|
|
|
|
String id = tagsMap.get("pmac").toString(); |
|
|
|
|
String type = tagsMap.get("type").toString(); |
|
|
|
|
|
|
|
|
|
// 防区号/子系统号
|
|
|
|
|
int sCIDCode = Integer.parseInt(tagsMap.get("buildingNo").toString()); |
|
|
|
|
|
|
|
|
|
// 设备真实状态
|
|
|
|
|
int fqStatus = 0; |
|
|
|
|
int presence = 0; |
|
|
|
|
|
|
|
|
|
if ("2".equals(type)) { |
|
|
|
|
presence = 1; |
|
|
|
|
List<Map> zones = zoneList.stream().filter(zone -> Integer.parseInt(JSONObject.parseObject(zone.get("Zone").toString(), Map.class).get("id").toString()) == sCIDCode - 1).collect(Collectors.toList()); |
|
|
|
|
|
|
|
|
|
if (CollectionUtils.isNotEmpty(zones)) { |
|
|
|
|
Map zoneMap = zones.get(0); |
|
|
|
|
Map zone = JSONObject.parseObject(zoneMap.get("Zone").toString(), Map.class); |
|
|
|
|
// 防区布防状态 0-对应防区处于撤防状态,1-对应防区处于布防状态
|
|
|
|
|
int bySetupAlarmStatus = 0; |
|
|
|
|
if ((boolean) zone.get("isArming")) { |
|
|
|
|
bySetupAlarmStatus = 1; |
|
|
|
|
} |
|
|
|
|
// 防区状态
|
|
|
|
|
List<Map> zoneList = JSONObject.parseObject(alarmHostStatus.get("ZoneList").toString(), List.class); |
|
|
|
|
// System.out.println("ZoneList" + zoneList);
|
|
|
|
|
// 子系统状态
|
|
|
|
|
List<Map> subSysList = JSONObject.parseObject(alarmHostStatus.get("SubSysList").toString(), List.class); |
|
|
|
|
// System.out.println("SubSysList" + subSysList);
|
|
|
|
|
|
|
|
|
|
// 过滤只有该报警主机下的子系统、防区
|
|
|
|
|
List<Map> list = mapList.stream().filter(map -> JSON.toJSONString(map.get("tags")).contains(number)).collect(Collectors.toList()); |
|
|
|
|
for (Map map : list) { |
|
|
|
|
// 物联网设备状态
|
|
|
|
|
int state = Integer.parseInt(String.valueOf(map.get("status"))); |
|
|
|
|
|
|
|
|
|
String s = JSON.toJSONString(map.get("tags")).replace("\\", ""); |
|
|
|
|
s = s.substring(1, s.length() - 1); |
|
|
|
|
Map tagsMap = JSONObject.parseObject(s, Map.class); |
|
|
|
|
String id = tagsMap.get("pmac").toString(); |
|
|
|
|
String type = tagsMap.get("type").toString(); |
|
|
|
|
|
|
|
|
|
// 防区号/子系统号
|
|
|
|
|
int sCIDCode = Integer.parseInt(tagsMap.get("buildingNo").toString()); |
|
|
|
|
|
|
|
|
|
// 设备真实状态
|
|
|
|
|
int fqStatus = 0; |
|
|
|
|
int presence = 0; |
|
|
|
|
|
|
|
|
|
if ("2".equals(type)) { |
|
|
|
|
presence = 1; |
|
|
|
|
List<Map> zones = zoneList.stream().filter(zone -> Integer.parseInt(JSONObject.parseObject(zone.get("Zone").toString(), Map.class).get("id").toString()) == sCIDCode - 1).collect(Collectors.toList()); |
|
|
|
|
|
|
|
|
|
if (CollectionUtils.isNotEmpty(zones)) { |
|
|
|
|
Map zoneMap = zones.get(0); |
|
|
|
|
Map zone = JSONObject.parseObject(zoneMap.get("Zone").toString(), Map.class); |
|
|
|
|
// 防区布防状态 0-对应防区处于撤防状态,1-对应防区处于布防状态
|
|
|
|
|
int bySetupAlarmStatus = 0; |
|
|
|
|
if ((boolean) zone.get("isArming")) { |
|
|
|
|
bySetupAlarmStatus = 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 防区旁路状态 0-表示防区没有旁路 1-表示防区旁路
|
|
|
|
|
int byBypassStatus = 0; |
|
|
|
|
if ((boolean) zone.get("bypassed")) { |
|
|
|
|
byBypassStatus = 1; |
|
|
|
|
} |
|
|
|
|
// 防区旁路状态 0-表示防区没有旁路 1-表示防区旁路
|
|
|
|
|
int byBypassStatus = 0; |
|
|
|
|
if ((boolean) zone.get("bypassed")) { |
|
|
|
|
byBypassStatus = 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 防区故障状态,0-对应防区处于正常状态,1-对应防区处于故障状态
|
|
|
|
|
int byAlarmInFaultStatus = 0; |
|
|
|
|
if ("breakDown".equals(zone.get("status"))) { |
|
|
|
|
byAlarmInFaultStatus = 1; |
|
|
|
|
} |
|
|
|
|
// 防区故障状态,0-对应防区处于正常状态,1-对应防区处于故障状态
|
|
|
|
|
int byAlarmInFaultStatus = 0; |
|
|
|
|
if ("breakDown".equals(zone.get("status"))) { |
|
|
|
|
byAlarmInFaultStatus = 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 防区报警状态,0-对应防区当前无报警,1-对应防区当前有报警
|
|
|
|
|
int byAlarmInStatus = 0; |
|
|
|
|
if ((boolean) zone.get("alarm")) { |
|
|
|
|
byAlarmInStatus = 1; |
|
|
|
|
} |
|
|
|
|
// 防区报警状态,0-对应防区当前无报警,1-对应防区当前有报警
|
|
|
|
|
int byAlarmInStatus = 0; |
|
|
|
|
if ((boolean) zone.get("alarm")) { |
|
|
|
|
byAlarmInStatus = 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 上报防区报警状态
|
|
|
|
|
// 上报防区报警状态
|
|
|
|
|
// updateById(id, 7, byAlarmInStatus, type);
|
|
|
|
|
// test1(id, 7, byAlarmInStatus, 2);
|
|
|
|
|
// test1(id, 7, 1, 2);
|
|
|
|
|
|
|
|
|
|
// 撤防-6 布防-5 旁路-7
|
|
|
|
|
if (byAlarmInFaultStatus == 0) { |
|
|
|
|
if (bySetupAlarmStatus == 1) { |
|
|
|
|
fqStatus = 5; |
|
|
|
|
} else if (bySetupAlarmStatus == 0 && byBypassStatus == 0) { |
|
|
|
|
fqStatus = 6; |
|
|
|
|
} else if (byBypassStatus == 1) { |
|
|
|
|
fqStatus = 7; |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
fqStatus = 4; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else if ("3".equals(type)) { |
|
|
|
|
presence = 2; |
|
|
|
|
List<Map> subSyss = subSysList.stream().filter(sys -> Integer.parseInt(JSONObject.parseObject(sys.get("SubSys").toString(), Map.class).get("id").toString()) == sCIDCode).collect(Collectors.toList()); |
|
|
|
|
if (CollectionUtils.isNotEmpty(subSyss)) { |
|
|
|
|
Map sysMap = subSyss.get(0); |
|
|
|
|
Map subSys = JSONObject.parseObject(sysMap.get("SubSys").toString(), Map.class); |
|
|
|
|
//子系统布防状态,0-对应子系统处于撤防状态,1-对应子系统处于布防状态
|
|
|
|
|
fqStatus = 6; |
|
|
|
|
if (!"disarm".equals(subSys.get("arming"))) { |
|
|
|
|
// 撤防-6 布防-5 旁路-7
|
|
|
|
|
if (byAlarmInFaultStatus == 0) { |
|
|
|
|
if (bySetupAlarmStatus == 1) { |
|
|
|
|
fqStatus = 5; |
|
|
|
|
} else if (bySetupAlarmStatus == 0 && byBypassStatus == 0) { |
|
|
|
|
fqStatus = 6; |
|
|
|
|
} else if (byBypassStatus == 1) { |
|
|
|
|
fqStatus = 7; |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
fqStatus = 4; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else if ("3".equals(type)) { |
|
|
|
|
presence = 2; |
|
|
|
|
List<Map> subSyss = subSysList.stream().filter(sys -> Integer.parseInt(JSONObject.parseObject(sys.get("SubSys").toString(), Map.class).get("id").toString()) == sCIDCode).collect(Collectors.toList()); |
|
|
|
|
if (CollectionUtils.isNotEmpty(subSyss)) { |
|
|
|
|
Map sysMap = subSyss.get(0); |
|
|
|
|
Map subSys = JSONObject.parseObject(sysMap.get("SubSys").toString(), Map.class); |
|
|
|
|
//子系统布防状态,0-对应子系统处于撤防状态,1-对应子系统处于布防状态
|
|
|
|
|
fqStatus = 6; |
|
|
|
|
if (!"disarm".equals(subSys.get("arming"))) { |
|
|
|
|
fqStatus = 5; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 海信iot
|
|
|
|
|
updateById(id, fqStatus, presence, type); |
|
|
|
|
// 海信iot
|
|
|
|
|
updateById(id, fqStatus, presence, type); |
|
|
|
|
// test(id, fqStatus, presence, type);
|
|
|
|
|
|
|
|
|
|
if (fqStatus == state) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 物联网平台
|
|
|
|
|
bizDevice(Integer.parseInt(String.valueOf(map.get("id"))), fqStatus); |
|
|
|
|
if (fqStatus == state) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 物联网平台
|
|
|
|
|
bizDevice(Integer.parseInt(String.valueOf(map.get("id"))), fqStatus); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
e.printStackTrace(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
@ -371,7 +383,7 @@ public class ExternalUtils { |
|
|
|
|
CacheUtil.put(SYS_CACHE, "token:id:", "wlwtoken", token); |
|
|
|
|
respon = device(token, id, status); |
|
|
|
|
} |
|
|
|
|
System.out.println(respon); |
|
|
|
|
// System.out.println(respon);
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private Map device(String token, int id, int status) { |
|
|
|
|
@ -464,6 +476,6 @@ public class ExternalUtils { |
|
|
|
|
|
|
|
|
|
// 发送post请求,并输出结果
|
|
|
|
|
R r = restTemplate.postForObject(url, httpEntity, R.class); |
|
|
|
|
System.out.println("调用远程服务器接口成功!!:" + r); |
|
|
|
|
// System.out.println("调用远程服务器接口成功!!:" + r);
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|