first commit

This commit is contained in:
fengchunyu 2024-11-18 14:04:42 +08:00
commit 112733abfe
54 changed files with 3818 additions and 0 deletions

33
.gitignore vendored Normal file
View File

@ -0,0 +1,33 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/

View File

@ -0,0 +1,5 @@
##对接汇聚中心
#global mode
SENDTYPE=HJPT

78
config/logback.xml Normal file
View File

@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 日志存放路径 -->
<property name="log.path" value="/home/project/dataSend/log"/>
<!-- 日志输出格式 -->
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- 系统日志输出 -->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/info.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/%d{yyyy-MM-dd}.info.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>2</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/error.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/%d{yyyy-MM-dd}.error.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>2</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>ERROR</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 系统模块日志级别控制 -->
<logger name="com.bootdo" level="info"/>
<!-- Spring日志级别控制 -->
<logger name="org.springframework" level="warn"/>
<root level="info">
<appender-ref ref="console"/>
</root>
<!--系统操作日志-->
<root level="info">
<appender-ref ref="file_info"/>
<appender-ref ref="file_error"/>
</root>
<root level="error">
<appender-ref ref="file_error"/>
</root>
</configuration>

163
pom.xml Normal file
View File

@ -0,0 +1,163 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.watu</groupId>
<artifactId>dataSend</artifactId>
<version>V3</version>
<name>bootdo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<druid.version>1.1.12</druid.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--jdbc-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--数据库连接池 德鲁伊-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
<!--<druid.version>1.1.12</druid.version>-->
</dependency>
<!--log4j-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<!--mybatis-->
<!-- https://mvnrepository.com/artifact/commons-collections/commons-collections -->
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.15</version>
</dependency>
<!--commons -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.6</version>
</dependency>
<dependency>
<groupId>commons-configuration</groupId>
<artifactId>commons-configuration</artifactId>
<version>1.10</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.31</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.squareup.okhttp/okhttp -->
<dependency>
<groupId>com.squareup.okhttp</groupId>
<artifactId>okhttp</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.1</version>
</dependency>
<dependency>
<groupId>com.hikvision.ga</groupId>
<artifactId>artemis-http-client</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- mybatis-plus 增强CRUD -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>
</project>

2
readme.md Normal file
View File

@ -0,0 +1,2 @@
转发程序:
目前支持电信dianxin

View File

@ -0,0 +1,36 @@
package com.bootdo;
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.cache.annotation.EnableCaching;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@SpringBootApplication
@EnableTransactionManagement
@MapperScan("com.bootdo.datasend.*.mapper")
@EnableCaching
@EnableAsync(proxyTargetClass = true)
@EnableScheduling
public class DataSendApplication {
private static final Logger logger = LoggerFactory.getLogger(DataSendApplication.class);
public static void main(String[] args) {
SpringApplication.run(DataSendApplication.class, args);
System.out.println("ヾ(◍°∇°◍)ノ゙ bootdo启动成功 ヾ(◍°∇°◍)ノ゙\n" +
" ______ _ ______ \n" +
"|_ _ \\ / |_|_ _ `. \n" +
" | |_) | .--. .--. `| |-' | | `. \\ .--. \n" +
" | __'. / .'`\\ \\/ .'`\\ \\| | | | | |/ .'`\\ \\ \n" +
" _| |__) || \\__. || \\__. || |, _| |_.' /| \\__. | \n" +
"|_______/ '.__.' '.__.' \\__/|______.' '.__.' ");
}
}

View File

@ -0,0 +1,27 @@
package com.bootdo.datasend.dianxin.config;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitConfig {
@Bean
public Queue myQueue() {
// 创建队列 myQueue
return new Queue("myQueue", true);
}
@Bean
public TopicExchange exchange() {
return new TopicExchange("warnrecord");
}
@Bean
public Binding binding(Queue queue, TopicExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with("routing.key.#");
}
}

View File

@ -0,0 +1,31 @@
package com.bootdo.datasend.dianxin.controller.standard;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletResponse;
@Controller
@RequestMapping("/api")
@RequiredArgsConstructor
public class ApiController {
/**
* 注册直接成功
*
* @param str
* @param response
* @return
*/
@ResponseBody
@RequestMapping("/test")
public Object Register(@RequestBody String str, HttpServletResponse response) {
return "";
}
}

View File

@ -0,0 +1,44 @@
package com.bootdo.datasend.dianxin.controller.standard;
import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.PostConstruct;
@RestController
public class ProducerController {
private static final Logger logger = LoggerFactory.getLogger(ProducerController.class);
private final RabbitTemplate rabbitTemplate;
public ProducerController(RabbitTemplate rabbitTemplate) {
this.rabbitTemplate = rabbitTemplate;
}
@PostMapping("/send")
public String sendMessage(@RequestBody String message) {
rabbitTemplate.convertAndSend("warnrecord", "routing.key.warnrecord", message);
return "Message sent!";
}
@PostConstruct
public String sendMessagetest() {
try {
JSONObject json = new JSONObject();
json.put("12aaa3", "2aaa34");
json.put("2aaa34", "45aaa6");
rabbitTemplate.convertAndSend("warnrecord", "routing.key.warnrecord", json);
logger.info("Message sent!");
return "Message sent!";
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
}

View File

@ -0,0 +1,106 @@
package com.bootdo.datasend.dianxin.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 高抛记录表(BaseHighThrowRecord)Domain
*
* @author makejava
* @since 2024-11-18 09:34:36
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName(value = "base_high_throw_record")
public class BaseHighThrowRecord {
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 设备名称
*/
private String deviceName;
/**
* 设备编码
*/
private String deviceCode;
/**
* 通道国标编码
*/
private String gbsChannelNo;
/**
* NVR设备编号
*/
private String serial;
/**
* 通道号
*/
private Integer channelNo;
/**
* 监控大类
*/
private Integer parentMonitoringType;
/**
* 设备类型
*/
private Integer deviceType;
/**
* 设备能力集
*/
private String structuredCameraType;
/**
* 安装位置
*/
private String deviceAddress;
/**
* 设备方位
*/
private Integer orientation;
/**
* 设备ip
*/
private String deviceIp;
/**
* 多维设备SN
*/
private String geminiSn;
/**
* 场所编码
*/
private String placeCode;
/**
* 场所名称
*/
private String placeName;
/**
* 高抛图路径
*/
private String highThrowImgurl;
/**
* 抓拍时间
*/
private Long passTime;
}

View File

@ -0,0 +1,206 @@
package com.bootdo.datasend.dianxin.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* 智能设备信息表(DevopsDeviceInfo)Domain
*
* @author makejava
* @since 2024-11-18 09:34:36
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName(value = "devops_device_info")
public class DevopsDeviceInfo {
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 设备名称
*/
private String deviceName;
/**
* 设备编码
*/
private String deviceCode;
/**
* 通道国标编码
*/
private String gbsChannelNo;
/**
* 监控大类
*/
private Integer parentMonitoringType;
/**
* 设备类型
*/
private Integer deviceType;
/**
* 设备能力集
*/
private String structuredCameraType;
/**
* 安装位置
*/
private String deviceAddress;
/**
* 设备方位
*/
private Integer orientation;
/**
* 设备SN编号
*/
private String deviceSn;
/**
* 设备品牌
*/
private String deviceBrand;
/**
* 设备ip
*/
private String deviceIp;
/**
* 设备端口
*/
private Integer devicePort;
/**
* 设备MAC
*/
private String deviceMac;
/**
* 设备IMEI
*/
private String deviceImei;
/**
* 设备经度
*/
private Double longitude;
/**
* 设备纬度
*/
private Double latitude;
/**
* U3D经度
*/
private Double u3dLongitude;
/**
* U3D纬度
*/
private Double u3dLatitude;
/**
* 设备高度
*/
private String deviceHeight;
/**
* 设备厂家
*/
private String manufactor;
/**
* 设备登陆帐号
*/
private String account;
/**
* 设备登陆密码
*/
private String password;
/**
* 进出方向
*/
private Integer direction;
/**
* RTSP流地址
*/
private String rtspAddress;
/**
* 预警等级类型划分(1:一级3:三级)
*/
private Integer isDoorwayVideo;
/**
* 商汤region_id
*/
private String stRegionId;
/**
* 商汤camera_idx
*/
private String stCameraIdx;
/**
* 通道号
*/
private Integer channelNo;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTimeV;
/**
* 创建者
*/
private Integer createByV;
/**
* 更新时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTimeV;
/**
* 更新者
*/
private Integer updateByV;
/**
* 场所名称
*/
private String placeName;
/**
* 设备编号
*/
private String serial;
/**
* 多维设备sn
*/
private String geminiSn;
}

View File

@ -0,0 +1,27 @@
package com.bootdo.datasend.dianxin.listener;
import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
public class MessageConsumer {
private static final Logger logger = LoggerFactory.getLogger(MessageConsumer.class);
//测试消费kafka
// 监听队列 "myQueue"
@RabbitListener(queues = "myQueue")
public void receiveMessage(JSONObject message) {
try {
// 处理接收到的消息
logger.info("Received message: " + message.toString());
// 在这里添加你对消息的处理逻辑
} catch (Exception e) {
// 捕获并打印异常
e.printStackTrace();
}
}
}

View File

@ -0,0 +1,16 @@
package com.bootdo.datasend.dianxin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.bootdo.datasend.dianxin.domain.BaseHighThrowRecord;
import org.apache.ibatis.annotations.Mapper;
/**
* 高抛记录表(BaseHighThrowRecord)Mapper
*
* @author makejava
* @since 2024-11-18 09:35:05
*/
@Mapper
public interface BaseHighThrowRecordMapper extends BaseMapper<BaseHighThrowRecord> {
}

View File

@ -0,0 +1,16 @@
package com.bootdo.datasend.dianxin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.bootdo.datasend.dianxin.domain.DevopsDeviceInfo;
import org.apache.ibatis.annotations.Mapper;
/**
* 智能设备信息表(DevopsDeviceInfo)Mapper
*
* @author makejava
* @since 2024-11-18 09:35:05
*/
@Mapper
public interface DevopsDeviceInfoMapper extends BaseMapper<DevopsDeviceInfo> {
}

View File

@ -0,0 +1,17 @@
package com.bootdo.datasend.dianxin.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bootdo.datasend.dianxin.domain.BaseHighThrowRecord;
import java.util.List;
/**
* 高抛记录表(BaseHighThrowRecord)Service
*
* @author makejava
* @since 2024-11-18 09:34:35
*/
public interface BaseHighThrowRecordService extends IService<BaseHighThrowRecord> {
}

View File

@ -0,0 +1,15 @@
package com.bootdo.datasend.dianxin.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bootdo.datasend.dianxin.domain.DevopsDeviceInfo;
/**
* 智能设备信息表(DevopsDeviceInfo)Service
*
* @author makejava
* @since 2024-11-18 09:34:36
*/
public interface DevopsDeviceInfoService extends IService<DevopsDeviceInfo> {
}

View File

@ -0,0 +1,18 @@
package com.bootdo.datasend.dianxin.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bootdo.datasend.dianxin.domain.BaseHighThrowRecord;
import com.bootdo.datasend.dianxin.mapper.BaseHighThrowRecordMapper;
import com.bootdo.datasend.dianxin.service.BaseHighThrowRecordService;
import org.springframework.stereotype.Service;
/**
* 高抛记录表(BaseHighThrowRecord)ServiceImpl
*
* @author makejava
* @since 2024-11-18 09:35:05
*/
@Service
public class BaseHighThrowRecordServiceImpl extends ServiceImpl<BaseHighThrowRecordMapper, BaseHighThrowRecord> implements BaseHighThrowRecordService {
}

View File

@ -0,0 +1,19 @@
package com.bootdo.datasend.dianxin.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bootdo.datasend.dianxin.domain.DevopsDeviceInfo;
import com.bootdo.datasend.dianxin.mapper.DevopsDeviceInfoMapper;
import com.bootdo.datasend.dianxin.service.DevopsDeviceInfoService;
import org.springframework.stereotype.Service;
/**
* 智能设备信息表(DevopsDeviceInfo)ServiceImpl
*
* @author makejava
* @since 2024-11-18 09:35:05
*/
@Service
public class DevopsDeviceInfoServiceImpl extends ServiceImpl<DevopsDeviceInfoMapper, DevopsDeviceInfo> implements DevopsDeviceInfoService {
}

View File

@ -0,0 +1,18 @@
package com.bootdo.schedule;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import java.util.concurrent.Executors;
@Configuration
@EnableScheduling
public class ScheduleConfig implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setScheduler(Executors.newScheduledThreadPool(30));
}
}

View File

@ -0,0 +1,76 @@
package com.bootdo.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.imageio.ImageIO;
import javax.xml.bind.DatatypeConverter;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.URLEncoder;
public class Base64Util {
private static final Logger logger = LoggerFactory.getLogger(Base64Util.class);
/**
* base64转图片
*
* @param base64Code base64码
*/
public static void convertBase64ToImage(String base64Code, String picname) {
BufferedImage image = null;
byte[] imageByte = null;
try {
imageByte = DatatypeConverter.parseBase64Binary(base64Code);
ByteArrayInputStream bis = new ByteArrayInputStream(imageByte);
image = ImageIO.read(new ByteArrayInputStream(imageByte));
bis.close();
File outputfile = new File("d:\\" + picname);
ImageIO.write(image, "jpg", outputfile);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 将图片转换成Base64编码
*
* @param imgFile 待处理图片
* @return
*/
public static String getImgStr(String imgFile) {
//将图片文件转化为字节数组字符串并对其进行Base64编码处理
InputStream in = null;
byte[] data = null;
//读取图片字节数组
try {
in = new FileInputStream(imgFile);
data = new byte[in.available()];
in.read(data);
in.close();
} catch (Exception e) {
logger.info("base64转换异常,url" + imgFile);
return "";
}
return java.util.Base64.getEncoder().encodeToString(data);
}
/**
* 处理base64串 +变成空格
*
* @param urlBase64
* @return
*/
public static String encodeStr(String urlBase64) {
try {
urlBase64 = URLEncoder.encode(urlBase64, "UTF-8");
} catch (Exception e) {
logger.info(StringKit.getTrace(e));
}
return urlBase64;
}
}

View File

@ -0,0 +1,10 @@
package com.bootdo.util;
import org.springframework.stereotype.Component;
@Component
public class ConfigParam {
public static String SENDTYPE = PropertiesUtil.queryPropertiesByKey("SENDTYPE");
}

View File

@ -0,0 +1,662 @@
package com.bootdo.util;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
/**
* 时间小工具
*/
@Component
public class DateTool {
private static final Logger logger = LoggerFactory.getLogger(DateTool.class);
private static final long SECOND = 24 * 60 * 60 * 1000L;
private static final SimpleDateFormat ym = new SimpleDateFormat("yyyyMM");
private static final SimpleDateFormat ymd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private static final SimpleDateFormat ymdhms = new SimpleDateFormat("yyyyMMddHHmmss");
private static final SimpleDateFormat yyyy = new SimpleDateFormat("yyyy");
private static final SimpleDateFormat yMMdd = new SimpleDateFormat("MM-dd");
private static final SimpleDateFormat yyyyMMdd = new SimpleDateFormat("yyyyMMdd");
private static final SimpleDateFormat HHmmss = new SimpleDateFormat("HH:mm:ss");
private static final SimpleDateFormat YYYYMMDD = new SimpleDateFormat("yyyy-MM-dd");
public static final SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
public static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private static final SimpleDateFormat ymdDir = new SimpleDateFormat("yyyyMMdd");
/**
*
* 2022
*/
public int getYear(Date date) {
int rel = 0;
if (null == date) {
return 0;
}
try {
rel = Integer.parseInt(yyyy.format(date));
} catch (Exception e) {
return rel;
}
return rel;
}
/**
* 年月
* 202205
*/
public String yearMonth() {
return ym.format(new Date());
}
/**
* 当日开始时间
*/
public String getStartTime() {
long current = System.currentTimeMillis();//当前时间毫秒数
//今天零点零分零秒的毫秒数
long zero = ((current / SECOND) * SECOND - TimeZone.getDefault().getRawOffset());
return ymd.format(zero);
}
/**
* 带T时间处理
*
* @param time
* @return
*/
public String getDateTimeT(long time) {
String ymd = YYYYMMDD.format(new Date(time * 1000));
String hms = HHmmss.format(new Date(time * 1000));
return (ymd + "T" + hms);
}
/**
* 今日0点的绝对秒
*/
public Long getStartTimeLong() {
long current = System.currentTimeMillis();//当前时间毫秒数
//今天零点零分零秒的毫秒数
long zero = ((current / SECOND) * SECOND - TimeZone.getDefault().getRawOffset());
return zero / 1000;
}
/**
* 当日结束时间
*/
public String getEndTime() {
long current = System.currentTimeMillis();//当前时间毫秒数
//今天零点零分零秒的毫秒数
long zero = (current / SECOND) * SECOND - TimeZone.getDefault().getRawOffset();
//今天23点59分59秒的毫秒数
long twelve = (zero + SECOND - 1);
return ymd.format(twelve);
}
/**
* 今天23点59分59秒 绝对秒
*/
public Long getEndTimeLong() {
long current = System.currentTimeMillis();//当前时间毫秒数
//今天零点零分零秒的毫秒数
long zero = (current / SECOND) * SECOND - TimeZone.getDefault().getRawOffset();
//今天23点59分59秒的毫秒数
long twelve = (zero + SECOND - 1);
return twelve / 1000;
}
/**
* 获取日期格式字符串时间
*/
public String getDateTime(long time) {
if (time == 0L) {
return "";
}
String format = ymd.format(new Date(time * 1000));
if (StringUtils.isNotBlank(format)) {
return format;
} else {
return "";
}
}
/**
* 今天 2022-08-18 00:00:00
*/
public String getDayStart() {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
String startDate = ymd.format(calendar.getTime());
startDate = startDate.substring(0, 10) + " 00:00:00";
return startDate;
}
/**
* 今天 2022-08-18 23:59:59
*/
public String getDayEnd() {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
String endDate = ymd.format(calendar.getTime());
endDate = endDate.substring(0, 10) + " 23:59:59";
return endDate;
}
/**
* 获取前一天 2022-08-15 00:00:00
*/
public static String getLastDayStart() {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DAY_OF_MONTH, -1);
String startDate = ymd.format(calendar.getTime());
startDate = startDate.substring(0, 10) + " 00:00:00";
return startDate;
}
/**
* 获取前一天 时间戳
*/
public static String getLastDayStartTimestamp() {
try {
String format = "yyyy-MM-dd HH:mm:ss";
String dateStr = getLastDayStart();
SimpleDateFormat ft = new SimpleDateFormat(format);
Date date = ft.parse(dateStr);
long resL = date.getTime();
String res = StringKit.toString(resL / 1000);
return StringKit.toString(res);
} catch (Exception e) {
return "";
}
}
/**
* 获取前一天 2022-08-15 23:59:59
*/
public String getLastDayEnd() {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DAY_OF_MONTH, -1);
String endDate = ymd.format(calendar.getTime());
endDate = endDate.substring(0, 10) + " 23:59:59";
return endDate;
}
/**
* 获取前一天 年月日
*/
public String getDayStr() {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DAY_OF_MONTH, -1);
String dayStr = yyyyMMdd.format(calendar.getTime());
return dayStr;
}
/**
* 获取年月日时间
* yyyyMMdd
*/
public String getDayStr(long longStr) {
String rel = "";
try {
rel = yyyyMMdd.format(longStr * 1000);
} catch (Exception e) {
}
return rel;
}
/**
* 获取年月日时间
* yyyyMMdd
*/
public String getDayStr2(String date) {
String rel = "";
try {
rel = yyyyMMdd.format(ymd.parse(date));
} catch (Exception e) {
}
return rel;
}
/**
* 日期字符串 计算 绝对秒
*/
public long getDayLong(String date) {
try {
Date parse = ymd.parse(date);
return parse.getTime() / 1000;
} catch (ParseException e) {
e.printStackTrace();
}
return 0L;
}
/**
* 获取当前年份
*/
public String getYear() {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DAY_OF_MONTH, -1);
String endDate = ymd.format(calendar.getTime());
endDate = endDate.substring(0, 10) + " 23:59:59";
return endDate;
}
/**
* 获取每个月的第一天
*/
public String getMonthFirst() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DATE, 1);
calendar.roll(Calendar.DATE, -1);
SimpleDateFormat sdfTwo = new SimpleDateFormat("yyyy-MM-");
String startTime = sdfTwo.format(new Date()) + "01 00:00:00";
return startTime;
}
/**
* 获取每个月的最后一天
*/
public String getMonthLast() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DATE, 1);
calendar.roll(Calendar.DATE, -1);
int maxDate = calendar.get(Calendar.DATE);
SimpleDateFormat sdfTwo = new SimpleDateFormat("yyyy-MM-");
String endTime = sdfTwo.format(new Date()) + maxDate + " 23:59:59";
return endTime;
}
/**
* 获取前n天 2022-08-15 23:59:59
*/
public String getDayStart(int n) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DAY_OF_MONTH, -n);
String startDate = ymd.format(calendar.getTime());
startDate = startDate.substring(0, 10) + " 00:00:00";
return startDate;
}
/**
* 获取前n天 2022-08-15 23:59:59
*/
public String getDayStartYYYYMMDD(int n) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DAY_OF_MONTH, -n);
String startDate = ymd.format(calendar.getTime());
startDate = startDate.substring(0, 10);
return startDate;
}
/**
* 获取前n天 2022-08-15 23:59:59
*/
public String getDayEnd(int n) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DAY_OF_MONTH, -n);
String endDate = ymd.format(calendar.getTime());
endDate = endDate.substring(0, 10) + " 23:59:59";
return endDate;
}
/**
* 获取n天前的指定日期
*/
public String getYMD(int n) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DAY_OF_MONTH, -n);
String ymd = yyyyMMdd.format(calendar.getTime());
return ymd;
}
/**
* 获取当前ymdhms日期格式
*/
public String getYmdhms() {
return ymdhms.format(new Date());
}
/**
* yyyyMMdd转mm.dd
*/
public String timeConversion(String yyyyMMdd) {
String rel = "";
try {
if (StringUtils.isBlank(yyyyMMdd)) {
return rel;
}
if (yyyyMMdd.length() != 8) {
return rel;
}
String mm = yyyyMMdd.substring(4, 6);
String dd = yyyyMMdd.substring(6, 8);
rel = String.valueOf(Integer.parseInt(mm)) + "." + String.valueOf(Integer.parseInt(dd));
} catch (Exception e) {
}
return rel;
}
/**
* 年月
* m=0表示当月
* m=1表示前一月
* m=2表示前两月
*/
public String yearMonth(int m) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.MONTH, -m);
return ym.format(calendar.getTime());
}
public String getDayStr3(String date) {
String rel = "";
try {
Date parse = yyyyMMdd.parse(date);
} catch (ParseException e) {
}
return rel;
}
public long daysBetween(String one, String two) {
long difference = 0L;
try {
Date parseOne = yyyyMMdd.parse(one);
Date parseTwo = yyyyMMdd.parse(two);
difference = (parseOne.getTime() - parseTwo.getTime()) / 86400000;
} catch (ParseException e) {
e.printStackTrace();
}
return Math.abs(difference) + 1;
}
/**
* 获取前N天 MMdd
*/
public static String getLastDayMmdd(int num) {
if (num == 0) {
num = 1;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DAY_OF_MONTH, -num);
String startDate = yMMdd.format(calendar.getTime());
return startDate;
}
/**
* n个月前的1号开始时间
*/
public String getMonthFirst(int n) {
SimpleDateFormat sdfTwo = new SimpleDateFormat("yyyy-MM");
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.MONTH, -n);
Date m = calendar.getTime();
String format = sdfTwo.format(m);
return format + "-01 00:00:00";
}
/**
* n个月前的最后一天结束时间
*/
public String getMonthLast(int n) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MONTH, 1 - n + 2);
calendar.set(Calendar.DATE, 1);
calendar.roll(Calendar.DATE, -1);
int maxDate = calendar.get(Calendar.DATE);
SimpleDateFormat sdfTwo = new SimpleDateFormat("yyyy-MM-");
String endTime = sdfTwo.format(calendar.getTime()) + maxDate + " 23:59:59";
return endTime;
}
/**
* 时间转换为时间戳
*/
public static String dateToStamp(String s) {
try {
String res;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
Date date = simpleDateFormat.parse(s);
long ts = date.getTime();
ts = ts / 1000;
res = StringKit.toString(ts);
return res;
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
/**
* 时间转换为时间戳
*/
public static String getNowTimeStr() {
try {
String currentTime = df.format(new Date());
return currentTime;
} catch (Exception e) {
logger.info(StringKit.getTrace(e));
e.printStackTrace();
}
return "";
}
public static String getTime() {
return ymdhms.format(new Date());
}
/**
* 时间戳转换成 标准时间
*
* @param seconds
* @param format
* @return
*/
public static String timeStamp2Date(String seconds, String format) {
if (seconds == null || seconds.isEmpty() || seconds.equals("null")) {
return "";
}
if (format == null || format.isEmpty()) {
format = "yyyy-MM-dd HH:mm:ss";
}
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(new Date(Long.valueOf(seconds + "000")));
}
/**
* 上个月 时间戳转换成 标准时间
*
* @param format
* @return
*/
public static String getLastMonth(String format) {
Calendar calendar = Calendar.getInstance();//日历对象
calendar.setTime(new Date());//设置当前日期
calendar.add(Calendar.MONTH, -1);//月份减一
Date lastMonth = calendar.getTime();
if (format == null || format.isEmpty()) {
format = "yyyy-MM-dd HH:mm:ss";
}
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(lastMonth);
}
public static String getDateStr(String sendTime) {
String dateStr;
String dateFir = StringKit.toString(sendTime);
Date date = null;
if ("".equals(dateFir)) {
date = new Date(System.currentTimeMillis());
} else {
Long dateFirL = Long.valueOf(dateFir);
date = new Date(dateFirL * 1000);
}
dateStr = sdf.format(date);
return dateStr;
}
public static String convertTimeToString(String longTime) {
String format = "yyyyMMddHHmmss";
try {
Timestamp t = new Timestamp(Long.parseLong(longTime) * 1000L);
SimpleDateFormat sDateFormat = new SimpleDateFormat(format);
return sDateFormat.format(t);
} catch (Exception ex) {
throw new RuntimeException((new StringBuilder()).append("Can't format the time by format[").append(format).append("]!").toString());
}
}
/**
* 30天前
*
* @return
*/
public static String readRecordStart() {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DAY_OF_MONTH, -30);
String startDate = sdf.format(calendar.getTime());
startDate = startDate.substring(0, 10) + " 00:00:00";
return startDate;
}
public static String readRecordDayStart() {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DAY_OF_MONTH, 0);
String startDate = sdf.format(calendar.getTime());
startDate = startDate.substring(0, 10) + " 00:00:00";
return startDate;
}
/**
* 今天
*
* @return
*/
public static String readRecordEnd() {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
String endDate = sdf.format(calendar.getTime());
endDate = endDate.substring(0, 10) + " 23:59:59";
return endDate;
}
/**
* 根据绝对秒 计算年月 yyyyMM
*
* @param tempLongTime
* @return
*/
public static int yearMonth(String tempLongTime) {
if (StringUtils.isBlank(tempLongTime) || tempLongTime.length() != 10) {
return 0;
}
String format = ym.format(new Date(Long.parseLong(tempLongTime) * 1000L));
return Integer.parseInt(format);
}
public static String yearMonthDay(String tempLongTime) {
if (StringUtils.isBlank(tempLongTime) || tempLongTime.length() != 10) {
return null;
}
String format = ymd.format(new Date(Long.parseLong(tempLongTime) * 1000L));
return format;
}
/**
* 特殊场景
* 通过jpg获取时间
*
* @param tempLongTime
* @return
*/
public static long ymdhms(String tempLongTime) {
long rel = 0;
try {
rel = ymdhms.parse(tempLongTime).getTime() / 1000;
} catch (ParseException e) {
e.printStackTrace();
}
return rel;
}
public static long getLongTime(String tempLongTime) {
long rel = 0;
try {
rel = ymd.parse(tempLongTime).getTime() / 1000;
} catch (ParseException e) {
e.printStackTrace();
}
return rel;
}
public static String ymdhmsDate() {
return ymdhms.format(new Date());
}
/**
* 开始时间
*
* @return
*/
public String getStart() {
long time = System.currentTimeMillis() / 1000 - 60 * 60 * 24 * 180;
return ymd.format(new Date(time * 1000));
}
/**
* 当前日期
*
* @return
*/
public String getEnd() {
long time = System.currentTimeMillis();
return ymd.format(new Date(time));
}
/**
* 时间戳对应日期目录
*/
public static String dateDir(long longTime) {
String tempLongTime = String.valueOf(longTime);
String format = ymdDir.format(new Date(Long.parseLong(tempLongTime) * 1000L));
return format;
}
}

View File

@ -0,0 +1,96 @@
package com.bootdo.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 日期处理
*/
public class DateUtils {
private final static Logger logger = LoggerFactory.getLogger(DateUtils.class);
/**
* 时间格式(yyyy-MM-dd)
*/
public final static String DATE_PATTERN = "yyyy-MM-dd";
/**
* 时间格式(yyyy-MM-dd HH:mm:ss)
*/
public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
public static String format(Date date) {
return format(date, DATE_PATTERN);
}
public static String format(Date date, String pattern) {
if (date != null) {
SimpleDateFormat df = new SimpleDateFormat(pattern);
return df.format(date);
}
return null;
}
/**
* 计算距离现在多久非精确
*
* @param date
* @return
*/
public static String getTimeBefore(Date date) {
Date now = new Date();
long l = now.getTime() - date.getTime();
long day = l / (24 * 60 * 60 * 1000);
long hour = (l / (60 * 60 * 1000) - day * 24);
long min = ((l / (60 * 1000)) - day * 24 * 60 - hour * 60);
long s = (l / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
String r = "";
if (day > 0) {
r += day + "";
} else if (hour > 0) {
r += hour + "小时";
} else if (min > 0) {
r += min + "";
} else if (s > 0) {
r += s + "";
}
r += "";
return r;
}
/**
* 计算距离现在多久精确
*
* @param date
* @return
*/
public static String getTimeBeforeAccurate(Date date) {
Date now = new Date();
long l = now.getTime() - date.getTime();
long day = l / (24 * 60 * 60 * 1000);
long hour = (l / (60 * 60 * 1000) - day * 24);
long min = ((l / (60 * 1000)) - day * 24 * 60 - hour * 60);
long s = (l / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
String r = "";
if (day > 0) {
r += day + "";
}
if (hour > 0) {
r += hour + "小时";
}
if (min > 0) {
r += min + "";
}
if (s > 0) {
r += s + "";
}
r += "";
return r;
}
public static String getDateStr(String seconds){
SimpleDateFormat sdf = new SimpleDateFormat(DATE_TIME_PATTERN);
return sdf.format(new Date(Long.valueOf(seconds+"000")));
}
}

View File

@ -0,0 +1,119 @@
package com.bootdo.util;
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.Charset;
import java.util.Arrays;
/**
* ant 加密 工具类
*
* @author bc
* @Date 2020-08-12 9:34
*/
public class EncryptUtil {
protected final static Charset CHARSET_UTF8 = Charset.forName("utf-8");
private final static String SECRET_ID = "SecretId";
private final static String BODY = "Body";
private final static String TIME_STAMP = "Timestamp";
private final static String SIGNVERSION = "Signversion";
private final static String MAC_NAME = "HmacSHA1";
private final static String EQUALS_SYMBOL = "=";
private final static String AND = "&";
private final static Base64 base64 = new Base64();
/**
* 生成签名
*
* @param timestamp 时间戳
* @param secretId 申请的secretId
* @param secretKey 申请的secretKey
* @param contentJsonString 待加密的字符串
* @param method 方法名
* @return 生成的验签签名
*/
public static String signature(String timestamp, String secretId, String secretKey, String contentJsonString,String method) throws Exception {
String stringBuilder = toSignSourceSimplePost(timestamp, secretId, contentJsonString);
System.out.println("stringBuilder:"+stringBuilder);
byte[] bytes = hmacSHA1Encrypt(stringBuilder, secretKey);
return base64.encodeToString(bytes);
}
/**
* 简单拼接顺序字符串
*/
private static String toSignSourceSimplePost(String timestamp, String secretId, String jsonStr) {
StringBuilder builder = new StringBuilder();
builder.append(SECRET_ID).append(EQUALS_SYMBOL).append(secretId).append(AND);
builder.append(TIME_STAMP).append(EQUALS_SYMBOL).append(timestamp).append(AND);
builder.append(SIGNVERSION).append(EQUALS_SYMBOL).append("v2").append(AND);
builder.append(BODY).append(EQUALS_SYMBOL).append(jsonStr);
return builder.toString();
}
private static String toSignSourceSimpleGet(String timestamp, String secretId, String jsonStr) {
StringBuilder builder = new StringBuilder();
builder.append(SECRET_ID).append(EQUALS_SYMBOL).append(secretId).append(AND);
builder.append(TIME_STAMP).append(EQUALS_SYMBOL).append(timestamp).append(AND);
builder.append(SIGNVERSION).append(EQUALS_SYMBOL).append("v2");
return builder.toString();
}
/**
* 加密原始参数
*
* @param encryptText 待加密的原始字符串
* @param encryptKey 颁发的secretKey
* @return 加密的byte数组用于生成签名
*/
private static byte[] hmacSHA1Encrypt(String encryptText, String encryptKey) throws Exception {
//根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
SecretKey secretKey = new SecretKeySpec(encryptKey.getBytes(CHARSET_UTF8), MAC_NAME);
//生成一个指定 Mac 算法 Mac 对象
Mac mac = Mac.getInstance(MAC_NAME);
//用给定密钥初始化 Mac 对象
mac.init(secretKey);
byte[] data = encryptText.getBytes(CHARSET_UTF8);
if (null == data || 0 == data.length){
return data;
}
if(data.length>1024){
data = Arrays.copyOfRange(data,0,1024);
}
//完成 Mac 操作
return mac.doFinal(data);
}
private static String key = "SecretId=J5HrA2KccOexV0IWx8I&Timestamp=1597659585761&Body={\n" +
" \"account\": \"string\",\n" +
" \"cameraId\": \"string\",\n" +
" \"cameraName\": \"string\",\n" +
" \"cameraSerialNum\": \"string\",\n" +
" \"deviceType\": \"string\",\n" +
" \"groupId\": \"string\",\n" +
" \"ip\": \"string\",\n" +
" \"lat\": \"string\",\n" +
" \"lng\": \"string\",\n" +
" \"password\": \"string\",\n" +
" \"port\": \"string\",\n" +
" \"rtsp\": \"string\",\n" +
" \"suppleRtsp\": \"string\"\n" +
"}";
}

View File

@ -0,0 +1,56 @@
package com.bootdo.util;
/**
* 全局常量类
*/
public class Gl {
public static final String DEFAULT_20 = "88321023198905233412";
public static final int BATCH_NUM = 1000;
// bcp文件基础路径
public static final String BASE_BCP_PATH = "/home/dataaccess/";
// bcp文件error路径
public static final String BASE_BCP_PATH_ERROR = "/home/error/";
// bcp类型 人脸
public static final String BCP_TYPE_RENLIAN = "renlian";
// bcp类型 车辆
public static final String BCP_TYPE_CHELIANG = "cheliang";
// bcp类型 门禁
public static final String BCP_TYPE_MENJING = "menjing";
// bcp类型 测温
public static final String BCP_TYPE_CEWEN = "cewen";
// bcp类型 ETC
public static final String BCP_TYPE_ETC = "etc";
// bcp类型 高空抛物
public static final String BCP_TYPE_GAOPAO = "gaopao";
// bcp类型 高空抛物
public static final String BCP_TYPE_YANGAN = "yangan";
// bcp文件标识 人脸抓拍
public static final String FILE_FLAG_FACE = "FaceCapture";
// bcp文件标识 人脸门禁
public static final String FILE_FLAG_DOOR_FACE = "DoorEvent";
// bcp文件标识 测温
public static final String FILE_FLAG_THERMAL = "Thermal";
// bcp文件标识 车辆抓拍
public static final String FILE_FLAG_VEHICLE = "CarMessage";
// bcp文件标识 ETC抓拍
public static final String FILE_FLAG_ETC = "ETC";
// bcp文件标识 高空抛物
public static final String FILE_FLAG_GAOPAO = "Parabolic";
// bcp文件标识 烟感告警
public static final String FILE_FLAG_YANGAN = "Smoke_";
// bcp文件标识 烟感状态
public static final String FILE_FLAG_YANGAN_STATUS = "SmokeStatus";
// txt文件标识 多码 电子围栏
public static final String FILE_FLAG_FENCE = "WY_";
// bcp文件标识
public static final String FILE_FLAG_BCP = ".bcp";
// txt文件标识
public static final String FILE_FLAG_TXT = ".txt";
}

View File

@ -0,0 +1,106 @@
package com.bootdo.util;
import java.security.MessageDigest;
/**
*
* MD5加密工具(是基于hash算法实现,不可逆)
*
* @author xuyi3
* @2016年7月13日 @下午3:10:54
* @Md5Utils
* @功能说明:<br>
* @春风十里不如你
* @备注
*/
public class Md5Utils {
/** 16进制的字符数组 */
private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d",
"e", "f" };
/**
*
*
* @param source
* 需要加密的原字符串
* @param encoding
* 指定编码类型
* @param uppercase
* 是否转为大写字符串
* @return
*/
public static String MD5Encode(String source, String encoding, boolean uppercase) {
String result = null;
try {
result = source;
// 获得MD5摘要对象
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
// 使用指定的字节数组更新摘要信息
messageDigest.update(result.getBytes(encoding));
// messageDigest.digest()获得16位长度
result = byteArrayToHexString(messageDigest.digest());
} catch (Exception e) {
e.printStackTrace();
}
return uppercase ? result.toUpperCase() : result;
}
/**
* 转换字节数组为16进制字符串
*
* @param bytes
* 字节数组
* @return
*/
private static String byteArrayToHexString(byte[] bytes) {
StringBuilder stringBuilder = new StringBuilder();
for (byte tem : bytes) {
stringBuilder.append(byteToHexString(tem));
}
return stringBuilder.toString();
}
/**
* 转换byte到16进制
*
* @param b
* 要转换的byte
* @return 16进制对应的字符
*/
private static String byteToHexString(byte b) {
int n = b;
if (n < 0) {
n = 256 + n;
}
int d1 = n / 16;
int d2 = n % 16;
return hexDigits[d1] + hexDigits[d2];
}
public static String getResponse(String username, String realm, String password, String method, String url, String nonce, String nc, String cnonce, String qop) {
// HA1 = md5("username:realm:password");
String Ha1str = username+":"+realm+":"+password;
String resHa1 = MD5Encode(Ha1str,"utf-8",false);
// HA2 = md5("method:uri");
String Ha2str = method+":"+url;
String resHa2 = MD5Encode(Ha2str,"utf-8",false);
// response = md5("HA1:nouce:nc:cnonce:qop:HA2");
String responsestr = resHa1+":"+nonce+":"+nc+":"+cnonce+":"+qop+":"+resHa2;
String responseHa2 = MD5Encode(responsestr,"utf-8",false);
// 188ffa2b22cb3b0cf20d5c05131953fe
return responseHa2;
}
}
//备注:其实apache commones Codec包中有常用的一些加密算法实现

View File

@ -0,0 +1,78 @@
package com.bootdo.util;
import java.net.Socket;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLEngine;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509ExtendedTrustManager;
public class MySSLSocketClient {
//获取TrustManager
public static X509ExtendedTrustManager X509 = new X509ExtendedTrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s, Socket socket) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s, Socket socket) throws CertificateException {
}
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s, SSLEngine sslEngine) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s, SSLEngine sslEngine) throws CertificateException {
}
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
};
//获取这个SSLSocketFactory
public static SSLSocketFactory getSSLSocketFactory() {
try {
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, new TrustManager[]{X509}, new SecureRandom());
return sslContext.getSocketFactory();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
//获取HostnameVerifier
public static HostnameVerifier getHostnameVerifier() {
HostnameVerifier hostnameVerifier = new HostnameVerifier() {
@Override
public boolean verify(String s, SSLSession sslSession) {
return true;
}
};
return hostnameVerifier;
}
}

View File

@ -0,0 +1,51 @@
package com.bootdo.util;
import java.math.BigDecimal;
public class NumKit {
public NumKit() {
}
public static Double checkDouble(String num) {
try {
Double i = Double.valueOf(num);
return i;
} catch (Exception var3) {
}
return 0D;
}
public static Integer checkInt(String num) {
try {
Integer i = Integer.valueOf(num);
return i;
} catch (Exception var3) {
}
return 0;
}
public static Long checkLong(String num) {
try {
Long i = Long.valueOf(num);
return i;
} catch (Exception var3) {
}
return 0L;
}
public static BigDecimal checkBigDecimal(String num) {
try {
BigDecimal bd = new BigDecimal(num);
return bd;
} catch (Exception var3) {
}
return null;
}
}

View File

@ -0,0 +1,38 @@
package com.bootdo.util;
import java.util.*;
/**
* OrderedProperties
* @author Unmi
* @date 2012-12-07
*/
public class OrderedProperties extends Properties {
private static final long serialVersionUID = -4627607243846121965L;
private final LinkedHashSet<Object> keys = new LinkedHashSet<Object>();
public Enumeration<Object> keys() {
return Collections.<Object> enumeration(keys);
}
public Object put(Object key, Object value) {
keys.add(key);
return super .put(key, value);
}
public Set<Object> keySet() {
return keys;
}
public Set<String> stringPropertyNames() {
Set<String> set = new LinkedHashSet<String>();
for (Object key : this .keys) {
set.add((String) key);
}
return set;
}
}

View File

@ -0,0 +1,134 @@
package com.bootdo.util;
import org.apache.commons.lang3.StringUtils;
import org.apache.tomcat.util.codec.binary.Base64;
import sun.misc.BASE64Decoder;
import javax.imageio.ImageIO;
import javax.xml.bind.DatatypeConverter;
import java.awt.image.BufferedImage;
import java.io.*;
/**
* 生成图片工具类
*/
public class PicFile {
private static BASE64Decoder decoder = new BASE64Decoder();
/**
* 生成图片
*/
public static boolean generateImage1(String filePath, String imgBase64Str, String fileName) {
if (StringUtils.isBlank(filePath)) {
return false;
}
if (StringUtils.isBlank(imgBase64Str)) {
return false;
}
if (StringUtils.isBlank(fileName)) {
return false;
}
try {
byte[] b = decoder.decodeBuffer(imgBase64Str);
ByteArrayInputStream inputStream = new ByteArrayInputStream(b);
File file = new File(filePath);
if (!file.exists()) {
file.mkdirs();
}
if (!filePath.endsWith("/")) {
filePath = filePath + "/";
}
File f = new File(filePath + fileName);
BufferedImage bi = ImageIO.read(inputStream);
ImageIO.write(bi, "jpg", f);
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* base64转图片
*/
public static boolean generateImage(String filePath, String imgBase64Str, String fileName) {
if (StringUtils.isBlank(filePath)) {
return false;
}
if (StringUtils.isBlank(imgBase64Str)) {
return false;
}
if (StringUtils.isBlank(fileName)) {
return false;
}
BufferedImage image = null;
byte[] imageByte = null;
try {
imageByte = DatatypeConverter.parseBase64Binary(imgBase64Str);
ByteArrayInputStream bis = new ByteArrayInputStream(imageByte);
image = ImageIO.read(new ByteArrayInputStream(imageByte));
bis.close();
File outPutFile = new File(filePath + fileName);
ImageIO.write(image, "jpg", outPutFile);
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* base64转图片
*/
public static boolean generateImage(String filePathName, String imgBase64Str) {
if (StringUtils.isBlank(filePathName)) {
return false;
}
if (StringUtils.isBlank(imgBase64Str)) {
return false;
}
BufferedImage image = null;
byte[] imageByte = null;
try {
imageByte = DatatypeConverter.parseBase64Binary(imgBase64Str);
ByteArrayInputStream bis = new ByteArrayInputStream(imageByte);
image = ImageIO.read(new ByteArrayInputStream(imageByte));
bis.close();
File outPutFile = new File(filePathName + ".tmp");
String fileFolder = outPutFile.getParent();
File folderFile = new File(fileFolder);
if(!folderFile.exists()){
folderFile.mkdirs();
}
ImageIO.write(image, "jpg", outPutFile);
outPutFile.renameTo(new File(filePathName));
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* 将图片转换成Base64编码
*/
public static String getImgStr(String imgFile) {
//将图片文件转化为字节数组字符串并对其进行Base64编码处理
InputStream in = null;
byte[] data = null;
//读取图片字节数组
try {
in = new FileInputStream(imgFile);
data = new byte[in.available()];
in.read(data);
in.close();
} catch (IOException e) {
e.printStackTrace();
return "";
}
return new String(Base64.encodeBase64(data));
}
}

View File

@ -0,0 +1,189 @@
package com.bootdo.util;
import org.apache.commons.lang3.StringUtils;
import java.io.*;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
/**
* 读取Properties综合类,默认绑定到classpath下的config.properties文件
*
* @author 朱志杰 QQ:695520848
*/
public class PropertiesUtil {
//配置文件的路径
private String configPath = "config"+File.separator+"application.properties";
public static final String Path = "config"+File.separator+"application.properties";
/**
* 配置文件对象
*/
private Properties props = null;
/**
* 默认构造函数用于sh运行自动找到classpath下的config.properties
*/
public PropertiesUtil() throws IOException {
InputStream in = PropertiesUtil.class.getClassLoader().getResourceAsStream("application.properties");
props = new Properties();
props.load(in);
//关闭资源
in.close();
}
/**
* 根据key值读取配置的值
* Jun 26, 2010 9:15:43 PM
*
* @param key key值
* @return key 键对应的值
* @throws IOException
* @author 朱志杰
*/
public String readValue(String key) throws IOException {
return props.getProperty(key);
}
/**
* 读取properties的全部信息
* Jun 26, 2010 9:21:01 PM
*
* @throws FileNotFoundException 配置文件没有找到
* @throws IOException 关闭资源文件或者加载配置文件错误
* @author 朱志杰
*/
public Map<String, String> readAllProperties() throws FileNotFoundException, IOException {
//保存所有的键值
Map<String, String> map = new HashMap<String, String>();
Enumeration en = props.propertyNames();
while (en.hasMoreElements()) {
String key = (String) en.nextElement();
String Property = props.getProperty(key);
map.put(key, Property);
}
return map;
}
/**
* 设置某个key的值,并保存至文件
* Jun 26, 2010 9:15:43 PM
*
* @param key key值
* @return key 键对应的值
* @throws IOException
* @author 朱志杰
*/
public void setValue(String key, String value) throws IOException {
Properties prop = new Properties();
InputStream fis = new FileInputStream(this.configPath);
// 从输入流中读取属性列表键和元素对
prop.load(fis);
// 调用 Hashtable 的方法 put使用 getProperty 方法提供并行性
// 强制要求为属性的键和值使用字符串返回值是 Hashtable 调用 put 的结果
OutputStream fos = new FileOutputStream(this.configPath);
prop.setProperty(key, value);
// 以适合使用 load 方法加载到 Properties 表中的格式
// 将此 Properties 表中的属性列表键和元素对写入输出流
prop.store(fos, "last update");
//关闭文件
fis.close();
fos.close();
}
/**
* 读取配置文件中key的对应值
*
* @param key
* @return
*/
public static String queryPropertiesByKey(String key) {
if (StringUtils.isBlank(key)) return "";
Properties properties = new Properties();
// 使用InPutStream流读取properties文件
BufferedReader bufferedReader = null;
try {
bufferedReader = new BufferedReader(new FileReader(Path));
properties.load(bufferedReader);
String rel = properties.getProperty(key);
bufferedReader.close();
// 获取key对应的value值
return rel;
} catch (IOException e) {
if(null != bufferedReader){
try {
bufferedReader.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
e.printStackTrace();
}
if(null != bufferedReader){
try {
bufferedReader.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
return "";
}
/**
* 设置配置文件key的value值
*
* @param key
* @param value
*/
public static void setPropertiesByKey(String key, String value) {
// String realpath = ClassUtils.getDefaultClassLoader().getResource("").getPath();
File file = new File(Path);
OrderedProperties properties = new OrderedProperties();
try {
properties.load(new FileInputStream(file));
properties.setProperty(key, value);
FileOutputStream oFile = new FileOutputStream(Path);//true表示追加打开
properties.store(oFile, "The New properties file");
oFile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 读取配置文件中key的对应值
*
* @param key
* @return
*/
public static String queryValue(String key) {
if (StringUtils.isBlank(key)) return "";
Properties properties = new Properties();
BufferedReader bufferedReader = null;
String rel = "";
try {
bufferedReader = new BufferedReader(new FileReader(Path));
properties.load(bufferedReader);
rel = properties.getProperty(key);
if (StringUtils.isNotBlank(rel)) {
rel = rel.trim();
}
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (null != bufferedReader) {
try {
bufferedReader.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
return rel;
}
}

View File

@ -0,0 +1,57 @@
package com.bootdo.util;
import java.util.Random;
public class RandomUtils {
/**
* 获取从a至z长度为length随机数
*
* @return
*/
public static String getRandomStr(int length) {
String base = "abcdefghijklmnopqrstuvwxyz";
Random random = new Random();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < length; i++) {
int number = random.nextInt(base.length());
sb.append(base.charAt(number));
}
return sb.toString();
}
/**
* 获取随机长度随机字符
*
* @param length
* @return
*/
public static String getRandomString(int length) { // length表示生成字符串的长度
String base = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
Random random = new Random();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < length; i++) {
int number = random.nextInt(base.length());
sb.append(base.charAt(number));
}
return sb.toString();
}
/**
* 获取随机长度随机数字
*
* @param length
* @return
*/
public static String getRandomNumString(int length) { // length表示生成字符串的长度
String base = "0123456789";
Random random = new Random();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < length; i++) {
int number = random.nextInt(base.length());
sb.append(base.charAt(number));
}
return sb.toString();
}
}

View File

@ -0,0 +1,65 @@
package com.bootdo.util;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
* ant 加密 工具类
*
* @author bc
* @Date 2020-08-12 9:34
*/
public class SHAUtil {
public static String sha1(String decript) {
try {
MessageDigest digest = MessageDigest.getInstance("SHA-1");
digest.update(decript.getBytes());
byte[] messageDigest = digest.digest();
// Create Hex String
StringBuffer hexString = new StringBuffer();
// 字节数组转换为 十六进制
for (int i = 0; i < messageDigest.length; i++) {
String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
if (shaHex.length() < 2) {
hexString.append(0);
}
hexString.append(shaHex);
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
System.out.println("字节数组转换异常" + e);
}
return "";
}
/**
* 南京鸿信
*
* @return
*/
public static Map<String, Object> getHeaders() {
Map<String, Object> map = Collections.synchronizedMap(new HashMap<>(5));
String decript = "";
String appId = PropertiesUtil.queryPropertiesByKey("APPID");
String appKey = PropertiesUtil.queryPropertiesByKey("APPKEY");
String nonce = UUID.randomUUID().toString().replace("-", "");
String curTime = String.valueOf(System.currentTimeMillis());
decript = nonce + appKey + curTime;
String checkNum = sha1(decript);
System.out.println("appId:" + appId + ", appKey:" + appKey + ", nonce:" + nonce + ", curTime:" + curTime + ", checkNum:" + checkNum);
map.put("appId", appId);
map.put("appKey", appKey);
map.put("nonce", nonce);
map.put("curTime", curTime);
map.put("checkNum", checkNum);
return map;
}
}

View File

@ -0,0 +1,62 @@
package com.bootdo.util;
import javax.net.ssl.*;
import java.security.KeyStore;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import java.util.Arrays;
public class SSLSocketClient {
//获取这个SSLSocketFactory
public static SSLSocketFactory getSSLSocketFactory() {
try {
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, getTrustManager(), new SecureRandom());
return sslContext.getSocketFactory();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
//获取TrustManager
private static TrustManager[] getTrustManager() {
return new TrustManager[]{
new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[]{};
}
}
};
}
//获取HostnameVerifier
public static HostnameVerifier getHostnameVerifier() {
return (s, sslSession) -> true;
}
public static X509TrustManager getX509TrustManager() {
X509TrustManager trustManager = null;
try {
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init((KeyStore) null);
TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {
throw new IllegalStateException("Unexpected default trust managers:" + Arrays.toString(trustManagers));
}
trustManager = (X509TrustManager) trustManagers[0];
} catch (Exception e) {
e.printStackTrace();
}
return trustManager;
}
}

View File

@ -0,0 +1,61 @@
package com.bootdo.util;
import javax.net.ssl.*;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
/**
*
* @author Miss.Ru
*
*/
public class SslUtils {
private static void trustAllHttpsCertificates() throws Exception {
TrustManager[] trustAllCerts = new TrustManager[1];
TrustManager tm = new miTM();
trustAllCerts[0] = tm;
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
}
static class miTM implements TrustManager,X509TrustManager {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public boolean isServerTrusted(X509Certificate[] certs) {
return true;
}
public boolean isClientTrusted(X509Certificate[] certs) {
return true;
}
public void checkServerTrusted(X509Certificate[] certs, String authType)
throws CertificateException {
return;
}
public void checkClientTrusted(X509Certificate[] certs, String authType)
throws CertificateException {
return;
}
}
/**
* 忽略HTTPS请求的SSL证书必须在openConnection之前调用
* @throws Exception
*/
public static void ignoreSsl() throws Exception{
HostnameVerifier hv = new HostnameVerifier() {
public boolean verify(String urlHostName, SSLSession session) {
System.out.println("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost());
return true;
}
};
trustAllHttpsCertificates();
HttpsURLConnection.setDefaultHostnameVerifier(hv);
}
}

View File

@ -0,0 +1,103 @@
package com.bootdo.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.regex.Pattern;
public class StringKit {
private static final Logger logger = LoggerFactory.getLogger(StringKit.class);
public StringKit() {
}
public static Boolean isEmpty(Object argObject) {
Boolean tbool = false;
String tString = toString(argObject);
if (tString.equals("")) {
tbool = true;
}
return tbool;
}
public static String toString(Object argObject) {
String tmpstr = "";
try {
if (argObject != null) {
tmpstr = argObject.toString();
if ("null".equals(tmpstr) || "underfind".equals(tmpstr) || "undefined".equals(tmpstr) || "{}".equals(tmpstr)) {
tmpstr = "";
}
}
} catch (Exception var3) {
}
return tmpstr;
}
public static boolean isNumeric(String str) {
Pattern pattern = Pattern.compile("[0-9]*");
return pattern.matcher(str).matches();
}
public static boolean isEng(String str) {
Pattern pattern = Pattern.compile("[a-zA-Z]");
return pattern.matcher(str).matches();
}
public static String getTrace(Throwable t) {
StringWriter stringWriter = new StringWriter();
PrintWriter writer = new PrintWriter(stringWriter);
t.printStackTrace(writer);
StringBuffer buffer = stringWriter.getBuffer();
return buffer.toString();
}
/**
* 空时 返回NA(有的厂家字段必填我们没有先用NA补充)
*
* @return
*/
public static String responseNa(Object object) {
if (isEmpty(object)) {
return "NA";
}
return String.valueOf(object);
}
/**
* 检查某个字符串出现几次
*
* @return
*/
public static Integer getStrCount(String str, String indexStr) {
//java中判断一个字符出现的次数
//在下面字符串中查找有几个啊
// String str = "啊!我爱你中国!啊,我爱你故乡";
//存放每个字符的数组
String[] strs = new String[str.length()];
//计数该字符出现了多少次
int count = 0;
//先把字符串转换成数组
for (int i = 0; i < strs.length; i++) {
strs[i] = str.substring(i, i + 1);
}
//挨个字符进行查找查找到之后count++
for (int i = 0; i < strs.length; i++) {
if (strs[i].equals(indexStr)) {
count++;
}
}
// System.out.println("一共有"+count+"个啊");
return count;
}
}

View File

@ -0,0 +1,298 @@
package com.bootdo.util;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Component
public class ValidUtil {
private static final Logger log = LoggerFactory.getLogger(ValidUtil.class);
private static final String SM = "SM";
private static final String FSM = "FSM";
private static final int VILLAGE_CODE_LENGTH = 15;
/**
* 校验身份证号
*
* @param idCard
* @return
*/
public String checkIdCard(String idCard) {
if (StringUtils.isBlank(idCard)) {
return "";
}
if (idCard.length() != 18) {
return "";
}
return idCard.trim();
}
/**
* 检测是否带眼镜
*
* @param glasses
* @return
*/
public String checkGlasses(String glasses) {
if (StringUtils.isBlank(glasses)) {
return "0";
}
int glassInt = 0;
try {
glassInt = Integer.parseInt(glasses);
} catch (Exception e) {
return "0";
}
if (glassInt == 0 || glassInt == 1 || glassInt == 2) {
glasses = String.valueOf(glassInt);
} else {
return "0";
}
return glasses;
}
/**
* 是否戴帽子
*
* @param hat
* @return
*/
public String checkHat(String hat) {
if (StringUtils.isBlank(hat)) {
return "0";
}
int hatInt = 0;
try {
hatInt = Integer.parseInt(hat);
} catch (Exception e) {
return "0";
}
if (hatInt == 0 || hatInt == 1 || hatInt == 2) {
hat = String.valueOf(hatInt);
} else {
return "0";
}
return hat;
}
/**
* 是否戴口罩
*
* @param mask
* @return
*/
public String checkMask(String mask) {
if (StringUtils.isBlank(mask)) {
return "0";
}
int maskInt = 0;
try {
maskInt = Integer.parseInt(mask);
} catch (Exception e) {
return "0";
}
if (maskInt == 0 || maskInt == 1 || maskInt == 2) {
mask = String.valueOf(maskInt);
} else {
return "0";
}
return mask;
}
/**
* 档案编号
*
* @param dossierCode
* @return
*/
public String checkDossierCode(String dossierCode) {
if (StringUtils.isBlank(dossierCode) || dossierCode.equals("0")) {
return "";
}
int dossierCodeInt = 0;
try {
dossierCodeInt = Integer.parseInt(dossierCode);
} catch (Exception e) {
return "";
}
return String.valueOf(dossierCodeInt);
}
/**
* 相似度
*
* @param similarity
* @return
*/
public String checkSimilarity(String similarity) {
if (StringUtils.isBlank(similarity) || similarity.equals("0")) {
return "";
}
int similarityInt = 0;
try {
similarityInt = Integer.parseInt(similarity);
} catch (Exception e) {
return "";
}
return String.valueOf(similarityInt);
}
public String checkIvsDeviceCode(String isvCode) {
if (StringUtils.isBlank(isvCode) || isvCode.equals("0")) {
return "";
}
return String.valueOf(isvCode.trim());
}
/**
* 入库档案编号
* ivsCode ivs服务器SN
* dossierCode 样本库和陌生人库id
*/
public String dealDossierCode(String ivsCode, String idCard, String dossierCode) {
if (StringUtils.isBlank(ivsCode)
|| StringUtils.isBlank(dossierCode)
|| "0".equals(ivsCode)) {
return "";
}
if (StringUtils.isBlank(idCard)) {
return FSM + "-" + ivsCode + "-" + dossierCode;
} else {
return SM + "-" + ivsCode + "-" + dossierCode;
}
}
/**
* 人脸比对结果
* 1比对成功 2比对失败 3未比对
*
* @param idCard
* @return
*/
public int dealCompare(String idCard) {
if (StringUtils.isBlank(idCard)) {
return 3;
}
if (idCard.length() == 18) {
return 1;
}
return 2;
}
public boolean checkTime(String time) {
try {
if (StringUtils.isBlank(time)
|| time.length() != 10) {
log.error("checkTime time:" + time);
return false;
}
String s = DateTool.yearMonthDay(time);
if (StringUtils.isBlank(s) || s.contains("-00")) {
return false;
}
} catch (Exception e) {
log.error("checkTime Exception:" + e.getMessage());
return false;
}
return true;
}
/**
* 车牌颜色
*
* @param color
* @return
*/
public int dealPlateColor(String color) {
if (StringUtils.isBlank(color)) {
return 7;
}
if ("".equals(color) || "黄色".equals(color)) {
return 1;
}
if ("".equals(color) || "蓝色".equals(color)) {
return 2;
}
if ("".equals(color) || "白色".equals(color)) {
return 3;
}
if ("".equals(color) || "黑色".equals(color)) {
return 4;
}
if ("绿".equals(color) || "绿色".equals(color)) {
return 5;
}
if ("黄绿".equals(color) || "黄绿色".equals(color)) {
return 6;
}
return 7;
}
/**
* 车身颜色
*
* @param color
* @return
*/
public int dealVehicleColor(String color) {
if (StringUtils.isBlank(color)) {
return 99;
}
if ("".equals(color) || "黑色".equals(color)) {
return 1;
}
if ("".equals(color) || "白色".equals(color)) {
return 2;
}
if ("".equals(color) || "灰色".equals(color)) {
return 3;
}
if ("".equals(color) || "红色".equals(color)) {
return 4;
}
if ("".equals(color) || "蓝色".equals(color)) {
return 5;
}
if ("".equals(color) || "黄色".equals(color)) {
return 6;
}
if ("".equals(color) || "橙色".equals(color)) {
return 7;
}
if ("".equals(color) || "棕色".equals(color)) {
return 8;
}
if ("绿".equals(color) || "绿色".equals(color)) {
return 9;
}
if ("".equals(color) || "紫色".equals(color)) {
return 10;
}
if ("".equals(color) || "青色".equals(color)) {
return 11;
}
if ("".equals(color) || "粉色".equals(color)) {
return 12;
}
if ("透明".equals(color) || "透明色".equals(color)) {
return 13;
}
return 99;
}
public String checkVillageCode(String villageCode) {
if (StringUtils.isBlank(villageCode)) {
return "";
}
villageCode = villageCode.trim();
if (villageCode.length() != VILLAGE_CODE_LENGTH) {
return "";
}
return villageCode;
}
}

View File

@ -0,0 +1,35 @@
package com.bootdo.util.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.task.TaskExecutor;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.ThreadPoolExecutor;
@Configuration
@EnableAsync
public class AsyncConfig {
@Bean
public TaskExecutor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
// 设置核心线程数
executor.setCorePoolSize(5);
// 设置最大线程数
executor.setMaxPoolSize(10);
// 设置队列容量
executor.setQueueCapacity(20);
// 设置线程活跃时间
executor.setKeepAliveSeconds(60);
// 设置默认线程名称
executor.setThreadNamePrefix("lawrence-");
// 设置拒绝策略
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
// 等待所有任务结束后再关闭线程池
executor.setWaitForTasksToCompleteOnShutdown(true);
return executor;
}
}

View File

@ -0,0 +1,14 @@
package com.bootdo.util.config;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
@Component
public class Text {
@Async
public void sayHellot(int i){
// System.out.println(i+"---"+System.currentTimeMillis());
}
}

View File

@ -0,0 +1,68 @@
//package com.bootdo.util.kafka;
//
//import java.util.Properties;
//
//import com.alibaba.fastjson.JSONObject;
//import com.bootdo.dataaccess.dianxin.domain.dfwl.DfwlVehicleRecord;
//import org.apache.kafka.clients.producer.KafkaProducer;
//import org.apache.kafka.clients.producer.ProducerRecord;
//
//public class ProducerDemo {
//
// private final KafkaProducer<String, String> producer;
//
// public final static String TOPIC = "third_vehicle_access_log";
//
// private ProducerDemo() {
// Properties props = new Properties();
// props.put("bootstrap.servers", "32.132.2.71:9092");//xxx服务器ip
//// props.put("bootstrap.servers", "xxx:9092,1xxx:9092,xxx:9092");//xxx服务器ip
// props.put("acks", "all");//所有follower都响应了才认为消息提交成功"committed"
// props.put("retries", 0);//retries = MAX 无限重试直到你意识到出现了问题:)
// props.put("batch.size", 16384);//producer将试图批处理消息记录以减少请求次数.默认的批量处理消息字节数
// //batch.size当批量的数据大小达到设定值后就会立即发送不顾下面的linger.ms
// props.put("linger.ms", 1);//延迟1ms发送这项设置将通过增加小的延迟来完成--不是立即发送一条记录producer将会等待给定的延迟时间以允许其他消息记录发送这些消息记录可以批量处理
// props.put("buffer.memory", 33554432);//producer可以用来缓存数据的内存大小
// props.put("key.serializer",
// "org.apache.kafka.common.serialization.IntegerSerializer");
// props.put("value.serializer",
// "org.apache.kafka.common.serialization.StringSerializer");
//
// producer = new KafkaProducer<String, String>(props);
// }
//
// public void produce() {
// int messageNo = 1;
// final int COUNT = 5;
//
// while(messageNo < COUNT) {
// String key = String.valueOf(messageNo);
//
// DfwlVehicleRecord newBean = new DfwlVehicleRecord() ;
// newBean.setEquipmentIP("192.168.11.2");
// newBean.setVillageCode("WT_320903_LYXC_2021052615");
// newBean.setEnterOrOut("0");
// newBean.setPlatePicUrl("url");
// newBean.setCarUrl("url");
// newBean.setSenceUrl("url");
// newBean.setImageFormat("base64");
// newBean.setPassTime("2021-01-01 00:00:00");
// newBean.setPlateNo("1");
// newBean.setAvObj("1");
// newBean.setAvObjName("test");
// newBean.setSource("4");
//
// String data = String.format(JSONObject.toJSONString(newBean), key);
//
// try {
// producer.send(new ProducerRecord<String, String>(TOPIC, data));
// } catch (Exception e) {
// e.printStackTrace();
// }
// messageNo++;
// }
//
// producer.close();
// }
//
//}

View File

@ -0,0 +1,35 @@
//package com.bootdo.util.kafka;
//import java.util.Arrays;
//import java.util.Properties;
//
//import org.apache.kafka.clients.consumer.ConsumerRecord;
//import org.apache.kafka.clients.consumer.ConsumerRecords;
//import org.apache.kafka.clients.consumer.KafkaConsumer;
//
//
//public class UserKafkaConsumer extends Thread {
//
// public static void main(String[] args){
// Properties properties = new Properties();
// properties.put("bootstrap.servers", "32.132.2.71:9092");//xxx是服务器集群的ip
// properties.put("group.id", "jd-group");
// properties.put("enable.auto.commit", "true");
// properties.put("auto.commit.interval.ms", "1000");
// properties.put("auto.offset.reset", "latest");
// properties.put("session.timeout.ms", "30000");
// properties.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
// properties.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
//
// KafkaConsumer<String, String> kafkaConsumer = new KafkaConsumer<>(properties);
// kafkaConsumer.subscribe(Arrays.asList("test5"));
// while (true) {
// ConsumerRecords<String, String> records = kafkaConsumer.poll(100);
// for (ConsumerRecord<String, String> record : records) {
// System.out.println("-----------------");
// System.out.printf("offset = %d, value = %s", record.offset(), record.value());
// System.out.println();
// }
// }
//
// }
//}

View File

@ -0,0 +1,90 @@
package com.bootdo.util.safe;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
/**
* @author daifei
* @Description: AES对称加密工具类
* @date 2021年4月14日
*/
public class AESTools {
private static final Logger log = LoggerFactory.getLogger(AESTools.class);
private static final String KEY_ALGORITHM = "AES";
private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";// 默认的加密算法
/**
* AES 加密操作
*
* @param content 待加密内容
* @param password 加密密码
* @return 返回Base64转码后的加密数据
*/
public static String encrypt(String content, String password) {
if (StringUtils.isBlank(content)) {
return "";
}
try {
Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);// 创建密码器
byte[] byteContent = content.getBytes("utf-8");
cipher.init(Cipher.ENCRYPT_MODE, getSecretKey(password));// 初始化为加密模式的密码器
byte[] result = cipher.doFinal(byteContent);// 加密
return Base64Tools.encodeToString(result);// 通过Base64转码返回
} catch (Exception ex) {
log.error("AES加密失败:" + content);
return "";
}
}
/**
* AES 解密操作
*
* @param content
* @param password
* @return
*/
public static String decrypt(String content, String password) {
if (StringUtils.isBlank(content)) {
return "";
}
try {
// 实例化
Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
// 使用密钥初始化设置为解密模式
cipher.init(Cipher.DECRYPT_MODE, getSecretKey(password));
// 执行操作
byte[] result = cipher.doFinal(Base64Tools.decodeFromString(content));
return new String(result, "utf-8");
} catch (Exception ex) {
log.error("AES解密失败:" + content);
return "";
}
}
/**
* 生成加密秘钥
*
* @return
*/
private static SecretKeySpec getSecretKey(final String password) {
try {
return new SecretKeySpec(password.getBytes("UTF-8"), KEY_ALGORITHM);// 转换为AES专用密钥
} catch (Exception ex) {
LoggerFactory.getLogger(AESTools.class).error("", ex);
throw new RuntimeException("生成加密秘钥");
}
}
}

View File

@ -0,0 +1,7 @@
package com.bootdo.util.safe;
public class AesConstant {
public static final String AES_COMMON = "watu2022G409watu";
public static final String AES_PHONE = "phoneG409WaTuNj1";
public static final String AES_ID_CARD = "idCardG409WaTuNj";
}

View File

@ -0,0 +1,116 @@
package com.bootdo.util.safe;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public abstract class Base64Tools {
private static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;
/**
* Base64-encode the given byte array.
*
* @param src the original byte array
* @return the encoded byte array
*/
public static byte[] encode(byte[] src) {
if (src.length == 0) {
return src;
}
return Base64.getEncoder().encode(src);
}
/**
* Base64-decode the given byte array.
*
* @param src the encoded byte array
* @return the original byte array
*/
public static byte[] decode(byte[] src) {
if (src.length == 0) {
return src;
}
return Base64.getDecoder().decode(src);
}
/**
* Base64-encode the given byte array using the RFC 4648
* "URL and Filename Safe Alphabet".
*
* @param src the original byte array
* @return the encoded byte array
* @since 4.2.4
*/
public static byte[] encodeUrlSafe(byte[] src) {
if (src.length == 0) {
return src;
}
return Base64.getUrlEncoder().encode(src);
}
/**
* Base64-decode the given byte array using the RFC 4648
* "URL and Filename Safe Alphabet".
*
* @param src the encoded byte array
* @return the original byte array
* @since 4.2.4
*/
public static byte[] decodeUrlSafe(byte[] src) {
if (src.length == 0) {
return src;
}
return Base64.getUrlDecoder().decode(src);
}
/**
* Base64-encode the given byte array to a String.
*
* @param src the original byte array (may be {@code null})
* @return the encoded byte array as a UTF-8 String
*/
public static String encodeToString(byte[] src) {
if (src.length == 0) {
return "";
}
return new String(encode(src), DEFAULT_CHARSET);
}
/**
* Base64-decode the given byte array from an UTF-8 String.
*
* @param src the encoded UTF-8 String
* @return the original byte array
*/
public static byte[] decodeFromString(String src) {
if (src.isEmpty()) {
return new byte[0];
}
return decode(src.getBytes(DEFAULT_CHARSET));
}
/**
* Base64-encode the given byte array to a String using the RFC 4648
* "URL and Filename Safe Alphabet".
*
* @param src the original byte array
* @return the encoded byte array as a UTF-8 String
*/
public static String encodeToUrlSafeString(byte[] src) {
return new String(encodeUrlSafe(src), DEFAULT_CHARSET);
}
/**
* Base64-decode the given byte array from an UTF-8 String using the RFC 4648
* "URL and Filename Safe Alphabet".
*
* @param src the encoded UTF-8 String
* @return the original byte array
*/
public static byte[] decodeFromUrlSafeString(String src) {
return decodeUrlSafe(src.getBytes(DEFAULT_CHARSET));
}
}

View File

@ -0,0 +1,64 @@
package com.bootdo.util.safe;
/**
* 签名算法类型
*/
public enum SignAlgorithm {
// The RSA signature algorithm
NONEwithRSA("NONEwithRSA", "RSA"),
// The MD2/MD5 with RSA Encryption signature algorithm
MD2withRSA("MD2withRSA", "RSA"),
MD5withRSA("MD5withRSA", "RSA"),
// The signature algorithm with SHA-* and the RSA
SHA1withRSA("SHA1withRSA", "RSA"),
SHA256withRSA("SHA256withRSA", "RSA"),
SHA384withRSA("SHA384withRSA", "RSA"),
SHA512withRSA("SHA512withRSA", "RSA"),
// The Digital Signature Algorithm
NONEwithDSA("NONEwithDSA", "DSA"),
// The DSA with SHA-1 signature algorithm
SHA1withDSA("SHA1withDSA", "DSA"),
// The ECDSA signature algorithms
NONEwithECDSA("NONEwithECDSA", "EC"),
SHA1withECDSA("SHA1withECDSA", "EC"),
SHA256withECDSA("SHA256withECDSA", "EC"),
SHA384withECDSA("SHA384withECDSA", "EC"),
SHA512withECDSA("SHA512withECDSA", "EC");//
private String value;
private String type;
/**
* 构造
*
* @param value 算法字符表示区分大小写
* @param type XXXwithXXX算法的后半部分算法如果为ECDSA返回算法为EC
*/
private SignAlgorithm(String value, String type) {
this.value = value;
this.type = type;
}
/**
* 获取算法字符串表示区分大小写
*
* @return 算法字符串表示
*/
public String getValue() {
return this.value;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}

View File

@ -0,0 +1,89 @@
package com.bootdo.util.safe;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.KeySpec;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
public class SignatureTools {
private static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;
/**
* sha256WithRsa 加签
*
* @param content 待签名的字符串
* @param priKeyBase64 base64编码的私钥
* @return base64编码的签名
*/
public static String rsa256Sign(String content, String priKeyBase64) {
byte[] signed = sign(SignAlgorithm.SHA256withRSA, content.getBytes(DEFAULT_CHARSET), Base64Tools.decodeFromString(priKeyBase64));
return Base64Tools.encodeToString(signed);
}
/**
* sha256WithRsa 验签
*
* @param content 待验签的字符串
* @param pubKeyBase64 base64编码的公钥
* @param signBase64 base64编码签名
* @return 签名是否正确
*/
public static boolean rsa256Verify(String content, String pubKeyBase64, String signBase64) {
return verify(SignAlgorithm.SHA256withRSA, content.getBytes(DEFAULT_CHARSET), Base64Tools.decodeFromString(signBase64),
Base64Tools.decodeFromString(pubKeyBase64));
}
public static byte[] sign(SignAlgorithm algorithm, byte[] content, byte[] key) {
try {
PrivateKey priKey = generatePrivateKey(algorithm, key);
java.security.Signature signature = java.security.Signature.getInstance(algorithm.getValue());
signature.initSign(priKey);
signature.update(content);
byte[] signed = signature.sign();
return signed;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static boolean verify(SignAlgorithm algorithm, byte[] content, byte[] sign, byte[] key) {
try {
java.security.Signature signature = java.security.Signature.getInstance(algorithm.getValue());
PublicKey publicKey = generatePublicKey(algorithm, key);
signature.initVerify(publicKey);
signature.update(content);
return signature.verify(sign);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
public static PrivateKey generatePrivateKey(SignAlgorithm algorithmType, byte[] key)
throws InvalidKeySpecException, NoSuchAlgorithmException {
return generatePrivateKey(algorithmType, new PKCS8EncodedKeySpec(key));
}
public static PrivateKey generatePrivateKey(SignAlgorithm algorithmType, KeySpec keySpec)
throws InvalidKeySpecException, NoSuchAlgorithmException {
return KeyFactory.getInstance(algorithmType.getType()).generatePrivate(keySpec);
}
public static PublicKey generatePublicKey(SignAlgorithm algorithm, byte[] key)
throws InvalidKeySpecException, NoSuchAlgorithmException {
return generatePublicKey(algorithm, new X509EncodedKeySpec(key));
}
public static PublicKey generatePublicKey(SignAlgorithm algorithm, KeySpec keySpec)
throws InvalidKeySpecException, NoSuchAlgorithmException {
return KeyFactory.getInstance(algorithm.getType()).generatePublic(keySpec);
}
}

View File

@ -0,0 +1,60 @@
spring:
datasource: #数据库
type: com.alibaba.druid.pool.DruidDataSource
username: root
password: '1qaz!QAZ'
url: jdbc:mysql://221.229.107.118:30519/multidimensional_box?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&serverTimezone=GMT
driver-class-name: com.mysql.cj.jdbc.Driver
initialSize: 5 # 配置初始化大小、最小、最大
minIdle: 5
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 30000
validationQuery: SELECT 'x'
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 打开PSCache并且指定每个连接上PSCache的大小。如果用Oracle则把poolPreparedStatements配置为truemysql可以配置为false。分库分表较多的数据库建议配置为false。
poolPreparedStatements: false
maxPoolPreparedStatementPerConnectionSize: 20
# 配置监控统计拦截的filters,wall防sql注入日志
filters: stat, wall, log4j
main:
allow-circular-references: true
jpa:
show-sql: true
properties:
hibernate:
format_sql: true
rabbitmq:
host: 110.1.200.11
port: 19000
username: root
password: 'sm@rtC@m!n23ty'
dynamic: true
#mybatis:
# type-aliases-package: com.bootdo.pretreatment.*.entity
# mapper-locations: classpath:mapper/*.xml,classpath:mapper/*/*.xml,classpath:mapper/*/*/*.xml
#wt:
# version: 1.0.0
mybatis:
configuration:
map-underscore-to-camel-case: true
mapper-locations: classpath:mapper/*.xml,classpath:mapper/*/*.xml,classpath:mapper/*/*/*.xml
typeAliasesPackage: com.bootdo.datasend.**.domain
logging:
level:
org.hibernate.SQL: DEBUG
org.hibernate.type.descriptor.sql.BasicBinder: TRACE
server:
port: 8301
config: file:config/logback.xml

View File

@ -0,0 +1,22 @@
////////////////////////////////////////////////////////////////////
// _ooOoo_ //
// o8888888o //
// 88" . "88 //
// (| ^_^ |) //
// O\ = /O //
// ____/`---'\____ //
// .' \\| |// `. //
// / \\||| : |||// \ //
// / _||||| -:- |||||- \ //
// | | \\\ - /// | | //
// | \_| ''\---/'' | | //
// \ .-\__ `-` ___/-. / //
// ___`. .' /--.--\ `. . ___ //
// ."" '< `.___\_<|>_/___.' >'"". //
// | | : `- \`.;`\ _ /`;.`/ - ` : | | //
// \ \ `-. \_ __\ /__ _/ .-` / / //
// ========`-.____`-.___\_____/___.-`____.-'======== //
// `=---=' //
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //
// 佛祖保佑 永不宕机 永无BUG //
////////////////////////////////////////////////////////////////////

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 日志存放路径 -->
<property name="log.path" value="/home/project/dataSend/log"/>
<!-- 日志输出格式 -->
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- 系统日志输出 -->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/info.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/%d{yyyy-MM-dd}.info.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<cleanHistoryOnStart>true</cleanHistoryOnStart>
<maxHistory>2</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/error.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/%d{yyyy-MM-dd}.error.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<cleanHistoryOnStart>true</cleanHistoryOnStart>
<maxHistory>2</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>ERROR</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 系统模块日志级别控制 -->
<logger name="com.bootdo" level="info"/>
<!-- Spring日志级别控制 -->
<logger name="org.springframework" level="warn"/>
<root level="info">
<appender-ref ref="console"/>
</root>
<!--系统操作日志-->
<root level="info">
<appender-ref ref="file_info"/>
<appender-ref ref="file_error"/>
</root>
<root level="error">
<appender-ref ref="file_error"/>
</root>
</configuration>