diff --git a/inspect-job/src/main/java/com/inspect/job/domain/task/EqpBookChannel.java b/inspect-job/src/main/java/com/inspect/job/domain/task/EqpBookChannel.java
index e8ef551..a2bbccd 100644
--- a/inspect-job/src/main/java/com/inspect/job/domain/task/EqpBookChannel.java
+++ b/inspect-job/src/main/java/com/inspect/job/domain/task/EqpBookChannel.java
@@ -36,6 +36,8 @@ public class EqpBookChannel extends BaseEntity {
name = "通道类型:vl可见光,ir红外,ptz云台,ng导航,取自数据字典"
)
private String channelType;
+ /** 功能能力 JSON:{"ptz":true,"wiper":true,"position3d":false},缺失键表示未知。 */
+ private String capabilities;
@Excel(
name = "状态,1:在线;0:离线,字段保留,数据大多来源于缓存数据库"
)
diff --git a/inspect-job/src/main/java/com/inspect/job/task/PatrolEqpbookChannelTask.java b/inspect-job/src/main/java/com/inspect/job/task/PatrolEqpbookChannelTask.java
index 034c150..ff8f8ea 100644
--- a/inspect-job/src/main/java/com/inspect/job/task/PatrolEqpbookChannelTask.java
+++ b/inspect-job/src/main/java/com/inspect/job/task/PatrolEqpbookChannelTask.java
@@ -22,6 +22,7 @@ import org.springframework.scheduling.annotation.Scheduled;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
+import java.util.Objects;
import java.util.stream.Collectors;
@Configuration //1.主要用于标记配置类,兼备Component的效果。
@@ -72,11 +73,21 @@ public class PatrolEqpbookChannelTask {
String domainCode = cameraInfo.getString("domainCode");
String channelCode = eqpBookChannel.getChannelCode();
if (channelCode.equals(code) || channelCode.equals(code + "#" + domainCode)) {
- //状态发生改变 修改
- if (!eqpBookChannel.getOnlineState().equals(cameraInfo.getString("status")) ||
- !eqpBookChannel.getChannelName().equals(cameraInfo.getString("name"))) {
- eqpBookChannel.setOnlineState(cameraInfo.getString("status"));
- eqpBookChannel.setChannelName(cameraInfo.getString("name"));
+ //在线状态变化或能力首填时才回写,避免每轮全表更新
+ String status = cameraInfo.getString("status");
+ String name = cameraInfo.getString("name");
+ //功能能力是 JSON 字符串(如 {"ptz":true}),缺失键表示未知
+ String capabilities = cameraInfo.getString("capabilities");
+ //台账只在空白时补值:一旦有值(探测写入或人工维护),永不被自动覆盖
+ boolean capabilitiesMissing = null == eqpBookChannel.getCapabilities()
+ && null != capabilities;
+ if (!Objects.equals(eqpBookChannel.getOnlineState(), status) ||
+ capabilitiesMissing) {
+ eqpBookChannel.setOnlineState(status);
+// eqpBookChannel.setChannelName(name);
+ if (capabilitiesMissing) {
+ eqpBookChannel.setCapabilities(capabilities);
+ }
patrolDeviceStateMapper.updateEqpBookChannel(eqpBookChannel);
}
}
diff --git a/inspect-job/src/main/resources/mapper/job/PatrolDeviceStateMapper.xml b/inspect-job/src/main/resources/mapper/job/PatrolDeviceStateMapper.xml
index 79695d1..966ec95 100644
--- a/inspect-job/src/main/resources/mapper/job/PatrolDeviceStateMapper.xml
+++ b/inspect-job/src/main/resources/mapper/job/PatrolDeviceStateMapper.xml
@@ -99,10 +99,11 @@
值是 ivs_camera.capabilities 的镜像,由在线状态同步任务从设备列表带过来; + * 前端按功能置灰,未知按可用处理。
+ */ + private String capabilities; @Excel( name = "状态,1:在线;0:离线,字段保留,数据大多来源于缓存数据库" ) diff --git a/inspect-metadata/src/main/java/com/inspect/metadata/eqpbook/domain/vo/BasedataAreaEquTreeVo.java b/inspect-metadata/src/main/java/com/inspect/metadata/eqpbook/domain/vo/BasedataAreaEquTreeVo.java index 9e4a7f0..6f41756 100644 --- a/inspect-metadata/src/main/java/com/inspect/metadata/eqpbook/domain/vo/BasedataAreaEquTreeVo.java +++ b/inspect-metadata/src/main/java/com/inspect/metadata/eqpbook/domain/vo/BasedataAreaEquTreeVo.java @@ -8,6 +8,7 @@ import lombok.Setter; import java.io.Serializable; import java.util.List; +import java.util.Map; @Setter @Getter @@ -41,6 +42,13 @@ public class BasedataAreaEquTreeVo implements Serializable { private String host; private String port; private String channelType; + /** + * 功能能力,如 {"ptz":true,"wiper":true,"position3d":false}。 + * + *取自台账 basedata_eqpbook_channel.capabilities;键缺失或为 null 表示未知, + * 前端按可用处理,避免把能用的按钮误灰。
+ */ + private Map解析失败或内容为空一律返回 null(未知),前端按可用处理,避免把能用的按钮误灰。
+ * + * @param capabilities basedata_eqpbook_channel.capabilities 落库值 + * @return 能力键值对;无法解析返回 null + */ + private static Map