Commit d75ae272 authored by 刘林's avatar 刘林

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

parents 205c2a31 5eacc9be
......@@ -52,6 +52,13 @@
</exclusion>
</exclusions>
</dependency>
<!--kafka依赖-->
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
<dependency>
<groupId>org.typroject</groupId>
<artifactId>tyboot-component-emq</artifactId>
......
......@@ -39,7 +39,7 @@ import java.net.InetAddress;
@EnableEurekaClient
@EnableScheduling
@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" })
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);
//
//
//
//
// }
//
//
//
//
//
//}
......@@ -11,3 +11,51 @@ redis.cache.failure.time=10800
# mybatis-plus
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 {
@ApiModelProperty(value = "状态(0:绿码,1:黄码,2:红码)")
@TableField("system_code")
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 {
one.isNull(EquipQrcodeRecord::getCleanTime);
EquipQrcodeRecord equipQrcodeRecord = equipQrcodeRecordMapper.selectOne(one);
equipQrcodeRecord.setCleanTime(new Date());
if (equipQrcodeRecord.getSource().equals("patrol")){
equipQrcodeRecord.setCleanReason("设备再次巡查正常");
}
equipQrcodeRecordMapper.updateById(equipQrcodeRecord);
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 {
equipmentSpecificAlarms.forEach(action -> {
EquipmentSpecific specific = equipmentSpecificMapper.selectById(action.getEquipmentSpecificId());
if (AlarmStatusEnum.BJ.getCode() == action.getStatus()) {
alarmLogs.add(addEquipAlarmLogRecord(action));
EquipmentSpecificAlarmLog equipmentSpecificAlarmLog = addEquipAlarmLogRecord(action);
alarmLogs.add(equipmentSpecificAlarmLog);
if (ValidationUtil.isEmpty(action.getAlamContent())) {
action.setAlamContent(action.getEquipmentSpecificName() + action.getEquipmentSpecificIndexName());
}
......@@ -949,7 +950,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
equipQrcodeRecord.setSource("equip");
equipQrcodeRecord.setAlarmTime(new Date());
equipQrcodeRecord.setStatus(EquipQrcodeColorEnum.RED.getCode());
equipQrcodeRecord.setSourceId(action.getId().toString());
equipQrcodeRecord.setSourceId(equipmentSpecificAlarmLog.getId().toString());
equipQrcodeRecord.setBizOrgCode(action.getBizOrgCode());
equipQrcodeRecord.setBizOrgName(action.getBizOrgName());
equipQrcodeRecord.setSystemCode(action.getSystemIds());
......@@ -965,6 +966,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
wrapper.eq(EquipQrcodeRecord::getSourceId, action.getId());
EquipQrcodeRecord equipQrcodeRecord = equipQrcodeRecordMapper.selectOne(wrapper);
equipQrcodeRecord.setCleanTime(new Date());
equipQrcodeRecord.setCleanReason("设备上报复归信息");
equipQrcodeRecordMapper.updateById(equipQrcodeRecord);
specific.setEquipStatus(EquipQrcodeColorEnum.GREEN.getCode());
......
......@@ -937,6 +937,17 @@
</sql>
</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