清除上云工作,艹

dongguan-huaweiyun
LAPTOP-S9HJSOEB\昊天 1 year ago
parent 35d1b8fdc9
commit 86664c7dc7

@ -1,9 +1,6 @@
package com.leaper.web.config;
import com.leaper.web.task.S3Utils;
import org.springframework.cache.CacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.annotation.Resource;
@ -15,11 +12,5 @@ public class S3Config {
@Resource
ConfigProperties properties;
@Bean
public S3Utils s3Utils() {
S3Utils s3Utils = new S3Utils();
s3Utils.init(properties.getS3Config().getAccessKey(), properties.getS3Config().getSecretKey(), properties.getS3Config().getHost());
return s3Utils;
}
}

@ -12,7 +12,6 @@ import com.leaper.web.lib.CameraControlModule;
import com.leaper.web.lib.hik.HikCameraControlModuleImpl;
import com.leaper.web.mapper.CameraRecordDuojiMapper;
import com.leaper.web.pojo.street.StreetSearch;
import com.leaper.web.task.S3Utils;
import com.zhehekeji.core.pojo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -42,76 +41,73 @@ public class CameraRecord {
@Resource
ConfigProperties configProperties;
@Resource
S3Utils s3Utils;
@PostMapping("/record")
@ApiOperation(value = "回放列表 ")
@LicenseHandler
public Result<Record> record(@RequestBody Record record) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-M-d");
LocalDate today = LocalDate.parse(record.getDate(), formatter);
LocalDateTime startOfDay = LocalDateTime.of(today, LocalTime.MIN);
LocalDateTime endOfDay = LocalDateTime.of(today, LocalTime.MAX);
List<CameraRecordDuoji> cameraRecordDuoji = cameraRecordDuojiMapper.selectList(new QueryWrapper<CameraRecordDuoji>()
.eq("camera_Id", record.getCameraId())
.ge("start_Time", startOfDay)
.le("end_Time", endOfDay)
.orderByAsc("start_Time"));
record.setStartTimeLong(0L);
record.setEndTimeLong(24L * 60 * 60);
List<Record> urls = cameraRecordDuoji.stream()
.map(cameraRecordDuoji1 -> {
Record r = new Record();
r.setUrl( "/"+configProperties.getS3Config().getBucketName() +"/"+cameraRecordDuoji1.getPath() +".mp4");
r.setStartTimeLong(toSecondsSinceMidnight(cameraRecordDuoji1.getStartTime()));
r.setEndTimeLong(toSecondsSinceMidnight(cameraRecordDuoji1.getEndTime()));
return r;
})
.collect(Collectors.toList());
record.setUrls(urls);
return new Result<>(record);
}
@PostMapping("/convetor")
@ApiOperation(value = "视频转换 ")
@LicenseHandler
public Result<Boolean> convetor(@RequestBody Record record) {
String url = record.getUrl().replace(".mp4","").replace("/"+configProperties.getS3Config().getBucketName() ,"").substring(1);
// 文件或目录的路径
String filePath =configProperties.getS3Config().getUrlCache() +url+".mp4";
// 创建一个File对象
File file = new File(filePath);
if(file.exists()){
return new Result<>(true);
}else {
s3Utils.downloadFile(configProperties.getS3Config().getBucketName(), url, configProperties.getS3Config().getUrlCache() + url);
HikCameraControlModuleImpl.convetor(configProperties.getS3Config().getUrlCache() + url, filePath);
return new Result<>(true);
}
}
@PostMapping("/1")
@ApiOperation(value = "视频转换 ")
@LicenseHandler
public Result<Boolean> booleanResult(@RequestBody Record record) {
return new Result<>(true);
}
private static long toSecondsSinceMidnight(LocalDateTime dateTime) {
LocalDateTime midnight = dateTime.toLocalDate().atStartOfDay();
Duration duration = Duration.between(midnight, dateTime);
return duration.getSeconds();
}
public static void main(String[] args) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-M-dd");
LocalDate today = LocalDate.parse("2024-8-6", formatter);
System.out.printf(today.toString());
}
//
// @PostMapping("/record")
// @ApiOperation(value = "回放列表 ")
// @LicenseHandler
// public Result<Record> record(@RequestBody Record record) {
//
// DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-M-d");
//
// LocalDate today = LocalDate.parse(record.getDate(), formatter);
//
// LocalDateTime startOfDay = LocalDateTime.of(today, LocalTime.MIN);
// LocalDateTime endOfDay = LocalDateTime.of(today, LocalTime.MAX);
// List<CameraRecordDuoji> cameraRecordDuoji = cameraRecordDuojiMapper.selectList(new QueryWrapper<CameraRecordDuoji>()
// .eq("camera_Id", record.getCameraId())
// .ge("start_Time", startOfDay)
// .le("end_Time", endOfDay)
// .orderByAsc("start_Time"));
// record.setStartTimeLong(0L);
// record.setEndTimeLong(24L * 60 * 60);
// List<Record> urls = cameraRecordDuoji.stream()
// .map(cameraRecordDuoji1 -> {
// Record r = new Record();
// r.setUrl( "/"+configProperties.getS3Config().getBucketName() +"/"+cameraRecordDuoji1.getPath() +".mp4");
// r.setStartTimeLong(toSecondsSinceMidnight(cameraRecordDuoji1.getStartTime()));
// r.setEndTimeLong(toSecondsSinceMidnight(cameraRecordDuoji1.getEndTime()));
// return r;
// })
// .collect(Collectors.toList());
// record.setUrls(urls);
//
// return new Result<>(record);
// }
////
//// @PostMapping("/convetor")
//// @ApiOperation(value = "视频转换 ")
//// @LicenseHandler
//// public Result<Boolean> convetor(@RequestBody Record record) {
//// String url = record.getUrl().replace(".mp4","").replace("/"+configProperties.getS3Config().getBucketName() ,"").substring(1);
//// // 文件或目录的路径
//// String filePath =configProperties.getS3Config().getUrlCache() +url+".mp4";
//// // 创建一个File对象
//// File file = new File(filePath);
//// if(file.exists()){
//// return new Result<>(true);
//// }else {
//// s3Utils.downloadFile(configProperties.getS3Config().getBucketName(), url, configProperties.getS3Config().getUrlCache() + url);
//// HikCameraControlModuleImpl.convetor(configProperties.getS3Config().getUrlCache() + url, filePath);
//// return new Result<>(true);
//// }
//// }
// @PostMapping("/1")
// @ApiOperation(value = "视频转换 ")
// @LicenseHandler
// public Result<Boolean> booleanResult(@RequestBody Record record) {
// return new Result<>(true);
// }
// private static long toSecondsSinceMidnight(LocalDateTime dateTime) {
// LocalDateTime midnight = dateTime.toLocalDate().atStartOfDay();
// Duration duration = Duration.between(midnight, dateTime);
// return duration.getSeconds();
// }
//
// public static void main(String[] args) {
//
// DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-M-dd");
//
// LocalDate today = LocalDate.parse("2024-8-6", formatter);
// System.out.printf(today.toString());
// }
}

@ -101,15 +101,18 @@ public class HikLoginModuleImpl implements CameraControlLoginModule {
//byStartDChan为IP通道起始通道号, 预览回放NVR的IP通道时需要根据起始通道号进行取值
int tryTimes = 0;
while(m_lUserID < 0 && tryTimes < MAX_RECONNET_TIME){
// while(m_lUserID < 0 && tryTimes < MAX_RECONNET_TIME){
// log.error("hik login error,ip:{},port:{},errorCode:{}",m_strIp,m_nPort,hcNetsdk.NET_DVR_GetLastError());
// try {
// Thread.sleep(500);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// m_lUserID = hcNetsdk.NET_DVR_Login_V40(m_strLoginInfo,m_strDeviceInfo);
// tryTimes ++;
// }
if(m_lUserID < 0){
log.error("hik login error,ip:{},port:{},errorCode:{}",m_strIp,m_nPort,hcNetsdk.NET_DVR_GetLastError());
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
m_lUserID = hcNetsdk.NET_DVR_Login_V40(m_strLoginInfo,m_strDeviceInfo);
tryTimes ++;
}
if(m_lUserID >= 0){
log.info("hik login success");

@ -118,7 +118,8 @@ public class CameraService {
ExecutorService executor = Executors.newFixedThreadPool(20);
public PageInfo<Camera> cameras(StreetSearch streetSearch) {
PageHelper.startPage(streetSearch.getPageNum(), streetSearch.getPageSize());
List<Camera> cameras = cameraMapper.selectList(new QueryWrapper<Camera>().eq(streetSearch.getChannel()!=null ,"channel",streetSearch.getChannel()));
List<Camera> cameras = cameraMapper.selectList(new QueryWrapper<Camera>()
.eq(streetSearch.getChannel()!=null ,"channel",streetSearch.getChannel()));
if(cameras.size() > 0){
CountDownLatch latch = new CountDownLatch(cameras.size());
cameras.forEach(camera -> {
@ -131,40 +132,6 @@ public class CameraService {
e.printStackTrace();
}
}
// List<Future<Boolean>> futureTasks = new ArrayList<>();
// for(Camera camera : cameras){
//
// FutureTask<Boolean> futureTask = new FutureTask<>(() -> {
// Boolean ok = false;
// if(CameraConnMap.getConnId(camera.getId())!=null){
// if (configProperties.getCameraConfig().getCameraType() == ConfigProperties.HIK_CAMERA) {
//
// ok = HikLoginModuleImpl.connectStatus(CameraConnMap.getConnId(camera.getId()).intValue());
// } else {
// ok = JoywareLoginModuleImpl.connectStatus(CameraConnMap.getConnId(camera.getId()));
// }
// }
// if (ok) {
// camera.setStatus("连接正常");
// } else {
// //CameraConnMap.disConn(camera.getId());
// camera.setStatus("未连接");
// cameraLogin(camera);
// }
// return ok;
// });
// futureTasks.add(futureTask);
// executor.execute(futureTask);
// }
// for (Future<Boolean> f :futureTasks){
// try {
// f.get();
// } catch (InterruptedException e) {
// throw new RuntimeException(e);
// } catch (ExecutionException e) {
// throw new RuntimeException(e);
// }
// }
return new PageInfo<>(cameras);
}

@ -13,7 +13,6 @@ import com.leaper.web.mapper.*;
import com.leaper.web.service.damLightSource.JYDAMEquip;
import com.leaper.web.service.damLightSource.JYDamHelper;
import com.leaper.web.service.hikLightSource.HikControlSocket;
import com.leaper.web.task.S3Utils;
import lombok.extern.slf4j.Slf4j;
import net.schmizz.sshj.sftp.SFTPClient;
import org.springframework.scheduling.annotation.EnableScheduling;
@ -95,29 +94,28 @@ public class CronTab {
}
}
/**
* s3
*
* @param directory
*/
@Scheduled(cron = "15 0 0 * * ?")
public void clearDirectoryRecursively() {
File directory = new File(configProperties.getS3Config().getUrlCache());
if (directory.exists() && directory.isDirectory()) {
File[] files = directory.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
// 递归调用此方法来清除子目录
clearDirectoryRecursively(file);
}
// 删除文件或空目录
file.delete();
}
}
}
}
//
// /**
// * 递归地清除指定目录下的所有文件和子目录。 s3服务
// *
// */
// @Scheduled(cron = "15 0 0 * * ?")
// public void clearDirectoryRecursively() {
// File directory = new File(configProperties.getS3Config().getUrlCache());
// if (directory.exists() && directory.isDirectory()) {
// File[] files = directory.listFiles();
// if (files != null) {
// for (File file : files) {
// if (file.isDirectory()) {
// // 递归调用此方法来清除子目录
// clearDirectoryRecursively(file);
// }
// // 删除文件或空目录
// file.delete();
// }
// }
// }
// }
public static void clearDirectoryRecursively(File directory) {
if (directory.exists() && directory.isDirectory()) {
File[] files = directory.listFiles();
@ -134,49 +132,47 @@ public class CronTab {
}
}
@Resource
S3Utils s3Utils;
@Resource
CameraRecordDuojiMapper cameraRecordDuojiMapper;
@Resource
CameraControlModule cameraControlModule;
/**
*
*/
@Scheduled(cron = "5 0/1 * * * ? ")
//@Scheduled(cron = "0 0/1 * * * *")
public void s3DownloadFile() {
List<Camera> cameras = cameraMapper.selectList(new QueryWrapper<>());
LocalDate currentDate = LocalDate.now(); // 获取当前日期
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // 设置日期格式
LocalDateTime now = LocalDateTime.now();
//结束时间
LocalDateTime currentMinuteStart = now.minusMinutes(2).withSecond(0).withNano(0);
//开始时间
LocalDateTime previousMinuteStart = now.minusMinutes(3).withSecond(0).withNano(0);
String formattedDate = currentDate.format(formatter);
for (Camera camera : cameras){
if(camera.getChannel() != 1){
continue;
}
String url = formattedDate + "/" +UUID.randomUUID();
boolean ok =cameraControlModule.downloadMp4Stream(camera.getId(), "D:\\" + url, previousMinuteStart, currentMinuteStart, camera.getChannel());
if(ok) {
File file = new File("D:\\" + url);
s3Utils.uploadFile(configProperties.getS3Config().getBucketName(), url, file);
CameraRecordDuoji cameraRecordDuoji = new CameraRecordDuoji();
cameraRecordDuoji.setCameraId(camera.getId());
cameraRecordDuoji.setPath(configProperties.getS3Config().getBucketName()+ "/" +url);
cameraRecordDuoji.setStartTime(previousMinuteStart);
cameraRecordDuoji.setEndTime(currentMinuteStart);
cameraRecordDuoji.setPath(url);
cameraRecordDuojiMapper.insert(cameraRecordDuoji);
file.delete();
}
}
}
//
// /**
// * 每分钟下载前两分钟的文件
// */
// @Scheduled(cron = "5 0/1 * * * ? ")
// //@Scheduled(cron = "0 0/1 * * * *")
// public void s3DownloadFile() {
// List<Camera> cameras = cameraMapper.selectList(new QueryWrapper<>());
// LocalDate currentDate = LocalDate.now(); // 获取当前日期
// DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // 设置日期格式
// LocalDateTime now = LocalDateTime.now();
// //结束时间
// LocalDateTime currentMinuteStart = now.minusMinutes(2).withSecond(0).withNano(0);
// //开始时间
// LocalDateTime previousMinuteStart = now.minusMinutes(3).withSecond(0).withNano(0);
// String formattedDate = currentDate.format(formatter);
// for (Camera camera : cameras){
// if(camera.getChannel() != 1){
// continue;
// }
// String url = formattedDate + "/" +UUID.randomUUID();
// boolean ok =cameraControlModule.downloadMp4Stream(camera.getId(), "D:\\" + url, previousMinuteStart, currentMinuteStart, camera.getChannel());
// if(ok) {
// File file = new File("D:\\" + url);
// s3Utils.uploadFile(configProperties.getS3Config().getBucketName(), url, file);
// CameraRecordDuoji cameraRecordDuoji = new CameraRecordDuoji();
// cameraRecordDuoji.setCameraId(camera.getId());
// cameraRecordDuoji.setPath(configProperties.getS3Config().getBucketName()+ "/" +url);
// cameraRecordDuoji.setStartTime(previousMinuteStart);
// cameraRecordDuoji.setEndTime(currentMinuteStart);
// cameraRecordDuoji.setPath(url);
// cameraRecordDuojiMapper.insert(cameraRecordDuoji);
//
// file.delete();
// }
// }
// }
@Scheduled(cron = "0 * * * * ?")

@ -1,139 +0,0 @@
package com.leaper.web.task;
import com.amazonaws.ClientConfiguration;
import com.amazonaws.Protocol;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.GetObjectRequest;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.PutObjectResult;
import com.amazonaws.services.s3.model.S3Object;
import com.amazonaws.services.s3.model.S3ObjectInputStream;
import com.amazonaws.services.s3.transfer.internal.TransferManagerUtils;
import com.amazonaws.util.IOUtils;
import com.amazonaws.util.json.Jackson;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.concurrent.ExecutorService;
import java.util.logging.Logger;
public class S3Utils {
private static final Logger LOGGER = Logger.getLogger("S3Utils");
/**
* S3
*/
public AmazonS3 s3;
/**
* 线线线线线
*/
private ExecutorService executorService;
/**
*
* @param accessKey AK
* @param secretKey SK
* @param host endpoint S3
*/
public void init(String accessKey, String secretKey, String host) {
AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
ClientConfiguration config = new ClientConfiguration();
config.setProtocol(Protocol.HTTP);
//config.setRetryPolicy(PredefinedRetryPolicies.NO_RETRY_POLICY);
// 凭证验证方式
config.setSignerOverride("S3SignerType");
config.setSocketTimeout(180000);
config.setMaxConnections(50);
config.setConnectionTimeout(10000);
// 创建S3客户端使用完需要关闭((AmazonS3Client) s3).shutdown();
s3 = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(credentials))
.withClientConfiguration(config)
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(host, Regions.US_EAST_1.getName())).enablePathStyleAccess().build();
//创建默认线程10个固定线程执行器使用分片并行传输时用作执行线程可以根据自己需求实现执行器。
executorService = TransferManagerUtils.createDefaultExecutorService();
}
/**
*
*/
public void destroy() {
executorService.shutdown();
((AmazonS3Client) s3).shutdown();
}
/**
*
* @param bucketName
* @param fileName ,
* @param file
*/
public PutObjectResult uploadFile(String bucketName, String fileName, File file) {
PutObjectResult putObjectResult = s3.putObject(bucketName, fileName, file);
LOGGER.info(Jackson.toJsonPrettyString(putObjectResult));
LOGGER.info("upload object " + fileName + " success.");
return putObjectResult;
}
/**
*
* @param bucketName bucket
* @param key
* @param destinationFile
*/
public ObjectMetadata downloadFile(String bucketName, String key, String destinationFile) {
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
ObjectMetadata objectMetadata = s3.getObject(getObjectRequest, new File(destinationFile));
LOGGER.info(Jackson.toJsonPrettyString(objectMetadata));
LOGGER.info("download object " + key + " success.");
return objectMetadata;
}
/**
*
* @param bucketName bucket
* @param key
* @param inputStream
* @param objectMetadata Content-Length
*/
public PutObjectResult uploadStream(String bucketName, String key, InputStream inputStream, ObjectMetadata objectMetadata) {
PutObjectResult putObjectResult = s3.putObject(bucketName, key, inputStream, objectMetadata);
LOGGER.info(Jackson.toJsonPrettyString(putObjectResult));
LOGGER.info("upload object " + key + " success.");
return putObjectResult;
}
/**
*
* @param bucketName bucket
* @param key
* @param out
*/
public ObjectMetadata downloadStream(String bucketName, String key, OutputStream out) {
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
S3Object s3Object = s3.getObject(getObjectRequest);
ObjectMetadata objectMetadata = s3Object.getObjectMetadata();
S3ObjectInputStream in = s3Object.getObjectContent();
try {
IOUtils.copy(in, out);
} catch (IOException e) {
throw new SdkClientException(e);
} finally {
IOUtils.release(in, null);
}
LOGGER.info(Jackson.toJsonPrettyString(objectMetadata));
LOGGER.info("download object " + key + " success.");
return objectMetadata;
}
}

@ -1,105 +0,0 @@
package com.leaper.web.task;
import com.amazonaws.services.s3.model.ObjectMetadata;
import org.junit.Before;
import org.junit.Test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.logging.Logger;
public class S3UtilsTest {
private static final Logger LOGGER = Logger.getLogger("S3Utils");
private static final String ACCESS_KEY = "minio";
private static final String SECRET_KEY = "minio123";
// 桶所在的区域对应网关URL的域名地址
private static final String HOST = "192.168.1.52:9000";
private static final String BUCKET_NAME = "camera";
private S3Utils s3Utils;
@Before
public void init() {
s3Utils = new S3Utils();
s3Utils.init(ACCESS_KEY, SECRET_KEY, HOST);
}
/**
*
*/
/**
* 1,demoHOST访
* 2S380443
*
* () wcs-ocr-pic
*/
@Test
public void testUploadFile() {
s3Utils.uploadFile(BUCKET_NAME, "wcs-ocr-pic/1.png", new File("C:\\Users\\昊天\\Pictures\\2.jpg"));
// A目录下的B目录下的C对象 a/b/c
}
/**
* 1,demoHOST访
* 2S380443
*
* test.png Daa.png
*/
@Test
public void testDownloadFile() {
s3Utils.downloadFile(BUCKET_NAME, "wcs-ocr-pic/1.png", "C:\\Users\\昊天\\Pictures\\2.jpg");
}
/**
*
*/
@Test
public void testUploadStream() {
File file = new File("D:\\pic\\test.png");
InputStream inputStream = null;
try {
inputStream = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
if (inputStream != null) {
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentLength(file.length());
s3Utils.uploadStream(BUCKET_NAME, "wcs-ocr-pic/2.png", inputStream, objectMetadata);
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
*
*/
@Test
public void testDownloadStream() {
OutputStream out = null;
try {
out = new FileOutputStream(new File("C:\\Users\\昊天\\Pictures\\2.jpg"));
s3Utils.downloadStream(BUCKET_NAME, "bg3.png", out);
} catch (FileNotFoundException e) {
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
}
}
}
}
}
Loading…
Cancel
Save