Browse Source

feat: 云台控制,雨刮器,3D定位功能置灰功能,{"ptz":true,"wiper":true,"position3d":false},键存在且为 false 表示不支持;键缺失或字段为 NULL 表示未知

yanyuan
WangGuangYuan 3 weeks ago
parent
commit
a12c0b7c9b
7 changed files with 63 additions and 6 deletions
  1. +2
    -0
      inspect-job/src/main/java/com/inspect/job/domain/task/EqpBookChannel.java
  2. +16
    -5
      inspect-job/src/main/java/com/inspect/job/task/PatrolEqpbookChannelTask.java
  3. +3
    -1
      inspect-job/src/main/resources/mapper/job/PatrolDeviceStateMapper.xml
  4. +7
    -0
      inspect-metadata/src/main/java/com/inspect/metadata/eqpbook/domain/BasedataEqpBookChannel.java
  5. +8
    -0
      inspect-metadata/src/main/java/com/inspect/metadata/eqpbook/domain/vo/BasedataAreaEquTreeVo.java
  6. +21
    -0
      inspect-metadata/src/main/java/com/inspect/metadata/eqpbook/service/impl/BasedataEqpBookServiceImpl.java
  7. +6
    -0
      inspect-metadata/src/main/resources/mapper/eqpbook/BasedataEqpBookChannelMapper.xml

+ 2
- 0
inspect-job/src/main/java/com/inspect/job/domain/task/EqpBookChannel.java View File

@ -36,6 +36,8 @@ public class EqpBookChannel extends BaseEntity {
name = "通道类型:vl可见光,ir红外,ptz云台,ng导航,取自数据字典" name = "通道类型:vl可见光,ir红外,ptz云台,ng导航,取自数据字典"
) )
private String channelType; private String channelType;
/** 功能能力 JSON:{"ptz":true,"wiper":true,"position3d":false},缺失键表示未知。 */
private String capabilities;
@Excel( @Excel(
name = "状态,1:在线;0:离线,字段保留,数据大多来源于缓存数据库" name = "状态,1:在线;0:离线,字段保留,数据大多来源于缓存数据库"
) )


+ 16
- 5
inspect-job/src/main/java/com/inspect/job/task/PatrolEqpbookChannelTask.java View File

@ -22,6 +22,7 @@ import org.springframework.scheduling.annotation.Scheduled;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Configuration //1.主要用于标记配置类,兼备Component的效果。 @Configuration //1.主要用于标记配置类,兼备Component的效果。
@ -72,11 +73,21 @@ public class PatrolEqpbookChannelTask {
String domainCode = cameraInfo.getString("domainCode"); String domainCode = cameraInfo.getString("domainCode");
String channelCode = eqpBookChannel.getChannelCode(); String channelCode = eqpBookChannel.getChannelCode();
if (channelCode.equals(code) || channelCode.equals(code + "#" + domainCode)) { 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); patrolDeviceStateMapper.updateEqpBookChannel(eqpBookChannel);
} }
} }


+ 3
- 1
inspect-job/src/main/resources/mapper/job/PatrolDeviceStateMapper.xml View File

@ -99,10 +99,11 @@
<result property="channelId" column="channel_id"/> <result property="channelId" column="channel_id"/>
<result property="channelCode" column="channel_code"/> <result property="channelCode" column="channel_code"/>
<result property="channelName" column="channel_name"/> <result property="channelName" column="channel_name"/>
<result property="capabilities" column="capabilities"/>
<result property="onlineState" column="online_state"/> <result property="onlineState" column="online_state"/>
</resultMap> </resultMap>
<select id="selectEqpBookChannel" resultMap="BasedataEqpBookChannelResult"> <select id="selectEqpBookChannel" resultMap="BasedataEqpBookChannelResult">
select channel_id,channel_code,channel_name,online_state
select channel_id,channel_code,channel_name,capabilities,online_state
from basedata_eqpbook_channel from basedata_eqpbook_channel
</select> </select>
@ -110,6 +111,7 @@
update basedata_eqpbook_channel update basedata_eqpbook_channel
<trim prefix="SET" suffixOverrides=","> <trim prefix="SET" suffixOverrides=",">
<if test="channelName != null and channelName != ''">channel_name = #{channelName},</if> <if test="channelName != null and channelName != ''">channel_name = #{channelName},</if>
<if test="capabilities != null">capabilities = #{capabilities},</if>
<if test="onlineState != null and onlineState != ''">online_state = #{onlineState},</if> <if test="onlineState != null and onlineState != ''">online_state = #{onlineState},</if>
</trim> </trim>
where channel_id = #{channelId} where channel_id = #{channelId}


+ 7
- 0
inspect-metadata/src/main/java/com/inspect/metadata/eqpbook/domain/BasedataEqpBookChannel.java View File

@ -39,6 +39,13 @@ public class BasedataEqpBookChannel extends BaseEntity {
name = "通道类型:vl可见光,ir红外,ptz云台,ng导航,取自数据字典" name = "通道类型:vl可见光,ir红外,ptz云台,ng导航,取自数据字典"
) )
private String channelType; private String channelType;
/**
* 功能能力 JSON:{"ptz":true,"wiper":true,"position3d":false},缺失键表示未知。
*
* <p>值是 ivs_camera.capabilities 的镜像,由在线状态同步任务从设备列表带过来;
* 前端按功能置灰,未知按可用处理。</p>
*/
private String capabilities;
@Excel( @Excel(
name = "状态,1:在线;0:离线,字段保留,数据大多来源于缓存数据库" name = "状态,1:在线;0:离线,字段保留,数据大多来源于缓存数据库"
) )


+ 8
- 0
inspect-metadata/src/main/java/com/inspect/metadata/eqpbook/domain/vo/BasedataAreaEquTreeVo.java View File

@ -8,6 +8,7 @@ import lombok.Setter;
import java.io.Serializable; import java.io.Serializable;
import java.util.List; import java.util.List;
import java.util.Map;
@Setter @Setter
@Getter @Getter
@ -41,6 +42,13 @@ public class BasedataAreaEquTreeVo implements Serializable {
private String host; private String host;
private String port; private String port;
private String channelType; private String channelType;
/**
* 功能能力,如 {"ptz":true,"wiper":true,"position3d":false}。
*
* <p>取自台账 basedata_eqpbook_channel.capabilities;键缺失或为 null 表示未知,
* 前端按可用处理,避免把能用的按钮误灰。</p>
*/
private Map<String, Object> capabilities;
@JsonInclude(Include.NON_EMPTY) @JsonInclude(Include.NON_EMPTY)
private List<BasedataAreaEquTreeVo> children; private List<BasedataAreaEquTreeVo> children;


+ 21
- 0
inspect-metadata/src/main/java/com/inspect/metadata/eqpbook/service/impl/BasedataEqpBookServiceImpl.java View File

@ -336,6 +336,8 @@ public class BasedataEqpBookServiceImpl implements IBasedataEqpBookService {
channelTreeVo.setHost(channel.getHost()); channelTreeVo.setHost(channel.getHost());
channelTreeVo.setPort(channel.getPort()); channelTreeVo.setPort(channel.getPort());
channelTreeVo.setChannelType(channel.getChannelType()); channelTreeVo.setChannelType(channel.getChannelType());
// 功能能力:解析不出来按未知处理(前端按可用),避免误置灰。
channelTreeVo.setCapabilities(parseCapabilities(channel.getCapabilities()));
boolean hasKey = this.redisService.hasKey("mont_patrol_device_channel_online_status:" + channel.getChannelCode()).booleanValue(); boolean hasKey = this.redisService.hasKey("mont_patrol_device_channel_online_status:" + channel.getChannelCode()).booleanValue();
if (hasKey) { if (hasKey) {
channelTreeVo.setPatrolDeviceOnlineStatus("1"); channelTreeVo.setPatrolDeviceOnlineStatus("1");
@ -349,6 +351,25 @@ public class BasedataEqpBookServiceImpl implements IBasedataEqpBookService {
return (List<BasedataAreaEquTreeVo>) BasedataAreaEquTreeVoUtil.buildAreaTree(areaEquVos); return (List<BasedataAreaEquTreeVo>) BasedataAreaEquTreeVoUtil.buildAreaTree(areaEquVos);
} }
/**
* 解析台账通道的功能能力 JSON。
*
* <p>解析失败或内容为空一律返回 null(未知),前端按可用处理,避免把能用的按钮误灰。</p>
*
* @param capabilities basedata_eqpbook_channel.capabilities 落库值
* @return 能力键值对;无法解析返回 null
*/
private static Map<String, Object> 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<BasedataAreaEquTreeVo> areaEquVos, HashMap<Long, Long> allAreaIdHashMap, Long areaId) { private void recursionFnHandArea(List<BasedataAreaEquTreeVo> areaEquVos, HashMap<Long, Long> allAreaIdHashMap, Long areaId) {
if (!allAreaIdHashMap.containsKey(areaId)) { if (!allAreaIdHashMap.containsKey(areaId)) {
allAreaIdHashMap.put(areaId, areaId); allAreaIdHashMap.put(areaId, areaId);


+ 6
- 0
inspect-metadata/src/main/resources/mapper/eqpbook/BasedataEqpBookChannelMapper.xml View File

@ -17,6 +17,7 @@
<result property="eqpBookId" column="eqp_book_id"/> <result property="eqpBookId" column="eqp_book_id"/>
<result property="eqpBookName" column="eqp_book_name"/> <result property="eqpBookName" column="eqp_book_name"/>
<result property="channelType" column="channel_type"/> <result property="channelType" column="channel_type"/>
<result property="capabilities" column="capabilities"/>
<result property="onlineState" column="online_state"/> <result property="onlineState" column="online_state"/>
<result property="channelContent" column="channel_content"/> <result property="channelContent" column="channel_content"/>
<result property="provider" column="provider"/> <result property="provider" column="provider"/>
@ -42,6 +43,7 @@
parent_channel_id, parent_channel_id,
eqp_book_id, eqp_book_id,
channel_type, channel_type,
capabilities,
online_state, online_state,
channel_content, channel_content,
provider, provider,
@ -76,6 +78,7 @@
bec.eqp_book_id, bec.eqp_book_id,
be.patrol_device_name AS eqp_book_name, be.patrol_device_name AS eqp_book_name,
bec.channel_type, bec.channel_type,
bec.capabilities,
bec.online_state, bec.online_state,
bec.channel_content, bec.channel_content,
bec.provider, bec.provider,
@ -136,6 +139,7 @@
<if test="parentChannelId != null">parent_channel_id,</if> <if test="parentChannelId != null">parent_channel_id,</if>
<if test="eqpBookId != null">eqp_book_id,</if> <if test="eqpBookId != null">eqp_book_id,</if>
<if test="channelType != null">channel_type,</if> <if test="channelType != null">channel_type,</if>
<if test="capabilities != null">capabilities,</if>
<if test="onlineState != null">online_state,</if> <if test="onlineState != null">online_state,</if>
<if test="channelContent != null">channel_content,</if> <if test="channelContent != null">channel_content,</if>
<if test="provider != null">provider,</if> <if test="provider != null">provider,</if>
@ -158,6 +162,7 @@
<if test="parentChannelId != null">#{parentChannelId},</if> <if test="parentChannelId != null">#{parentChannelId},</if>
<if test="eqpBookId != null">#{eqpBookId},</if> <if test="eqpBookId != null">#{eqpBookId},</if>
<if test="channelType != null">#{channelType},</if> <if test="channelType != null">#{channelType},</if>
<if test="capabilities != null">#{capabilities},</if>
<if test="onlineState != null">#{onlineState},</if> <if test="onlineState != null">#{onlineState},</if>
<if test="channelContent != null">#{channelContent},</if> <if test="channelContent != null">#{channelContent},</if>
<if test="provider != null">#{provider},</if> <if test="provider != null">#{provider},</if>
@ -184,6 +189,7 @@
<if test="parentChannelId != null">parent_channel_id = #{parentChannelId},</if> <if test="parentChannelId != null">parent_channel_id = #{parentChannelId},</if>
<if test="eqpBookId != null">eqp_book_id = #{eqpBookId},</if> <if test="eqpBookId != null">eqp_book_id = #{eqpBookId},</if>
<if test="channelType != null">channel_type = #{channelType},</if> <if test="channelType != null">channel_type = #{channelType},</if>
<if test="capabilities != null">capabilities = #{capabilities},</if>
<if test="onlineState != null">online_state = #{onlineState},</if> <if test="onlineState != null">online_state = #{onlineState},</if>
<if test="channelContent != null">channel_content = #{channelContent},</if> <if test="channelContent != null">channel_content = #{channelContent},</if>
<if test="provider != null">provider = #{provider},</if> <if test="provider != null">provider = #{provider},</if>


Loading…
Cancel
Save