Browse Source

状态设备,取rawData最后字段值,没设置映射,就显示原始数据

master
review512jwy@163.com 5 days ago
parent
commit
27f25db266
  1. 2
      dongjian-dashboard-back-controller/src/main/java/com/dongjian/dashboard/back/configurator/CrosXssFilter.java
  2. 66
      dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/CommonOpt.java
  3. 2
      dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataBaStatusServiceImpl.java

2
dongjian-dashboard-back-controller/src/main/java/com/dongjian/dashboard/back/configurator/CrosXssFilter.java

@ -79,7 +79,7 @@ public class CrosXssFilter implements Filter {
String nonce = UUID.randomUUID().toString().replace("-", "").substring(0, 16); // 生成随机 nonce
httpServletResponse.setHeader("Content-Security-Policy",
"default-src 'self'; " +
"img-src 'self' data: https://*.amazonaws.com;"+
"img-src 'self' data:; "+
"font-src 'self' https://i.alicdn.com data:; "+ //阿里系的ui组件
// "script-src 'self' 'nonce-" + nonce + "'; " + //nonce针对内联 JavaScript
// "style-src 'self' 'nonce-" + nonce + "'; " + //nonce针对内联 CSS

66
dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/CommonOpt.java

@ -43,6 +43,11 @@ public class CommonOpt {
private static Logger logger = LoggerFactory.getLogger(CommonOpt.class);
public enum ExtractStrategy {
FIRST,
LAST
}
private static final String SUFFIX_85 = "_85";
private static final String SUFFIX_85_9003 = "_85_9003";
private static final String SUFFIX_111 = "_111";
@ -181,6 +186,26 @@ public class CommonOpt {
return "";
}
public String extractLastValue(ObjectMapper mapper, String rawData) {
if (StringUtils.isBlank(rawData)) {
return "";
}
try {
JsonNode node = mapper.readTree(rawData);
Iterator<Map.Entry<String, JsonNode>> fields = node.fields();
JsonNode lastValue = null;
while (fields.hasNext()) {
lastValue = fields.next().getValue();
}
return lastValue != null ? lastValue.asText() : "";
} catch (Exception e) {
logger.error("Failed to parse rawData JSON: " + rawData, e);
}
return "";
}
public List<String> extractAllValues(ObjectMapper mapper, String rawData) {
List<String> result = new ArrayList<>();
@ -539,24 +564,53 @@ public class CommonOpt {
return mapFirstValue(objectMapper, dataMapping111, realtime111);
}
public String mapFirstValue(ObjectMapper mapper,
String dataMapping,
DeviceRawdataRealtime deviceRawdataRealtime) {
public String mapFirstValue(ObjectMapper mapper, String dataMapping, DeviceRawdataRealtime deviceRawdataRealtime) {
return mapValue(mapper, dataMapping, deviceRawdataRealtime, ExtractStrategy.FIRST);
}
public String mapLastValue(ObjectMapper mapper, String dataMapping, DeviceRawdataRealtime deviceRawdataRealtime) {
return mapValue(mapper, dataMapping, deviceRawdataRealtime, ExtractStrategy.LAST);
}
public String mapValue(
ObjectMapper mapper,
String dataMapping,
DeviceRawdataRealtime deviceRawdataRealtime,
ExtractStrategy strategy) {
if (StringUtils.isBlank(dataMapping) || deviceRawdataRealtime == null) {
return null;
}
try {
String statusValue = extractFirstValue(mapper, deviceRawdataRealtime.getRawData());
String statusValue;
if (strategy == ExtractStrategy.FIRST) {
statusValue = extractFirstValue(mapper, deviceRawdataRealtime.getRawData());
} else {
statusValue = extractLastValue(mapper, deviceRawdataRealtime.getRawData());
}
JsonNode root = mapper.readTree(dataMapping);
return root.path("default").path(statusValue).asText(null);
JsonNode mappedNode = root.path("default").path(statusValue);
// default 里有映射值 → 返回映射值
if (!mappedNode.isMissingNode() && !mappedNode.isNull()) {
String mappedValue = mappedNode.asText();
if (StringUtils.isNotBlank(mappedValue)) {
return mappedValue;
}
}
// default 里取不到 → 返回原始值
return statusValue;
} catch (Exception e) {
logger.error("dataMapping parse error, mapping={}", dataMapping, e);
return null;
}
}
public String buildRawFirstValue(String deviceId, Map<String, String> deviceId85To111Map,
Map<String, DeviceRawdataRealtime> realtime111Map, ObjectMapper mapper) {
return Optional.ofNullable(deviceId85To111Map.get(deviceId))

2
dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataBaStatusServiceImpl.java

@ -116,7 +116,7 @@ public class DeviceDataBaStatusServiceImpl implements DeviceDataBaStatusService
//处理111状态映射
// data.setStatus111(commonOpt.buildStatus111(deviceId, deviceId85To111Map, deviceInfo111Map, realtime111Map, objectMapper));
data.setStatus111(commonOpt.buildRawFirstValue(deviceId, deviceId85To111Map, realtime111Map, objectMapper));
data.setRunningStatus(commonOpt.mapFirstValue(objectMapper, data.getDataMapping(), realtime85Map.get(deviceId)));
data.setRunningStatus(commonOpt.mapLastValue(objectMapper, data.getDataMapping(), realtime85Map.get(deviceId)));
// 判断设备是否在 favorited_device 表中
data.setCollected(favoritedDeviceIds.contains(deviceId) ? 1 : 0);

Loading…
Cancel
Save