From a12c0b7c9b9a221e8c5304be6493e63e4e4ff005 Mon Sep 17 00:00:00 2001 From: WangGuangYuan Date: Mon, 19 Oct 2026 18:37:01 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BA=91=E5=8F=B0=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=EF=BC=8C=E9=9B=A8=E5=88=AE=E5=99=A8=EF=BC=8C3D=E5=AE=9A?= =?UTF-8?q?=E4=BD=8D=E5=8A=9F=E8=83=BD=E7=BD=AE=E7=81=B0=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=8C{"ptz":true,"wiper":true,"position3d":false}=EF=BC=8C?= =?UTF-8?q?=E9=94=AE=E5=AD=98=E5=9C=A8=E4=B8=94=E4=B8=BA=20false=20?= =?UTF-8?q?=E8=A1=A8=E7=A4=BA=E4=B8=8D=E6=94=AF=E6=8C=81=EF=BC=9B=E9=94=AE?= =?UTF-8?q?=E7=BC=BA=E5=A4=B1=E6=88=96=E5=AD=97=E6=AE=B5=E4=B8=BA=20NULL?= =?UTF-8?q?=20=E8=A1=A8=E7=A4=BA=E6=9C=AA=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../job/domain/task/EqpBookChannel.java | 2 ++ .../job/task/PatrolEqpbookChannelTask.java | 21 ++++++++++++++----- .../mapper/job/PatrolDeviceStateMapper.xml | 4 +++- .../domain/BasedataEqpBookChannel.java | 7 +++++++ .../domain/vo/BasedataAreaEquTreeVo.java | 8 +++++++ .../impl/BasedataEqpBookServiceImpl.java | 21 +++++++++++++++++++ .../eqpbook/BasedataEqpBookChannelMapper.xml | 6 ++++++ 7 files changed, 63 insertions(+), 6 deletions(-) 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 @@ + @@ -110,6 +111,7 @@ update basedata_eqpbook_channel channel_name = #{channelName}, + capabilities = #{capabilities}, online_state = #{onlineState}, where channel_id = #{channelId} diff --git a/inspect-metadata/src/main/java/com/inspect/metadata/eqpbook/domain/BasedataEqpBookChannel.java b/inspect-metadata/src/main/java/com/inspect/metadata/eqpbook/domain/BasedataEqpBookChannel.java index 7824b33..a8c46ea 100644 --- a/inspect-metadata/src/main/java/com/inspect/metadata/eqpbook/domain/BasedataEqpBookChannel.java +++ b/inspect-metadata/src/main/java/com/inspect/metadata/eqpbook/domain/BasedataEqpBookChannel.java @@ -39,6 +39,13 @@ public class BasedataEqpBookChannel extends BaseEntity { name = "通道类型:vl可见光,ir红外,ptz云台,ng导航,取自数据字典" ) private String channelType; + /** + * 功能能力 JSON:{"ptz":true,"wiper":true,"position3d":false},缺失键表示未知。 + * + *

值是 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 capabilities; @JsonInclude(Include.NON_EMPTY) private List children; diff --git a/inspect-metadata/src/main/java/com/inspect/metadata/eqpbook/service/impl/BasedataEqpBookServiceImpl.java b/inspect-metadata/src/main/java/com/inspect/metadata/eqpbook/service/impl/BasedataEqpBookServiceImpl.java index a22ea92..c724940 100644 --- a/inspect-metadata/src/main/java/com/inspect/metadata/eqpbook/service/impl/BasedataEqpBookServiceImpl.java +++ b/inspect-metadata/src/main/java/com/inspect/metadata/eqpbook/service/impl/BasedataEqpBookServiceImpl.java @@ -336,6 +336,8 @@ public class BasedataEqpBookServiceImpl implements IBasedataEqpBookService { channelTreeVo.setHost(channel.getHost()); channelTreeVo.setPort(channel.getPort()); channelTreeVo.setChannelType(channel.getChannelType()); + // 功能能力:解析不出来按未知处理(前端按可用),避免误置灰。 + channelTreeVo.setCapabilities(parseCapabilities(channel.getCapabilities())); boolean hasKey = this.redisService.hasKey("mont_patrol_device_channel_online_status:" + channel.getChannelCode()).booleanValue(); if (hasKey) { channelTreeVo.setPatrolDeviceOnlineStatus("1"); @@ -349,6 +351,25 @@ public class BasedataEqpBookServiceImpl implements IBasedataEqpBookService { return (List) BasedataAreaEquTreeVoUtil.buildAreaTree(areaEquVos); } + /** + * 解析台账通道的功能能力 JSON。 + * + *

解析失败或内容为空一律返回 null(未知),前端按可用处理,避免把能用的按钮误灰。

+ * + * @param capabilities basedata_eqpbook_channel.capabilities 落库值 + * @return 能力键值对;无法解析返回 null + */ + private static Map parseCapabilities(String capabilities) { + if (null == capabilities || capabilities.trim().isEmpty()) { + return null; + } + try { + return JSONObject.parseObject(capabilities); + } catch (Exception ex) { + return null; + } + } + private void recursionFnHandArea(List areaEquVos, HashMap allAreaIdHashMap, Long areaId) { if (!allAreaIdHashMap.containsKey(areaId)) { allAreaIdHashMap.put(areaId, areaId); diff --git a/inspect-metadata/src/main/resources/mapper/eqpbook/BasedataEqpBookChannelMapper.xml b/inspect-metadata/src/main/resources/mapper/eqpbook/BasedataEqpBookChannelMapper.xml index 3df387a..430c251 100644 --- a/inspect-metadata/src/main/resources/mapper/eqpbook/BasedataEqpBookChannelMapper.xml +++ b/inspect-metadata/src/main/resources/mapper/eqpbook/BasedataEqpBookChannelMapper.xml @@ -17,6 +17,7 @@ + @@ -42,6 +43,7 @@ parent_channel_id, eqp_book_id, channel_type, + capabilities, online_state, channel_content, provider, @@ -76,6 +78,7 @@ bec.eqp_book_id, be.patrol_device_name AS eqp_book_name, bec.channel_type, + bec.capabilities, bec.online_state, bec.channel_content, bec.provider, @@ -136,6 +139,7 @@ parent_channel_id, eqp_book_id, channel_type, + capabilities, online_state, channel_content, provider, @@ -158,6 +162,7 @@ #{parentChannelId}, #{eqpBookId}, #{channelType}, + #{capabilities}, #{onlineState}, #{channelContent}, #{provider}, @@ -184,6 +189,7 @@ parent_channel_id = #{parentChannelId}, eqp_book_id = #{eqpBookId}, channel_type = #{channelType}, + capabilities = #{capabilities}, online_state = #{onlineState}, channel_content = #{channelContent}, provider = #{provider},