提交 9ec007c0 authored 作者: wangqiang's avatar wangqiang

问题修改

上级 d31675c6
......@@ -4,11 +4,12 @@ import com.priusis.client.data.kv.KvEntry;
import com.priusis.client.extensions.ExtensionUpdate;
import com.priusis.client.extensions.http.conf.HttpConfiguration;
import com.priusis.client.service.MqttDeliveryFuture;
import com.priusis.client.service.MqttRpcDataMessage;
import com.priusis.client.service.conf.PcExtensionConfiguration;
import com.priusis.client.service.core.MqttService;
import com.priusis.client.service.data.DeviceData;
import com.priusis.client.service.data.RpcCommandResponse;
import com.priusis.client.util.ConfigurationTools;
import com.priusis.client.service.MqttRpcDataMessage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
......@@ -87,6 +88,16 @@ public class DefaultHttpService extends ExtensionUpdate implements HttpService {
return mqttService.flushRpcDataToFile(mqttRpcDataMessage);
}
@Override
public void processRpcRes(String token, MqttRpcDataMessage mqttRpcDataMessage) throws Exception {
RpcCommandResponse rpcCommandResponse = new RpcCommandResponse();
rpcCommandResponse.setRequestId(mqttRpcDataMessage.getRequestId());
rpcCommandResponse.setBizRequestId(mqttRpcDataMessage.getBizRequestId());
rpcCommandResponse.setMethod(mqttRpcDataMessage.getMethod());
rpcCommandResponse.setData(mqttRpcDataMessage.getParams());
mqttService.onDeviceRpcResponse(rpcCommandResponse);
}
@Override
public MqttRpcDataMessage readFromFile(String method) throws IOException {
return mqttService.readFromFile(method);
......
......@@ -3,8 +3,8 @@ package com.priusis.client.extensions.http;
import cn.hutool.json.JSONUtil;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.priusis.client.extensions.http.conf.HttpRequestProcessingError;
import com.priusis.client.service.TenantManagerService;
import com.priusis.client.service.MqttRpcDataMessage;
import com.priusis.client.service.TenantManagerService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
......@@ -14,8 +14,6 @@ import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import static com.priusis.client.util.JsonTools.fromString;
@RestController
@Slf4j
public class HttpController {
......@@ -53,6 +51,16 @@ public class HttpController {
}
}
@RequestMapping(value = "/rpc_res/{token}", method = RequestMethod.POST)
public void handleRpcResDataRequest(@PathVariable String token, @RequestBody String body) {
MqttRpcDataMessage mqttRpcDataMessage = JSONUtil.toBean(body, MqttRpcDataMessage.class);
try {
service.processRpcRes(token, mqttRpcDataMessage);
} catch (Exception e) {
log.error("Failed to process rpc res persistent : {}", body);
}
}
@ExceptionHandler(Exception.class)
public void handlePriusisiotException(Exception exception, HttpServletResponse response) {
log.debug("Processing exception {}", exception.getMessage(), exception);
......
......@@ -14,5 +14,7 @@ public interface HttpService extends ExtensionService {
File flushRpcDataToFile(MqttRpcDataMessage mqttRpcDataMessage) throws IOException;
void processRpcRes(String token, MqttRpcDataMessage mqttRpcDataMessage) throws Exception;
MqttRpcDataMessage readFromFile(String method) throws IOException;
}
......@@ -72,6 +72,11 @@ public abstract class DefaultTenantManagerService implements TenantManagerServic
httpService.processEventRequest(token, body);
}
@Override
public void processRpcRes(String token, MqttRpcDataMessage mqttRpcDataMessage) throws Exception {
httpService.processRpcRes(token, mqttRpcDataMessage);
}
@Override
public File flushRpcDataToFile(MqttRpcDataMessage mqttRpcDataMessage) throws IOException {
return httpService.flushRpcDataToFile(mqttRpcDataMessage);
......
......@@ -12,6 +12,8 @@ public interface TenantManagerService {
void processEventRequest(String token, String body) throws Exception;
void processRpcRes(String token, MqttRpcDataMessage mqttRpcDataMessage) throws Exception;
File flushRpcDataToFile(MqttRpcDataMessage mqttRpcDataMessage) throws IOException;
MqttRpcDataMessage readFromFile(String method) throws IOException;
......
......@@ -9,7 +9,9 @@ import lombok.Data;
public class RpcCommandResponse {
private int requestId;
private String bizRequestId;
private String deviceName;
private String method;
private String data;
}
apq:
iot-gateway: 192.168.124.19:7002
webrtc_path: https://ceshi.priusis.com:8443
client:
productId: 210
tenantId: 156
......
......@@ -16,6 +16,7 @@ public class MqttRpcDataMessage implements Serializable {
private static final long serialVersionUID = -3133461476074777891L;
private int requestId;
private String bizRequestId;
private String method;
private Long sendTime;
private String params;
......
package com.priusis.job;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.priusis.client.service.MqttRpcDataMessage;
......@@ -78,10 +77,11 @@ public class ApqControlJob {
// 获取硬件监控配置 params == data
ResponseEntity<MqttRpcDataMessage> forEntity = null;
try {
forEntity = restTemplate.getForEntity("http://localhost:8765/rpc_cmd/controll", MqttRpcDataMessage.class);
forEntity = restTemplate.getForEntity("http://localhost:8765/rpc_cmd/controll_4_merge", MqttRpcDataMessage.class);
} catch (Exception e) {
log.error("硬件监控上报异常", e.getMessage());
}
if (null != forEntity) {
MqttRpcDataMessage body = forEntity.getBody();
String params = body.getParams();
......@@ -90,99 +90,15 @@ public class ApqControlJob {
int result = IHwPortController.instanceDll.APQ_HWPORT_Initialize();
log.info("APQ_HWPORT_Initialize ret:{}", result);
try {
Long sendTime = body.getSendTime();
long current = System.currentTimeMillis();
List<HwPortControllerDto> hwPortControllerDtos = JSONUtil.toList(params, HwPortControllerDto.class);
// 合并硬件请求检查
// 先获取数据
// 获取硬件监控配置 params == data
ResponseEntity<MqttRpcDataMessage> persistentEntity = null;
try {
persistentEntity = restTemplate.getForEntity("http://localhost:8765/rpc_cmd/controll_4_merge", MqttRpcDataMessage.class);
} catch (Exception e) {
log.error("硬件监控上报异常merge", e.getMessage());
}
List<HwPortControllerDto> persistentHwPortControllerDtos = null;
if (null != persistentEntity) {
MqttRpcDataMessage persistentEntityBody = persistentEntity.getBody();
String persistentEntityParams = persistentEntityBody.getParams();
if (StrUtil.isNotBlank(persistentEntityParams)) {
persistentHwPortControllerDtos = JSONUtil.toList(persistentEntityParams, HwPortControllerDto.class);
persistentHwPortControllerDtos.removeAll(hwPortControllerDtos);
persistentHwPortControllerDtos.addAll(hwPortControllerDtos);
}
} else {
persistentHwPortControllerDtos = hwPortControllerDtos;
}
MqttRpcDataMessage mqttRpcDataMessage = MqttRpcDataMessage.builder()
.sendTime(System.currentTimeMillis())
.method("controll_4_merge")
.params(JSONUtil.toJsonStr(persistentHwPortControllerDtos)).build();
restTemplate.postForObject("http://localhost:8765/rpc_cmd", mqttRpcDataMessage, String.class);
if (current - sendTime <= FIXED_DELAY && CollUtil.isNotEmpty(hwPortControllerDtos)) {
// 收到硬件策略下发请求
log.info("收到硬件策略下发请求, sendTime:{}, params:{}", sendTime, params);
for (HwPortControllerDto hwPortControllerDto : hwPortControllerDtos) {
HwPortControllerDto.DeviceHardwareEnum deviceHardwareEnum = hwPortControllerDto.getKey();
int doType = hwPortControllerDto.getDoType();
int limitType = hwPortControllerDto.getLimitType();
int value = hwPortControllerDto.getValue();
List<Integer> hwDeviceIds = deviceHardwareEnum.getHwDeviceIds();
String hwDeviceName = deviceHardwareEnum.getName();
// 设置普通设备权限
if (Objects.equals(deviceHardwareEnum.getHwGroup(), "Normal")) {
// 1F/2T
for (Integer hwDeviceId : hwDeviceIds) {
int perm = (doType == 1 ? 2 : 1);
int result32 = IHwPortController.instanceDll.APQ_HWPORT_set_normal_device_permit(hwDeviceId, perm, null);
log.info("APQ_HWPORT_set_normal_device_permit doType:{}, limitType;{},value:{}, hwDeviceId:{}, name;{}, perm:{}, ret:{}",
doType, limitType, value, hwDeviceId, hwDeviceName, perm, result32);
}
} else if (Objects.equals(deviceHardwareEnum.getHwGroup(), "Storage")) { // 设置存储设备权限
// 1F/2T/3T-ALL/4T-R/5T-CI/6T-CO 拷出目前无用!! Storage移动硬盘,TYPEC 无效 !!
for (Integer hwDeviceId : hwDeviceIds) {
int perm = (doType == 1 ? 2 : 1);
if (perm == 2) {
// limitType 1读写 2只读 3拷入 4拷出 5不限速 6限速
perm = (limitType == 1 ? 3 : limitType == 2 ? 4 : limitType == 3 ? 5 : limitType == 4 ? 6 : 3);
}
int result32 = IHwPortController.instanceDll.APQ_HWPORT_set_storage_device_permit(hwDeviceId, perm, null);
log.info("APQ_HWPORT_set_storage_device_permit doType:{}, limitType;{},value:{}, hwDeviceId:{}, name;{}, perm:{}, ret:{}",
doType, limitType, value, hwDeviceId, hwDeviceName, perm, result32);
}
} else if (Objects.equals(deviceHardwareEnum.getHwGroup(), "NET")) { // 设置网络设备权限
// 1F/2T/3T-NS/4T-S-200 网口,4G/5G模块,无线WIFI区分不了 !!
for (Integer hwDeviceId : hwDeviceIds) {
int perm = (doType == 1 ? 2 : 1);
if (perm == 2) {
// limitType 1读写 2只读 3拷入 4拷出 5不限速 6限速
perm = (limitType == 5 ? 3 : limitType == 6 ? 4 : 2);
}
int result32 = IHwPortController.instanceDll.APQ_HWPORT_set_net_device_permit(hwDeviceId, perm, value, null);
log.info("APQ_HWPORT_set_net_device_permit doType:{}, limitType;{},value:{}, hwDeviceId:{}, name;{}, perm:{}, ret:{}",
doType, limitType, value, hwDeviceId, hwDeviceName, perm, result32);
}
}
// 应用硬件接口管理模块的配置内容
int result5 = IHwPortController.instanceDll.APQ_HWPORT_Apply();
log.info("APQ_HWPORT_Apply ret:{}", result5);
}
} else {
log.info("执行硬件监控, sendTime:{}, params:{}", sendTime, params);
// 上报硬件监控数据
Map mapRequest = new HashMap();
for (HwPortControllerDto hwPortControllerDto : persistentHwPortControllerDtos) {
for (HwPortControllerDto hwPortControllerDto : hwPortControllerDtos) {
HwPortControllerDto.DeviceHardwareEnum deviceHardwareEnum = hwPortControllerDto.getKey();
int doType = hwPortControllerDto.getDoType();
int limitType = hwPortControllerDto.getLimitType();
......@@ -247,7 +163,8 @@ public class ApqControlJob {
Map map = restTemplate.postForObject("http://localhost:8765/uplink_event/oc-client", eventMapRequest, Map.class);
log.info("存在硬件接口扫描告警,上报告警事件: mapData:{}, ret:{}", mapRequest, map);
}
}
} catch (Exception e) {
log.error("APQ_HWPORT ERROR: {}", e.getMessage());
} finally {
result = IHwPortController.instanceDll.APQ_HWPORT_Uninitialize();
log.info("APQ_HWPORT_Uninitialize ret:{}", result);
......
......@@ -44,27 +44,41 @@ public class DeviceChangeCallbackImpl implements IDeviceChangeCallback {
if (changeDataSplits.length >= 5) {
String classData = changeDataSplits[4];
String changeDataDesc = changeDataSplits[0];
boolean needPush = true;
String deviceClass = classData.split("=")[1].toUpperCase();
if (StrUtil.equalsIgnoreCase("class=Keyboard", classData)) {
changeDataDesc = "键盘";
} else if (StrUtil.equalsIgnoreCase("class=Mouse", classData)) {
changeDataDesc = "鼠标";
} else if (StrUtil.equalsIgnoreCase("class=DiskDrive", classData)) {
changeDataDesc = "USB";
} else if (StrUtil.equalsIgnoreCase("class=Bluetooth", classData)) {
changeDataDesc = "无线蓝牙";
} else if (StrUtil.equalsIgnoreCase("class=CDROM", classData)) {
changeDataDesc = "光驱";
deviceClass = "CD_DRIVE";
} else if (StrUtil.equalsIgnoreCase("class=Ports", classData)) {
changeDataDesc = "串口";
deviceClass = "SERIAL_PORT";
} else if (StrUtil.equalsIgnoreCase("class=USB", classData)) {
changeDataDesc = "U盘/移动硬盘";
deviceClass = "USB_DRIVE";
List<String> addUSBs = USBCheck.getAddUSB();
if (null != addUSBs) {
for (String addUSB : addUSBs) {
antivirusDoService.doAntivirus(addUSB + ":");
}
}
} else {
needPush = false;
}
String changeContent = String.format("%s%s", changeType == 1 ? "插入" : "拔出", changeDataDesc);
mapRequest.put("deviceClass", classData.split("=")[1]);
mapRequest.put("deviceClass", deviceClass);
mapRequest.put("changeContent", changeContent);
mapRequest.put("changeRemark", changeData);
log.info("存在硬件接口扫描告警,上报告警事件!changeContent: {}, changeRemark: {}", changeContent, changeData);
if (needPush) {
Map eventMapRequest = new HashMap();
eventMapRequest.put("requestId", 4);
eventMapRequest.put("methodName", "control_dev_warning");
......@@ -73,4 +87,5 @@ public class DeviceChangeCallbackImpl implements IDeviceChangeCallback {
log.info("存在硬件接口扫描告警,上报告警事件: mapData:{}, ret:{}", mapRequest, map);
}
}
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论