数据备份新增
This commit is contained in:
parent
2910ea7ee0
commit
160650c086
@ -67,6 +67,9 @@ public class TDEngineService {
|
||||
}
|
||||
}
|
||||
|
||||
public HikariDataSource getHikariDataSource(){
|
||||
return hikariDataSource;
|
||||
}
|
||||
/**
|
||||
* 创建超级表
|
||||
*/
|
||||
|
@ -25,6 +25,7 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.StopWatch;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.function.Function;
|
||||
|
@ -0,0 +1,120 @@
|
||||
package com.das.modules.data.service.impl;
|
||||
|
||||
import cn.hutool.core.util.ZipUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.das.modules.data.service.TDEngineService;
|
||||
import com.das.modules.equipment.entity.SysEquipment;
|
||||
import com.das.modules.equipment.mapper.SysEquipmentMapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.StopWatch;
|
||||
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.sql.*;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class ExportTdDataServiceImpl {
|
||||
|
||||
@Autowired
|
||||
SysEquipmentMapper sysEquipmentMapper;
|
||||
|
||||
@Autowired
|
||||
private TDEngineService tdEngineService;
|
||||
|
||||
@Value("${zipUrl}")
|
||||
private String fileUrl;
|
||||
|
||||
|
||||
public void exportDataCsvZip() throws IOException, SQLException {
|
||||
StopWatch stopWatch = new StopWatch();
|
||||
stopWatch.start("导出风机数据zip");
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.add(Calendar.DAY_OF_MONTH, -1);
|
||||
String yesterday = new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime());
|
||||
|
||||
//获取所有风机数据
|
||||
QueryWrapper<SysEquipment> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("object_type", 10002);
|
||||
List<SysEquipment> sysEquipments = sysEquipmentMapper.selectList(queryWrapper);
|
||||
//获取临时目录文件路径
|
||||
String tempDir = String.valueOf(Files.createTempDirectory(null));
|
||||
File zipFile = new File(fileUrl + "/data_"+yesterday+".zip");
|
||||
List<File> fileList = new ArrayList<>();
|
||||
try {
|
||||
for (SysEquipment item : sysEquipments) {
|
||||
|
||||
String hTableName = "h" + item.getId();
|
||||
String lTableName = "l" + item.getId();
|
||||
File fileHighSpeed = new File(tempDir +"/" + "h_"+item.getCode()+"_"+yesterday + ".csv");
|
||||
File fileLowSpeed = new File(tempDir +"/" + "l_"+item.getCode()+"_"+yesterday + ".csv");
|
||||
getYesterdayData(hTableName, yesterday, fileHighSpeed.getPath());
|
||||
getYesterdayData(lTableName, yesterday, fileLowSpeed.getPath());
|
||||
fileList.add(fileLowSpeed);
|
||||
fileList.add(fileHighSpeed);
|
||||
}
|
||||
//压缩文件
|
||||
// 将文件添加到压缩文件中
|
||||
ZipUtil.zip(zipFile, false, fileList.toArray(new File[0]));
|
||||
stopWatch.stop();
|
||||
log.debug(stopWatch.prettyPrint(TimeUnit.SECONDS));
|
||||
}catch (Exception e){
|
||||
log.error("导出风机数据zip失败{}",e);
|
||||
}
|
||||
// finally {
|
||||
// if (!CollectionUtils.isEmpty(fileList)){
|
||||
// FileUtil.del(new File(fileList.get(0).getParent()));
|
||||
// }
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
public void getYesterdayData(String tableName, String time, String csvFilePath) {
|
||||
// TDengine 查询语句
|
||||
String query = "SELECT * FROM " + tableName + " WHERE updatetime >= '" + time + " 00:00:00' AND updatetime < '" + time + " 23:59:59.999'";
|
||||
try (Connection conn = tdEngineService.getHikariDataSource().getConnection();
|
||||
Statement smt = conn.createStatement();
|
||||
ResultSet rs = smt.executeQuery(query)) {
|
||||
writeResultSetToCsv(rs, csvFilePath);
|
||||
}catch (Exception e){
|
||||
log.error(tableName +"获取数据异常{}",e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void writeResultSetToCsv(ResultSet resultSet, String csvFilePath) throws IOException, SQLException {
|
||||
try (BufferedWriter writer = new BufferedWriter(new FileWriter(csvFilePath))) {
|
||||
// 写入列名
|
||||
ResultSetMetaData metaData = resultSet.getMetaData();
|
||||
int columnCount = metaData.getColumnCount();
|
||||
for (int i = 1; i <= columnCount; i++) {
|
||||
writer.write(metaData.getColumnName(i));
|
||||
if (i < columnCount) writer.write(",");
|
||||
}
|
||||
writer.newLine();
|
||||
|
||||
// 写入数据
|
||||
while (resultSet.next()) {
|
||||
for (int i = 1; i <= columnCount; i++) {
|
||||
String value = resultSet.getString(i);
|
||||
writer.write(value == null ? "" : resultSet.getString(i));
|
||||
if (i < columnCount) writer.write(",");
|
||||
}
|
||||
writer.newLine();
|
||||
}
|
||||
}catch (Exception e){
|
||||
log.error("数据写入csv文件失败{}",e);
|
||||
}
|
||||
}
|
||||
}
|
@ -110,4 +110,6 @@ minio:
|
||||
url: http://192.168.109.187:9000
|
||||
bucket: das
|
||||
accessKey: das
|
||||
secretKey: zaq12WSX
|
||||
secretKey: zaq12WSX
|
||||
|
||||
zipUrl: /log/zip/
|
@ -113,4 +113,6 @@ minio:
|
||||
bucket: das
|
||||
publicBucket: das-dock
|
||||
accessKey: das
|
||||
secretKey: zaq12WSX
|
||||
secretKey: zaq12WSX
|
||||
|
||||
zipUrl: /log/zip/
|
Loading…
Reference in New Issue
Block a user