Commit d89ec3c2 authored by zhangsen's avatar zhangsen

提交代码

parent a0260da6
...@@ -96,4 +96,12 @@ public class FireStationInfoDto extends BaseDto { ...@@ -96,4 +96,12 @@ public class FireStationInfoDto extends BaseDto {
@ApiModelProperty(value = "关联站id") @ApiModelProperty(value = "关联站id")
private String stationContactId; private String stationContactId;
@ApiModelProperty("现存告警数量")
private Integer alarmNum = 0;
@ApiModelProperty("已处理数量")
private Integer confirmTrueNum = 0;
@ApiModelProperty("未处理数量")
private Integer confirmFalseNum = 0;
} }
...@@ -3,6 +3,8 @@ package com.yeejoin.amos.boot.module.ccs.api.mapper; ...@@ -3,6 +3,8 @@ package com.yeejoin.amos.boot.module.ccs.api.mapper;
import com.yeejoin.amos.boot.module.ccs.api.dto.FireStationInfoDto; import com.yeejoin.amos.boot.module.ccs.api.dto.FireStationInfoDto;
import com.yeejoin.amos.boot.module.ccs.api.entity.FireStationInfo; import com.yeejoin.amos.boot.module.ccs.api.entity.FireStationInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.boot.module.ccs.api.vo.AlarmCountVO;
import com.yeejoin.amos.boot.module.ccs.api.vo.DateAlarmCountVO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
...@@ -32,4 +34,54 @@ public interface FireStationInfoMapper extends BaseMapper<FireStationInfo> { ...@@ -32,4 +34,54 @@ public interface FireStationInfoMapper extends BaseMapper<FireStationInfo> {
List<Map<String, Object>> queryStationEquipInfo(@Param("stationCode") String stationCode, @Param("stationName") String stationName); List<Map<String, Object>> queryStationEquipInfo(@Param("stationCode") String stationCode, @Param("stationName") String stationName);
List<Map<String, Object>> lastYearAlarmCount(); List<Map<String, Object>> lastYearAlarmCount();
/**
* 换流站告警信息
*
* @param stationCode
* @return List<FireStationInfoDto>
*/
List<FireStationInfoDto> queryStationAlarmListByCode(@Param("stationCode") String stationCode);
/**
* 查询各个环流站的警情数量
*
* @return
*/
List<AlarmCountVO> queryAlarmCountByCode();
/**
* 查询各个环流站的警情数量(包含历史和即时警情)
*
* @return
*/
List<AlarmCountVO> queryAllAlarmCountByCode(@Param("beginDateTime") String beginDateTime, @Param("endDateTime") String endDateTime);
/**
* 根据code和时间查警情数量
*
* @return
*/
Integer queryAlarmCountByDateAndCode(@Param("stationCode") String stationCode, @Param("date") String date);
/**
* 查询指定时间段的告警趋势
*
* @param stationCode
* @param beginDate
* @param endDate
* @return
*/
List<DateAlarmCountVO> getAlarmTrendByDatePeriod(@Param("stationCode") String stationCode, @Param("beginDate") String beginDate, @Param("endDate") String endDate);
/**
* 查询指定时间段的告警趋势
*
* @param stationCode
* @param beginDateTime
* @param endDateTime
* @return
*/
List<DateAlarmCountVO> getAlarmNumByDateTimePeriodByStationCode(@Param("stationCode") String stationCode, @Param("beginDateTime") String beginDateTime, @Param("endDateTime") String endDateTime);
} }
...@@ -5,9 +5,17 @@ package com.yeejoin.amos.boot.module.ccs.api.service; ...@@ -5,9 +5,17 @@ package com.yeejoin.amos.boot.module.ccs.api.service;
public interface MqttReceiveService { public interface MqttReceiveService {
/** /**
* 增量数据处理 * 处理警情消息
* @param topic 主题 * @param topic 主题
* @param message 消息内容 * @param message 消息内容
*/ */
void handlerMqttIncrementMessage(String topic, String message); void handlerMqttAlarmMessage(String topic, String message);
/**
* 处理问题下发消息
* @param topic 主题
* @param message 消息内容
*/
void handlerMqttQuestionMessage(String topic, String message);
} }
...@@ -11,9 +11,13 @@ import lombok.Data; ...@@ -11,9 +11,13 @@ import lombok.Data;
* @date 2021/1/7 17:44 * @date 2021/1/7 17:44
*/ */
@Data @Data
public class MqttDataVO { public class AlarmCountVO {
private String key; private String stationCode;
private Object value; private Integer alarmNum;
private Integer confirmTrueNum;
private Integer confirmFalseNum;
} }
package com.yeejoin.amos.boot.module.ccs.api.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class AlarmEventLogVO implements Serializable {
private String id;
private String valid;
private String record;
private String date;
private String creator;
private String creatorName;
private String status;
private String bizOrgName;
private String bizOrgCode;
private String orgCode;
private String severityLevel;
private String objcectType;
private String objcectId;
private String objcectCode;
private String objcectName;
private String objcectIndexName;
private String objcectIndexKey;
private String alarmTime;
private String signalId;
private String controlModelId;
private String modelIndexId;
private String deviationIndexId;
private String questionNum;
private String questionReportedTime;
private String subject;
private String content;
private String questionReason;
private String questionEffect;
private String rectificationProposal;
private String severityLevelLABEL;
private String protectedObjectCode;
private String protectedObjectName;
private String buildingName;
private String buildingCode;
private String systemCode;
private String systemName;
private String objcectIndexValue;
private String objcectIndexType;
private String recoveryStatus;
}
package com.yeejoin.amos.boot.module.ccs.api.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class DateAlarmCountVO implements Serializable {
public String alarmNums;
public String date;
}
package com.yeejoin.amos.boot.module.ccs.api.vo;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class QuestionVO implements Serializable {
private List<AlarmEventLogVO> alarmEventLog;
}
package com.yeejoin.amos.boot.module.ccs.api.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class RawDataVO implements Serializable {
private String id;
private String valid;
private String record;
private String date;
private String creator;
private String creatorName;
private String status;
private String equipmentSpecificId;
private String equipmentSpecificName;
private String equipmentId;
private String equipmentName;
private String systemId;
private String equipmentDetailCode;
private String equipmentDetailId;
private String typeName;
private String equipmentIndexKey;
private String equipmentIndexName;
private String equipmentIndexId;
private String indexValue;
private String systemName;
private String valueEnum;
private String emergencyLevelColor;
private String isAlarm;
private String emergencyLevel;
private String emergencyLevelDescribe;
private String isTrend;
private String typeCode;
private String groupName;
private String sortNum;
private String unit;
private String buildPosition;
private String isIot;
private String bizOrgName;
private String bizOrgCode;
private String orgCode;
private String equipmentSpecificCode;
private String categoryCode;
private String categoryName;
private String systemCode;
private String detailPosition;
private String buildId;
private String buildCode;
private String buildName;
private String companyCode;
private String equipmentSpecificIotCode;
}
package com.yeejoin.amos.boot.module.ccs.api.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class ReceiveDataVO implements Serializable {
private String active;
private AlarmEventLogVO alarmEventLog;
private RawDataVO rawData;
}
...@@ -56,4 +56,108 @@ ...@@ -56,4 +56,108 @@
FROM FROM
`asf_fire_station_info` s `asf_fire_station_info` s
</select> </select>
<select id="queryStationAlarmListByCode" resultType="com.yeejoin.amos.boot.module.ccs.api.dto.FireStationInfoDto">
SELECT
i.*
FROM
`asf_fire_station_info` i
where i.status = false
<if test="stationCode != null and stationCode != ''">
and i.code = #{stationCode,jdbcType=VARCHAR}
</if>
</select>
<select id="queryAlarmCountByCode" resultType="com.yeejoin.amos.boot.module.ccs.api.vo.AlarmCountVO">
SELECT
station_code,
sum( is_alarm ) as alarmNum,
sum( confirm_state ) as confirmTrueNum,
count(*) - sum( confirm_state ) as confirmfalseNum
FROM
asf_fire_equipment_signal_log
GROUP BY
station_code
</select>
<select id="queryAllAlarmCountByCode" resultType="com.yeejoin.amos.boot.module.ccs.api.vo.AlarmCountVO">
SELECT
station_code,
count(*) as alarmNum
FROM
asf_fire_equipment_signal_log
<where>
<if test="beginDateTime != null and beginDateTime != '' and endDateTime != null and endDateTime != ''">
and confirm_date between #{beginDateTime} and #{endDateTime}
</if>
</where>
GROUP BY
station_code
</select>
<select id="queryAlarmCountByDateAndCode" resultType="java.lang.Integer">
select count(*) from asf_fire_equipment_signal_log
<where>
1 = 1
<if test="stationCode != null and stationCode != ''">
and station_code = #{stationCode,jdbcType=VARCHAR}
</if>
<if test="date != null and date != ''">
and confirm_date like concat(#{date,jdbcType=VARCHAR},'%')
</if>
</where>
</select>
<select id="getAlarmTrendByDatePeriod" resultType="com.yeejoin.amos.boot.module.ccs.api.vo.DateAlarmCountVO">
select
(SELECT
IFNULL(count(s.id),0)
FROM `asf_fire_equipment_signal_log` s
<where>
<if test="stationCode != null and stationCode != ''">
and s.station_code = #{stationCode}
</if>
and s.signal_report_date = t.date
</where>
) as alarmNums,
date
from
(SELECT
DATE_FORMAT(DATE( DATE_ADD( #{beginDate}, INTERVAL @s DAY )),'%Y-%m-%d') AS date,
@s := @s + 1 AS `index`
FROM
mysql.help_topic,
( SELECT @s := 0 ) temp
WHERE
@s <![CDATA[<=]]>
DATEDIFF(#{endDate},#{beginDate})) t
GROUP BY t.date
</select>
<select id="getAlarmNumByDateTimePeriodByStationCode"
resultType="com.yeejoin.amos.boot.module.ccs.api.vo.DateAlarmCountVO">
select
(SELECT
IFNULL(count(s.id),0)
FROM `asf_fire_equipment_signal_log` s
<where>
<if test="stationCode != null and stationCode != ''">
and s.station_code = #{stationCode}
</if>
and s.confirm_date like concat(date ,'%')
</where>
) as alarmNums,
date
from
(SELECT
DATE_FORMAT( DATE_ADD( #{beginDateTime}, INTERVAL @s HOUR ),'%Y-%m-%d %H') AS date,
@s := @s + 1 AS `index`
FROM
mysql.help_topic,
( SELECT @s := 0 ) temp
WHERE
@s <![CDATA[<=]]>
hour(TIMEDIFF(#{endDateTime},#{beginDateTime}))) t
GROUP BY t.date
</select>
</mapper> </mapper>
...@@ -47,8 +47,12 @@ public class CcsMqttReceiveConfig { ...@@ -47,8 +47,12 @@ public class CcsMqttReceiveConfig {
@Value("${emqx.client-id}") @Value("${emqx.client-id}")
private String clientId; private String clientId;
@Value("${mqtt.topic}") @Value("${mqtt.topic.alarm}")
private String defaultTopic; private String alarmTopic;
@Value("${mqtt.topic.question}")
private String questionTopic;
// @Value("${spring.mqtt.completionTimeout}") // @Value("${spring.mqtt.completionTimeout}")
// private int completionTimeout; // private int completionTimeout;
...@@ -88,7 +92,7 @@ public class CcsMqttReceiveConfig { ...@@ -88,7 +92,7 @@ public class CcsMqttReceiveConfig {
//配置client,监听的topic //配置client,监听的topic
@Bean @Bean
public MessageProducer inbound() { public MessageProducer inbound() {
adapter = new MqttPahoMessageDrivenChannelAdapter(clientId, mqttPahoClientFactory(), defaultTopic); adapter = new MqttPahoMessageDrivenChannelAdapter(clientId, mqttPahoClientFactory(), alarmTopic, questionTopic);
// adapter.setCompletionTimeout(completionTimeout); // adapter.setCompletionTimeout(completionTimeout);
adapter.setConverter(new DefaultPahoMessageConverter()); adapter.setConverter(new DefaultPahoMessageConverter());
adapter.setQos(0); adapter.setQos(0);
...@@ -103,13 +107,11 @@ public class CcsMqttReceiveConfig { ...@@ -103,13 +107,11 @@ public class CcsMqttReceiveConfig {
return message -> { return message -> {
String topic = message.getHeaders().get("mqtt_receivedTopic").toString(); String topic = message.getHeaders().get("mqtt_receivedTopic").toString();
String msg = message.getPayload().toString(); String msg = message.getPayload().toString();
// int endIndex = topic.lastIndexOf("/"); if (alarmTopic.equals(topic)) {
// if (endIndex > 0 && StringUtil.isNotEmpty(String.valueOf(message))) { mqttReceiveService.handlerMqttAlarmMessage(topic, msg);
// String dataType = topic.substring(endIndex + 1); } else if (questionTopic.equals(topic)) {
// if (dataType.equals("property") && StringUtil.isNotEmpty(msg)) { mqttReceiveService.handlerMqttQuestionMessage(topic, msg);
mqttReceiveService.handlerMqttIncrementMessage(topic, msg); }
// }
// }
}; };
} }
} }
package com.yeejoin.amos.boot.module.ccs.biz.controller; package com.yeejoin.amos.boot.module.ccs.biz.controller;
import cn.hutool.core.date.DatePattern;
import com.yeejoin.amos.boot.biz.common.controller.BaseController; import com.yeejoin.amos.boot.biz.common.controller.BaseController;
import com.yeejoin.amos.boot.module.ccs.api.dto.FireStationInfoDto; import com.yeejoin.amos.boot.module.ccs.api.dto.FireStationInfoDto;
import com.yeejoin.amos.boot.module.ccs.api.enums.StationOrderByTypeEnum; import com.yeejoin.amos.boot.module.ccs.api.enums.StationOrderByTypeEnum;
...@@ -15,6 +16,7 @@ import org.typroject.tyboot.core.restful.utils.ResponseHelper; ...@@ -15,6 +16,7 @@ import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel; import org.typroject.tyboot.core.restful.utils.ResponseModel;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Optional; import java.util.Optional;
/** /**
...@@ -50,4 +52,57 @@ public class FireStationInfoController extends BaseController { ...@@ -50,4 +52,57 @@ public class FireStationInfoController extends BaseController {
public ResponseModel getOne(@PathVariable String stationCode) { public ResponseModel getOne(@PathVariable String stationCode) {
return ResponseHelper.buildResponse(fireStationInfoServiceImpl.getOneByCode(stationCode)); return ResponseHelper.buildResponse(fireStationInfoServiceImpl.getOneByCode(stationCode));
} }
/**
* 日常动态左侧警情统计top10
*
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "日常动态左侧警情统计top10", notes = "日常动态左侧警情统计top10")
@GetMapping(value = "/getStationSafetyListByCode")
public ResponseModel<List<FireStationInfoDto>> stationSafetyList(
@ApiParam(value = "换流站编码") @RequestParam(required = false) String stationCode,
@ApiParam(value = "数量") @RequestParam(required = true) Integer top) {
return ResponseHelper.buildResponse(fireStationInfoServiceImpl.queryStationAlarmListByCode(stationCode, top));
}
/**
* 日常动态左侧警情统计top10
*
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "中间上部分告警数量统计", notes = "中间上部分告警数量统计")
@GetMapping(value = "/getAlarmNumByDate")
public ResponseModel<Map<String, Integer>> getAlarmNumByDate(
@ApiParam(value = "换流站编码") @RequestParam(required = false) String stationCode) {
return ResponseHelper.buildResponse(fireStationInfoServiceImpl.getAlarmNumByDate(stationCode));
}
/**
* 日常动态左侧警情统计top10
*
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "换流站24小时警情数量", notes = "换流站24小时警情数量")
@GetMapping(value = "/getAlarmNumByDateTimePeriod")
public ResponseModel<Map<String, List<String>>> getAlarmNumByDateTimePeriod(
@ApiParam(value = "换流站编码") @RequestParam(required = false) String stationCode,
@ApiParam(value = "开始时间,格式:" + DatePattern.NORM_DATETIME_PATTERN, required = true) @RequestParam(required = true) String beginDateTime,
@ApiParam(value = "结束时间,格式:" + DatePattern.NORM_DATETIME_PATTERN, required = true) @RequestParam(required = true) String endDateTime) {
return ResponseHelper.buildResponse(fireStationInfoServiceImpl.getAlarmNumByDateTimePeriod(stationCode, beginDateTime, endDateTime));
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "查询指定时间段的告警趋势", notes = "查询指定时间段的告警趋势")
@GetMapping(value = "/getAlarmTrendByDatePeriod")
public ResponseModel getAlarmTrendByDatePeriod(
@ApiParam(value = "开始日期,格式:" + DatePattern.NORM_DATE_PATTERN, required = true) @RequestParam(value = "beginDate") String beginDate,
@ApiParam(value = "结束日期,格式:" + DatePattern.NORM_DATE_PATTERN, required = true) @RequestParam(value = "endDate") String endDate,
@ApiParam(value = "换流站编号") @RequestParam(required = false) String stationCode) {
return ResponseHelper.buildResponse(fireStationInfoServiceImpl.getAlarmTrendByDatePeriod(stationCode, beginDate, endDate));
}
} }
package com.yeejoin.amos.boot.module.ccs.biz.service.impl; package com.yeejoin.amos.boot.module.ccs.biz.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.yeejoin.amos.boot.module.ccs.api.dto.FireStationInfoDto; import com.yeejoin.amos.boot.module.ccs.api.dto.FireStationInfoDto;
import com.yeejoin.amos.boot.module.ccs.api.entity.FireStationInfo; import com.yeejoin.amos.boot.module.ccs.api.entity.FireStationInfo;
import com.yeejoin.amos.boot.module.ccs.api.enums.StationOrderByTypeEnum; import com.yeejoin.amos.boot.module.ccs.api.enums.StationOrderByTypeEnum;
import com.yeejoin.amos.boot.module.ccs.api.mapper.FireStationInfoMapper; import com.yeejoin.amos.boot.module.ccs.api.mapper.FireStationInfoMapper;
import com.yeejoin.amos.boot.module.ccs.api.service.IFireStationInfoService; import com.yeejoin.amos.boot.module.ccs.api.service.IFireStationInfoService;
import com.yeejoin.amos.boot.module.ccs.api.vo.AlarmCountVO;
import com.yeejoin.amos.boot.module.ccs.api.vo.DateAlarmCountVO;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.rdbms.service.BaseService; import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import java.util.List; import java.util.*;
import java.util.Optional; import java.util.stream.Collectors;
/** /**
* 站端信息表服务实现类 * 站端信息表服务实现类
...@@ -43,4 +51,84 @@ public class FireStationInfoServiceImpl extends BaseService<FireStationInfoDto, ...@@ -43,4 +51,84 @@ public class FireStationInfoServiceImpl extends BaseService<FireStationInfoDto,
} }
return dtos.iterator().next(); return dtos.iterator().next();
} }
public List<FireStationInfoDto> queryStationAlarmListByCode(String stationCode, Integer top) {
List<FireStationInfoDto> fireStationInfoList = this.baseMapper.queryStationAlarmListByCode(stationCode);
List<AlarmCountVO> alarmCountVOS = this.baseMapper.queryAlarmCountByCode();
Map<String, AlarmCountVO> collect = alarmCountVOS.stream().collect(Collectors.toMap(AlarmCountVO::getStationCode, t -> t));
fireStationInfoList.forEach(item -> {
if (collect.containsKey(item.getCode())) {
item.setAlarmNum(collect.get(item.getCode()).getAlarmNum());
item.setConfirmTrueNum(collect.get(item.getCode()).getConfirmTrueNum());
item.setConfirmFalseNum(collect.get(item.getCode()).getConfirmFalseNum());
}
});
List<FireStationInfoDto> finalVoList = fireStationInfoList.stream().skip(0).limit(top).sorted(Comparator.comparing(FireStationInfoDto::getAlarmNum).reversed()).collect(Collectors.toList());
return finalVoList;
}
public Map<String, Integer> getAlarmNumByDate(String stationCode) {
Date date = DateUtil.date();
String year = DateUtil.format(date, "YYYY");
String currentMonth = DateUtil.format(date, DatePattern.NORM_MONTH_PATTERN);
String yesterday = DateUtil.format(DateUtil.offsetDay(date, -1), DatePattern.NORM_DATE_PATTERN);
Integer todayNum = this.baseMapper.queryAlarmCountByDateAndCode(stationCode, DateUtil.now());
Integer currentYearNum = this.baseMapper.queryAlarmCountByDateAndCode(stationCode, year);
Integer currentMonthNum = this.baseMapper.queryAlarmCountByDateAndCode(stationCode, currentMonth);
Integer yesterdayNum = this.baseMapper.queryAlarmCountByDateAndCode(stationCode, yesterday);
HashMap<String, Integer> resultMap = new HashMap<>();
resultMap.put("todayNum", todayNum);
resultMap.put("currentYearNum", currentYearNum);
resultMap.put("currentMonthNum", currentMonthNum);
resultMap.put("yesterdayNum", yesterdayNum);
return resultMap;
}
public Map<String, List<String>> getAlarmNumByDateTimePeriod(String stationCode, String beginDateTime, String endDateTime) {
HashMap<String, List<String>> resultMap = new HashMap<>();
if (StrUtil.isEmpty(beginDateTime) || StrUtil.isEmpty(endDateTime)) {
throw new BadRequest("开始时间和结束时间不能为空");
}
if (StrUtil.isEmpty(stationCode)) {
List<String> stationNameList = new ArrayList<>();
List<String> alarmNumList = new ArrayList<>();
List<FireStationInfoDto> fireStationInfoList = this.baseMapper.queryStationAlarmListByCode(stationCode);
List<AlarmCountVO> alarmCountVOS = this.baseMapper.queryAllAlarmCountByCode(beginDateTime, endDateTime);
Map<String, AlarmCountVO> collect = alarmCountVOS.stream().collect(Collectors.toMap(AlarmCountVO::getStationCode, t -> t));
fireStationInfoList.forEach(item -> {
if (collect.containsKey(item.getCode())) {
item.setAlarmNum(collect.get(item.getCode()).getAlarmNum());
}
stationNameList.add(item.getName());
alarmNumList.add(String.valueOf(item.getAlarmNum()));
});
resultMap.put("stationNames", stationNameList);
resultMap.put("alarmNums", alarmNumList);
} else {
List<String> dateList = new ArrayList<>();
List<String> alarmNumList = new ArrayList<>();
List<DateAlarmCountVO> alarmNumByDateTimePeriodByStationCode = this.baseMapper.getAlarmNumByDateTimePeriodByStationCode(stationCode, beginDateTime, endDateTime);
alarmNumByDateTimePeriodByStationCode.forEach(item -> {
dateList.add(item.getDate());
alarmNumList.add(item.getAlarmNums());
});
resultMap.put("date", dateList);
resultMap.put("alarmNum", alarmNumList);
}
return resultMap;
}
public Map<String, List<String>> getAlarmTrendByDatePeriod(String stationCode, String beginDate, String endDate) {
HashMap<String, List<String>> resultMap = new HashMap<>();
List<String> dateList = new ArrayList<>();
List<String> alarmNumList = new ArrayList<>();
List<DateAlarmCountVO> alarmTrendByDatePeriod = this.baseMapper.getAlarmTrendByDatePeriod(stationCode, beginDate, endDate);
alarmTrendByDatePeriod.forEach(item -> {
dateList.add(item.getDate());
alarmNumList.add(item.getAlarmNums());
});
resultMap.put("date", dateList);
resultMap.put("alarmNum", alarmNumList);
return resultMap;
}
} }
\ No newline at end of file
package com.yeejoin.amos.boot.module.ccs.biz.service.impl; package com.yeejoin.amos.boot.module.ccs.biz.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONArray; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.github.xiaoymin.knife4j.core.util.StrUtil; import com.yeejoin.amos.boot.module.ccs.api.dto.FireStationInfoDto;
import com.yeejoin.amos.boot.module.ccs.api.entity.FireEquipmentSignalLog; import com.yeejoin.amos.boot.module.ccs.api.entity.FireEquipmentSignalLog;
import com.yeejoin.amos.boot.module.ccs.api.service.IFireStationInfoService;
import com.yeejoin.amos.boot.module.ccs.api.service.MqttReceiveService; import com.yeejoin.amos.boot.module.ccs.api.service.MqttReceiveService;
import com.yeejoin.amos.boot.module.ccs.api.vo.AlarmEventLogVO;
import com.yeejoin.amos.boot.module.ccs.api.vo.QuestionVO;
import com.yeejoin.amos.boot.module.ccs.api.vo.RawDataVO;
import com.yeejoin.amos.boot.module.ccs.api.vo.ReceiveDataVO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest; import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
@Slf4j @Slf4j
@Service @Service
public class MqttReceiveServiceImpl implements MqttReceiveService { public class MqttReceiveServiceImpl implements MqttReceiveService {
private static Boolean bool = Boolean.FALSE; private static Boolean bool = Boolean.FALSE;
@Autowired @Autowired
private FireEquipmentSignalLogServiceImpl fireEquipmentSignalLogServiceImpl; private FireEquipmentSignalLogServiceImpl fireEquipmentSignalLogServiceImpl;
@Autowired
//TODO 逻辑待补充 private IFireStationInfoService fireStationInfoService;
@Override
public void handlerMqttIncrementMessage(String topic, String message) {
List<Map<String, String>> list = new ArrayList<>(); //TODO 逻辑待补充
try { @Override
list = (List<Map<String, String>>) JSONArray.parseObject(message, List.class); public void handlerMqttAlarmMessage(String topic, String message) {
// 将JSON字符串转换成实体类型 Date now = DateUtil.date();
// List<FireEquipmentSignalLog> log = JSONUtil.toBean(message, FireEquipmentSignalLog.class); ReceiveDataVO receiveData = new ReceiveDataVO();
} catch (Exception e) { try {
log.error("解析失败"); // 将JSON字符串转换成实体类型
throw new BadRequest("解析失败"); receiveData = JSONUtil.toBean(message, ReceiveDataVO.class);
} } catch (Exception e) {
if (CollectionUtils.isNotEmpty(list)) { log.error("接受消息解析失败,{}", e.getMessage());
List<FireEquipmentSignalLog> doList = new ArrayList<>(); throw new BadRequest("接受消息解析失败");
for (Map<String, String> stringStringMap : list) { }
FireEquipmentSignalLog fireEquipmentSignalLog = new FireEquipmentSignalLog(); if (ObjectUtil.isNotEmpty(receiveData) && StrUtil.isNotEmpty(receiveData.getActive()) &&
if (stringStringMap.containsKey("objcect_type") && StrUtil.isNotBlank(stringStringMap.get("objcect_type"))) { "insert".equals(receiveData.getActive()) && ObjectUtil.isNotEmpty(receiveData.getAlarmEventLog())) {
if (!stringStringMap.get("objcect_type").equals("EQUIP")) { AlarmEventLogVO alarmEventLog = receiveData.getAlarmEventLog();
continue;
} if (StrUtil.isNotEmpty(alarmEventLog.getObjcectType()) && "equip".equals(alarmEventLog.getObjcectType()) &&
} StrUtil.isNotEmpty(alarmEventLog.getObjcectIndexType()) && "fireAlarm".equals(alarmEventLog.getObjcectIndexType())) {
//当为告警时新增数据 FireEquipmentSignalLog fireEquipmentSignalLog = new FireEquipmentSignalLog();
doList.add(fireEquipmentSignalLog); fireEquipmentSignalLog.setStationName(alarmEventLog.getBizOrgName());
//当为消除告警时修改原有数据 (根据设备编码、) fireEquipmentSignalLog.setStationCode(alarmEventLog.getOrgCode());
} fireEquipmentSignalLog.setFireEquipmentMrid(alarmEventLog.getObjcectCode());
if (CollectionUtils.isNotEmpty(doList)) { fireEquipmentSignalLog.setFireEquipmentName(alarmEventLog.getObjcectName());
fireEquipmentSignalLogServiceImpl.saveBatchLog(doList); fireEquipmentSignalLog.setFireEquipmentIndexName(alarmEventLog.getObjcectIndexName());
} fireEquipmentSignalLog.setFireEquipmentIndexKey(alarmEventLog.getObjcectIndexKey());
} fireEquipmentSignalLog.setFireBuildingMrid(alarmEventLog.getBuildingCode());
log.info(String.format("收到mqtt消息:%s", message)); fireEquipmentSignalLog.setSignalType(alarmEventLog.getObjcectIndexType());
} fireEquipmentSignalLog.setSignalTypeName("火灾告警");
fireEquipmentSignalLog.setAlarmReason(alarmEventLog.getQuestionReason());
fireEquipmentSignalLog.setConfirmState("0");
fireEquipmentSignalLog.setConfirmDate(DateUtil.parse(alarmEventLog.getAlarmTime()));
fireEquipmentSignalLog.setSystemMrids(alarmEventLog.getSystemCode());
fireEquipmentSignalLog.setSystemNames(alarmEventLog.getSystemName());
fireEquipmentSignalLog.setProtectedObjectMrid(alarmEventLog.getProtectedObjectCode());
fireEquipmentSignalLog.setProtectedObjectName(alarmEventLog.getProtectedObjectName());
fireEquipmentSignalLog.setIsAlarm("1".equals(alarmEventLog.getRecoveryStatus()));
fireEquipmentSignalLog.setCreateDate(now);
fireEquipmentSignalLog.setSignalReportDate(DateUtil.today());
fireEquipmentSignalLog.setLocation(alarmEventLog.getBuildingName());
fireEquipmentSignalLog.setSynDate(now);
FireStationInfoDto oneByCode = fireStationInfoService.getOneByCode(fireEquipmentSignalLog.getStationCode());
fireEquipmentSignalLog.setLng(oneByCode.getLng());
fireEquipmentSignalLog.setLat(oneByCode.getLat());
fireEquipmentSignalLogServiceImpl.save(fireEquipmentSignalLog);
}
} else if (ObjectUtil.isNotEmpty(receiveData) && StrUtil.isNotEmpty(receiveData.getActive()) &&
"update".equals(receiveData.getActive()) && ObjectUtil.isNotEmpty(receiveData.getRawData()) && StrUtil.isNotEmpty(receiveData.getRawData().getEquipmentSpecificIotCode())) {
RawDataVO rawData = receiveData.getRawData();
FireEquipmentSignalLog fireEquipmentSignalLog = new FireEquipmentSignalLog();
fireEquipmentSignalLog.setIsAlarm(false);
UpdateWrapper<FireEquipmentSignalLog> updateWrapper = new UpdateWrapper<>();
updateWrapper.lambda().eq(FireEquipmentSignalLog::getFireEquipmentMrid, rawData.getEquipmentSpecificCode())
.eq(FireEquipmentSignalLog::getFireEquipmentIndexKey, rawData.getEquipmentIndexKey());
fireEquipmentSignalLogServiceImpl.update(fireEquipmentSignalLog, updateWrapper);
}
log.info(String.format("收到mqtt(警情)消息并处理完成:%s", message));
}
@Override
public void handlerMqttQuestionMessage(String topic, String message) {
Date now = DateUtil.date();
QuestionVO questionVO = new QuestionVO();
try {
// 将JSON字符串转换成实体类型
questionVO = JSONUtil.toBean(message, QuestionVO.class);
} catch (Exception e) {
log.error("接受消息解析失败,{}", e.getMessage());
throw new BadRequest("接受消息解析失败");
}
if (ObjectUtil.isNotEmpty(questionVO) && CollUtil.isNotEmpty(questionVO.getAlarmEventLog())) {
questionVO.getAlarmEventLog().forEach(item -> {
FireEquipmentSignalLog fireEquipmentSignalLog = new FireEquipmentSignalLog();
fireEquipmentSignalLog.setConfirmState(item.getStatus());
UpdateWrapper<FireEquipmentSignalLog> updateWrapper = new UpdateWrapper<>();
updateWrapper.lambda().eq(FireEquipmentSignalLog::getSignalId, item.getSignalId());
fireEquipmentSignalLogServiceImpl.update(fireEquipmentSignalLog, updateWrapper);
});
}
log.info(String.format("收到mqtt(问题下发消息推送)消息并处理完成:%s", message));
}
} }
...@@ -20,5 +20,6 @@ emqx.password=public ...@@ -20,5 +20,6 @@ emqx.password=public
#mqtt.scene.host=mqtt://172.16.10.201:18083/mqtt #mqtt.scene.host=mqtt://172.16.10.201:18083/mqtt
#mqtt.client.product.id=mqtt #mqtt.client.product.id=mqtt
mqtt.topic=topic_mqtt mqtt.topic.alarm=idx/eventlog
mqtt.topic.question=idx/eventlog/question
#spring.mqtt.completionTimeout=3000 #spring.mqtt.completionTimeout=3000
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment