若依微服务1.9.7

business:
1、离线报警规则增删改查,配置设备列表
2、新增和编辑部门bug修改
3、新增监控单元有父级时bug修改
master
xins 2 years ago
parent a45719001d
commit c167b547ad

@ -0,0 +1,156 @@
package com.ruoyi.business.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity;
/**
* hw_alarm_rule_link
*
* @author xins
* @date 2023-11-13
*/
public class HwAlarmRuleLink extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 报警规则关联ID主键 */
private Long ruleLinkId;
/** 报警规则类型(1=设备报警规则,2=离线报警规则) */
@Excel(name = "报警规则类型(1=设备报警规则,2=离线报警规则)")
private String alarmRuleType;
/** 1IDhw_alarm_rulealarm_rule_id
2线IDhw_offline_ruleoffline_rule_id */
@Excel(name = "报警规则ID关联hw_alarm_rule的alarm_rule_id")
private Long alarmRuleId;
/** 联动类型1、控制2、采集 */
@Excel(name = "联动类型", readConverterExp = "1=、控制2、采集")
private String linkType;
/** 联动设备关联表hw_device字段device_id */
@Excel(name = "联动设备关联表hw_device字段device_id")
private Long linkDeviceId;
/** 联动设备功能关联表hw_device_mode_function字段mode_function_id */
@Excel(name = "联动设备功能关联表hw_device_mode_function字段mode_function_id")
private Long linkDeviceFunctionId;
/** 标识符支持大小写字母、数字和下划线对外暂时不超过30个字符 */
@Excel(name = "标识符", readConverterExp = "支=持大小写字母、数字和下划线对外暂时不超过30个字符")
private String linkDeviceFunctionIdentifier;
/** 联动设备服务的参数值json格式保存 */
@Excel(name = "联动设备服务的参数值json格式保存")
private String linkDeviceFunctionData;
private String linkDeviceName;
private String linkDeviceModeFunctionName;
public void setRuleLinkId(Long ruleLinkId)
{
this.ruleLinkId = ruleLinkId;
}
public Long getRuleLinkId()
{
return ruleLinkId;
}
public void setAlarmRuleType(String alarmRuleType)
{
this.alarmRuleType = alarmRuleType;
}
public String getAlarmRuleType()
{
return alarmRuleType;
}
public void setAlarmRuleId(Long alarmRuleId)
{
this.alarmRuleId = alarmRuleId;
}
public Long getAlarmRuleId()
{
return alarmRuleId;
}
public void setLinkType(String linkType)
{
this.linkType = linkType;
}
public String getLinkType()
{
return linkType;
}
public void setLinkDeviceId(Long linkDeviceId)
{
this.linkDeviceId = linkDeviceId;
}
public Long getLinkDeviceId()
{
return linkDeviceId;
}
public void setLinkDeviceFunctionId(Long linkDeviceFunctionId)
{
this.linkDeviceFunctionId = linkDeviceFunctionId;
}
public Long getLinkDeviceFunctionId()
{
return linkDeviceFunctionId;
}
public void setLinkDeviceFunctionIdentifier(String linkDeviceFunctionIdentifier)
{
this.linkDeviceFunctionIdentifier = linkDeviceFunctionIdentifier;
}
public String getLinkDeviceFunctionIdentifier()
{
return linkDeviceFunctionIdentifier;
}
public void setLinkDeviceFunctionData(String linkDeviceFunctionData)
{
this.linkDeviceFunctionData = linkDeviceFunctionData;
}
public String getLinkDeviceFunctionData()
{
return linkDeviceFunctionData;
}
public String getLinkDeviceName() {
return linkDeviceName;
}
public void setLinkDeviceName(String linkDeviceName) {
this.linkDeviceName = linkDeviceName;
}
public String getLinkDeviceModeFunctionName() {
return linkDeviceModeFunctionName;
}
public void setLinkDeviceModeFunctionName(String linkDeviceModeFunctionName) {
this.linkDeviceModeFunctionName = linkDeviceModeFunctionName;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("ruleLinkId", getRuleLinkId())
.append("alarmRuleType", getAlarmRuleType())
.append("alarmRuleId", getAlarmRuleId())
.append("linkType", getLinkType())
.append("linkDeviceId", getLinkDeviceId())
.append("linkDeviceFunctionId", getLinkDeviceFunctionId())
.append("linkDeviceFunctionIdentifier", getLinkDeviceFunctionIdentifier())
.append("linkDeviceFunctionData", getLinkDeviceFunctionData())
.toString();
}
}

@ -178,6 +178,7 @@ public class HwDevice extends BaseEntity {
private String gpsFlag;
private Long offlineRuleId;
public void setDeviceId(Long deviceId) {
this.deviceId = deviceId;
@ -419,6 +420,14 @@ public class HwDevice extends BaseEntity {
this.gpsFlag = gpsFlag;
}
public Long getOfflineRuleId() {
return offlineRuleId;
}
public void setOfflineRuleId(Long offlineRuleId) {
this.offlineRuleId = offlineRuleId;
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)

@ -0,0 +1,337 @@
package com.ruoyi.business.domain;
import java.math.BigDecimal;
import java.util.List;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity;
/**
* 线 hw_offline_rule
*
* @author xins
* @date 2023-11-13
*/
public class HwOfflineRule extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 离线报警规则ID */
@Excel(name = "离线报警规则ID")
private Long offlineRuleId;
/** 离线报警规则名称 */
@Excel(name = "离线报警规则名称")
private String offlineRuleName;
/** 租户ID关联hw_tenant的tenant_id */
@Excel(name = "租户ID")
private Long tenantId;
/** 所属场景关联hw_scene表的scene_id字段 */
@Excel(name = "所属场景ID")
private Long sceneId;
/** 报警级别关联表hw_alarm_level字段alarm_level_id */
@Excel(name = "报警级别ID")
private Long alarmLevelId;
/** 规则类型1设备,2监控单元,3场景 */
@Excel(name = "规则类型", readConverterExp = "1=设备,2=监控单元,3=场景")
private String ruleType;
/** 离线时间(单位:秒,大于此时间的) */
@Excel(name = "离线时间(单位:秒)")
private Long offlineTime;
/** 几分钟内掉线次数的分钟 */
@Excel(name = "几分钟内掉线次数的分钟")
private Long offlineNumberTime;
/** 几分钟内掉线次数的次数 */
@Excel(name = "几分钟内掉线次数的次数")
private Long offlineNumber;
/** 无线信号强度小于等于1=极弱,2=弱,3=中,4=强,5=极强) */
private String triggerTimeFrame;
/** 当月消耗流量(大于) */
private Long consumeTraffic;
/** 电池电量(小于),范围是0.01-1 */
private BigDecimal batteryLevel;
/** 设备掉电报警1=是,0=否) */
private String powerDownFlag;
/** 联动标识1是,0否 */
@Excel(name = "联动标识", readConverterExp = "1=是,0=否")
private String linkFlag;
/** 报警启用状态(1是,0否 */
@Excel(name = "状态(1=启用,0=禁用)")
private String alarmRuleStatus;
/** 报警推送标识(1是,0否 */
private String alarmPushFlag;
/** 报警推送内容 */
private String alarmPushContent;
/** 恢复正常推送内容 */
private String alarmRecoverContent;
/** 预留字段 */
private String offlineRuleField;
/** 报警规则联动信息信息 */
private List<HwAlarmRuleLink> hwAlarmRuleLinkList;
@Excel(name = "租户名称")
private String tenantName;
@Excel(name = "场景名称")
private String sceneName;
@Excel(name = "报警级别名称")
private String alarmLevelName;
public void setOfflineRuleId(Long offlineRuleId)
{
this.offlineRuleId = offlineRuleId;
}
public Long getOfflineRuleId()
{
return offlineRuleId;
}
public void setOfflineRuleName(String offlineRuleName)
{
this.offlineRuleName = offlineRuleName;
}
public String getOfflineRuleName()
{
return offlineRuleName;
}
public void setTenantId(Long tenantId)
{
this.tenantId = tenantId;
}
public Long getTenantId()
{
return tenantId;
}
public void setSceneId(Long sceneId)
{
this.sceneId = sceneId;
}
public Long getSceneId()
{
return sceneId;
}
public void setAlarmLevelId(Long alarmLevelId)
{
this.alarmLevelId = alarmLevelId;
}
public Long getAlarmLevelId()
{
return alarmLevelId;
}
public void setRuleType(String ruleType)
{
this.ruleType = ruleType;
}
public String getRuleType()
{
return ruleType;
}
public void setOfflineTime(Long offlineTime)
{
this.offlineTime = offlineTime;
}
public Long getOfflineTime()
{
return offlineTime;
}
public void setOfflineNumberTime(Long offlineNumberTime)
{
this.offlineNumberTime = offlineNumberTime;
}
public Long getOfflineNumberTime()
{
return offlineNumberTime;
}
public void setOfflineNumber(Long offlineNumber)
{
this.offlineNumber = offlineNumber;
}
public Long getOfflineNumber()
{
return offlineNumber;
}
public void setTriggerTimeFrame(String triggerTimeFrame)
{
this.triggerTimeFrame = triggerTimeFrame;
}
public String getTriggerTimeFrame()
{
return triggerTimeFrame;
}
public void setConsumeTraffic(Long consumeTraffic)
{
this.consumeTraffic = consumeTraffic;
}
public Long getConsumeTraffic()
{
return consumeTraffic;
}
public void setBatteryLevel(BigDecimal batteryLevel)
{
this.batteryLevel = batteryLevel;
}
public BigDecimal getBatteryLevel()
{
return batteryLevel;
}
public void setPowerDownFlag(String powerDownFlag)
{
this.powerDownFlag = powerDownFlag;
}
public String getPowerDownFlag()
{
return powerDownFlag;
}
public void setLinkFlag(String linkFlag)
{
this.linkFlag = linkFlag;
}
public String getLinkFlag()
{
return linkFlag;
}
public void setAlarmRuleStatus(String alarmRuleStatus)
{
this.alarmRuleStatus = alarmRuleStatus;
}
public String getAlarmRuleStatus()
{
return alarmRuleStatus;
}
public void setAlarmPushFlag(String alarmPushFlag)
{
this.alarmPushFlag = alarmPushFlag;
}
public String getAlarmPushFlag()
{
return alarmPushFlag;
}
public void setAlarmPushContent(String alarmPushContent)
{
this.alarmPushContent = alarmPushContent;
}
public String getAlarmPushContent()
{
return alarmPushContent;
}
public void setAlarmRecoverContent(String alarmRecoverContent)
{
this.alarmRecoverContent = alarmRecoverContent;
}
public String getAlarmRecoverContent()
{
return alarmRecoverContent;
}
public void setOfflineRuleField(String offlineRuleField)
{
this.offlineRuleField = offlineRuleField;
}
public String getOfflineRuleField()
{
return offlineRuleField;
}
public List<HwAlarmRuleLink> getHwAlarmRuleLinkList()
{
return hwAlarmRuleLinkList;
}
public void setHwAlarmRuleLinkList(List<HwAlarmRuleLink> hwAlarmRuleLinkList)
{
this.hwAlarmRuleLinkList = hwAlarmRuleLinkList;
}
public String getTenantName() {
return tenantName;
}
public void setTenantName(String tenantName) {
this.tenantName = tenantName;
}
public String getSceneName() {
return sceneName;
}
public void setSceneName(String sceneName) {
this.sceneName = sceneName;
}
public String getAlarmLevelName() {
return alarmLevelName;
}
public void setAlarmLevelName(String alarmLevelName) {
this.alarmLevelName = alarmLevelName;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("offlineRuleId", getOfflineRuleId())
.append("offlineRuleName", getOfflineRuleName())
.append("tenantId", getTenantId())
.append("sceneId", getSceneId())
.append("alarmLevelId", getAlarmLevelId())
.append("ruleType", getRuleType())
.append("offlineTime", getOfflineTime())
.append("offlineNumberTime", getOfflineNumberTime())
.append("offlineNumber", getOfflineNumber())
.append("triggerTimeFrame", getTriggerTimeFrame())
.append("consumeTraffic", getConsumeTraffic())
.append("batteryLevel", getBatteryLevel())
.append("powerDownFlag", getPowerDownFlag())
.append("linkFlag", getLinkFlag())
.append("alarmRuleStatus", getAlarmRuleStatus())
.append("alarmPushFlag", getAlarmPushFlag())
.append("alarmPushContent", getAlarmPushContent())
.append("alarmRecoverContent", getAlarmRecoverContent())
.append("remark", getRemark())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.append("offlineRuleField", getOfflineRuleField())
.append("hwAlarmRuleLinkList", getHwAlarmRuleLinkList())
.toString();
}
}

@ -0,0 +1,64 @@
package com.ruoyi.business.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity;
/**
* 线 hw_offline_target
*
* @author xins
* @date 2023-11-13
*/
public class HwOfflineTarget extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 离线报警规则ID */
private Long offlineRuleId;
/** 目标类型1、设备2、监控单元 */
private String targetType;
/** target_type1hw_devicedevice_id
target_type2hw_monitor_unitmonitor_unit_id */
private Long targetId;
public void setOfflineRuleId(Long offlineRuleId)
{
this.offlineRuleId = offlineRuleId;
}
public Long getOfflineRuleId()
{
return offlineRuleId;
}
public void setTargetType(String targetType)
{
this.targetType = targetType;
}
public String getTargetType()
{
return targetType;
}
public void setTargetId(Long targetId)
{
this.targetId = targetId;
}
public Long getTargetId()
{
return targetId;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("offlineRuleId", getOfflineRuleId())
.append("targetType", getTargetType())
.append("targetId", getTargetId())
.toString();
}
}

@ -115,4 +115,23 @@ public interface HwDeviceMapper
public List<HwDevice> selectHwDeviceListByMonitor(HwDevice hwDevice);
/**
* @param: hwDevice
* @description 线
* @author xins
* @date 2023-11-14 9:13
* @return List<HwDevice>
*/
public List<HwDevice> selectAllocatedList(HwDevice hwDevice);
/**
* @param: hwDevice
* @description 线
* @author xins
* @date 2023-11-14 9:13
* @return List<HwDevice>
*/
public List<HwDevice> selectUnallocatedList(HwDevice hwDevice);
}

@ -0,0 +1,41 @@
package com.ruoyi.business.mapper;
import java.util.List;
import com.ruoyi.business.domain.HwOfflineTarget;
import org.apache.ibatis.annotations.Param;
/**
* 线Mapper
*
* @author xins
* @date 2023-11-13
*/
public interface HwOfflineTargetMapper {
/**
* 线
*
* @param offlineTargetList 线
* @return
*/
public int batchInsertOfflineTarget(List<HwOfflineTarget> offlineTargetList);
/**
* 线
*
* @param offlineTarget 线
* @return
*/
public int deleteOfflineTarget(HwOfflineTarget offlineTarget);
/**
* 线
*
* @param offlineRuleId 线ID
* @param targetType
* @param targetIds ID
* @return
*/
public int deleteOfflineTargets(@Param("offlineRuleId") Long offlineRuleId,
@Param("targetType") String targetType, @Param("targetIds") Long[] targetIds);
}

@ -15,8 +15,7 @@ import com.ruoyi.common.datascope.annotation.DataScope;
* @author xins
* @date 2023-08-24
*/
public interface IHwDeviceService
{
public interface IHwDeviceService {
/**
*
*
@ -35,7 +34,7 @@ public interface IHwDeviceService
/**
* 3.
* */
*/
public List<DeviceModeVo> selectDeviceModeNameVo();
/**
@ -147,29 +146,29 @@ public interface IHwDeviceService
public void publishControlCommand(DeviceControlVo deviceControlVo);
/**
* @return HwDevice
* @param: deviceCode
* @description
* @author xins
* @date 2023-09-28 13:24
* @return HwDevice
*/
public HwDevice selectHwDeviceByDeviceCode(String deviceCode);
/**
* @return JSONObject
* @param: sceneId
* @description 线
* @author xins
* @date 2023-09-21 9:09
* @return JSONObject
*/
public JSONObject getOnlineDevicesCount(Long sceneId);
/**
* @return DevicesInfoVo
* @param: monitorUnitId
* @description ID线线
* @author xins
* @date 2023-09-28 14:25
* @return DevicesInfoVo
*/
public DevicesInfoVo getDevicesInfoByMonitorUnitId(Long monitorUnitId);
@ -181,11 +180,11 @@ public interface IHwDeviceService
public void rebuildTdTables();
/**
* @return JSONObject
* @param: device
* @description
* @author xins
* @date 2023-10-20 10:08
* @return JSONObject
*/
public JSONObject selectDeviceNum(HwDevice device);
@ -196,4 +195,22 @@ public interface IHwDeviceService
* @return
*/
public List<HwDevice> selectHwDeviceListWithDeviceMode(HwDevice hwDevice);
/**
* 线
*
* @param device
* @return
*/
public List<HwDevice> selectAllocatedList(HwDevice device);
/**
* 线
*
* @param device
* @return
*/
public List<HwDevice> selectUnallocatedList(HwDevice device);
}

@ -20,6 +20,7 @@ import com.ruoyi.common.core.utils.NumberUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.datascope.annotation.DataScope;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.tdengine.api.RemoteTdEngineService;
import com.ruoyi.tdengine.api.domain.*;
import org.springframework.beans.factory.annotation.Autowired;
@ -1082,4 +1083,29 @@ public class HwDeviceServiceImpl implements IHwDeviceService {
return "";
}
/**
* 线
*
* @param device
* @return
*/
@Override
@DataScope(tenantAlias = "hd")
public List<HwDevice> selectAllocatedList(HwDevice device) {
return hwDeviceMapper.selectAllocatedList(device);
}
/**
* 线
*
* @param device
* @return
*/
@Override
@DataScope(tenantAlias = "hd")
public List<HwDevice> selectUnallocatedList(HwDevice device) {
return hwDeviceMapper.selectUnallocatedList(device);
}
}

@ -40,6 +40,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<resultMap type="HwAlarmRuleLink" id="HwAlarmRuleLinkResult">
<result property="ruleLinkId" column="sub_rule_link_id" />
<result property="alarmRuleType" column="sub_alarm_rule_type" />
<result property="alarmRuleId" column="sub_alarm_rule_id" />
<result property="linkType" column="sub_link_type" />
<result property="linkDeviceId" column="sub_link_device_id" />
@ -119,9 +120,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectHwAlarmRuleByAlarmRuleId" parameterType="Long" resultMap="HwAlarmRuleHwAlarmRuleLinkResult">
select a.alarm_rule_id, a.alarm_rule_name, a.tenant_id, a.scene_id, a.language_code, a.alarm_level_id, a.alarm_type_id, a.rule_type, a.rule_device_id, a.rule_function_total, a.trigger_expression, a.link_flag, a.alarm_rule_status, a.alarm_push_flag, a.alarm_push_content, a.alarm_recover_content, a.remark, a.create_by, a.create_time, a.update_by, a.update_time, a.alarm_rule_field,
b.rule_link_id as sub_rule_link_id, b.alarm_rule_id as sub_alarm_rule_id, b.link_type as sub_link_type, b.link_device_id as sub_link_device_id, b.link_device_function_id as sub_link_device_function_id, b.link_device_function_identifier as sub_link_device_function_identifier, b.link_device_function_data as sub_link_device_function_data, hd.device_name as sub_link_device_name,hdmf.function_name as sub_link_device_mode_function_name
b.rule_link_id as sub_rule_link_id, b.alarm_rule_type as sub_alarm_rule_type, b.alarm_rule_id as sub_alarm_rule_id, b.link_type as sub_link_type, b.link_device_id as sub_link_device_id, b.link_device_function_id as sub_link_device_function_id, b.link_device_function_identifier as sub_link_device_function_identifier, b.link_device_function_data as sub_link_device_function_data, hd.device_name as sub_link_device_name,hdmf.function_name as sub_link_device_mode_function_name
from hw_alarm_rule a
left join hw_alarm_rule_link b on b.alarm_rule_id = a.alarm_rule_id
left join hw_alarm_rule_link b on b.alarm_rule_id = a.alarm_rule_id and b.alarm_rule_type=1
left join hw_device hd on b.link_device_id = hd.device_id
left join hw_device_mode_function hdmf on b.link_device_function_id=hdmf.mode_function_id
where a.alarm_rule_id = #{alarmRuleId}
@ -228,9 +229,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</delete>
<insert id="batchHwAlarmRuleLink">
insert into hw_alarm_rule_link( rule_link_id, alarm_rule_id, link_type, link_device_id, link_device_function_id, link_device_function_identifier, link_device_function_data) values
insert into hw_alarm_rule_link( rule_link_id, alarm_rule_type, alarm_rule_id, link_type, link_device_id, link_device_function_id, link_device_function_identifier, link_device_function_data) values
<foreach item="item" index="index" collection="list" separator=",">
( #{item.ruleLinkId}, #{item.alarmRuleId}, #{item.linkType}, #{item.linkDeviceId}, #{item.linkDeviceFunctionId}, #{item.linkDeviceFunctionIdentifier}, #{item.linkDeviceFunctionData})
( #{item.ruleLinkId}, #{item.alarmRuleType}, #{item.alarmRuleId}, #{item.linkType}, #{item.linkDeviceId}, #{item.linkDeviceFunctionId}, #{item.linkDeviceFunctionIdentifier}, #{item.linkDeviceFunctionData})
</foreach>
</insert>
</mapper>

@ -324,4 +324,39 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="selectAllocatedList" parameterType="HwDevice" resultMap="HwDeviceResult">
select distinct hd.device_id,hd.device_code,hd.device_name,hd.device_type,hd.publish_time,hmu.monitor_unit_name
from hw_device hd left join hw_monitor_unit hmu on hd.monitor_unit_id = hmu.monitor_unit_id
where hd.device_status != '9' and
exists (select 1 from hw_offline_target hot where hot.target_id=hd.device_id and hot.offline_rule_id = #{offlineRuleId})
<if test="deviceCode != null and deviceCode != ''">
AND hd.device_code like concat('%', #{deviceCode}, '%')
</if>
<if test="deviceName != null and deviceName != ''">
AND hd.device_name like concat('%', #{deviceName}, '%')
</if>
<if test="monitorUnitId != null "> and hd.monitor_unit_id = #{monitorUnitId}</if>
<if test="deviceType != null and deviceType != ''"> and hd.device_type = #{deviceType}</if>
<!-- 数据范围过滤 -->
${params.tenantDataScope}
</select>
<select id="selectUnallocatedList" parameterType="HwDevice" resultMap="HwDeviceResult">
select distinct hd.device_id,hd.device_code,hd.device_name,hd.device_type,hd.publish_time,hmu.monitor_unit_name
from hw_device hd left join hw_monitor_unit hmu on hd.monitor_unit_id = hmu.monitor_unit_id
where hd.device_status != '9' and hd.scene_id=#{sceneId}
and not exists (select 1 from hw_offline_target hot where hot.target_id=hd.device_id and hot.offline_rule_id = #{offlineRuleId})
<if test="deviceCode != null and deviceCode != ''">
AND hd.device_code like concat('%', #{deviceCode}, '%')
</if>
<if test="deviceName != null and deviceName != ''">
AND hd.device_name like concat('%', #{deviceName}, '%')
</if>
<if test="monitorUnitId != null "> and hd.monitor_unit_id = #{monitorUnitId}</if>
<if test="deviceType != null and deviceType != ''"> and hd.device_type = #{deviceType}</if>
<!-- 租户数据范围过滤 -->
${params.tenantDataScope}
</select>
</mapper>

@ -0,0 +1,239 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.business.mapper.HwOfflineRuleMapper">
<resultMap type="HwOfflineRule" id="HwOfflineRuleResult">
<result property="offlineRuleId" column="offline_rule_id" />
<result property="offlineRuleName" column="offline_rule_name" />
<result property="tenantId" column="tenant_id" />
<result property="sceneId" column="scene_id" />
<result property="alarmLevelId" column="alarm_level_id" />
<result property="ruleType" column="rule_type" />
<result property="offlineTime" column="offline_time" />
<result property="offlineNumberTime" column="offline_number_time" />
<result property="offlineNumber" column="offline_number" />
<result property="triggerTimeFrame" column="trigger_time_frame" />
<result property="consumeTraffic" column="consume_traffic" />
<result property="batteryLevel" column="battery_level" />
<result property="powerDownFlag" column="power_down_flag" />
<result property="linkFlag" column="link_flag" />
<result property="alarmRuleStatus" column="alarm_rule_status" />
<result property="alarmPushFlag" column="alarm_push_flag" />
<result property="alarmPushContent" column="alarm_push_content" />
<result property="alarmRecoverContent" column="alarm_recover_content" />
<result property="remark" column="remark" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="offlineRuleField" column="offline_rule_field" />
<result property="tenantName" column="tenant_name" />
<result property="sceneName" column="scene_name" />
<result property="alarmLevelName" column="alarm_level_name" />
</resultMap>
<resultMap id="HwOfflineRuleHwAlarmRuleLinkResult" type="HwOfflineRule" extends="HwOfflineRuleResult">
<collection property="hwAlarmRuleLinkList" notNullColumn="sub_rule_link_id" javaType="java.util.List" resultMap="HwAlarmRuleLinkResult" />
</resultMap>
<resultMap type="HwAlarmRuleLink" id="HwAlarmRuleLinkResult">
<result property="ruleLinkId" column="sub_rule_link_id" />
<result property="alarmRuleType" column="sub_alarm_rule_type" />
<result property="alarmRuleId" column="sub_alarm_rule_id" />
<result property="linkType" column="sub_link_type" />
<result property="linkDeviceId" column="sub_link_device_id" />
<result property="linkDeviceFunctionId" column="sub_link_device_function_id" />
<result property="linkDeviceFunctionIdentifier" column="sub_link_device_function_identifier" />
<result property="linkDeviceFunctionData" column="sub_link_device_function_data" />
<result property="linkDeviceName" column="sub_link_device_name" />
<result property="linkDeviceModeFunctionName" column="sub_link_device_mode_function_name" />
</resultMap>
<sql id="selectHwOfflineRuleVo">
select offline_rule_id, offline_rule_name, tenant_id, scene_id, alarm_level_id, rule_type, offline_time, offline_number_time, offline_number, trigger_time_frame, consume_traffic, battery_level, power_down_flag, link_flag, alarm_rule_status, alarm_push_flag, alarm_push_content, alarm_recover_content, remark, create_by, create_time, update_by, update_time, offline_rule_field from hw_offline_rule
</sql>
<select id="selectHwOfflineRuleList" parameterType="HwOfflineRule" resultMap="HwOfflineRuleResult">
<include refid="selectHwOfflineRuleVo"/>
<where>
<if test="offlineRuleName != null and offlineRuleName != ''"> and offline_rule_name like concat('%', #{offlineRuleName}, '%')</if>
<if test="tenantId != null "> and tenant_id = #{tenantId}</if>
<if test="sceneId != null "> and scene_id = #{sceneId}</if>
<if test="alarmLevelId != null "> and alarm_level_id = #{alarmLevelId}</if>
<if test="ruleType != null and ruleType != ''"> and rule_type = #{ruleType}</if>
<if test="offlineTime != null "> and offline_time = #{offlineTime}</if>
<if test="offlineNumberTime != null "> and offline_number_time = #{offlineNumberTime}</if>
<if test="offlineNumber != null "> and offline_number = #{offlineNumber}</if>
<if test="triggerTimeFrame != null and triggerTimeFrame != ''"> and trigger_time_frame = #{triggerTimeFrame}</if>
<if test="consumeTraffic != null "> and consume_traffic = #{consumeTraffic}</if>
<if test="batteryLevel != null "> and battery_level = #{batteryLevel}</if>
<if test="powerDownFlag != null and powerDownFlag != ''"> and power_down_flag = #{powerDownFlag}</if>
<if test="linkFlag != null and linkFlag != ''"> and link_flag = #{linkFlag}</if>
<if test="alarmRuleStatus != null and alarmRuleStatus != ''"> and alarm_rule_status = #{alarmRuleStatus}</if>
<if test="alarmPushFlag != null and alarmPushFlag != ''"> and alarm_push_flag = #{alarmPushFlag}</if>
<if test="alarmPushContent != null and alarmPushContent != ''"> and alarm_push_content = #{alarmPushContent}</if>
<if test="alarmRecoverContent != null and alarmRecoverContent != ''"> and alarm_recover_content = #{alarmRecoverContent}</if>
<if test="offlineRuleField != null and offlineRuleField != ''"> and offline_rule_field = #{offlineRuleField}</if>
</where>
</select>
<select id="selectHwOfflineRuleByOfflineRuleId" parameterType="Long" resultMap="HwOfflineRuleHwAlarmRuleLinkResult">
select a.offline_rule_id, a.offline_rule_name, a.tenant_id, a.scene_id, a.alarm_level_id, a.rule_type, a.offline_time, a.offline_number_time, a.offline_number, a.trigger_time_frame, a.consume_traffic, a.battery_level, a.power_down_flag, a.link_flag, a.alarm_rule_status, a.alarm_push_flag, a.alarm_push_content, a.alarm_recover_content, a.remark, a.create_by, a.create_time, a.update_by, a.update_time, a.offline_rule_field,
b.rule_link_id as sub_rule_link_id, b.alarm_rule_type as sub_alarm_rule_type, b.alarm_rule_id as sub_alarm_rule_id, b.link_type as sub_link_type, b.link_device_id as sub_link_device_id, b.link_device_function_id as sub_link_device_function_id, b.link_device_function_identifier as sub_link_device_function_identifier, b.link_device_function_data as sub_link_device_function_data,
hd.device_name as sub_link_device_name,hdmf.function_name as sub_link_device_mode_function_name from hw_offline_rule a
left join hw_alarm_rule_link b on b.alarm_rule_id = a.offline_rule_id and b.alarm_rule_type=2
left join hw_device hd on b.link_device_id = hd.device_id
left join hw_device_mode_function hdmf on b.link_device_function_id=hdmf.mode_function_id
where a.offline_rule_id = #{offlineRuleId}
</select>
<insert id="insertHwOfflineRule" parameterType="HwOfflineRule" useGeneratedKeys="true" keyProperty="offlineRuleId">
insert into hw_offline_rule
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="offlineRuleName != null and offlineRuleName != ''">offline_rule_name,</if>
<if test="tenantId != null">tenant_id,</if>
<if test="sceneId != null">scene_id,</if>
<if test="alarmLevelId != null">alarm_level_id,</if>
<if test="ruleType != null and ruleType != ''">rule_type,</if>
<if test="offlineTime != null">offline_time,</if>
<if test="offlineNumberTime != null">offline_number_time,</if>
<if test="offlineNumber != null">offline_number,</if>
<if test="triggerTimeFrame != null">trigger_time_frame,</if>
<if test="consumeTraffic != null">consume_traffic,</if>
<if test="batteryLevel != null">battery_level,</if>
<if test="powerDownFlag != null">power_down_flag,</if>
<if test="linkFlag != null and linkFlag != ''">link_flag,</if>
<if test="alarmRuleStatus != null and alarmRuleStatus != ''">alarm_rule_status,</if>
<if test="alarmPushFlag != null and alarmPushFlag != ''">alarm_push_flag,</if>
<if test="alarmPushContent != null">alarm_push_content,</if>
<if test="alarmRecoverContent != null">alarm_recover_content,</if>
<if test="remark != null">remark,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
<if test="offlineRuleField != null">offline_rule_field,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="offlineRuleName != null and offlineRuleName != ''">#{offlineRuleName},</if>
<if test="tenantId != null">#{tenantId},</if>
<if test="sceneId != null">#{sceneId},</if>
<if test="alarmLevelId != null">#{alarmLevelId},</if>
<if test="ruleType != null and ruleType != ''">#{ruleType},</if>
<if test="offlineTime != null">#{offlineTime},</if>
<if test="offlineNumberTime != null">#{offlineNumberTime},</if>
<if test="offlineNumber != null">#{offlineNumber},</if>
<if test="triggerTimeFrame != null">#{triggerTimeFrame},</if>
<if test="consumeTraffic != null">#{consumeTraffic},</if>
<if test="batteryLevel != null">#{batteryLevel},</if>
<if test="powerDownFlag != null">#{powerDownFlag},</if>
<if test="linkFlag != null and linkFlag != ''">#{linkFlag},</if>
<if test="alarmRuleStatus != null and alarmRuleStatus != ''">#{alarmRuleStatus},</if>
<if test="alarmPushFlag != null and alarmPushFlag != ''">#{alarmPushFlag},</if>
<if test="alarmPushContent != null">#{alarmPushContent},</if>
<if test="alarmRecoverContent != null">#{alarmRecoverContent},</if>
<if test="remark != null">#{remark},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="offlineRuleField != null">#{offlineRuleField},</if>
</trim>
</insert>
<update id="updateHwOfflineRule" parameterType="HwOfflineRule">
update hw_offline_rule
<trim prefix="SET" suffixOverrides=",">
<if test="offlineRuleName != null and offlineRuleName != ''">offline_rule_name = #{offlineRuleName},</if>
<if test="tenantId != null">tenant_id = #{tenantId},</if>
<if test="sceneId != null">scene_id = #{sceneId},</if>
<if test="alarmLevelId != null">alarm_level_id = #{alarmLevelId},</if>
<if test="ruleType != null and ruleType != ''">rule_type = #{ruleType},</if>
<if test="offlineTime != null">offline_time = #{offlineTime},</if>
<if test="offlineNumberTime != null">offline_number_time = #{offlineNumberTime},</if>
<if test="offlineNumber != null">offline_number = #{offlineNumber},</if>
<if test="triggerTimeFrame != null">trigger_time_frame = #{triggerTimeFrame},</if>
<if test="consumeTraffic != null">consume_traffic = #{consumeTraffic},</if>
<if test="batteryLevel != null">battery_level = #{batteryLevel},</if>
<if test="powerDownFlag != null">power_down_flag = #{powerDownFlag},</if>
<if test="linkFlag != null and linkFlag != ''">link_flag = #{linkFlag},</if>
<if test="alarmRuleStatus != null and alarmRuleStatus != ''">alarm_rule_status = #{alarmRuleStatus},</if>
<if test="alarmPushFlag != null and alarmPushFlag != ''">alarm_push_flag = #{alarmPushFlag},</if>
<if test="alarmPushContent != null">alarm_push_content = #{alarmPushContent},</if>
<if test="alarmRecoverContent != null">alarm_recover_content = #{alarmRecoverContent},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="offlineRuleField != null">offline_rule_field = #{offlineRuleField},</if>
</trim>
where offline_rule_id = #{offlineRuleId}
</update>
<delete id="deleteHwOfflineRuleByOfflineRuleId" parameterType="Long">
delete from hw_offline_rule where offline_rule_id = #{offlineRuleId}
</delete>
<delete id="deleteHwOfflineRuleByOfflineRuleIds" parameterType="String">
update hw_offline_rule set deleted_flag='1' where offline_rule_id in
<foreach item="offlineRuleId" collection="array" open="(" separator="," close=")">
#{offlineRuleId}
</foreach>
</delete>
<delete id="deleteHwAlarmRuleLinkByAlarmRuleIds" parameterType="String">
delete from hw_alarm_rule_link where alarm_rule_id in
<foreach item="alarmRuleId" collection="array" open="(" separator="," close=")">
#{alarmRuleId}
</foreach>
</delete>
<delete id="deleteHwAlarmRuleLinkByAlarmRuleId" parameterType="Long">
delete from hw_alarm_rule_link where alarm_rule_id = #{alarmRuleId}
</delete>
<insert id="batchHwAlarmRuleLink">
insert into hw_alarm_rule_link( rule_link_id, alarm_rule_type, alarm_rule_id, link_type, link_device_id, link_device_function_id, link_device_function_identifier, link_device_function_data) values
<foreach item="item" index="index" collection="list" separator=",">
( #{item.ruleLinkId}, #{item.alarmRuleType}, #{item.alarmRuleId}, #{item.linkType}, #{item.linkDeviceId}, #{item.linkDeviceFunctionId}, #{item.linkDeviceFunctionIdentifier}, #{item.linkDeviceFunctionData})
</foreach>
</insert>
<select id="selectHwOfflineRuleJoinList" parameterType="HwOfflineRule" resultMap="HwOfflineRuleResult">
select hor.offline_rule_id,hor.offline_rule_name,hor.tenant_id,hor.scene_id,hor.alarm_level_id,hor.rule_type,hor.link_flag,hor.alarm_rule_status,
ht.tenant_name,hs.scene_name,hal.alarm_level_name
from hw_offline_rule hor left join hw_tenant ht on hor.tenant_id = ht.tenant_id
left join hw_scene hs on hor.scene_id=hs.scene_id
left join hw_alarm_level hal on hor.alarm_level_id=hal.alarm_level_id
<where>
hor.deleted_flag = '0'
<if test="offlineRuleName != null and offlineRuleName != ''">and hor.offline_rule_name like concat('%',
#{offlineRuleName}, '%')
</if>
<if test="tenantId != null ">and hor.tenant_id = #{tenantId}</if>
<if test="sceneId != null ">and hor.scene_id = #{sceneId}</if>
<if test="alarmLevelId != null ">and hor.alarm_level_id = #{alarmLevelId}</if>
<if test="ruleType != null and ruleType != ''">and hor.rule_type = #{ruleType}</if>
<if test="offlineTime != null ">and hor.offline_time = #{offlineTime}</if>
<if test="offlineNumberTime != null ">and hor.offline_number_time = #{offlineNumberTime}</if>
<if test="offlineNumber != null ">and hor.offline_number = #{offlineNumber}</if>
<if test="triggerTimeFrame != null and triggerTimeFrame != ''">and hor.trigger_time_frame =
#{triggerTimeFrame}
</if>
<if test="linkFlag != null and linkFlag != ''">and hor.link_flag = #{linkFlag}</if>
<if test="alarmRuleStatus != null and alarmRuleStatus != ''">and hor.alarm_rule_status = #{alarmRuleStatus}
</if>
<if test="alarmPushFlag != null and alarmPushFlag != ''">and hor.alarm_push_flag = #{alarmPushFlag}</if>
<!-- 租户数据范围过滤 -->
${params.tenantDataScope}
</where>
order by hor.offline_rule_id desc
</select>
</mapper>

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.business.mapper.HwOfflineTargetMapper">
<resultMap type="HwOfflineTarget" id="HwOfflineTargetResult">
<result property="offlineRuleId" column="offline_rule_id" />
<result property="targetType" column="target_type" />
<result property="targetId" column="target_id" />
</resultMap>
<insert id="batchInsertOfflineTarget">
insert into hw_offline_target (offline_rule_id, target_type,target_id) values
<foreach item="item" index="index" collection="list" separator=",">
(#{item.offlineRuleId},#{item.targetType},#{item.targetId})
</foreach>
</insert>
<delete id="deleteOfflineTarget" parameterType="HwOfflineTarget">
delete from hw_offline_target where offline_rule_id=#{offlineRuleId} and target_type=#{targetType} and target_id=#{targetId}
</delete>
<delete id="deleteOfflineTargets">
delete from hw_offline_target where offline_rule_id=#{offlineRuleId} and target_type=#{targetType} and target_id in
<foreach collection="targetIds" item="targetId" open="(" separator="," close=")">
#{targetId}
</foreach>
</delete>
</mapper>

@ -0,0 +1,134 @@
import request from '@/utils/request'
// 查询离线报警规则列表
export function listOfflineRule(query) {
return request({
url: '/business/offlineRule/list',
method: 'get',
params: query
})
}
// 查询离线报警规则详细
export function getOfflineRule(offlineRuleId) {
return request({
url: '/business/offlineRule/' + offlineRuleId,
method: 'get'
})
}
// 新增离线报警规则
export function addOfflineRule(data) {
return request({
url: '/business/offlineRule',
method: 'post',
data: data
})
}
// 修改离线报警规则
export function updateOfflineRule(data) {
return request({
url: '/business/offlineRule',
method: 'put',
data: data
})
}
// 删除离线报警规则
export function delOfflineRule(offlineRuleId) {
return request({
url: '/business/offlineRule/' + offlineRuleId,
method: 'delete'
})
}
// 查询场景信息列表供查询页面选择使用(例如下拉列表)
export function getScenes(query) {
return request({
url: '/business/alarmRule/getScenes',
method: 'get',
params: query
})
}
// 查询场景信息列表供编辑页面选择使用(例如下拉列表)
export function getEditedScenes(query) {
return request({
url: '/business/alarmRule/getEditedScenes',
method: 'get',
params: query
})
}
export function getSelectListBySceneId(sceneId) {
return request({
url: '/business/alarmRule/getSelectListBySceneId/' + sceneId,
method: 'get'
})
}
export function getDeviceModeByDeviceId(deviceId) {
return request({
url: '/business/alarmRule/getDeviceModeByDeviceId/' + deviceId,
method: 'get'
})
}
// 查询监控单元树
export function monitorUnitTree(query) {
return request({
url: '/business/offlineRule/allocateDevice/monitorUnitTree',
method: 'get',
params: query
})
}
// 查询离线报警规则已分配设备列表
export function allocatedDeviceList(query) {
return request({
url: '/business/offlineRule/allocateDevice/allocatedList',
method: 'get',
params: query
})
}
// 查询离线报警规则未分配设备列表
export function unallocatedDeviceList(query) {
return request({
url: '/business/offlineRule/allocateDevice/unallocatedList',
method: 'get',
params: query
})
}
// 批量分配离线报警规则目标列表
export function batchInsertOfflineTarget(data) {
return request({
url: '/business/offlineRule/allocateTarget/batchInsertOfflineTarget',
method: 'put',
params: data
})
}
// 取消离线报警规则分配目标
export function cancelAllocateDevice(data) {
return request({
url: '/business/offlineRule/allocateTarget/cancelAllocateDevice',
method: 'put',
data: data
})
}
// 批量取消离线报警规则目标列表
export function cancelAllocateDevices(data) {
return request({
url: '/business/offlineRule/allocateTarget/cancelAllocateDevices',
method: 'put',
params: data
})
}

@ -260,7 +260,22 @@ export const dynamicRoutes = [
meta: { title: '修改电子围栏', activeMenu: '/business/electronicFence' }
}
]
},
{
path: '/offlineRule/offline-device',
component: Layout,
hidden: true,
permissions: ['business:offlineRule:edit'],
children: [
{
path: 'device/:offlineRuleId(\\d+)/:sceneId(\\d+)',
component: () => import('@/views/business/offlineRule/allocateDevice.vue'),
name: 'AllocateDevice',
meta: { title: '分配设备', activeMenu: '/business/offlineRule' }
}
]
},
]

@ -55,7 +55,7 @@
</el-form-item>
<el-form-item label="联动标识" prop="linkFlag">
<el-select v-model="queryParams.linkFlag" placeholder="请选择联动标识">
<el-select v-model="queryParams.linkFlag" placeholder="请选择联动标识" clearable>
<el-option
v-for="dict in dict.type.hw_alarm_rule_link_flag"
:key="dict.value"
@ -66,7 +66,7 @@
</el-form-item>
<el-form-item label="状态" prop="alarmRuleStatus">
<el-select v-model="queryParams.alarmRuleStatus" placeholder="请选择状态">
<el-select v-model="queryParams.alarmRuleStatus" placeholder="请选择状态" clearable>
<el-option
v-for="dict in dict.type.hw_alarm_rule_status"
:key="dict.value"
@ -505,12 +505,6 @@ export default {
alarmRuleField: null
},
scenes: [],
alarmLevels: [],
alarmTypes: [],
devices: [],
triggerDataBVisible: false,
//
form: {},
@ -582,6 +576,11 @@ export default {
],
},
scenes: [],
alarmLevels: [],
alarmTypes: [],
devices: [],
alarmRuleFlag: "1",
editedScenes: [],
editedDisabled: true,
@ -669,32 +668,6 @@ export default {
this.resetForm("form");
},
getScenes() {
getScenes().then(response => {
this.scenes = response.data;
});
},
sceneChange(sceneId) {
this.devices = [];
this.alarmTypes = [];
this.alarmLevels = [];
this.queryParams.alarmTypeId = null;
this.queryParams.alarmLevelId = null;
this.queryParams.ruleDeviceId = null;
this.getSelectListBySceneId(sceneId);
},
getSelectListBySceneId(sceneId) {
if (sceneId != null && sceneId !== '') {
getSelectListBySceneId(sceneId).then(response => {
this.devices = response.data["devices"];
this.alarmTypes = response.data["alarmTypes"];
this.alarmLevels = response.data["alarmLevels"];
})
}
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
@ -724,8 +697,8 @@ export default {
handleUpdate(row) {
this.reset();
this.sceneDisabled = true;
const alarmRuleId = row.alarmRuleId || this.ids
this.getEditedScenes();
const alarmRuleId = row.alarmRuleId || this.ids
getAlarmRule(alarmRuleId).then(response => {
this.form = response.data;
@ -819,6 +792,31 @@ export default {
}, `alarmRule_${new Date().getTime()}.xlsx`)
},
getScenes() {
getScenes().then(response => {
this.scenes = response.data;
});
},
sceneChange(sceneId) {
this.devices = [];
this.alarmTypes = [];
this.alarmLevels = [];
this.queryParams.alarmTypeId = null;
this.queryParams.alarmLevelId = null;
this.queryParams.ruleDeviceId = null;
this.getSelectListBySceneId(sceneId);
},
getSelectListBySceneId(sceneId) {
if (sceneId != null && sceneId !== '') {
getSelectListBySceneId(sceneId).then(response => {
this.devices = response.data["devices"];
this.alarmTypes = response.data["alarmTypes"];
this.alarmLevels = response.data["alarmLevels"];
})
}
},
getEditedScenes() {
getEditedScenes().then(response => {
@ -929,6 +927,7 @@ export default {
//
resetAlarmRuleLink() {
this.alarmRuleLinkForm = {
alarmRuleType:'1',
linkType: null,
linkDeviceId: null,
linkDeviceFunctionId: null,

@ -66,7 +66,7 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="设备类型" prop="networkingMode">
<el-form-item label="设备类型" prop="deviceType">
<el-select v-model="queryParams.deviceType" placeholder="请选择设备类型" clearable>
<el-option
v-for="dict in dict.type.hw_device_type"

@ -374,7 +374,6 @@ export default {
const data = {monitorUnitId: 0, monitorUnitName: '顶级节点', children: []};
data.children = this.handleTree(response.data, "monitorUnitId", "parentId");
this.monitorUnitOptions.push(data);
this.form.parentId = 0;
});
},
//
@ -425,8 +424,9 @@ export default {
this.form.parentId = row.monitorUnitId;
this.form.sceneId = row.sceneId;
this.getTreeselect(row.sceneId);
this.getEditedMonitorUnitTypes(this.form.sceneId);
} else {
this.form.parentId = null;
this.form.parentId = 0;
}
this.open = true;
this.title = "添加监控单元";

@ -0,0 +1,253 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
<el-form-item label="设备类型" prop="deviceType">
<el-select v-model="queryParams.deviceType" placeholder="请选择设备类型" clearable>
<el-option
v-for="dict in dict.type.hw_device_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="设备编号" prop="deviceCode">
<el-input
v-model="queryParams.deviceCode"
placeholder="请输入设备编号"
clearable
style="width: 240px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="设备名称" prop="deviceName">
<el-input
v-model="queryParams.deviceName"
placeholder="请输入设备名称"
clearable
style="width: 240px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="所属监控单元" prop="monitorUnitId">
<treeselect v-model="queryParams.monitorUnitId" :options="monitorUnitTreeData" :show-count="true"
style="width: 240px" placeholder="请选择所属监控单元" @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="openSelectDevice"
v-hasPermi="['business:offlineRule:add']"
>添加设备
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-circle-close"
size="mini"
:disabled="multiple"
@click="cancelAllocateDevices"
v-hasPermi="['business:offlineRule:remove']"
>批量取消分配
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-close"
size="mini"
@click="handleClose"
>关闭
</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="deviceList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center"/>
<el-table-column label="设备类型" prop="deviceType" :show-overflow-tooltip="true">
<template slot-scope="scope">
<dict-tag :options="dict.type.hw_device_type" :value="scope.row.deviceType"/>
</template>
</el-table-column>
<el-table-column label="设备编号" prop="deviceCode" :show-overflow-tooltip="true"/>
<el-table-column label="设备名称" prop="deviceName" :show-overflow-tooltip="true"/>
<el-table-column label="所属监控单元" prop="monitorUnitName" :show-overflow-tooltip="true"/>
<el-table-column label="发布时间" align="center" prop="publishTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.publishTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-circle-close"
@click="cancelAllocateDevice(scope.row)"
v-hasPermi="['business:offlineRule:remove']"
>取消分配
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<select-device ref="select" :offlineRuleId="queryParams.offlineRuleId" :sceneId="queryParams.sceneId" @ok="handleQuery"/>
</div>
</template>
<script>
import {
monitorUnitTree,
allocatedDeviceList,
cancelAllocateDevice,
cancelAllocateDevices
} from "@/api/business/offlineRule";
import selectDevice from "./selectDevie.vue";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
export default {
name: "AllocateDevice",
dicts: ['hw_device_type'],
components: {Treeselect, selectDevice},
data() {
return {
//
loading: true,
//
targetIds: [],
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
monitorUnitTreeData: [],
//
deviceList: [],
//
queryParams: {
pageNum: 1,
pageSize: 10,
offlineRuleId: undefined,
sceneId: undefined,
monitorUnitId: undefined,
deviceCode: undefined,
deviceName: undefined
},
OFFLINE_TARGET_TYPE_DEVICE: '1',
};
},
created() {
const offlineRuleId = this.$route.params && this.$route.params.offlineRuleId;
const sceneId = this.$route.params && this.$route.params.sceneId;
if (offlineRuleId && sceneId) {
this.queryParams.offlineRuleId = offlineRuleId;
this.queryParams.sceneId = sceneId;
this.monitorUnitTree(sceneId);
this.getList();
}
},
methods: {
monitorUnitTree(sceneId) {
monitorUnitTree({sceneId:sceneId}).then(response => {
this.monitorUnitTreeData = response.data;
})
},
/** 查询授权用户列表 */
getList() {
this.loading = true;
allocatedDeviceList(this.queryParams).then(response => {
this.deviceList = response.rows;
this.total = response.total;
this.loading = false;
}
);
},
//
handleClose() {
const obj = {path: "/alarm/offlineRule"};
this.$tab.closeOpenPage(obj);
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.targetIds = selection.map(item => item.deviceId)
this.multiple = !selection.length
},
/** 打开设备列表弹窗 */
openSelectDevice() {
this.$refs.select.show();
},
/** 取消分配按钮操作 */
cancelAllocateDevice(row) {
const offlineRuleId = this.queryParams.offlineRuleId;
const OFFLINE_TARGET_TYPE_DEVICE = this.OFFLINE_TARGET_TYPE_DEVICE;
this.$modal.confirm('确认要取消分配该设备"' + row.deviceName + '"吗?').then(function () {
return cancelAllocateDevice({
offlineRuleId: offlineRuleId,
targetType: OFFLINE_TARGET_TYPE_DEVICE,
targetId: row.deviceId
});
}).then(() => {
this.getList();
this.$modal.msgSuccess("取消分配成功");
}).catch(() => {
});
},
/** 批量取消分配按钮操作 */
cancelAllocateDevices(row) {
const offlineRuleId = this.queryParams.offlineRuleId;
const targetIds = this.targetIds.join(",");
const OFFLINE_TARGET_TYPE_DEVICE = this.OFFLINE_TARGET_TYPE_DEVICE;
this.$modal.confirm('是否取消分配选中设备项?').then(function () {
return cancelAllocateDevices({
offlineRuleId: offlineRuleId,
targetType: OFFLINE_TARGET_TYPE_DEVICE,
targetIds: targetIds
});
}).then(() => {
this.getList();
this.$modal.msgSuccess("取消分配成功");
}).catch(() => {
});
}
}
};
</script>

@ -0,0 +1,866 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="规则名称" prop="offlineRuleName">
<el-input
v-model="queryParams.offlineRuleName"
placeholder="请输入离线报警规则名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="所属场景" prop="sceneId">
<el-select v-model="queryParams.sceneId" placeholder="请选择所属场景" @input="sceneChange" clearable>
<el-option
v-for="(scene, index) in scenes"
:key="index"
:label="scene.sceneName"
:value="scene.sceneId"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="报警级别" prop="alarmLevelId">
<el-select v-model="queryParams.alarmLevelId" placeholder="请选择报警级别" clearable>
<el-option
v-for="(alarmLevel, index) in alarmLevels"
:key="index"
:label="alarmLevel.alarmLevelName"
:value="alarmLevel.alarmLevelId"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="规则类型" prop="ruleType">
<el-select v-model="queryParams.ruleType" placeholder="请选择规则类型" clearable>
<el-option
v-for="dict in dict.type.hw_offline_rule_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="联动标识" prop="linkFlag">
<el-select v-model="queryParams.linkFlag" placeholder="请选择联动标识" clearable>
<el-option
v-for="dict in dict.type.hw_alarm_rule_link_flag"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="状态" prop="alarmRuleStatus">
<el-select v-model="queryParams.alarmRuleStatus" placeholder="请选择状态">
<el-option
v-for="dict in dict.type.hw_alarm_rule_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['business:offlineRule:add']"
>新增
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['business:offlineRule:edit']"
>修改
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['business:offlineRule:remove']"
>删除
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['business:offlineRule:export']"
>导出
</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="offlineRuleList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center"/>
<el-table-column label="规则ID" align="center" prop="offlineRuleId"/>
<el-table-column label="规则名称" align="center" prop="offlineRuleName"/>
<el-table-column label="所属租户" align="center" prop="tenantName"/>
<el-table-column label="所属场景" align="center" prop="sceneName"/>
<el-table-column label="报警级别" align="center" prop="alarmLevelName"/>
<el-table-column label="规则类型" align="center" prop="ruleType">
<template slot-scope="scope">
<dict-tag :options="dict.type.hw_offline_rule_type" :value="scope.row.ruleType"/>
</template>
</el-table-column>
<el-table-column label="联动标识" align="center" prop="linkFlag">
<template slot-scope="scope">
<dict-tag :options="dict.type.hw_alarm_rule_link_flag" :value="scope.row.linkFlag"/>
</template>
</el-table-column>
<el-table-column label="状态" align="center" prop="alarmRuleStatus">
<template slot-scope="scope">
<dict-tag :options="dict.type.hw_alarm_rule_status" :value="scope.row.alarmRuleStatus"/>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['business:offlineRule:edit']"
>修改
</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-s-order"
v-if="scope.row.ruleType=='1'"
@click="handleAllocateDevice(scope.row)"
v-hasPermi="['business:offlineRule:edit']"
>设备列表
</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['business:offlineRule:remove']"
>删除
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改离线报警规则对话框 -->
<el-dialog :title="title" :visible.sync="open" width="660px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="130px">
<el-form-item label="规则名称" prop="offlineRuleName">
<el-input v-model="form.offlineRuleName" placeholder="请输入规则名称"/>
</el-form-item>
<el-form-item label="所属场景" prop="sceneId">
<el-select v-model="form.sceneId" placeholder="请选择所属场景" @input="editedSceneChange"
:disabled="sceneDisabled">
<el-option
v-for="(scene, index) in editedScenes"
:key="index"
:label="scene.sceneName"
:value="scene.sceneId"
:disabled="scene.selectedDisable && scene.selectedDisable == 1"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="报警级别" prop="alarmLevelId">
<el-select v-model="form.alarmLevelId" placeholder="请选择报警级别">
<el-option
v-for="(alarmLevel, index) in editedAlarmLevels"
:key="index"
:label="alarmLevel.alarmLevelName"
:value="alarmLevel.alarmLevelId"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="规则类型" prop="ruleType">
<el-radio-group v-model="form.ruleType" :disabled="editedDisabled">
<el-radio
v-for="dict in dict.type.hw_offline_rule_type"
:key="dict.value"
:label="dict.value"
>{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="报警规则" prop="offlineNumber">
<el-input-number v-model="form.offlineNumberTime" placeholder="分钟" style="width:120px;"
show-overflow-tooltip="true" min="1" max="999999"/>
分钟内,
离线次数>=
<el-input-number v-model="form.offlineNumber" placeholder="次数" style="width:120px;"
:show-overflow-tooltip="true" min="1" max="999999"/>
</el-form-item>
<el-form-item label="状态" prop="alarmRuleStatus">
<el-radio-group v-model="form.alarmRuleStatus">"
<el-radio
v-for="dict in dict.type.hw_alarm_rule_status"
:key="dict.value"
:label="dict.value"
>{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="联动标识" prop="linkFlag">
<el-radio-group v-model="form.linkFlag" @input="linkFlagChange">
<el-radio
v-for="dict in dict.type.hw_alarm_rule_link_flag"
:key="dict.value"
:label="dict.value"
>{{ dict.label }}
</el-radio>
</el-radio-group>&nbsp;
<el-button type="primary" @click="handleAddAlarmRuleLink" icon="el-icon-plus" size="mini"
v-if="alarmRuleLinkVisible">添加联动设备
</el-button>
<el-table :data="alarmRuleLinkData" :row-class-name="rowHwAlarmRuleLinkIndex"
ref="hwAlarmRuleLink" v-if="alarmRuleLinkVisible">
<el-table-column label="序号" align="center" prop="index" width="50"/>
<el-table-column
label="联动类型"
prop="linkType"
min-width="8%"
:show-overflow-tooltip="true"
>
<template slot-scope="scope">
<dict-tag :options="dict.type.hw_alarm_rule_link_type" :value="scope.row.linkType"/>
</template>
</el-table-column>
<el-table-column
label="联动设备"
prop="linkDeviceName"
min-width="12%"
:show-overflow-tooltip="true"
>
</el-table-column>
<el-table-column
label="联动设备服务"
prop="linkDeviceModeFunctionName"
min-width="10%"
:show-overflow-tooltip="true"
/>
<el-table-column label="操作" align="center" min-width="10%">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdateAlarmRuleLink(scope.row)"
>修改
</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDeleteAlarmRuleLink(scope.row)"
>删除
</el-button>
</template>
</el-table-column>
</el-table>
</el-form-item>
<el-form-item label="描述" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 添加或修改联动设备对话框-->
<el-dialog :title="alarmRuleLinkTitle" :visible.sync="alarmRuleLinkOpen" width="500px" append-to-body>
<el-form ref="alarmRuleLinkForm" :model="alarmRuleLinkForm" :rules="alarmRuleLinkRules" label-width="80px">
<el-form-item label="联动类型" prop="linkType">
<el-select v-model="alarmRuleLinkForm.linkType" placeholder="请选择联动类型">
<el-option
v-for="dict in dict.type.hw_alarm_rule_link_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-row>
<el-col span="12">
<el-form-item label="设备" prop="linkDeviceId">
<el-select v-model="alarmRuleLinkForm.linkDeviceId" placeholder="请选择设备"
@input="editedLinkDeviceChange">
<el-option
v-for="(device, index) in editedDevices"
:key="index"
:label="device.deviceName"
:value="device.deviceId"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col span="12">
<el-form-item label="设备服务" prop="linkDeviceFunctionId">
<el-select v-model="alarmRuleLinkForm.linkDeviceFunctionId" placeholder="请选择设备服务"
@input="editedLinkDeviceModeServiceChange">
<el-option
v-for="(deviceModeFunction, index) in editedDeviceModeServices"
:key="index"
:label="deviceModeFunction.functionName"
:value="deviceModeFunction.modeFunctionId"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<!--el-form-item
v-for="(parameter,index) in modeFunctionParameters"
:label="parameter.parameterName"
:key="parameter.parameterIdentifier"
:prop="'parameters'+index"
>
<el-input v-model="alarmRuleLinkForm.parameters" placeholder="请输入内容"/>
</el-form-item-->
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitRuleLinkForm"> </el-button>
<el-button @click="cancelAlarmRuleLink"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
listOfflineRule, getOfflineRule, delOfflineRule, addOfflineRule, updateOfflineRule,
getScenes, getEditedScenes, getSelectListBySceneId, getDeviceModeByDeviceId
} from "@/api/business/offlineRule";
import {addDeviceModeFunction} from "@/api/business/deviceModeFunction";
export default {
name: "OfflineRule",
dicts: ['hw_offline_rule_type', 'hw_alarm_rule_link_flag', 'hw_alarm_rule_status', 'hw_alarm_rule_push_flag', 'hw_alarm_rule_trigger_condition', 'hw_alarm_rule_link_type'],
data() {
return {
//
loading: true,
//
ids: [],
//
checkedHwAlarmRuleLink: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
// 线
offlineRuleList: [],
//
hwAlarmRuleLinkList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
offlineRuleName: null,
tenantId: null,
sceneId: null,
alarmLevelId: null,
ruleType: null,
offlineTime: undefined,
offlineNumberTime: undefined,
offlineNumber: undefined,
triggerTimeFrame: null,
consumeTraffic: null,
batteryLevel: null,
powerDownFlag: null,
linkFlag: null,
alarmRuleStatus: null,
alarmPushFlag: null,
alarmPushContent: null,
alarmRecoverContent: null,
offlineRuleField: null
},
//
form: {},
//
rules: {
offlineRuleName: [
{required: true, message: "离线报警规则名称不能为空", trigger: "blur"}
],
sceneId: [
{required: true, message: "所属场景不能为空", trigger: "change"}
],
alarmLevelId: [
{required: true, message: "报警级别不能为空", trigger: "change"}
],
ruleType: [
{required: true, message: "规则类型不能为空", trigger: "change"}
],
linkFlag: [
{required: true, message: "联动标识不能为空", trigger: "change"}
],
alarmRuleStatus: [
{required: true, message: "状态不能为空", trigger: "change"}
],
offlineNumber: [
{required: true, message: "报警规则不能为空", trigger: "blur"}
],
},
FUNCTION_MODE_ATTRIBUTE: "1", //
FUNCTION_MODE_SERVICE: "2",//
DATA_MORE_THAN_A_AND_LESS_THAN_B: 3,//AB
DATA_LESS_THAN_A_OR_MORE_THAN_B: 4,//AB
LINK_FLAG_YES: "1",
scenes: [],
alarmLevels: [],
alarmTypes: [],
devices: [],
alarmRuleFlag: "1",
editedScenes: [],
editedDisabled: true,
sceneDisabled: true,
editedAlarmLevels: [],
editedAlarmTypes: [],
editedDevices: [],
editedDeviceModeAttributes: [],
editedDeviceModeServices: [],
alarmRuleLinkVisible: false,
alarmRuleLinkData: [],
alarmRuleLinkTitle: "",
alarmRuleLinkOpen: false,
alarmRuleLinkForm: {},
modeFunctionParameters: [],
alarmRuleLinkRules: {
linkType: [
{required: true, message: "联动类型不能为空", trigger: "change"}
],
linkDeviceId: [
{required: true, message: "设备不能为空", trigger: "change"},
],
linkDeviceFunctionId: [
{required: true, message: "设备服务不能为空", trigger: "change"},
],
},
};
},
created() {
this.getScenes();
this.getList();
},
methods: {
/** 查询离线报警规则列表 */
getList() {
this.loading = true;
listOfflineRule(this.queryParams).then(response => {
this.offlineRuleList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.editedDevices = [];
this.editedAlarmLevels = [];
this.alarmRuleLinkData = [];
this.form = {
offlineRuleId: null,
offlineRuleName: null,
tenantId: null,
sceneId: null,
alarmLevelId: null,
ruleType: '3',
offlineTime: undefined,
offlineNumberTime: 1,
offlineNumber: 1,
triggerTimeFrame: null,
consumeTraffic: null,
batteryLevel: null,
powerDownFlag: null,
linkFlag: '0',
alarmRuleStatus: '1',
alarmPushFlag: null,
alarmPushContent: null,
alarmRecoverContent: null,
remark: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
offlineRuleField: null
};
this.hwAlarmRuleLinkList = [];
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.offlineRuleId)
this.single = selection.length !== 1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.editedDisabled = false;
this.sceneDisabled = false;
this.reset();
this.getEditedScenes();
this.open = true;
this.title = "添加离线报警规则";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
this.editedDisabled = true;
this.sceneDisabled = true;
this.getEditedScenes();
const offlineRuleId = row.offlineRuleId || this.ids
getOfflineRule(offlineRuleId).then(response => {
this.form = response.data;
this.form.offlineTime = this.form.offlineTime || undefined;
this.form.offlineNumberTime = this.form.offlineNumberTime || undefined;
this.form.offlineNumber = this.form.offlineNumber || undefined;
this.getEditedSelectListBySceneId(this.form.sceneId);
this.alarmRuleLinkData = response.data.hwAlarmRuleLinkList;
this.alarmRuleLinkVisible = response.data.linkFlag === this.LINK_FLAG_YES;
this.open = true;
this.title = "修改离线报警规则";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.linkFlag == this.LINK_FLAG_YES &&
(this.alarmRuleLinkData == null || this.alarmRuleLinkData.length <= 0)) {
this.$modal.msgWarning("请添加联动设备");
return;
}
this.form.hwAlarmRuleLinkList = this.alarmRuleLinkData;
if (this.form.offlineRuleId != null) {
updateOfflineRule(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addOfflineRule(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const offlineRuleIds = row.offlineRuleId || this.ids;
this.$modal.confirm('是否确认删除离线报警规则编号为"' + offlineRuleIds + '"的数据项?').then(function () {
return delOfflineRule(offlineRuleIds);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
});
},
/** 报警规则联动信息序号 */
rowHwAlarmRuleLinkIndex({row, rowIndex}) {
row.index = rowIndex + 1;
},
/** 报警规则联动信息删除按钮操作 */
handleDeleteHwAlarmRuleLink() {
if (this.checkedHwAlarmRuleLink.length == 0) {
this.$modal.msgError("请先选择要删除的报警规则联动信息数据");
} else {
const hwAlarmRuleLinkList = this.hwAlarmRuleLinkList;
const checkedHwAlarmRuleLink = this.checkedHwAlarmRuleLink;
this.hwAlarmRuleLinkList = hwAlarmRuleLinkList.filter(function (item) {
return checkedHwAlarmRuleLink.indexOf(item.index) == -1
});
}
},
/** 复选框选中数据 */
handleHwAlarmRuleLinkSelectionChange(selection) {
this.checkedHwAlarmRuleLink = selection.map(item => item.index)
},
/** 导出按钮操作 */
handleExport() {
this.download('business/offlineRule/export', {
...this.queryParams
}, `offlineRule_${new Date().getTime()}.xlsx`)
},
getScenes() {
getScenes().then(response => {
this.scenes = response.data;
});
},
sceneChange(sceneId) {
this.devices = [];
this.alarmLevels = [];
this.queryParams.alarmLevelId = null;
this.queryParams.ruleDeviceId = null;
this.getSelectListBySceneId(sceneId);
},
getSelectListBySceneId(sceneId) {
if (sceneId != null && sceneId !== '') {
getSelectListBySceneId(sceneId).then(response => {
this.devices = response.data["devices"];
this.alarmLevels = response.data["alarmLevels"];
})
}
},
getEditedScenes() {
getEditedScenes().then(response => {
this.editedScenes = response.data;
});
},
getEditedSelectListBySceneId(sceneId) {
getSelectListBySceneId(sceneId).then(response => {
this.editedDevices = response.data["devices"];
this.editedAlarmLevels = response.data["alarmLevels"];
})
},
editedSceneChange(sceneId) {
this.editedDevices = [];
this.editedAlarmLevels = [];
this.form.alarmLevelId = null;
this.form.ruleDeviceId = null;
this.alarmRuleLinkData = [];
this.alarmRuleLinkVisible = this.form.linkFlag === "1";
this.getEditedSelectListBySceneId(sceneId);
},
getDeviceModeServicesByDeviceId(deviceId) {
getDeviceModeByDeviceId(deviceId).then(response => {
const hwDeviceModeFunctionList = response.data["hwDeviceModeFunctionList"];
if (hwDeviceModeFunctionList != null) {
this.editedDeviceModeServices = hwDeviceModeFunctionList.filter(item => item.functionMode == this.FUNCTION_MODE_SERVICE)
}
})
},
editedLinkDeviceChange(deviceId) {
this.editedDeviceModeServices = [];
this.alarmRuleLinkForm.linkDeviceFunctionId = null;
const selectedOption = this.editedDevices.find(option => option.deviceId === deviceId);
this.alarmRuleLinkForm.linkDeviceName = selectedOption.deviceName;
this.getDeviceModeServicesByDeviceId(deviceId);
},
editedLinkDeviceModeServiceChange(modeFunctionId) {
const selectedOption = this.editedDeviceModeServices.find(option => option.modeFunctionId === modeFunctionId);
this.alarmRuleLinkForm.linkDeviceModeFunctionName = selectedOption.functionName;
this.alarmRuleLinkForm.linkDeviceFunctionIdentifier = selectedOption.functionIdentifier;
// getModeFunctionParametersByModeFunctionId(modeFunctionId).then(response => {
// const modeFunctionParameters = response.data;
// if(modeFunctionParameters!=null){
// this.modeFunctionParameters = modeFunctionParameters[1];
// }
// })
},
linkFlagChange(linkFlag) {
this.alarmRuleLinkVisible = linkFlag === "1" && this.form.sceneId != null;
},
//
resetAlarmRuleLink() {
this.alarmRuleLinkForm = {
alarmRuleType: '2',
linkType: null,
linkDeviceId: null,
linkDeviceFunctionId: null,
linkDeviceFunctionIdentifier: null,
linkDeviceFunctionData: null,
linkDeviceName: null,
linkDeviceModeFunctionName: null
};
//this.resetForm("inputParameterForm");
},
handleAddAlarmRuleLink() {
this.resetAlarmRuleLink();
this.alarmRuleLinkOpen = true;
this.alarmRuleLinkTitle = "添加联动设备";
},
handleUpdateAlarmRuleLink(row) {
this.alarmRuleLinkIndex = this.alarmRuleLinkData.indexOf(row);
const linkDeviceId = row.linkDeviceId;
this.getDeviceModeServicesByDeviceId(linkDeviceId);
this.alarmRuleLinkForm = JSON.parse(JSON.stringify(row));
this.alarmRuleLinkOpen = true;
this.alarmRuleLinkTitle = "修改联动设备";
},
handleDeleteAlarmRuleLink(row) {
this.alarmRuleLinkData.splice(this.alarmRuleLinkData.indexOf(row), 1);
},
submitRuleLinkForm() {
this.$refs['alarmRuleLinkForm'].validate(valid => {
if (valid) {
/** 联动设备添加后在list中添加 */
if (this.deviceModeId && this.deviceModeId !== '') {
let modeFunctionId = this.form.modeFunctionId;
this.form.deviceModeId = this.deviceModeId;
if (modeFunctionId !== undefined && modeFunctionId != null) {
let attributeDataIndex = this.attributeDataIndex;
this.doUpdateDeviceModeFunction();
} else {
addDeviceModeFunction(this.form).then(res => {
this.$modal.msgSuccess(res.msg);
if (res.code === 200) {
this.open = false;
this.form.modeFunctionId = res.data;
this.pushData();
}
});
}
} else {
this.alarmRuleLinkOpen = false;
this.pushData();
}
}
})
},
pushData() {
let alarmRuleLinkIndex = this.alarmRuleLinkIndex;
if (alarmRuleLinkIndex > -1) {
this.alarmRuleLinkIndex = -1;
this.alarmRuleLinkData.splice(alarmRuleLinkIndex, 1, this.alarmRuleLinkForm);
} else {
this.alarmRuleLinkData.push(this.alarmRuleLinkForm)
}
},
//
cancelAlarmRuleLink() {
this.alarmRuleLinkOpen = false;
this.resetAlarmRuleLink();
},
/** 配置设备操作 */
handleAllocateDevice: function (row) {
const offlineRuleId = row.offlineRuleId;
const sceneId = row.sceneId;
this.$router.push("/offlineRule/offline-device/device/" + offlineRuleId + "/" + sceneId);
},
}
};
</script>

@ -0,0 +1,182 @@
<template>
<!-- 分配设备 -->
<el-dialog title="选择设备" :visible.sync="visible" width="800px" top="5vh" append-to-body>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true">
<el-form-item label="设备类型" prop="deviceType">
<el-select v-model="queryParams.deviceType" placeholder="请选择设备类型" style="width: 180px" clearable>
<el-option
v-for="dict in dict.type.hw_device_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="设备编号" prop="deviceCode">
<el-input
v-model="queryParams.deviceCode"
placeholder="请输入设备编号"
clearable
style="width: 180px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="设备名称" prop="deviceName">
<el-input
v-model="queryParams.deviceName"
placeholder="请输入设备名称"
clearable
style="width: 180px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="所属监控单元" prop="monitorUnitId">
<treeselect v-model="queryParams.monitorUnitId" :options="monitorUnitTreeData" :show-count="true"
style="width: 180px" placeholder="请选择所属监控单元" @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-row>
<el-table @row-click="clickRow" ref="table" :data="deviceList" @selection-change="handleSelectionChange"
height="260px">
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column label="设备类型" prop="deviceType" :show-overflow-tooltip="true">
<template slot-scope="scope">
<dict-tag :options="dict.type.hw_device_type" :value="scope.row.deviceType"/>
</template>
</el-table-column>
<el-table-column label="设备编号" prop="deviceCode" :show-overflow-tooltip="true"/>
<el-table-column label="设备名称" prop="deviceName" :show-overflow-tooltip="true"/>
<el-table-column label="所属监控单元" prop="monitorUnitName" :show-overflow-tooltip="true"/>
<el-table-column label="发布时间" align="center" prop="publishTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.publishTime) }}</span>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</el-row>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleSelectDevice"> </el-button>
<el-button @click="visible = false"> </el-button>
</div>
</el-dialog>
</template>
<script>
import {
monitorUnitTree,
unallocatedDeviceList,
batchInsertOfflineTarget,
} from "@/api/business/offlineRule";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
export default {
dicts: ['hw_device_type'],
components: {Treeselect},
props: {
offlineRuleId: {
type: [Number, String]
},
sceneId: {
type: [Number, String]
}
},
data() {
return {
//
visible: false,
//
targetIds: [],
//
total: 0,
//
monitorUnitTreeData: [],
//
deviceList: [],
//
queryParams: {
pageNum: 1,
pageSize: 10,
offlineRuleId: undefined,
sceneId: undefined,
monitorUnitId: undefined,
deviceCode: undefined,
deviceName: undefined
},
OFFLINE_TARGET_TYPE_DEVICE: '1',
};
},
methods: {
monitorUnitTree(sceneId) {
monitorUnitTree({sceneId: sceneId}).then(response => {
this.monitorUnitTreeData = response.data;
})
},
//
show() {
this.queryParams.offlineRuleId = this.offlineRuleId;
this.queryParams.sceneId = this.sceneId;
this.monitorUnitTree(this.sceneId);
this.getList();
this.visible = true;
},
clickRow(row) {
this.$refs.table.toggleRowSelection(row);
},
//
handleSelectionChange(selection) {
this.targetIds = selection.map(item => item.deviceId);
},
//
getList() {
unallocatedDeviceList(this.queryParams).then(res => {
this.deviceList = res.rows;
this.total = res.total;
});
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 选择分配设备操作 */
handleSelectDevice() {
const offlineRuleId = this.queryParams.offlineRuleId;
const targetIds = this.targetIds.join(",");
if (targetIds == "") {
this.$modal.msgError("请选择要分配的设备");
return;
}
batchInsertOfflineTarget({
offlineRuleId: offlineRuleId,
targetType: this.OFFLINE_TARGET_TYPE_DEVICE,
targetIds: targetIds
}).then(res => {
this.$modal.msgSuccess(res.msg);
if (res.code === 200) {
this.visible = false;
this.$emit("ok");
}
});
}
}
};
</script>

@ -202,8 +202,6 @@ export default {
showSearch: true,
//
deptList: [],
//
deptOptions: [],
//
editedDeptOptions: [],
//
@ -309,13 +307,12 @@ export default {
this.reset();
if (row != undefined) {
this.form.parentId = row.deptId;
this.form.tenantId = row.tenantId;
}
this.open = true;
this.title = "添加部门";
this.tenantDisabled = false;
listDept().then(response => {
this.deptOptions = this.handleTree(response.data, "deptId");
});
this.listDeptTree(this.form.tenantId);
},
/** 展开/折叠操作 */
toggleExpandAll() {
@ -328,14 +325,17 @@ export default {
/** 修改按钮操作 */
handleUpdate(row) {
this.tenantDisabled = true;
this.editedDeptOptions = [];
this.reset();
getDept(row.deptId).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改部门";
});
//
listDeptExcludeChild(row.deptId,row.tenantId).then(response => {
this.deptOptions = this.handleTree(response.data, "deptId");
this.editedDeptOptions = this.handleTree(response.data, "deptId");
});
},
/** 提交按钮 */
@ -379,10 +379,14 @@ export default {
tenantChange(tenantId) {
this.editedDeptOptions = [];
this.form.parentId = undefined;
this.listDeptTree(tenantId);
},
listDeptTree(tenantId){
listDept({"tenantId":tenantId}).then(response => {
this.editedDeptOptions = this.handleTree(response.data, "deptId");
});
},
}
}
};

Loading…
Cancel
Save