Commit 66773fa3 authored by 李杨's avatar 李杨

删除无用代码

parent daf162e5
地图服务器,部署地图资源服务器,供其他系统调用地图服务。
地图服务目前采用geoserver
projectKey=my:admin-test-sonar
serverUrl=http://new002.suntrayoa.com
serverVersion=7.4.0.18908
dashboardUrl=http://new002.suntrayoa.com/dashboard?id=my%3Aadmin-test-sonar
ceTaskId=AWd34aLVyPOGXZlYwjLu
ceTaskUrl=http://new002.suntrayoa.com/api/ce/task?id=AWd34aLVyPOGXZlYwjLu
FROM 10.20.2.132:8083/kg_java:8
ENV APP_DIR /app
ENV JAR_DIR /app/jars
RUN echo 'Asia/Shanghai' >/etc/timezone
#ADD lib ${JAR_DIR}
ADD target/microservice-*.jar ${JAR_DIR}/app.jar
ADD run.sh run.sh
VOLUME ${APP_DIR}
EXPOSE 8095
ENTRYPOINT ["sh", "/run.sh"]
设备适配层:
1、预计在该服务,设计实现独立的,针对咱们目前所有需要对接的设备,进行单独服务对接,所有与设备之间的操作和信息读取(摄像头视频流除外);
2、其他服务和视频之间的操作和信息读取,都和当前服务对接,而不和设备对接;
3、该服务器要实现多级之间的操作进行识别,识别出“站点级”、“线路级”和“线网级”,优先级从前往后,“站点级”优先级最高,比如“站点级”和“线路级”同时对一台设备进行操作时,
以“站点级”操作为准,“线路级”操作无效。
mvn --batch-mode verify sonar:sonar -e \
-Dsonar.host.url=http://new002.suntrayoa.com \
-Dsonar.login=admin \
-Dsonar.password=admin \
-Dsonar.analysis.mode=preview \
-Dsonar.gitlab.project_id=$CI_PROJECT_ID \
-Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA \
-Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME
if [ $? -eq 0 ]; then
echo "sonarqube code-analyze-preview over."
fi
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>microservice-adapter</artifactId>
<packaging>jar</packaging>
<parent>
<groupId>com.platform</groupId>
<artifactId>com.platform</artifactId>
<version>1.0.1-SNAPSHOT</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<maven-jar-plugin.version>2.6</maven-jar-plugin.version>
</properties>
<!--用来做日志监控-->
<dependencies>
<dependency>
<groupId>com.dianping.cat</groupId>
<artifactId>cat-client</artifactId>
<version>3.0.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
java -jar -Xms512m -Xmx512m /app/jars/app.jar
# must be unique in a given SonarQube instance
sonar.projectKey=my:admin-test-sonar
# this is the name displayed in the SonarQube UI
sonar.projectName=platform-admin
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# Since SonarQube 4.2, this property is optional if sonar.modules is set.
# If not set, SonarQube starts looking for source code from the directory containing
# the sonar-project.properties file.
sonar.projectVersion=1.0
sonar.sourceEncoding=UTF-8
sonar.language=java
sonar.sources=src/main/java/com
sonar.java.binaries=target/classes/com
mvn --batch-mode verify sonar:sonar -e \
-Dsonar.host.url=http://new002.suntrayoa.com \
-Dsonar.login=admin \
-Dsonar.password=admin \
-Dsonar.analysis.mode=preview \
-Dsonar.gitlab.project_id=$CI_PROJECT_ID \
-Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA \
-Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME
if [ $? -eq 0 ]; then
echo "sonarqube code-analyze-preview over."
fi
package com.devplatform.adapter;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import lombok.extern.slf4j.Slf4j;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* @author Administrator
*/
@SpringBootApplication
@EnableSwagger2
@Slf4j
@MapperScan(basePackages = "com.devplatform.**.dao")
@EnableEurekaClient
@EnableFeignClients
@EnableScheduling
@EnableTransactionManagement
public class AdapterApplication {
public static void main(String[] args) {
SpringApplication.run(AdapterApplication.class, args);
}
/** 分页插件 */
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
server:
port: 8095
spring:
application:
name: microservice-adapter
main:
sources:
# password: tennisRedis
jackson:
time-zone: GMT+8
date-format: yyyy-MM-dd HH:mm:ss
cloud:
config:
profile: dev
uri: http://config:8777
#discovery:
#enabled: true
#service-id: microservice-config-server
environment: common
info:
version: 0.1
<configuration scan="true" scanPeriod="10 seconds">
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<property name="LOG_PATH" value="/data/logs/admin_log"/>
<appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="INFO_FILE">
<File>${LOG_PATH}/admin_info.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/admin_info-%d{yyyyMMdd}_%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n</Pattern>
</layout>
</appender>
<appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="ERROR_FILE">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<File>${LOG_PATH}/admin_error.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/admin_error-%d{yyyyMMdd}_%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n</Pattern>
</layout>
</appender>
<appender class="com.dianping.cat.logback.CatLogbackAppender" name="CatAppender"></appender>
<root level="INFO">
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="ERROR_FILE"/>
<appender-ref ref="CatAppender"/>
</root>
</configuration>
projectKey=my:admin-test-sonar
serverUrl=http://new002.suntrayoa.com
serverVersion=7.4.0.18908
dashboardUrl=http://new002.suntrayoa.com/dashboard?id=my%3Aadmin-test-sonar
ceTaskId=AWd34aLVyPOGXZlYwjLu
ceTaskUrl=http://new002.suntrayoa.com/api/ce/task?id=AWd34aLVyPOGXZlYwjLu
FROM 10.20.2.132:8083/kg_java:8
ENV APP_DIR /app
ENV JAR_DIR /app/jars
RUN echo 'Asia/Shanghai' >/etc/timezone
#ADD lib ${JAR_DIR}
ADD target/microservice-*.jar ${JAR_DIR}/app.jar
ADD run.sh run.sh
VOLUME ${APP_DIR}
EXPOSE 8093
ENTRYPOINT ["sh", "/run.sh"]
系统联动、预案管理(应急中心)
一、系统联动
1、联动规则配置(事件绑定资源点、执行动作和执行顺序)
2、联动日志(事件触发后,执行动作的情况)
二、预案管理
1、预案登记(新增、修改、删除和发布预案)
2、预案关联(事件、资源点和预案之间关联绑定,一个事件只能有一个预案绑定关系,一个预案可以和多个事件绑定关系)
3、事件登记(站点级对于站点发生的事件进行登记,系统自动评估风险等级)
4、事件决策(站点级对于事件的,决策、评估和发布,发布后线路和线网才能进行查看)
\ No newline at end of file
mvn --batch-mode verify sonar:sonar -e \
-Dsonar.host.url=http://new002.suntrayoa.com \
-Dsonar.login=admin \
-Dsonar.password=admin \
-Dsonar.analysis.mode=preview \
-Dsonar.gitlab.project_id=$CI_PROJECT_ID \
-Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA \
-Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME
if [ $? -eq 0 ]; then
echo "sonarqube code-analyze-preview over."
fi
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>microservice-alram</artifactId>
<packaging>jar</packaging>
<parent>
<groupId>com.platform</groupId>
<artifactId>com.platform</artifactId>
<version>1.0.1-SNAPSHOT</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<maven-jar-plugin.version>2.6</maven-jar-plugin.version>
</properties>
<dependencies>
<dependency>
<groupId>com.dianping.cat</groupId>
<artifactId>cat-client</artifactId>
<version>3.0.0-SNAPSHOT</version>
</dependency>
<!--pdf-->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.10</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<!--jna-->
<dependency>
<groupId>com.sun.jna</groupId>
<artifactId>jna</artifactId>
<version>3.0.9</version>
</dependency>
<!-- javacv -->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>1.5.3</version>
</dependency>
<!--examples-->
<dependency>
<groupId>com.sun.examples</groupId>
<artifactId>examples</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</project>
java -jar -Xms512m -Xmx512m /app/jars/app.jar
# must be unique in a given SonarQube instance
sonar.projectKey=my:admin-test-sonar
# this is the name displayed in the SonarQube UI
sonar.projectName=platform-admin
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# Since SonarQube 4.2, this property is optional if sonar.modules is set.
# If not set, SonarQube starts looking for source code from the directory containing
# the sonar-project.properties file.
sonar.projectVersion=1.0
sonar.sourceEncoding=UTF-8
sonar.language=java
sonar.sources=src/main/java/com
sonar.java.binaries=target/classes/com
mvn --batch-mode verify sonar:sonar -e \
-Dsonar.host.url=http://new002.suntrayoa.com \
-Dsonar.login=admin \
-Dsonar.password=admin \
-Dsonar.analysis.mode=preview \
-Dsonar.gitlab.project_id=$CI_PROJECT_ID \
-Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA \
-Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME
if [ $? -eq 0 ]; then
echo "sonarqube code-analyze-preview over."
fi
package com.devplatform.alarm;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import lombok.extern.slf4j.Slf4j;
import org.apache.catalina.filters.CorsFilter;
import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.client.RestTemplate;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* springboot启动类
*
* @author Administrator
*/
@SpringBootApplication
@EnableSwagger2
@Slf4j
@MapperScan(basePackages = "com.devplatform.**.dao")
@EnableEurekaClient
@EnableFeignClients
@EnableScheduling
@ComponentScan(basePackages = {"com.devplatform"})
public class AlarmApplication {
private static final Logger logger = LoggerFactory.getLogger(AlarmApplication.class);
public static void main(String[] args) {
SpringApplication.run(AlarmApplication.class, args);
}
@Bean
public RestTemplate restTemplate() {
// 复杂构造函数的使用
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
// 设置超时
requestFactory.setConnectTimeout(3000);
requestFactory.setReadTimeout(3000);
return new RestTemplate(requestFactory);
}
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
// /**
// * bean注入corsFilter
// */
// @Bean
// public FilterRegistrationBean corsFilterRegistration() {
// FilterRegistrationBean registration = new FilterRegistrationBean();
// registration.setFilter(new CorsFilter());
// registration.addUrlPatterns("/*");
// registration.setName("corsFilter");
// //将其注册在其他过滤器的前面
// registration.setOrder(0);
// return registration;
// }
}
package com.devplatform.alarm.aspect;
import com.alibaba.fastjson.JSON;
import com.devplatform.alarm.common.annotation.SysLogMethod;
import com.devplatform.alarm.common.utils.AbstractController;
import com.devplatform.alarm.common.utils.Constants;
import com.devplatform.alarm.common.utils.HttpContextUtils;
import com.devplatform.alarm.common.utils.IpUtils;
import com.devplatform.alarm.feign.bean.SysUserEntity;
import com.devplatform.alarm.feign.service.LogService;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* 系统日志,切面处理类
*
* @author chenshun
* @email sunlightcs@gmail.com
* @date 2017年3月8日 上午11:07:35
*/
@Aspect
@Component
public class SysLogAspect extends AbstractController {
private static Log log = LogFactory.getLog(SysLogAspect.class);
@Autowired(required = false)
private LogService sysLogService;
@Pointcut("@annotation(com.devplatform.alarm.common.annotation.SysLogMethod)")
public void logPointCut() {
log.info("");
}
@Around("logPointCut(),logMethodPointCut()")
public Object around(ProceedingJoinPoint point) throws Throwable {
long beginTime = System.currentTimeMillis();
// 执行方法
Object result = point.proceed();
// 执行时长(毫秒)
long time = System.currentTimeMillis() - beginTime;
// 保存日志
saveSysLog(point, time);
return result;
}
private void saveSysLog(ProceedingJoinPoint joinPoint, long time) {
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
Map<String, Object> params = new HashMap<String, Object>(8);
SysLogMethod sysLogMethod = method.getAnnotation(SysLogMethod.class);
if (sysLogMethod != null) {
// 注解上的描述
params.put("operation", sysLogMethod.operation());
params.put("blockName", sysLogMethod.blockName());
params.put("detail", sysLogMethod.detail());
}
// 请求的方法名
String className = joinPoint.getTarget().getClass().getName();
String methodName = signature.getName();
params.put("method", className + "." + methodName + "()");
// 请求的参数
Object[] args = joinPoint.getArgs();
StringBuilder requestBuilder = new StringBuilder(0);
try {
for (int index = 0; index < args.length; index++)
{
// 如果参数类型是请求和响应的http,则不需要拼接【这两个参数,使用JSON.toJSONString()转换会抛异常】
if (args[index] instanceof HttpServletRequest
|| args[index] instanceof HttpServletResponse)
{
continue;
}
requestBuilder.append(args[index] == null ? "" : JSON.toJSONString(args[index]));
}
String jsons = requestBuilder.toString();
params.put("params", jsons);
} catch (Exception e) {
e.printStackTrace();
}
// 获取request
HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
SysUserEntity user = getUser();
String stationId = request.getHeader("stationId");
if (Constants.STRING_1.equals(user.getSysSystem().getType()) && !Constants.CHECK.equals(sysLogMethod.operation())) {
params.put("stationId", user.getSysSystem().getCode());
params.put("name", user.getName());
} else if (Constants.STRING_2.equals(user.getSysSystem().getType())) {
params.put("stationId", stationId);
params.put("name", "线路管理员");
} else if (Constants.STRING_3.equals(user.getSysSystem().getType())) {
params.put("stationId", stationId);
params.put("name", "路网管理员");
} else if (Constants.STRING_1.equals(user.getSysSystem().getType()) && Constants.CHECK.equals(sysLogMethod.operation())) {
// 站点自己访问时不记录查看日志
return;
}
// 设置IP地址
params.put("ip", IpUtils.getIpAddr(request));
params.put("time", time);
params.put("createDate", new Date());
params.put("createBy", getUserId());
// 保存系统日志
sysLogService.saveSysLog(params);
}
}
package com.devplatform.alarm.common.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/** @author halin */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SysLogMethod {
String operation() default "";
String blockName() default "";
String detail() default "";
}
package com.devplatform.alarm.common.model;
import com.devplatform.alarm.common.utils.Pager;
import org.apache.commons.lang.StringUtils;
/**
* @author Administrator
*/
public class BaseModel {
private Integer page = 1;
private Integer rows = Integer.MAX_VALUE;
private String sort;
private String order;
/** 分页导航 */
private Pager pager = new Pager();
public Pager getPager() {
pager.setPageId(getPage());
pager.setPageSize(getRows());
String orderField = "";
if (StringUtils.isNotBlank(sort)) {
orderField = sort;
}
if (StringUtils.isNotBlank(orderField) && StringUtils.isNotBlank(order)) {
orderField += " " + order;
}
pager.setOrderField(orderField);
return pager;
}
public void setPager(Pager pager) {
this.pager = pager;
}
public Integer getPage() {
return page;
}
public void setPage(Integer page) {
this.page = page;
}
public Integer getRows() {
return rows;
}
public void setRows(Integer rows) {
this.rows = rows;
}
public String getSort() {
return sort;
}
public void setSort(String sort) {
this.sort = sort;
}
public String getOrder() {
return order;
}
public void setOrder(String order) {
this.order = order;
}
}
package com.devplatform.alarm.common.producer;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.devplatform.alarm.common.utils.Constants;
import com.devplatform.alarm.modules.synclog.bean.SyncLogData;
import com.devplatform.alarm.modules.synclog.service.SyncLogDataService;
import com.devplatform.routes.modules.plan.bean.RtPlanRegister;
import lombok.SneakyThrows;
import org.apache.commons.lang.StringUtils;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.support.CorrelationData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageHeaders;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Component;
import java.io.ByteArrayInputStream;
import java.io.ObjectInputStream;
import java.util.Date;
import java.util.Map;
import java.util.UUID;
/**
* 线路预案下发生产者
* @Author: jzj
* @Date: 2020/9/25 13:38
*/
@Component
public class PlanRabbitSender {
@Autowired
private RabbitTemplate rabbitTemplate;
@Autowired
private SyncLogDataService syncLogDataService;
/**
* 消息确认机制
*/
final RabbitTemplate.ConfirmCallback confirmCallback = new RabbitTemplate.ConfirmCallback(){
@Override
public void confirm(CorrelationData correlationData, boolean ack, String s) {
// System.err.println("correlationData:" + correlationData.toString());
// System.err.println("ack:" + ack);
// System.err.println("消息确认发送成功"+s);
//消息未发送成功,则同步失败
if(!ack){
//通过消息id查询日志
SyncLogData syncLogData = syncLogDataService.getOne(new LambdaQueryWrapper<SyncLogData>().eq(SyncLogData::getRemark,correlationData.getId())
.eq(SyncLogData::getType, Constants.INT_1));
if(syncLogData != null){
syncLogData.setStatus(2);
syncLogDataService.update(syncLogData,new LambdaQueryWrapper<SyncLogData>().eq(SyncLogData::getId,syncLogData.getId()));
}
}
}
};
/**
*当我们发送消息时,当前exchange不存在或者指定的路由Key路由不到,这个时候我们需要监听这个种不可达的消息
*/
final RabbitTemplate.ReturnCallback returnCallback = new RabbitTemplate.ReturnCallback() {
@SneakyThrows
@Override
public void returnedMessage(org.springframework.amqp.core.Message message, int i, String s, String exchange, String routingKey) {
Message msg = byteToObject(message.getBody(), Message.class);
MessageHeaders mhs = msg.getHeaders();
String type = (String) mhs.get("type");
Thread.sleep(500);
//同步失败
if(Constants.STRING_1.equals(type)){
RtPlanRegister bean = (RtPlanRegister) msg.getPayload();
createLog(bean.getId(),bean.getStationId(),2);
}
}
};
/**
* 发送消息方法调用: 构建Message消息
* @param message
* @param properties
* @param exchange
* @param routingKey
* @throws Exception
*/
public void send(Object message, Map<String, Object> properties,String exchange,String routingKey) throws Exception {
MessageHeaders mhs = new MessageHeaders(properties);
Message msg = MessageBuilder.createMessage(message, mhs);
rabbitTemplate.setConfirmCallback(confirmCallback);
rabbitTemplate.setReturnCallback(returnCallback);
CorrelationData correlationData = new CorrelationData();
correlationData.setId(UUID.randomUUID().toString());
rabbitTemplate.convertAndSend(exchange, routingKey, msg,correlationData);
}
/**
* 发送消息方法调用
* @param planRegister
* @param properties
* @param exchange
* @param routingKey
* @throws Exception
*/
public void sendPlanRegister(RtPlanRegister planRegister, Map<String, Object> properties, String exchange, String routingKey) throws Exception {
MessageHeaders mhs = new MessageHeaders(properties);
Message msg = MessageBuilder.createMessage(planRegister, mhs);
rabbitTemplate.setReturnCallback(returnCallback);
rabbitTemplate.setConfirmCallback(confirmCallback);
CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
rabbitTemplate.convertAndSend(exchange,routingKey,msg,correlationData);
//生成状态为同步中的日志
createNewLog(planRegister.getId(),planRegister.getStationId(),3,correlationData.getId());
}
/**
* 默认创建同步中的日志记录
* @param planId
* @param stationId
*/
private void createNewLog(String planId,String stationId,Integer status,String msgId){
SyncLogData syncLogData = syncLogDataService.getOne(new LambdaQueryWrapper<SyncLogData>().eq(SyncLogData::getPlanId,planId)
.eq(SyncLogData::getStationId,stationId).eq(SyncLogData::getType, Constants.INT_1));
if(syncLogData == null){
syncLogData = new SyncLogData();
syncLogData.setPlanId(planId);
syncLogData.setStationId(stationId);
syncLogData.setCreateTime(new Date());
syncLogData.setType(1);
syncLogData.setStatus(status);
syncLogData.setRemark(msgId);
syncLogDataService.save(syncLogData);
}else {
syncLogData.setStatus(status);
syncLogData.setRemark(msgId);
syncLogDataService.update(syncLogData,new LambdaQueryWrapper<SyncLogData>().eq(SyncLogData::getId,syncLogData.getId()));
}
}
/**
* 默认创建失败的日志记录
* @param planId
* @param stationId
*/
private void createLog(String planId,String stationId,Integer status){
SyncLogData syncLogData = syncLogDataService.getOne(new LambdaQueryWrapper<SyncLogData>().eq(SyncLogData::getPlanId,planId)
.eq(SyncLogData::getStationId,stationId).eq(SyncLogData::getType, Constants.INT_1));
if(syncLogData != null){
syncLogData.setStatus(status);
syncLogDataService.update(syncLogData,new LambdaQueryWrapper<SyncLogData>().eq(SyncLogData::getId,syncLogData.getId()));
}
}
@SuppressWarnings("unchecked")
private <T> T byteToObject(byte[] bytes, Class<T> clazz) {
T t;
try (ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bis)) {
t = (T) ois.readObject();
} catch (Exception e) {
e.printStackTrace();
return null;
}
return t;
}
}
package com.devplatform.alarm.common.utils;
import com.devplatform.alarm.common.model.BaseModel;
import com.devplatform.alarm.feign.bean.JsonBean;
import com.devplatform.alarm.feign.bean.SysUserEntity;
import com.devplatform.alarm.feign.service.AdminService;
import com.devplatform.alarm.modules.sys.service.SysLogService;
import com.devplatform.common.controller.BaseController;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
/**
* Controller公共组件
*
* @author geqilin
* @email geqilin@suntray.com
* @date 2020年6月25日 下午9:42:26
*/
public abstract class AbstractController extends BaseController {
protected Logger logger = LoggerFactory.getLogger(getClass());
@Autowired(required = false)
private AdminService getUserInfoService;
@Autowired(required = false)
private SysLogService sysLogService;
/**
* 获取当前登录人ID
*
* @return
*/
public SysUserEntity getUser() {
return getCurrentUserInfoMap().getGetUser();
}
/**
* 获取当前登录人ID
*
* @return
*/
public String getUserId() {
return getCurrentUserInfoMap().getUserId();
}
/**
* 获取当前登录人姓名
*
* @return
*/
public String getCurrentUserName() {
return getCurrentUserInfoMap().getCurrentUserName();
}
/**
* 获取当前登录人真实姓名
*
* @return
*/
public String getCurrentUserRealName() {
return getCurrentUserInfoMap().getName();
}
public JsonBean getCurrentUserInfoMap() {
String result = getUserInfoService.getCurrentUserInfo();
// 解析获取accessToken
JsonBean jsonBean = null;
Gson g = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
try {
jsonBean = g.fromJson(result, JsonBean.class);
} catch (Exception e) {
e.printStackTrace();
}
return jsonBean;
}
/**
* 分页类
*
* @param list
* @param model
* @return
* @throws Exception MyPage
* @throws @author Rice
* @date 2017年9月22日
*/
public <T> MyPage getMyPage(List<T> list, BaseModel model) {
MyPage page = new MyPage();
page.setRows(list);
page.setTotal(model.getPager().getRowCount());
return page;
}
public void saveLogRoutes(
String operation,
String blockName,
String detail,
String method,
Object param,
SysUserEntity user,
Long startTime,
String sysSign,
String stationId) {
sysLogService.saveLogRoutesSub(
operation, blockName, detail, method, param, user, startTime, sysSign, stationId);
}
}
package com.devplatform.alarm.common.utils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
/**
* @author Administrator
*/
public class HttpContextUtils {
public static HttpServletRequest getHttpServletRequest() {
return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
}
public static String getDomain() {
HttpServletRequest request = getHttpServletRequest();
StringBuffer url = request.getRequestURL();
return url.delete(url.length() - request.getRequestURI().length(), url.length()).toString();
}
public static String getOrigin() {
HttpServletRequest request = getHttpServletRequest();
return request.getHeader("Origin");
}
}
package com.devplatform.alarm.common.utils;
import java.net.InetAddress;
import java.net.UnknownHostException;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* IP地址
*
* @author chenshun
* @email sunlightcs@gmail.com
* @date 2017年3月8日 下午12:57:02
*/
public class IpUtils {
private static Logger logger = LoggerFactory.getLogger(IpUtils.class);
private static String UNKNOWN = "unknown";
/**
* 获取IP地址
*
* <p>使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址
* 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址
*/
public static String getIpAddr(HttpServletRequest request) {
String ip = null;
try {
ip = request.getHeader("x-forwarded-for");
if (StringUtils.isEmpty(ip) || UNKNOWN.equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (StringUtils.isEmpty(ip) || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (StringUtils.isEmpty(ip) || UNKNOWN.equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (StringUtils.isEmpty(ip) || UNKNOWN.equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (StringUtils.isEmpty(ip) || UNKNOWN.equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
if (Constants.LOCALHOST_127.equals(ip) || Constants.LOCALHOST_0000.equals(ip)) {
// 根据网卡取本机配置的IP
InetAddress inet = null;
try {
inet = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
}
ip = inet.getHostAddress();
}
}
// 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
if (ip != null && ip.length() > Constants.INT_15) {
if (ip.indexOf(Constants.SYMBOL_COMMA) > 0) {
ip = ip.substring(0, ip.indexOf(","));
}
}
} catch (Exception e) {
logger.error("IPUtils ERROR ", e);
}
if (StringUtils.isEmpty(ip) || UNKNOWN.equalsIgnoreCase(ip)) {
// 设置一个默认的ip地址
ip = "127.0.0.1";
}
return ip;
}
}
package com.devplatform.alarm.common.utils;
import java.util.List;
/**
* @author Rice
* @version 1.1 2018年4月10日 @Description: 分页处理 @Copyright: Copyright (c) 2018 @Company:
* 北京腾信软创科技股份有限公司
*/
public class MyPage {
/** 当前页*/
private Integer pageNum;
/** 叶容量*/
private Integer pageSize;
/** 总条数*/
private Integer total;
/** 总页数*/
private Integer pages;
/** 数据集合*/
private List<?> rows;
public Integer getPageNum() {
return pageNum;
}
public void setPageNum(Integer pageNum) {
this.pageNum = pageNum;
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public Integer getTotal() {
return total;
}
public void setTotal(Integer total) {
this.total = total;
}
public Integer getPages() {
return pages;
}
public void setPages(Integer pages) {
this.pages = pages;
}
public List<?> getRows() {
return rows;
}
public void setRows(List<?> rows) {
this.rows = rows;
}
}
package com.devplatform.alarm.common.utils;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;
import lombok.SneakyThrows;
/**
* @author Administrator
*/
public class SftpUtil {
/**
* @param userName 用户名
* @param password 密码
* @param host ip
* @param port 端口
* @param basePath 根路径
* @param filePath 文件路径(加上根路径)
* @param filename 文件名
* @param privateKey 秘钥
* @param input 文件流 @Author: jinhaoxun @Description: 下载文件 @Date: 2020-9-29 18:05:39 @Return:
* void @Throws: Exception
*/
public static void uploadFile(
String userName,
String password,
String host,
int port,
String basePath,
String filePath,
String filename,
String privateKey,
InputStream input)
throws Exception {
Session session = null;
ChannelSftp sftp = null;
// 连接sftp服务器
try {
JSch jsch = new JSch();
if (privateKey != null) {
// 设置私钥
jsch.addIdentity(privateKey);
}
session = jsch.getSession(userName, host, port);
if (password != null) {
session.setPassword(password);
}
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
sftp = (ChannelSftp) channel;
} catch (JSchException e) {
e.printStackTrace();
}
// 将输入流的数据上传到sftp作为文件
try {
sftp.cd(basePath);
sftp.cd(filePath);
} catch (SftpException e) {
// 目录不存在,则创建文件夹
String[] dirs = filePath.split("/");
String tempPath = basePath;
for (String dir : dirs) {
if (null == dir || "".equals(dir)) {
continue;
}
tempPath += "/" + dir;
try {
sftp.cd(tempPath);
} catch (SftpException ex) {
sftp.mkdir(tempPath);
sftp.cd(tempPath);
}
}
}
// 上传文件
sftp.put(input, filename);
// 关闭连接 server
if (sftp != null) {
if (sftp.isConnected()) {
sftp.disconnect();
}
}
// 关闭连接 server
if (session != null) {
if (session.isConnected()) {
session.disconnect();
}
}
}
// 案例-----↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓-------------
@SneakyThrows
public static void main(String[] args) {
File file = new File("D:\\1.txt");
InputStream inputStream = new FileInputStream(file);
SftpUtil.uploadFile(
"canal", "canal", "192.168.25.9", 22, "/root", "/testFile/", "test.txt", null, inputStream);
}
}
package com.devplatform.alarm.config;
import com.devplatform.common.base.exception.RRException;
import com.devplatform.common.util.R;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @author Muceball
* @date 2020/6/5 20:53
*/
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = Exception.class)
@ResponseBody
public R exceptionHandler(Exception e) {
e.printStackTrace();
return R.error();
}
@ExceptionHandler(value = RRException.class)
@ResponseBody
public R exceptionRrHandler(Exception e) {
e.printStackTrace();
return R.error(e.getMessage());
}
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
java -jar -Xms512m -Xmx512m /app/jars/app.jar
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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