Commit d75ae272 authored by 刘林's avatar 刘林

Merge remote-tracking branch 'origin/develop_dl' into develop_dl

parents 205c2a31 5eacc9be
...@@ -52,6 +52,13 @@ ...@@ -52,6 +52,13 @@
</exclusion> </exclusion>
</exclusions> </exclusions>
</dependency> </dependency>
<!--kafka依赖-->
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
<dependency> <dependency>
<groupId>org.typroject</groupId> <groupId>org.typroject</groupId>
<artifactId>tyboot-component-emq</artifactId> <artifactId>tyboot-component-emq</artifactId>
......
...@@ -39,7 +39,7 @@ import java.net.InetAddress; ...@@ -39,7 +39,7 @@ import java.net.InetAddress;
@EnableEurekaClient @EnableEurekaClient
@EnableScheduling @EnableScheduling
@MapperScan(value = { "org.typroject.tyboot.*.*.face.orm.dao", "com.yeejoin.amos.api.*.face.orm.dao", "org.typroject.tyboot.face.*.orm.dao*", @MapperScan(value = { "org.typroject.tyboot.*.*.face.orm.dao", "com.yeejoin.amos.api.*.face.orm.dao", "org.typroject.tyboot.face.*.orm.dao*",
"com.yeejoin.amos.boot.biz.common.dao.mapper" }) "com.yeejoin.amos.api.*.mapper","com.yeejoin.amos.boot.biz.common.dao.mapper" })
@ComponentScan({ "org.typroject", "com.yeejoin.amos" }) @ComponentScan({ "org.typroject", "com.yeejoin.amos" })
public class AlarmApplication { public class AlarmApplication {
......
package com.yeejoin.amos.api.alarm.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
@Slf4j
@Configuration
@EnableAsync
public class EquipExecutorConfig {
@Bean(name = "equipAsyncExecutor")
public Executor asyncServiceExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
//配置核心线程数
executor.setCorePoolSize(10);
//配置最大线程数
executor.setMaxPoolSize(500);
//配置队列大小
executor.setQueueCapacity(2000);
//配置线程池中的线程的名称前缀
executor.setThreadNamePrefix("namePrefix");
//线程池维护线程所允许的空闲时间
executor.setKeepAliveSeconds(30);
// rejection-policy:当pool已经达到max size的时候,如何处理新任务
// CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行--拒绝策略
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
//执行初始化
executor.initialize();
//等待所有任务结束后再关闭线程池
executor.setWaitForTasksToCompleteOnShutdown(true);
return executor;
}
}
//package com.yeejoin.amos.api.alarm.config;
//
//import org.apache.kafka.clients.admin.AdminClient;
//import org.apache.kafka.clients.admin.AdminClientConfig;
//import org.apache.kafka.clients.admin.NewTopic;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.kafka.core.KafkaAdmin;
//
//import java.util.HashMap;
//import java.util.Map;
//
//import static org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers.md5;
//
//@Configuration
//public class KafkaInitialConfiguration {
//
//
//
//
// /***
// * 创建top 10个分区1个副本
// * 通过bean创建(bean的名字为initialTopic)
// * @return
// */
//
// @Bean
// public NewTopic initialTopic1() {
//
// return new NewTopic("jf1",3, (short) 1 );
// }
//
//
// @Bean
// public KafkaAdmin kafkaAdmin() {
// Map<String, Object> props = new HashMap<>();
// //配置Kafka实例的连接地址
// props.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "121.199.39.218:9092");
// KafkaAdmin admin = new KafkaAdmin(props);
// return admin;
// }
//
// @Bean
// public AdminClient adminClient() {
// return AdminClient.create(kafkaAdmin().getConfig());
// }
//
//
//
//}
package com.yeejoin.amos.api.alarm.dto;
import lombok.Data;
import java.util.List;
/**
* @description:
* @author: tw
* @createDate: 2023/6/19
*/
@Data
public class BizInfo {
private String sourceAttributionDesc;
private String sourceAttribution;
private List<DynamicDetails> dynamicDetails;
private String warningObjectCode;
private String warningTime;
private String warningObjectName;
public BizInfo(String sourceAttributionDesc,
String sourceAttribution,
List<DynamicDetails> dynamicDetails,
String warningObjectCode,
String warningTime,
String warningObjectName) {
this.sourceAttributionDesc = sourceAttributionDesc;
this.sourceAttribution = sourceAttribution;
this.dynamicDetails = dynamicDetails;
this.warningObjectCode = warningObjectCode;
this.warningTime = warningTime;
this.warningObjectName = warningObjectName;
}
}
package com.yeejoin.amos.api.alarm.dto;
import lombok.Data;
import java.util.List;
/**
* @description:
* @author: tw
* @createDate: 2023/6/19
*/
@Data
public class DynamicDetails {
private String tabName;
private List<TabContent> tabContent;
public DynamicDetails(String tabName, List<TabContent> tabContent) {
this.tabName = tabName;
this.tabContent = tabContent;
}
}
package com.yeejoin.amos.api.alarm.dto;
import lombok.Data;
/**
* @description:
* @author: tw
* @createDate: 2023/6/19
*/
@Data
public class TabContent {
private String label;
private String type;
private Object value;
private String key;
public TabContent(String label, String type, Object value, String key) {
this.label = label;
this.type = type;
this.value = value;
this.key = key;
}
}
package com.yeejoin.amos.api.alarm.dto;
import lombok.Data;
import java.util.List;
/**
* @description:
* @author: tw
* @createDate: 2023/6/19
*/
@Data
public class WarningDto {
private BizInfo bizInfo;
private String indexKey;
private String indexValue;
private String traceId;
public WarningDto( String indexKey, String indexValue, String traceId,
String sourceAttributionDesc,
String sourceAttribution,
List<DynamicDetails> dynamicDetails,
String warningObjectCode,
String warningTime,
String warningObjectName
) {
this.bizInfo = new BizInfo( sourceAttributionDesc, sourceAttribution, dynamicDetails, warningObjectCode, warningTime, warningObjectName);
this.indexKey = indexKey;
this.indexValue = indexValue;
this.traceId = traceId;
}
}
package com.yeejoin.amos.api.alarm.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
* @description: 公共实体
* @author: duanwei
**/
@Data
@Accessors(chain = true)
public class BaseEntity implements Serializable {
private static final long serialVersionUID = -5464322936854328207L;
@TableId(type = IdType.ID_WORKER)
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
/**
* 新增和更新执行
*/
@TableField(value = "create_date", fill = FieldFill.INSERT)
private Date createDate;
}
package com.yeejoin.amos.api.alarm.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @description:
* @author: tw
* @createDate: 2023/6/19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("dz_point_system")
@ApiModel(value="PointSystem对象", description="")
public class PointSystem extends BaseEntity {
@ApiModelProperty(value = "场站")
@TableField("station")
private String station;
@ApiModelProperty(value = "二维码")
@TableField("number")
private String number;
@ApiModelProperty(value = "类型")
@TableField("type")
private String type;
@ApiModelProperty(value = "'地址'")
@TableField("address")
private String address;
@ApiModelProperty(value = "测点类型")
@TableField("point_type")
private String pointType;
@ApiModelProperty(value = "测点值")
@TableField("value")
private String value;
@ApiModelProperty(value = "功能码")
@TableField("function_num")
private String functionNum;
@ApiModelProperty(value = "kks码")
@TableField("kks")
private String kks;
@ApiModelProperty(value = "網管地址")
@TableField("gateway_id")
private String gatewayId;
}
package com.yeejoin.amos.api.alarm.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.api.alarm.entity.PointSystem;
/**
* @description:
* @author: tw
* @createDate: 2023/6/19
*/
public interface PointSystemMapper extends BaseMapper<PointSystem> {
//推送预警
public void sendWarning();
}
package com.yeejoin.amos.api.alarm.service;
/**
* @description:
* @author: tw
* @createDate: 2023/6/19
*/
public interface IPointSystemService {
//触发风险预警
public void sendWarning(String address, String value,String valueLabe,String gatewayId);
}
package com.yeejoin.amos.api.alarm.service.impl;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.kafka.annotation.TopicPartition;
import org.springframework.kafka.support.Acknowledgment;
import org.springframework.stereotype.Service;
/**
* @description: 监听设备告警信息
* @author: tw
* @createDate: 2023/6/27
*/
@Service
public class AlarmKafkaConsumer {
@Autowired
PointSystemServiceImpl pointSystemServiceImpl;
//消费者来处理消息
@KafkaListener(id="user1" , topics ={"${kafka.equipment.alarm}"})
public void message1( String record, Acknowledgment ack){
// 处理业务
String date=record;
//异步触发预警
pointSystemServiceImpl.sendWarningAsync(date);
//手动提交
ack.acknowledge();
}
// public void message1( ConsumerRecord<?, ?> record, Acknowledgment ack){
// // 消费的哪个topic、partition的消息,打印出消息内容
//
// StringBuffer sb = new StringBuffer();
// // 主题
// sb.append(record.topic() + "-");
// // 分区
// sb.append(record.partition() + "-");
// // 需要消费的值
// sb.append(record.value() + "-");
// // 位移
// sb.append(record.offset());
//
// System.out.println( "消费者进行消费:"+ sb);
// ack.acknowledge();
//
// }
// // 简单消费者,groupId可以任意起
// @KafkaListener(id = "Consumer0", groupId = "jf0-group", topics = "jf1", topicPartitions = {
// @TopicPartition(topic = "jf1", partitions = {"0"}),
// }, containerFactory = "kafkaListenerContainerFactory")
// public void consumer0(ConsumerRecord<String, String> records, Acknowledgment ack) {
// this.message1(records,ack);
// }
//
// @KafkaListener(id = "Consumer1", groupId = "jf1-group", topics = "jf1", topicPartitions = {
// @TopicPartition(topic = "jf1", partitions = {"1"}),
// }, containerFactory = "kafkaListenerContainerFactory")
// public void consumer1(ConsumerRecord<String, String> records, Acknowledgment ack) {
// this.message1(records,ack);
// }
//
// @KafkaListener(id = "Consumer2", groupId = "jf2-group", topics = "jf1", topicPartitions = {
// @TopicPartition(topic = "jf1", partitions = {"2"}),
// }, containerFactory = "kafkaListenerContainerFactory")
// public void consumer3(ConsumerRecord<String, String> records, Acknowledgment ack) {
// this.message1(records,ack);
// }
}
package com.yeejoin.amos.api.alarm.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yeejoin.amos.api.alarm.dto.DynamicDetails;
import com.yeejoin.amos.api.alarm.dto.TabContent;
import com.yeejoin.amos.api.alarm.dto.WarningDto;
import com.yeejoin.amos.api.alarm.entity.PointSystem;
import com.yeejoin.amos.api.alarm.mapper.PointSystemMapper;
import com.yeejoin.amos.api.alarm.service.IPointSystemService;
import com.yeejoin.amos.api.alarm.utils.HttpContentTypeUtil;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.typroject.tyboot.component.emq.EmqKeeper;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* @description:
* @author: tw
* @createDate: 2023/6/19
*/
@Service
public class PointSystemServiceImpl extends ServiceImpl<PointSystemMapper, PointSystem> implements IPointSystemService {
private static final Logger logger = LogManager.getLogger(PointSystemServiceImpl.class);
@Autowired
PointSystemMapper pointSystemMapper;
@Value("${power.station.url}")
private String powerStationUrl;
private final String TABNAME="预警问题";
private final String TEXT= "text";
@Value("${power.station.warning:104/data/analysis}")
private String STATIONWARNING;
@Autowired
protected EmqKeeper emqKeeper;
@Async("equipAsyncExecutor")
public void sendWarningAsync( String date){
try {
logger.info("收到告警信息"+date);
com.alibaba.fastjson.JSONObject messageObj = JSON.parseObject(date);
String address= messageObj.get("address").toString();
String value= messageObj.get("value").toString();
String valueLabe=messageObj.get("valueLabel").toString();
String gatewayId=messageObj.get("gatewayId").toString();
this.sendWarning(address, value, valueLabe,gatewayId);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void sendWarning(String address, String value,String valueLabe,String gatewayId) {
try {
//通过测点地址获取,和对应值 获取kks
QueryWrapper<PointSystem> pointSystemWrapper = new QueryWrapper<>();
pointSystemWrapper.lambda().eq(PointSystem::getAddress, address);
pointSystemWrapper.lambda().eq(PointSystem::getValue, value);
pointSystemWrapper.lambda().eq(PointSystem::getGatewayId, gatewayId);
PointSystem pointSystem = pointSystemMapper.selectOne(pointSystemWrapper);
if (pointSystem == null) {
throw new RuntimeException("获取kks码失败!");
}
//调用获取设备相关信息
Map<String, String> maps = new HashMap<>();
maps.put("type", "equipinfo");
maps.put("kksbm", pointSystem.getKks());
String data = HttpContentTypeUtil.sendHttpPost(powerStationUrl, maps);
if (StringUtils.isEmpty(data) || !(Boolean) JSON.parseObject(data).get("success")) {
throw new RuntimeException("获取设备信息失败!");
}
JSONObject json = JSON.parseObject(data);
JSONObject jsond = (JSONObject) json.get("dataset");
JSONArray list = (JSONArray) jsond.get("datas");
JSONObject eqdata = null;
if (list == null || list.isEmpty()) {
throw new RuntimeException("获取设备信息失败!");
}
eqdata = (JSONObject) list.get(0);
//组装数据,发送预警
WarningDto warningDto = setWarningDto(pointSystem, eqdata, valueLabe);
emqKeeper.getMqttClient().publish(STATIONWARNING, JSON.toJSONString(warningDto).getBytes(), 0, false);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("预警消息发送失败!");
}
}
public WarningDto setWarningDto(PointSystem pointSystem,JSONObject eqdata,String valueLabe ){
SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time= sdf.format(new Date());
String warningObjectCode=pointSystem.getKks();
List<TabContent> tabContent=new ArrayList<>();
tabContent.add(new TabContent( "KKS编码", TEXT, warningObjectCode, "key1"));
tabContent.add(new TabContent( "设备名称", TEXT, eqdata.get("kksms"), "key2"));
tabContent.add(new TabContent( "告警原因", TEXT, valueLabe, "key3"));
tabContent.add(new TabContent( "发生时间", TEXT, time, "key4"));
DynamicDetails dynamicDetails=new DynamicDetails( TABNAME, tabContent);
List<DynamicDetails> dynamicDetailsList=new ArrayList<>();
dynamicDetailsList.add(dynamicDetails);
StringBuilder indexKey=new StringBuilder(pointSystem.getStation())
.append("#")
.append(pointSystem.getNumber())
.append("#")
.append(pointSystem.getFunctionNum());
String indexValue=valueLabe;
WarningDto WarningDto=new WarningDto(
indexKey.toString(),
indexValue,
null,
(String)eqdata.get("sourceAttributionDesc"),
(String)eqdata.get("sourceAttribution"),
dynamicDetailsList,
warningObjectCode,
time ,
(String)eqdata.get("kksms")
);
return WarningDto;
}
}
//package com.yeejoin.amos.api.alarm.service.impl;
//
//import com.alibaba.fastjson.JSON;
//import org.apache.kafka.clients.admin.NewTopic;
//import org.apache.kafka.clients.producer.ProducerRecord;
//import org.checkerframework.checker.units.qual.K;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.kafka.core.KafkaTemplate;
//import org.springframework.kafka.support.SendResult;
//import org.springframework.scheduling.annotation.Scheduled;
//import org.springframework.stereotype.Service;
//import org.springframework.util.concurrent.ListenableFuture;
//import org.springframework.util.concurrent.ListenableFutureCallback;
//
//import javax.annotation.PostConstruct;
//import javax.annotation.Resource;
//
///**
// * @description:
// * @author: tw
// * @createDate: 2023/6/28
// */
//@Service
//public class producerServers {
//
//
// @Autowired
// private KafkaTemplate<String, String> kafkaTemplate;
//
//@Scheduled(fixedRate = 60000)
// public void send(){
// String gg1="1668801435891929089@18873";
// String gg2="1668801435891929089@18874";
// String gg3="1668801435891929089@18875";
// String gg4="1668801435891929089@18876";
// String gg5="1668801435891929089@18877";
// String gg6="1668801435891929089@18878";
// String gg7="1668801435891929089@18879";
// String gg8="1668801435891929089@18880";
//
//
// String topic="jf1";
//
// ProducerRecord<String, String> producerRecord1 = new ProducerRecord<String, String>( topic, gg1.hashCode()%3, gg1.hashCode()%3+"", gg1+"==============="+gg1.hashCode()%5);
// ProducerRecord<String, String> producerRecord2 = new ProducerRecord<String, String>( topic, gg2.hashCode()%3,gg2.hashCode()%3+"", gg2+"==============="+gg2.hashCode()%5);
// ProducerRecord<String, String> producerRecord3 = new ProducerRecord<String, String>( topic, gg3.hashCode()%3,gg3.hashCode()%3+"", gg3+"==============="+gg3.hashCode()%5);
// ProducerRecord<String, String> producerRecord4 = new ProducerRecord<String, String>( topic, gg4.hashCode()%3,gg4.hashCode()%3+"", gg4+"==============="+gg4.hashCode()%5);
// ProducerRecord<String, String> producerRecord5 = new ProducerRecord<String, String>( topic, gg5.hashCode()%3,gg5.hashCode()%3+"", gg5+"==============="+gg5.hashCode()%5);
// ProducerRecord<String, String> producerRecord6 = new ProducerRecord<String, String>( topic, gg6.hashCode()%3,gg6.hashCode()%3+"", gg6+"==============="+gg6.hashCode()%5);
// ProducerRecord<String, String> producerRecord7 = new ProducerRecord<String, String>( topic, gg7.hashCode()%3,gg7.hashCode()%3+"", gg7+"==============="+gg7.hashCode()%5);
// ProducerRecord<String, String> producerRecord8 = new ProducerRecord<String, String>( topic, gg8.hashCode()%3,gg8.hashCode()%3+"", gg8+"==============="+gg8.hashCode()%5);
//
// System.out.println(gg1.hashCode()%3);
// System.out.println(gg2.hashCode()%3);
// System.out.println(gg3.hashCode()%3);
// System.out.println(gg4.hashCode()%3);
// System.out.println(gg5.hashCode()%3);
// System.out.println(gg6.hashCode()%3);
// System.out.println(gg7.hashCode()%3);
// System.out.println(gg8.hashCode()%3);
//
// kafkaTemplate.send(producerRecord1);
// kafkaTemplate.send(producerRecord2);
// kafkaTemplate.send(producerRecord3);
// kafkaTemplate.send(producerRecord4);
// kafkaTemplate.send(producerRecord5);
// kafkaTemplate.send(producerRecord6);
// kafkaTemplate.send(producerRecord7);
// kafkaTemplate.send(producerRecord8);
//
//
//
//
// }
//
//
//
//
//
//}
package com.yeejoin.amos.api.alarm.utils;
import com.alibaba.fastjson.JSON;
import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.*;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Iterator;
import java.util.Map;
public class HttpContentTypeUtil {
private static final Logger log = LoggerFactory.getLogger(HttpContentTypeUtil.class);
// utf-8字符编码
private static final String CHARSET_UTF_8 = "utf-8";
// HTTP内容类型。
private static final String CONTENT_TYPE_TEXT_HTML = "text/xml";
// HTTP内容类型。相当于form表单的形式,提交数据
private static final String CONTENT_TYPE_FORM_URL = "application/x-www-form-urlencoded";
// HTTP内容类型。相当于form表单的形式,提交数据
private static final String CONTENT_TYPE_JSON_URL = "application/json;charset=utf-8";
// 连接管理器
private static PoolingHttpClientConnectionManager pool;
// 请求配置
private static RequestConfig requestConfig;
static {
try {
//System.out.println("初始化HttpClientTest~~~开始");
SSLContextBuilder builder = new SSLContextBuilder();
builder.loadTrustMaterial(null, new TrustSelfSignedStrategy());
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
builder.build());
// 配置同时支持 HTTP 和 HTPPS
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create().register(
"http", PlainConnectionSocketFactory.getSocketFactory()).register(
"https", sslsf).build();
// 初始化连接管理器
pool = new PoolingHttpClientConnectionManager(
socketFactoryRegistry);
// 将最大连接数增加到200,实际项目最好从配置文件中读取这个值
pool.setMaxTotal(200);
// 设置最大路由
pool.setDefaultMaxPerRoute(2);
// 根据默认超时限制初始化requestConfig
int socketTimeout = 10000;
int connectTimeout = 10000;
int connectionRequestTimeout = 10000;
requestConfig = RequestConfig.custom().setConnectionRequestTimeout(
connectionRequestTimeout).setSocketTimeout(socketTimeout).setConnectTimeout(
connectTimeout).build();
//System.out.println("初始化HttpClientTest~~~结束");
} catch (Exception e) {
e.printStackTrace();
}
// 设置请求超时时间
requestConfig = RequestConfig.custom().setSocketTimeout(50000).setConnectTimeout(50000)
.setConnectionRequestTimeout(50000).build();
}
private static CloseableHttpClient getHttpClient() {
return HttpClients.custom()
// 设置连接池管理
.setConnectionManager(pool)
// 设置请求配置
.setDefaultRequestConfig(requestConfig)
// 设置重试次数
.setRetryHandler(new DefaultHttpRequestRetryHandler(0, false))
.build();
}
/**
* 发送Post请求
*/
private static String sendHttpPost(HttpPost httpPost) {
CloseableHttpClient httpClient = null;
CloseableHttpResponse response = null;
// 响应内容
String responseContent = null;
try {
// 创建默认的httpClient实例.
httpClient = getHttpClient();
// 配置请求信息
httpPost.setConfig(requestConfig);
// 执行请求
response = httpClient.execute(httpPost);
// 得到响应实例
HttpEntity entity = response.getEntity();
log.info("==========response=============" + JSON.toJSONString(response));
// 可以获得响应头
// Header[] headers = response.getHeaders(HttpHeaders.CONTENT_TYPE);
// for (Header header : headers) {
// System.out.println(header.getName());
// }
// 得到响应类型
// System.out.println(ContentType.getOrDefault(response.getEntity()).getMimeType());
// 判断响应状态
if (response.getStatusLine().getStatusCode() >= 300) {
throw new Exception(
"HTTP Request is not success, Response code is " + response.getStatusLine().getStatusCode());
}
if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode() || HttpStatus.SC_CREATED == response.getStatusLine().getStatusCode()) {
responseContent = EntityUtils.toString(entity, CHARSET_UTF_8);
EntityUtils.consume(entity);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
// 释放资源
if (response != null) {
response.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return responseContent;
}
/**
* 发送Post请求
*
* @param httpPut
* @return
*/
private static String sendHttpPut(HttpPut httpPut) {
CloseableHttpClient httpClient = null;
CloseableHttpResponse response = null;
// 响应内容
String responseContent = null;
try {
// 创建默认的httpClient实例.
httpClient = getHttpClient();
// 配置请求信息
httpPut.setConfig(requestConfig);
// 执行请求
response = httpClient.execute(httpPut);
// 得到响应实例
HttpEntity entity = response.getEntity();
// 可以获得响应头
// Header[] headers = response.getHeaders(HttpHeaders.CONTENT_TYPE);
// for (Header header : headers) {
// System.out.println(header.getName());
// }
// 得到响应类型
// System.out.println(ContentType.getOrDefault(response.getEntity()).getMimeType());
// 判断响应状态
if (response.getStatusLine().getStatusCode() >= 300) {
throw new Exception(
"HTTP Request is not success, Response code is " + response.getStatusLine().getStatusCode());
}
if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode() || HttpStatus.SC_CREATED == response.getStatusLine().getStatusCode()) {
responseContent = EntityUtils.toString(entity, CHARSET_UTF_8);
EntityUtils.consume(entity);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
// 释放资源
if (response != null) {
response.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return responseContent;
}
/**
* 发送Post请求
*
* @param httpDelete
* @return
*/
private static String sendHttpDelete(HttpDelete httpDelete) {
CloseableHttpClient httpClient = null;
CloseableHttpResponse response = null;
// 响应内容
String responseContent = null;
try {
// 创建默认的httpClient实例.
httpClient = getHttpClient();
// 配置请求信息
httpDelete.setConfig(requestConfig);
// 执行请求
response = httpClient.execute(httpDelete);
// 得到响应实例
HttpEntity entity = response.getEntity();
// 可以获得响应头
// Header[] headers = response.getHeaders(HttpHeaders.CONTENT_TYPE);
// for (Header header : headers) {
// System.out.println(header.getName());
// }
// 得到响应类型
// System.out.println(ContentType.getOrDefault(response.getEntity()).getMimeType());
// 判断响应状态
if (response.getStatusLine().getStatusCode() >= 300) {
throw new Exception(
"HTTP Request is not success, Response code is " + response.getStatusLine().getStatusCode());
}
if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode() || HttpStatus.SC_CREATED == response.getStatusLine().getStatusCode()) {
responseContent = EntityUtils.toString(entity, CHARSET_UTF_8);
EntityUtils.consume(entity);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
// 释放资源
if (response != null) {
response.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return responseContent;
}
/**
* 发送Get请求
*
* @param httpGet
* @return
*/
private static String sendHttpGet(HttpGet httpGet) {
CloseableHttpClient httpClient = null;
CloseableHttpResponse response = null;
// 响应内容
String responseContent = null;
try {
// 创建默认的httpClient实例.
httpClient = getHttpClient();
// 配置请求信息
httpGet.setConfig(requestConfig);
// 执行请求
response = httpClient.execute(httpGet);
// 得到响应实例
HttpEntity entity = response.getEntity();
// 可以获得响应头
// Header[] headers = response.getHeaders(HttpHeaders.CONTENT_TYPE);
// for (Header header : headers) {
// System.out.println(header.getName());
// }
// 得到响应类型
// System.out.println(ContentType.getOrDefault(response.getEntity()).getMimeType());
// 判断响应状态
if (response.getStatusLine().getStatusCode() >= 300) {
throw new Exception(
"HTTP Request is not success, Response code is " + response.getStatusLine().getStatusCode());
}
if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) {
responseContent = EntityUtils.toString(entity, CHARSET_UTF_8);
EntityUtils.consume(entity);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
// 释放资源
if (response != null) {
response.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return responseContent;
}
/**
* 发送 post请求
*
* @param httpUrl 地址
*/
public static String sendHttpPost(String httpUrl) {
// 创建httpPost
HttpPost httpPost = new HttpPost(httpUrl);
return sendHttpPost(httpPost);
}
/**
* 发送 delete请求
*
* @param httpUrl 地址
*/
public static String sendHttpDelete(String httpUrl) {
// 创建httpPost
HttpDelete httpDelete = new HttpDelete(httpUrl);
return sendHttpDelete(httpDelete);
}
/**
* 发送 post请求
*
* @param httpUrl 地址
*/
public static String sendHttpPostWithHeader(String httpUrl, Map<String, String> headerMap) {
// 创建httpPost
HttpPost httpPost = new HttpPost(httpUrl);
for (Map.Entry<String, String> entry : headerMap.entrySet()) {
httpPost.setHeader(entry.getKey(), entry.getValue());
}
return sendHttpPost(httpPost);
}
/**
* 发送 get请求
*
* @param httpUrl
*/
public static String sendHttpGet(String httpUrl) {
// 创建get请求
HttpGet httpGet = new HttpGet(httpUrl);
return sendHttpGet(httpGet);
}
/**
* 发送 delete请求带请求头
*/
public static String sendHttpDeleteWithHeader(String httpUrl, Map<String, String> headerMap) {
// 创建get请求
HttpDelete httpDelete = new HttpDelete(httpUrl);
for (Map.Entry<String, String> entry : headerMap.entrySet()) {
httpDelete.setHeader(entry.getKey(), entry.getValue());
}
return sendHttpDelete(httpDelete);
}
/**
* 发送 get请求带请求头
*/
public static String sendHttpGetWithHeader(String httpUrl, Map<String, String> headerMap) {
// 创建get请求
HttpGet httpGet = new HttpGet(httpUrl);
for (Map.Entry<String, String> entry : headerMap.entrySet()) {
httpGet.setHeader(entry.getKey(), entry.getValue());
}
return sendHttpGet(httpGet);
}
/**
* 发送 delete请求带请求头
*/
public static String sendHttpDeleteJsonWithHeader(String httpUrl, String paramsJson, Map<String, String> headerMap) {
StringBuffer content = new StringBuffer();
try {
URL url = new URL(httpUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("DELETE");
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
for (Map.Entry<String, String> entry : headerMap.entrySet()) {
connection.setRequestProperty(entry.getKey(), entry.getValue());
}
PrintWriter printWriter = new PrintWriter(connection.getOutputStream());
printWriter.write(paramsJson);
printWriter.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
content.append(line);
}
br.close();
connection.disconnect();
} catch (Exception e) {
}
return content.toString();
}
/**
* 发送 post请求
*
* @param httpUrl 地址
* @param params 参数(格式:key1=value1&key2=value2)
*/
public static String sendHttpPost(String httpUrl, String params) {
HttpPost httpPost = new HttpPost(httpUrl);// 创建httpPost
try {
// 设置参数
if (params != null && params.trim().length() > 0) {
StringEntity stringEntity = new StringEntity(params, "UTF-8");
stringEntity.setContentType(CONTENT_TYPE_FORM_URL);
httpPost.setEntity(stringEntity);
}
} catch (Exception e) {
e.printStackTrace();
}
return sendHttpPost(httpPost);
}
/**
* 发送 post请求
*
* @param maps 参数
*/
public static String sendHttpPost(String httpUrl, Map<String, String> maps) {
String parem = convertStringParamter(maps);
return sendHttpPost(httpUrl, parem);
}
/**
* 发送 post请求 发送json数据
*
* @param httpUrl 地址
* @param paramsJson 参数(格式 json)
*/
public static String sendHttpPostJsonWithHeader(String httpUrl, String paramsJson, Map<String, String> headerMap) {
HttpPost httpPost = new HttpPost(httpUrl);// 创建httpPost
try {
for (Map.Entry<String, String> entry : headerMap.entrySet()) {
httpPost.setHeader(entry.getKey(), entry.getValue());
}
// 设置参数
if (paramsJson != null && paramsJson.trim().length() > 0) {
StringEntity stringEntity = new StringEntity(paramsJson, "UTF-8");
stringEntity.setContentType(CONTENT_TYPE_JSON_URL);
httpPost.setEntity(stringEntity);
}
} catch (Exception e) {
e.printStackTrace();
}
return sendHttpPost(httpPost);
}
/**
* 发送 put请求 发送json数据
*
* @param httpUrl 地址
* @param paramsJson 参数(格式 json)
*/
public static String sendHttpPutJsonWithHeader(String httpUrl, String paramsJson, Map<String, String> headerMap) {
HttpPut httpPost = new HttpPut(httpUrl);// 创建HttpPut
try {
for (Map.Entry<String, String> entry : headerMap.entrySet()) {
httpPost.setHeader(entry.getKey(), entry.getValue());
}
// 设置参数
if (paramsJson != null && paramsJson.trim().length() > 0) {
StringEntity stringEntity = new StringEntity(paramsJson, "UTF-8");
stringEntity.setContentType(CONTENT_TYPE_JSON_URL);
httpPost.setEntity(stringEntity);
}
} catch (Exception e) {
e.printStackTrace();
}
return sendHttpPut(httpPost);
}
/**
* 发送 post请求 发送json数据
*
* @param httpUrl 地址
* @param paramsJson 参数(格式 json)
*/
public static String sendHttpPostJson(String httpUrl, String paramsJson) {
HttpPost httpPost = new HttpPost(httpUrl);// 创建httpPost
try {
// 设置参数
if (paramsJson != null && paramsJson.trim().length() > 0) {
StringEntity stringEntity = new StringEntity(paramsJson, "UTF-8");
stringEntity.setContentType(CONTENT_TYPE_JSON_URL);
httpPost.setEntity(stringEntity);
}
} catch (Exception e) {
e.printStackTrace();
}
return sendHttpPost(httpPost);
}
/**
* 发送 post请求 发送xml数据
*
* @param httpUrl 地址
* @param paramsXml 参数(格式 Xml)
*/
public static String sendHttpPostXml(String httpUrl, String paramsXml) {
HttpPost httpPost = new HttpPost(httpUrl);// 创建httpPost
try {
// 设置参数
if (paramsXml != null && paramsXml.trim().length() > 0) {
StringEntity stringEntity = new StringEntity(paramsXml, "UTF-8");
stringEntity.setContentType(CONTENT_TYPE_TEXT_HTML);
httpPost.setEntity(stringEntity);
}
} catch (Exception e) {
e.printStackTrace();
}
return sendHttpPost(httpPost);
}
/**
* 将map集合的键值对转化成:key1=value1&key2=value2 的形式
*
* @param parameterMap 需要转化的键值对集合
* @return 字符串
*/
private static String convertStringParamter(Map parameterMap) {
StringBuffer parameterBuffer = new StringBuffer();
if (parameterMap != null) {
Iterator iterator = parameterMap.keySet().iterator();
String key = null;
String value = null;
while (iterator.hasNext()) {
key = (String) iterator.next();
if (parameterMap.get(key) != null) {
value = (String) parameterMap.get(key);
} else {
value = "";
}
parameterBuffer.append(key).append("=").append(value);
if (iterator.hasNext()) {
parameterBuffer.append("&");
}
}
}
return parameterBuffer.toString();
}
}
\ No newline at end of file
...@@ -11,3 +11,51 @@ redis.cache.failure.time=10800 ...@@ -11,3 +11,51 @@ redis.cache.failure.time=10800
# mybatis-plus # mybatis-plus
mybatis-plus.mapper-locations=classpath:mapper/*Mapper.xml mybatis-plus.mapper-locations=classpath:mapper/*Mapper.xml
#消费者所在组的名称
#消费者 的broker地址
spring.kafka.consumer.bootstrap-servers=121.199.39.218:9092
# 是否自动提交
spring.kafka.consumer.enable-auto-commit=false
#offset的消费位置
spring.kafka.consumer.auto-offset-reset=earliest
# 配置序列化
spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer
#手动提交方式
spring.kafka.listener.ack-mode=manual_immediate
#监听类型
spring.kafka.listener.type=single
# 并发
#spring.kafka.listener.concurrency=5
# 发生错误后,消息重发的次数。
spring.kafka.producer.retries=1
#配置kafak produce的broker地址
spring.kafka.producer.bootstrap-servers=121.199.39.218:9092
#默认批处理大小(以字节为单位)
spring.kafka.producer.batch-size=16384
#生产者可以用来缓冲等待发送到服务器的记录的内存总字节数
spring.kafka.producer.buffer-memory=33554432
# producer配置序列化
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
# kafka默认的String序列化器
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
kafka.equipment.alarm=EQUIPMENT_ALARM88
#电站对接第三方查询设备kks码
power.station.url=http://139.9.169.123:5024/prod-api/fdgl/process/DataInterface
#电站104采集预警
power.station.warning=104/data/analysis
\ No newline at end of file
...@@ -48,4 +48,8 @@ public class EquipQrcodeRecord extends BaseEntity { ...@@ -48,4 +48,8 @@ public class EquipQrcodeRecord extends BaseEntity {
@ApiModelProperty(value = "状态(0:绿码,1:黄码,2:红码)") @ApiModelProperty(value = "状态(0:绿码,1:黄码,2:红码)")
@TableField("system_code") @TableField("system_code")
private String systemCode; private String systemCode;
@ApiModelProperty(value = "状态(0:绿码,1:黄码,2:红码)")
@TableField("clean_reason")
private String cleanReason;
} }
package com.yeejoin.equipmanage.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.aspose.words.SaveOutputParameters;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.equipmanage.common.entity.EquipQrcodeRecord;
import com.yeejoin.equipmanage.common.enums.CheckStatusEnum;
import com.yeejoin.equipmanage.common.utils.CommonResponseUtil;
import com.yeejoin.equipmanage.fegin.IdxFeign;
import com.yeejoin.equipmanage.fegin.McbFeign;
import com.yeejoin.equipmanage.mapper.EquipQrcodeRecordMapper;
import com.yeejoin.equipmanage.mapper.EquipmentSpecificAlarmLogMapper;
import com.yeejoin.equipmanage.mapper.EquipmentSpecificMapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@RestController
@Api(tags = "设备信息卡Api")
@RequestMapping(value = "/equipInformationCard")
public class EquipInformationCardController {
@Autowired
EquipmentSpecificAlarmLogMapper equipmentSpecificAlarmLogMapper;
@Autowired
EquipmentSpecificMapper equipmentSpecificMapper;
@Autowired
EquipQrcodeRecordMapper equipQrcodeRecordMapper;
@Autowired
IdxFeign idxFeign;
@Autowired
McbFeign mcbFeign;
@RequestMapping(value = "/equipOrPatrol",method = RequestMethod.GET)
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "运维信息-设备告警/巡检", notes = "运维信息-设备告警/巡检")
public ResponseModel getEquipAlarmList(String equipmentId,String type) {
HashMap<String, Object> map = new HashMap<>();
List<Map<String, Object>> list = new ArrayList<>();
List<String> idList = new ArrayList<>();
if (type.equals("alarm")){
list = equipmentSpecificAlarmLogMapper.getEquipAlarmList(equipmentId);
idList = equipmentSpecificAlarmLogMapper.getEquipAlarmIdList(equipmentId);
} else if(type.equals("check")){
list = equipmentSpecificMapper.selectListByPatrolCheck(equipmentId);
list.stream().forEach(e->e.put("is_ok", CheckStatusEnum.getNameByCode(e.get("is_ok").toString())));
idList = equipmentSpecificMapper.selectIdsByPatrolCheck(equipmentId);
}
String ids = String.join(",", idList);
JSONObject obj= idxFeign.queryDefectByCodes(idList, ids);
List<JSONObject> jsonObjects = JSONArray.parseArray(JSON.toJSONString(obj.get("result")), JSONObject.class);
//缺陷对应记录 是否存在上报问题
if (!ValidationUtil.isEmpty(jsonObjects)){
list.forEach(e->{
jsonObjects.forEach(j->{
if (e.get("id").toString().equals(j.getString("checkId"))){
e.put("reportProblem",j.getString("defectDescribe"));
e.put("defectId", j.getString("id"));
e.put("defectStatus",j.getString("defectStatus").equals("0")?"未处理":"已处理");
}
});
});
}
map.put("data", list);
map.put("total", list.size());
return CommonResponseUtil.success(map);
}
@RequestMapping(value = "/mcb",method = RequestMethod.GET)
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "预警记录", notes = "预警记录")
public ResponseModel getMcbDataList(String equipmentId,int current,int size) {
JSONObject result = mcbFeign.list(current, size, equipmentId);
JSONObject jsonObject = result.getJSONObject("result");
List<JSONObject> records = JSONArray.parseArray(JSON.toJSONString(jsonObject.get("records")), JSONObject.class);
LambdaQueryWrapper<EquipQrcodeRecord> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(EquipQrcodeRecord::getEquipid,equipmentId);
List<EquipQrcodeRecord> qrList = equipQrcodeRecordMapper.selectList(wrapper);
records.forEach(record->{
qrList.forEach(q->{
if (q.getSourceId().equals(record.getString("traceId"))){
record.put("cleanStatus",q.getCleanTime() == null?"未消除":"已消除");
record.put("cleanTime",q.getCleanTime());
record.put("cleanReason",q.getCleanReason());
}
});
String cs = "";
JSONArray list = record.getJSONArray("rectificationProposal");
for (int i = 0; i < list.size(); i++) {
if (i != (list.size() - 1)){
cs += list.getJSONObject(i).getString("measuresDesc")+",";
} else {
cs += list.getJSONObject(i).getString("measuresDesc");
}
}
record.put("measure",cs);
});
HashMap<String, Object> map = new HashMap<>();
map.put("data", records);
map.put("total", jsonObject.get("total"));
return CommonResponseUtil.success(map);
}
}
...@@ -461,6 +461,9 @@ public class EquipmentSpecificController extends AbstractBaseController { ...@@ -461,6 +461,9 @@ public class EquipmentSpecificController extends AbstractBaseController {
one.isNull(EquipQrcodeRecord::getCleanTime); one.isNull(EquipQrcodeRecord::getCleanTime);
EquipQrcodeRecord equipQrcodeRecord = equipQrcodeRecordMapper.selectOne(one); EquipQrcodeRecord equipQrcodeRecord = equipQrcodeRecordMapper.selectOne(one);
equipQrcodeRecord.setCleanTime(new Date()); equipQrcodeRecord.setCleanTime(new Date());
if (equipQrcodeRecord.getSource().equals("patrol")){
equipQrcodeRecord.setCleanReason("设备再次巡查正常");
}
equipQrcodeRecordMapper.updateById(equipQrcodeRecord); equipQrcodeRecordMapper.updateById(equipQrcodeRecord);
if (equipQrcodeRecords.size() == 0) { //如果记录表中此装备无未消除的故障等 则恢复绿码 if (equipQrcodeRecords.size() == 0) { //如果记录表中此装备无未消除的故障等 则恢复绿码
......
package com.yeejoin.equipmanage.fegin;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import java.util.List;
/**
* @author DELL
*/
@FeignClient(name = "${mcb.feign.name}", path = "warning", configuration = {FeignConfiguration.class})
public interface McbFeign {
/***
* <pre>
* @Description: 根据告警id查询缺陷治理情况
* </pre>
*
* @MethodName:
* @Param:
* @Return: null
* @Throws
* @Author keyong
* @Date 2022/9/27 17:46
*/
@RequestMapping(value = "/warning-warning-info/page", method = RequestMethod.GET)
JSONObject list(@RequestParam(value = "current") int current,@RequestParam(value = "size") int size,@RequestParam(value = "objectId", required = false) String objectId);
}
...@@ -937,7 +937,8 @@ public class MqttReceiveServiceImpl implements MqttReceiveService { ...@@ -937,7 +937,8 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
equipmentSpecificAlarms.forEach(action -> { equipmentSpecificAlarms.forEach(action -> {
EquipmentSpecific specific = equipmentSpecificMapper.selectById(action.getEquipmentSpecificId()); EquipmentSpecific specific = equipmentSpecificMapper.selectById(action.getEquipmentSpecificId());
if (AlarmStatusEnum.BJ.getCode() == action.getStatus()) { if (AlarmStatusEnum.BJ.getCode() == action.getStatus()) {
alarmLogs.add(addEquipAlarmLogRecord(action)); EquipmentSpecificAlarmLog equipmentSpecificAlarmLog = addEquipAlarmLogRecord(action);
alarmLogs.add(equipmentSpecificAlarmLog);
if (ValidationUtil.isEmpty(action.getAlamContent())) { if (ValidationUtil.isEmpty(action.getAlamContent())) {
action.setAlamContent(action.getEquipmentSpecificName() + action.getEquipmentSpecificIndexName()); action.setAlamContent(action.getEquipmentSpecificName() + action.getEquipmentSpecificIndexName());
} }
...@@ -949,7 +950,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService { ...@@ -949,7 +950,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
equipQrcodeRecord.setSource("equip"); equipQrcodeRecord.setSource("equip");
equipQrcodeRecord.setAlarmTime(new Date()); equipQrcodeRecord.setAlarmTime(new Date());
equipQrcodeRecord.setStatus(EquipQrcodeColorEnum.RED.getCode()); equipQrcodeRecord.setStatus(EquipQrcodeColorEnum.RED.getCode());
equipQrcodeRecord.setSourceId(action.getId().toString()); equipQrcodeRecord.setSourceId(equipmentSpecificAlarmLog.getId().toString());
equipQrcodeRecord.setBizOrgCode(action.getBizOrgCode()); equipQrcodeRecord.setBizOrgCode(action.getBizOrgCode());
equipQrcodeRecord.setBizOrgName(action.getBizOrgName()); equipQrcodeRecord.setBizOrgName(action.getBizOrgName());
equipQrcodeRecord.setSystemCode(action.getSystemIds()); equipQrcodeRecord.setSystemCode(action.getSystemIds());
...@@ -965,6 +966,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService { ...@@ -965,6 +966,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
wrapper.eq(EquipQrcodeRecord::getSourceId, action.getId()); wrapper.eq(EquipQrcodeRecord::getSourceId, action.getId());
EquipQrcodeRecord equipQrcodeRecord = equipQrcodeRecordMapper.selectOne(wrapper); EquipQrcodeRecord equipQrcodeRecord = equipQrcodeRecordMapper.selectOne(wrapper);
equipQrcodeRecord.setCleanTime(new Date()); equipQrcodeRecord.setCleanTime(new Date());
equipQrcodeRecord.setCleanReason("设备上报复归信息");
equipQrcodeRecordMapper.updateById(equipQrcodeRecord); equipQrcodeRecordMapper.updateById(equipQrcodeRecord);
specific.setEquipStatus(EquipQrcodeColorEnum.GREEN.getCode()); specific.setEquipStatus(EquipQrcodeColorEnum.GREEN.getCode());
......
...@@ -937,6 +937,17 @@ ...@@ -937,6 +937,17 @@
</sql> </sql>
</changeSet> </changeSet>
<changeSet author="20230629" id="20230629-1">
<preConditions onFail="MARK_RAN">
<not>
<columnExists tableName="dz_point_system" columnName="gateway_id"/>
</not>
</preConditions>
<comment>新增属性字段 gateway_id</comment>
<sql>
alter table `dz_point_system` add column `gateway_id` varchar(50) COMMENT '网关标识ID';
</sql>
</changeSet>
......
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