document/Ëì²ýÏØ´ó×ÛºÏÒ»Ì廯¼ÝÊ»²ÕÊý¾ÝÔ´ºË¶Ô»áÒé.xlsBinary files differ
document/ÎÊÌâÀàÐÍ.xlsBinary files differ
pom.xml
@@ -49,7 +49,7 @@ <modules> <module>ycl-platform</module> <module>ycl-common</module> <module>ycl-generator</module> <!-- <module>ycl-generator</module>--> <module>ycl-smoke</module> </modules> ycl-common/src/main/java/com/ycl/controller/FileController.java
@@ -10,6 +10,8 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import java.io.UnsupportedEncodingException; @RestController @Api(tags = "æä»¶ä¸ä¼ ") @RequestMapping("/file") @@ -64,7 +66,12 @@ @ApiOperation(value = "å é¤å¾ç") @PostMapping("media/delete") public CommonResult<Boolean> deleteImages(String fileUrl) { boolean flag = ossService.deleteImages(fileUrl); boolean flag = false; try { flag = ossService.deleteImages(fileUrl); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } if (flag) { return CommonResult.success(true, "å 餿å"); } ycl-common/src/main/java/com/ycl/service/oss/OssService.java
@@ -3,6 +3,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.InputStream; import java.io.UnsupportedEncodingException; public interface OssService { /** @@ -19,7 +20,7 @@ * @param fileUrl * @return */ boolean deleteImages(String fileUrl); boolean deleteImages(String fileUrl) throws UnsupportedEncodingException; String uploadImages(InputStream inputStream, String ext, Integer times); ycl-common/src/main/java/com/ycl/service/oss/impl/OssServiceImpl.java
@@ -3,6 +3,7 @@ import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.model.ObjectMetadata; import com.aliyun.oss.model.VoidResult; import com.ycl.service.oss.OssService; import com.ycl.utils.ConstantPropertiesUtils; import com.ycl.utils.common.RandomUtils; @@ -17,6 +18,8 @@ import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; import java.net.URL; import java.net.URLDecoder; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @@ -43,12 +46,14 @@ // ä¸ä¼ æä»¶æµ try { // è·åæä»¶çåç§° String strDate2 = dtf2.format(LocalDateTime.now()); byte[] newImg = file.getBytes(); String originalFilename = file.getOriginalFilename(); String fileType = originalFilename.substring(originalFilename.lastIndexOf(".")); String fileName = "sczf/" + strDate2 + RandomUtils.generateRandomInt(4) + "." + fileType; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd"); String fileName = "sczf/" + LocalDateTime.now().format(formatter) + RandomUtils.generateRandomInt(8) + fileType; if (".png".equalsIgnoreCase(fileType) || ".jpg".equalsIgnoreCase(fileType) || ".jpeg".equalsIgnoreCase(fileType)) { if (file.getSize() > 2097152) { newImg = compressUnderSize(file.getBytes(), 2097152); @@ -65,6 +70,7 @@ // æä¸ä¼ çæä»¶è·¯å¾è¿å ï¼æå¨æ¼æ¥ï¼ // è¿é设置å¾çæææ¶é´ æè®¾ç½®äº30å¹´ Date expiration = new Date(System.currentTimeMillis() + (long) 946080000 * 1000); String url = ossClient.generatePresignedUrl(bucketName, fileName, expiration).toString(); System.out.println("ä¸ä¼ ç»æ--" + url + "------" + dtf2.format(LocalDateTime.now())); @@ -148,18 +154,27 @@ } @Override public boolean deleteImages(String fileUrl) { public boolean deleteImages(String fileUrl) throws UnsupportedEncodingException { String endpoint = ConstantPropertiesUtils.END_POINT; String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID; String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET; String bucketName = ConstantPropertiesUtils.BUCKET_NAME; //å建OSSClientå®ä¾ OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); String imgFile = fileUrl.replace("https://bucket-ans.oss-cn-hangzhou.aliyuncs.com/", ""); String fileName = imgFile.substring(0, imgFile.indexOf("?")); String imgFile = fileUrl.replace(ConstantPropertiesUtils.PREFIX_URL, ""); String fileName = imgFile; if (imgFile.contains("?")) { fileName = imgFile.substring(0, imgFile.indexOf("?")); } fileName = URLDecoder.decode(fileName, "UTF-8"); // æ ¹æ®BucketName,objectNameå 餿件 ossClient.deleteObject(bucketName, fileName); boolean b = ossClient.doesObjectExist(bucketName, fileName); if (b) { VoidResult voidResult = ossClient.deleteObject(bucketName, fileName); System.out.println(voidResult.toString()); } ossClient.shutdown(); return true; } ycl-common/src/main/java/com/ycl/utils/ConstantPropertiesUtils.java
@@ -16,11 +16,15 @@ @Value("${aliyun.oss.bucketName}") private String bucketName; @Value("${aliyun.oss.prefixUrl}") private String prefixUrl; // å®ä¹å ¬å¼çéæå¸¸é public static String END_POINT; public static String ACCESS_KEY_ID; public static String ACCESS_KEY_SECRET; public static String BUCKET_NAME; public static String PREFIX_URL; @Override public void afterPropertiesSet() throws Exception { @@ -28,5 +32,6 @@ ACCESS_KEY_ID = keyId; ACCESS_KEY_SECRET = keySecret; BUCKET_NAME = bucketName; PREFIX_URL = prefixUrl; } } ycl-platform/src/main/java/com/ycl/OSSImageMove.java
New file @@ -0,0 +1,139 @@ package com.ycl; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.OSSException; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ycl.entity.resources.ImageResources; import com.ycl.mapper.resources.ImageResourcesMapper; import com.ycl.service.oss.OssService; import com.ycl.util.SpringContextUtil; import com.ycl.utils.ConstantPropertiesUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.Date; @Component public class OSSImageMove extends Thread { @Resource ImageResourcesMapper imageResourcesMapper; @Autowired OssService ossService; public void run() { System.out.println("---------------OSSImageMove running"); imageResourcesMapper = SpringContextUtil.getBean("imageResourcesMapper", ImageResourcesMapper.class); ossService = SpringContextUtil.getBean("ossServiceImpl", OssService.class); System.out.println("---------------OSSImageMove start"); int i = 1; while (true) { IPage<ImageResources> page = new Page<>(i, 10); LambdaQueryWrapper<ImageResources> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.isNull(ImageResources::getUrl1).orderByDesc(ImageResources::getId); imageResourcesMapper.selectPage(page, queryWrapper); System.out.println("page-current:" + page.getCurrent() + "--page-total:" + page.getTotal()); if (page.getRecords().size() > 0) { for (ImageResources imageResources : page.getRecords()) { try { System.out.println("source-url:" + imageResources.getUrl()); String backUrl = extracted(imageResources.getUrl()); System.out.println("new-url:" + imageResources.getUrl()); imageResources.setUrl1(backUrl); imageResourcesMapper.updateById(imageResources); } catch (Exception e) { System.out.println("OSSImageMove-error:" + e.getMessage()); } } } else { break; } i++; } System.out.println("---------------OSSImageMove Over"); } private String extracted(String imageUrl) { String[] urls = imageUrl.split(","); StringBuilder backUrl = new StringBuilder(); for (int j = 0; j < urls.length; j++) { URL url = translateOSSUrl(urls[j]); HttpURLConnection conn = null; try { conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(10 * 1000); conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); InputStream inputStream = conn.getInputStream();// éè¿è¾å ¥æµè·åå¾çæ°æ® if (inputStream != null) { String picData = ossService.uploadImages(inputStream, ".png", 0); backUrl.append(picData); } } catch (IOException e) { System.out.println("OSSImageMove-translateOSSUrl-error:" + e.getMessage()); // throw new RuntimeException(e); } } return backUrl.toString(); } private URL translateOSSUrl(String fileUrl) { OSS ossClient = null; try { String endpoint = ConstantPropertiesUtils.END_POINT; String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID; String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET; String bucketName = ConstantPropertiesUtils.BUCKET_NAME; String[] urlArray = fileUrl.split("Expires="); String objectName = urlArray[0].replace(ConstantPropertiesUtils.PREFIX_URL, ""); objectName = objectName.replace("?", ""); ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 设置ç¾åURLè¿ææ¶é´ï¼åä½ä¸ºæ¯«ç§ãæ¬ç¤ºä¾ä»¥è®¾ç½®è¿ææ¶é´ä¸º1å°æ¶ä¸ºä¾ã Date expiration = new Date(new Date().getTime() + 3600 * 1000L); // çæä»¥GETæ¹æ³è®¿é®çç¾åURLãæ¬ç¤ºä¾æ²¡æé¢å¤è¯·æ±å¤´ï¼å ¶ä»äººå¯ä»¥ç´æ¥éè¿æµè§å¨è®¿é®ç¸å ³å 容ã URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration); return url; } catch (OSSException oe) { System.out.println("Caught an OSSException, which means your request made it to OSS, " + "but was rejected with an error response for some reason."); System.out.println("Error Message:" + oe.getErrorMessage()); System.out.println("Error Code:" + oe.getErrorCode()); System.out.println("Request ID:" + oe.getRequestId()); System.out.println("Host ID:" + oe.getHostId()); } finally { if (ossClient != null) { ossClient.shutdown(); } } return null; } } ycl-platform/src/main/java/com/ycl/PlatformApplication.java
@@ -1,6 +1,7 @@ package com.ycl; import com.dahua.netsdk.AppDemo; import com.ycl.util.SpringContextUtil; import com.ycl.util.VideoUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; @@ -48,5 +49,13 @@ } catch (Exception e) { log.info("æ§è¡å¤§åæ¥è¦ç¨åºåºéï¼", e.getMessage()); } // try { // // å¯å¨æ¶ï¼ä¿åä¸ä¸æï¼å¹¶ä¿åä¸ºéæ // SpringContextUtil.setAc(application); // new OSSImageMove().start(); // } catch (Exception e) { // log.info("å¾çç¨åºåºéï¼", e.getMessage()); // } } } ycl-platform/src/main/java/com/ycl/controller/platformApi/AlarmController.java
@@ -167,10 +167,13 @@ String[] urlArray = fileUrl.split("Expires="); String[] urlArray2 = urlArray[0].split("aliyuncs.com/"); // System.out.println("-------urlArray[0]:" + urlArray[0]); String objectName = urlArray2[1].replace("?", ""); // System.out.println("-------PREFIX_URL:" + ConstantPropertiesUtils.PREFIX_URL); String objectName = urlArray[0].replace(ConstantPropertiesUtils.PREFIX_URL, ""); objectName = objectName.replace("?", ""); // System.out.println("-------objectName:" + objectName); ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 设置ç¾åURLè¿ææ¶é´ï¼åä½ä¸ºæ¯«ç§ãæ¬ç¤ºä¾ä»¥è®¾ç½®è¿ææ¶é´ä¸º1å°æ¶ä¸ºä¾ã ycl-platform/src/main/java/com/ycl/entity/resources/ImageResources.java
@@ -50,6 +50,9 @@ @TableField("url") private String url; @TableField("url1") private String url1; /** * å建人 */ ycl-platform/src/main/java/com/ycl/task/SynchronizeDHAlarm.java
@@ -1,12 +1,16 @@ package com.ycl.task; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ycl.common.constant.GlobalQueue; import com.ycl.entity.video.VideoAlarmReport; import com.ycl.entity.video.VideoPoint; import com.ycl.service.caseHandler.IBaseCaseService; import com.ycl.service.caseHandler.IViolationsService; import com.ycl.service.oss.OssService; import com.ycl.service.resources.IImageResourcesService; import com.ycl.service.video.IVideoAlarmReportService; import com.ycl.service.video.impl.IVideoPointService; import com.ycl.vo.casePool.BaseCaseVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -14,6 +18,9 @@ import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; @@ -31,6 +38,12 @@ @Autowired private IViolationsService violationsService; @Autowired private IBaseCaseService baseCaseService; @Autowired private IImageResourcesService imageService; @Scheduled(cron = "0 */1 * * * ?") @Transactional(rollbackFor = Exception.class) @@ -51,7 +64,7 @@ if (videoAlarmReport.getPicByte() != null) { String extension = "jpg"; InputStream inputStream = new ByteArrayInputStream(videoAlarmReport.getPicByte()); String picData = ossService.uploadImages(inputStream, extension,0); String picData = ossService.uploadImages(inputStream, extension, 0); videoAlarmReport.setPicData(picData); } @@ -68,4 +81,39 @@ } } } @Scheduled(cron = "0 0 15 * * ?") @Transactional(rollbackFor = Exception.class) public void deleteAlarmTask() { System.out.println("----------------æ§è¡æ¸ 餿°æ®ä»»å¡:"); int i = 1; while (true) { String beginTime = "2020-01-01 00:00:00"; String endTime = LocalDateTime.now().plusDays(-3).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); Page<BaseCaseVO> page = baseCaseService.selectVideoInspection(i, 10, null, null, beginTime, endTime, null); System.out.println("----------------æ¸ é¤æ°æ®ä»»å¡æ»æ¡æ°:" + page.getTotal()); if (page.getRecords().size() > 0) { page.getRecords().forEach(baseCaseVO -> { String picData = baseCaseVO.getPicData(); String[] urls = picData.split(","); for (String url : urls) { try { ossService.deleteImages(url); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } } baseCaseService.removeById(baseCaseVO.getBaseId()); imageService.removeById(baseCaseVO.getImageId()); System.out.println("----------------æ¸ é¤æ°æ®æ°æ®æåï¼id:" + baseCaseVO.getBaseId()); }); } else { break; } i++; } } } ycl-platform/src/main/java/com/ycl/util/SpringContextUtil.java
New file @@ -0,0 +1,17 @@ package com.ycl.util; import org.springframework.context.ApplicationContext; public class SpringContextUtil { private static ApplicationContext ac; public static <T> T getBean(String beanName, Class<T> clazz) { T bean = ac.getBean(beanName, clazz); return bean; } public static void setAc(ApplicationContext applicationContext) { ac = applicationContext; } } ycl-platform/src/main/java/com/ycl/vo/casePool/BaseCaseVO.java
@@ -15,6 +15,7 @@ private String longitude; private String latitude; private String picData; private Integer imageId; private String grade; private String address; private String algoName; ycl-platform/src/main/resources/application-dev.yml
@@ -1,5 +1,5 @@ server: port: 28082 port: 8082 tomcat: uri-encoding: UTF-8 servlet: @@ -82,10 +82,11 @@ aliyun: oss: endpoint: https://oss-accelerate.aliyuncs.com endpoint: https://oss-cn-shenzhen.aliyuncs.com keyId: LTAIDlTWjHW0IVyW keySecret: 6fO78NmgyF49TK5GWFAzXuSAexl9PL bucketName: xshlivelesson prefixUrl: https://xshlivelesson.oss-cn-shenzhen.aliyuncs.com/ #䏿ééåæ° zzding : ycl-platform/src/main/resources/application-prod.yml
@@ -86,6 +86,8 @@ keyId: Tkf72Q1gdzETsZf6 keySecret: tRk39S6B1kSGARRdS4DF6jxr5nBYj5 bucketName: zhzfptoss # åOSSå°å头 prefixUrl: http://zhzfptoss.oss-cn-zjls-lszwy-d01-a.ops.zjlscloud.com/ #䏿ééåæ° zzding : @@ -93,4 +95,7 @@ app-secret : 0GPY3aQDL3l38J7p6K37DV6BCXIOLzrynU71Br36 domain-name : openplatform-pro.ding.zj.gov.cn protocal : https tenant-id : 196729 tenant-id : 196729 mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl ycl-platform/src/main/resources/mapper/caseHandler/BaseCaseMapper.xml
@@ -278,6 +278,7 @@ t3.longitude, t3.latitude, t4.pic_data, t4.id as imageId, t5.`name` as grade, t3.address, t3.plat_resource_id as platResourceId, ycl-platform/src/test/java/com/ycl/sccgplatform/Test1.java
@@ -8,13 +8,17 @@ import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider; import com.aliyun.oss.common.comm.SignVersion; import com.aliyuncs.exceptions.ClientException; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.dahua.netsdk.lib.callback.impl.AnalyzerDataCB; import com.ycl.common.util.UtilNumber; import com.ycl.entity.dingding.DingUserInfo; import com.ycl.entity.user.UmsAdmin; import com.ycl.mapper.unlawful.UnlawfulMapper; import com.ycl.service.caseHandler.IBaseCaseService; import com.ycl.service.caseHandler.IViolationsService; import com.ycl.service.oss.OssService; import com.ycl.utils.ConstantPropertiesUtils; import com.ycl.vo.casePool.BaseCaseVO; import net.coobird.thumbnailator.Thumbnails; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -26,6 +30,8 @@ import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; @ComponentScan("com.dahua.netsdk") @@ -33,7 +39,13 @@ public class Test1 { @Autowired private IBaseCaseService baseCaseService; @Autowired private OssService ossService; @Autowired private IViolationsService violationsService; @Resource private UnlawfulMapper unlawfuldao; @@ -42,7 +54,7 @@ @Test void test() { String fileUrl = "https://huachuang-resource.oss-cn-beijing.aliyuncs.com/å®¶åºæè²/ä¸å½é¶è¡ç¥åä¼å®¶åºæè²ä¸å§ä¼.doc?Expires=1738857178&OSSAccessKeyId=LTAIxtcfDe3fgfcf&Signature=wTwx6JA6VWbPB0skVySy9MCexog="; String fileUrl = "https://xshlivelesson.oss-cn-shenzhen.aliyuncs.com/2.pptx?Expires=1738857178&OSSAccessKeyId=LTAIxtcfDe3fgfcf&Signature=wTwx6JA6VWbPB0skVySy9MCexog="; // http://zhzfptoss.oss-cn-zjls-lszwy-d01-a.ops.zjlscloud.com/sczf/2023062950465224.jpg?Expires=2634106907&OSSAccessKeyId=Tkf72Q1gdzETsZf6&Signature=ttME%2BeFhss8wPbkRCxAsV%2FPNWGQ%3D OSS ossClient = null; @@ -55,10 +67,8 @@ String[] urlArray = fileUrl.split("Expires="); String[] urlArray2 = urlArray[0].split("aliyuncs.com/"); String objectName = urlArray2[1].replace("?", ""); String objectName = urlArray[0].replace(ConstantPropertiesUtils.PREFIX_URL, ""); objectName = objectName.replace("?", ""); ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); @@ -207,7 +217,7 @@ // AnalyzerDataCB analyzerDataCB; @Test void alarmTest() { void alarmTest() throws UnsupportedEncodingException { // analyzerDataCB.invoke(null, 0, null, null, 0, null, 0, null); @@ -220,6 +230,35 @@ // AlarmListenModule.startListen(cbMessage); // // System.out.println(cbMessage.data); // https://xshlivelesson.oss-accelerate.aliyuncs.com/sczf/2025-02-28%2015%3A53%3A293732..JPG?Expires=2686809213&OSSAccessKeyId=LTAIDlTWjHW0IVyW&Signature=Q5WO2kQcWRpq0SQiYjBCo6rGyJE%3D" ossService.deleteImages("https://xshlivelesson.oss-cn-shenzhen.aliyuncs.com/sczf/2025022845414037.JPG?Expires=2686811218&OSSAccessKeyId=LTAIDlTWjHW0IVyW&Signature=5SQ7PInLkbd62zJ1aurljeO0c%2Bw%3D"); int i = 1; while (true) { String beginTime = "2025-01-01 00:00:00"; String endTime = LocalDateTime.now().plusDays(-4).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); Page<BaseCaseVO> page = baseCaseService.selectVideoInspection(i, 10, null, null, beginTime, endTime, null); if (page.getRecords().size() > 0) { page.getRecords().forEach(baseCaseVO -> { String picData = baseCaseVO.getPicData(); String[] urls = picData.split(","); for (String url : urls) { try { ossService.deleteImages(url); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } } baseCaseService.removeById(baseCaseVO.getBaseId()); violationsService.removeById(baseCaseVO.getBaseId()); }); } else { break; } i++; } } ycl-smoke/pom.xml
@@ -30,12 +30,12 @@ <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.ycl</groupId> <artifactId>ycl-generator</artifactId> <version>1.0.0</version> <scope>compile</scope> </dependency> <!-- <dependency>--> <!-- <groupId>com.ycl</groupId>--> <!-- <artifactId>ycl-generator</artifactId>--> <!-- <version>1.0.0</version>--> <!-- <scope>compile</scope>--> <!-- </dependency>--> </dependencies> <!-- <build>-->