diff --git a/file-read/pom.xml b/file-read/pom.xml index 3155bc0..91922e4 100644 --- a/file-read/pom.xml +++ b/file-read/pom.xml @@ -15,5 +15,12 @@ 8 8 + + + io.minio + minio + 8.4.3 + + \ No newline at end of file diff --git a/file-read/src/main/java/com/wyl/file/sequence/MinIOUploadFile.java b/file-read/src/main/java/com/wyl/file/sequence/MinIOUploadFile.java new file mode 100644 index 0000000..35d0fc2 --- /dev/null +++ b/file-read/src/main/java/com/wyl/file/sequence/MinIOUploadFile.java @@ -0,0 +1,125 @@ +package com.wyl.file.sequence; + +import io.minio.*; +import okhttp3.OkHttpClient; + +import javax.net.ssl.*; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; +import java.util.Objects; + +/** + * Java MinIO Client + * + * 上传文件到指定Bucket桶。 + */ +public class MinIOUploadFile { + + private static MinioClient minioClient; + private static final String END_POINT = "https://oss.test_minio.com:39000"; + private static final String AK = "aul30E0ccjbxUm5dor6z"; + private static final String SK = "2Fl58bDxeApSYyIHvOSzd0BBifrtwOESuhrl1Q25!@#"; + private static final String DEFAULT_BUCKET = ""; + private static final String REGION = "cn-global-123456"; + + public static void main(String[] args) throws Exception { + MinIOUploadFile client = new MinIOUploadFile(); + client.initConfig(); + // 查询指定region中是否存在tx-bucket桶 + if (!client.isExistBucket(DEFAULT_BUCKET, REGION)) { + // 桶不存在,创建桶 + client.createBucket(DEFAULT_BUCKET, REGION); + } + // 上传文件到指定的桶 + client.uploadFileToBucket(DEFAULT_BUCKET, "C:\\Users\\Administrator\\Downloads\\CN_ORDERACK_07f601bc-fb56-48d9-9a8d-c9ec7dd95872.pdf", "CN_ORDERACK_07f601bc-fb56-48d9-9a8d-c9ec7dd95872.pdf"); + } + + /** + * 初始化MinIO的配置 + */ + private void initConfig() throws KeyManagementException { + minioClient = MinioClient.builder() + .endpoint(END_POINT) + .credentials(AK, SK) + .region(REGION) // 自定义region + .httpClient(Objects.requireNonNull(getUnsafeOkHttpsClient())) + .build(); + } + + /** + * 判断指定的桶是否存在 + * + * @param bucketName 桶名称 + * @param region 区域 + * @return 存在true,否则false + */ + private boolean isExistBucket(String bucketName, String region) throws Exception { + return minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).region(region).build()); + } + + /** + * 创建指定名称的桶 + * + * @param bucketName 桶名称 + * @param region 区域 + */ + private void createBucket(String bucketName, String region) throws Exception { + minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).region(region).build()); + } + + private void uploadFileToBucket(String bucketName, String object, String fileName) throws Exception { + minioClient.uploadObject(UploadObjectArgs.builder() + .bucket(bucketName) + .filename(object) + .object(fileName) + .build()); + } + + public static OkHttpClient getUnsafeOkHttpsClient() throws KeyManagementException { + try { + final TrustManager[] trustAllCerts = new TrustManager[]{ + new X509TrustManager() { + @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[]{}; + } + } + }; + + + final SSLContext sslContext = SSLContext.getInstance("SSL"); + sslContext.init(null, trustAllCerts, new SecureRandom()); + final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory(); + OkHttpClient.Builder builder = new OkHttpClient.Builder(); + builder.sslSocketFactory(sslSocketFactory); + + + builder.hostnameVerifier(new HostnameVerifier() { + @Override + public boolean verify(String s, SSLSession sslSession) { + return true; + } + }); + return builder.build(); + + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + return null; + } + +} + diff --git a/file-read/src/main/java/com/wyl/file/sequence/Solution.java b/file-read/src/main/java/com/wyl/file/sequence/Solution.java index 6cd7617..268df3b 100644 --- a/file-read/src/main/java/com/wyl/file/sequence/Solution.java +++ b/file-read/src/main/java/com/wyl/file/sequence/Solution.java @@ -27,7 +27,6 @@ class Solution { } public static void main(String[] args) { - int i = lengthOfLongestSubstring("tmmzuxt"); - System.out.println(i); + } } \ No newline at end of file diff --git a/javacv/pom.xml b/javacv/pom.xml index 21f807a..a2d8496 100644 --- a/javacv/pom.xml +++ b/javacv/pom.xml @@ -19,10 +19,19 @@ org.opencv - opencv - 470 - system - ${project.basedir}/src/main/resources/opencv-470.jar + opencv-480 + 1.0.0 + + + + org.bytedeco + javacv + 1.5.9 + + + org.bytedeco + javacv-platform + 1.5.9 \ No newline at end of file diff --git a/javacv/src/main/java/com/wyl/javacv/DemoApplicationTests.java b/javacv/src/main/java/com/wyl/javacv/DemoApplicationTests.java index be3d63a..9ef0a53 100644 --- a/javacv/src/main/java/com/wyl/javacv/DemoApplicationTests.java +++ b/javacv/src/main/java/com/wyl/javacv/DemoApplicationTests.java @@ -1,49 +1,50 @@ -package com.wyl.javacv; - - -import org.opencv.core.CvType; -import org.opencv.core.Mat; -import org.opencv.core.MatOfByte; -import org.opencv.highgui.HighGui; -import org.opencv.imgcodecs.Imgcodecs; -import org.opencv.imgproc.Imgproc; - -import java.io.File; -import java.io.FileInputStream; -import java.io.InputStream; -import java.net.URL; - - -public class DemoApplicationTests { - /** - * @return - * @Description - * @Param - * @Author zhangsan - * @Date 2020.09.05 9:43 - **/ - public static void main(String[] args) throws Exception { - // 解决awt报错问题 - // 加载动态库 - URL url = ClassLoader.getSystemResource("opencv_java470.dll"); - System.load(url.getPath()); - // 读取图像 -// Mat image = Imgcodecs.imread("D:\\1.jpg"); - File file = new File("D:/1.jpg"); - InputStream fos = new FileInputStream(file); - Mat image = Imgcodecs.imdecode(new MatOfByte(fos.readAllBytes()), Imgcodecs.IMREAD_COLOR); - if (image.empty()) { - throw new Exception("image is empty"); - } - HighGui.imshow("Original Image", image); - - // 创建输出单通道图像 - Mat grayImage = new Mat(image.rows(), image.cols(), CvType.CV_8SC1); - // 进行图像色彩空间转换 - Imgproc.cvtColor(image, grayImage, Imgproc.COLOR_RGB2GRAY); - - HighGui.imshow("Processed Image", grayImage); - Imgcodecs.imwrite("D:/hello.jpg", grayImage); - HighGui.waitKey(); - } -} \ No newline at end of file +//package com.wyl.javacv; +// +// +//import org.opencv.core.CvType; +//import org.opencv.core.Mat; +//import org.opencv.core.MatOfByte; +//import org.opencv.highgui.HighGui; +//import org.opencv.imgcodecs.Imgcodecs; +//import org.opencv.imgproc.Imgproc; +//import org.opencv.videoio.VideoWriter; +// +//import java.io.File; +//import java.io.FileInputStream; +//import java.io.InputStream; +//import java.net.URL; +// +// +//public class DemoApplicationTests { +// /** +// * @return +// * @Description +// * @Param +// * @Author zhangsan +// * @Date 2020.09.05 9:43 +// **/ +// public static void main(String[] args) throws Exception { +// // 解决awt报错问题 +// // 加载动态库 +// URL url = ClassLoader.getSystemResource("opencv_java480.dll"); +// System.load(url.getPath()); +// // 读取图像 +//// Mat image = Imgcodecs.imread("D:\\1.jpg"); +// File file = new File("C:\\Users\\95981\\Desktop\\Mattingfailure.jpg"); +// InputStream fos = new FileInputStream(file); +// Mat image = Imgcodecs.imdecode(new MatOfByte(fos.readAllBytes()), Imgcodecs.IMREAD_COLOR); +// if (image.empty()) { +// throw new Exception("image is empty"); +// } +// HighGui.imshow("Original Image", image); +// +// // 创建输出单通道图像 +// Mat grayImage = new Mat(image.rows(), image.cols(), CvType.CV_8SC1); +// // 进行图像色彩空间转换 +// Imgproc.cvtColor(image, grayImage, Imgproc.COLOR_RGB2GRAY); +// +// HighGui.imshow("Processed Image", grayImage); +// Imgcodecs.imwrite("D:/hello.jpg", grayImage); +// HighGui.waitKey(); +// } +//} \ No newline at end of file diff --git a/javacv/src/main/java/com/wyl/javacv/ImageToVideoConverter.java b/javacv/src/main/java/com/wyl/javacv/ImageToVideoConverter.java new file mode 100644 index 0000000..d1bb613 --- /dev/null +++ b/javacv/src/main/java/com/wyl/javacv/ImageToVideoConverter.java @@ -0,0 +1,58 @@ +package com.wyl.javacv; + +import org.opencv.core.Mat; +import org.opencv.core.MatOfByte; +import org.opencv.core.Size; +import org.opencv.imgcodecs.Imgcodecs; +import org.opencv.videoio.VideoWriter; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; + +public class ImageToVideoConverter { + public static void main(String[] args) throws IOException { + URL url = ClassLoader.getSystemResource("opencv_java480.dll"); + System.load(url.getPath()); + String imageFolderPath = "C:\\Users\\95981\\Desktop\\picture"; // 你的图片文件夹路径 + String outputVideoPath = "C:\\Users\\95981\\Desktop\\vidoe\\video14.mp4"; // 输出视频文件路径 + + try { + Size frameSize = new Size(910, 910); // 设置视频帧的大小(根据你的图片大小进行调整) + int fps = 15; // 视频帧率 + int x = VideoWriter.fourcc('D', 'I', 'V', 'X'); + VideoWriter videoWriter = new VideoWriter(outputVideoPath, x, fps, frameSize, true); + + // 获取图片文件列表 + File imageFolder = new File(imageFolderPath); + File[] imageFiles = imageFolder.listFiles(); + + if (imageFiles != null) { + for (File imageFile : imageFiles) { + if (imageFile.isFile()) { +// Mat image = Imgcodecs.imread(imageFile.getAbsolutePath()); + InputStream fos = new FileInputStream(imageFile); + Mat image = Imgcodecs.imdecode(new MatOfByte(fos.readAllBytes()), Imgcodecs.IMREAD_COLOR); + if (!image.empty()) { + // 调整图片大小,以适应视频帧大小(可选,如果图片与视频帧大小相同,可省略) +// Imgproc.resize(image, image, frameSize); + + videoWriter.write(image); + image.release(); + } + } + } + videoWriter.release(); // 释放VideoWriter资源 + System.out.println("Video created successfully!"); + } else { + System.out.println("No image files found in the folder."); + } + } catch (Exception e) { + File file = new File(outputVideoPath); + file.deleteOnExit(); + } + + } +} diff --git a/javacv/src/main/java/com/wyl/javacv/JavaCvTest.java b/javacv/src/main/java/com/wyl/javacv/JavaCvTest.java new file mode 100644 index 0000000..9053e51 --- /dev/null +++ b/javacv/src/main/java/com/wyl/javacv/JavaCvTest.java @@ -0,0 +1,76 @@ +package com.wyl.javacv; + +import org.bytedeco.ffmpeg.global.avcodec; +import org.bytedeco.ffmpeg.global.avutil; +import org.bytedeco.javacv.FFmpegFrameRecorder; +import org.bytedeco.javacv.FrameRecorder; +import org.bytedeco.javacv.Java2DFrameConverter; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +public class JavaCvTest { + public static void main(String[] args) throws Exception { + + //合成的MP4 存放的地址路径 这里的路径并不会自动创建,需要手动提前创建好,否则会报错:Could not open 'null' + String mp4SavePath = "C:\\Users\\95981\\Desktop\\vidoe\\img2.mp4"; + //图片存放的地址路径 + String img = "C:\\Users\\95981\\Desktop\\picture"; + int width = 910; + int height = 910; + //读取所有图片 + File file = new File(img); + File[] files = file.listFiles(); + Map imgMap = new HashMap(); + int num = 0; + for (File imgFile : files) { + imgMap.put(num, imgFile); + num++; + } + createMp4(mp4SavePath, imgMap, width, height); + } + + private static void createMp4(String mp4SavePath, Map imgMap, int width, int height) throws FrameRecorder.Exception { + //视频宽高最好是按照常见的视频的宽高 16:9 或者 9:16 + FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(mp4SavePath, width, height); + int bitrate = 1000000; + //设置视频编码层模式 import org.bytedeco.ffmpeg.global.avcodec;可能需要手动复制添加 + recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264); + //设置视频为25帧每秒 + recorder.setFrameRate(15); + //设置视频图像数据格式 import org.bytedeco.ffmpeg.global.avutil;可能需要手动复制添加 + recorder.setPixelFormat(avutil.AV_PIX_FMT_YUV420P); + recorder.setVideoBitrate(bitrate); + + recorder.setFormat("mp4"); + try { + recorder.start(); + Java2DFrameConverter converter = new Java2DFrameConverter(); + //录制一个22秒的视频,22秒为自定义的一个视频时间长度,图片少则在22秒内,多则到22秒停止 + + imgMap.entrySet().stream().forEach(e -> { + BufferedImage read = null; + try { + read = ImageIO.read(e.getValue()); + } catch (IOException ioException) { + ioException.printStackTrace(); + } + try { + recorder.record(converter.getFrame(read)); + } catch (FrameRecorder.Exception exception) { + exception.printStackTrace(); + } + }); + } catch (Exception e) { + e.printStackTrace(); + } finally { + //最后一定要结束并释放资源 + recorder.stop(); + recorder.release(); + } + } +} \ No newline at end of file diff --git a/javacv/src/main/resources/opencv_java470.dll b/javacv/src/main/resources/opencv_java470.dll deleted file mode 100644 index b3c1b15..0000000 Binary files a/javacv/src/main/resources/opencv_java470.dll and /dev/null differ diff --git a/javacv/src/main/resources/opencv_java480.dll b/javacv/src/main/resources/opencv_java480.dll new file mode 100644 index 0000000..42f7a47 Binary files /dev/null and b/javacv/src/main/resources/opencv_java480.dll differ diff --git a/jna/pom.xml b/jna/pom.xml index 5639557..52f135f 100644 --- a/jna/pom.xml +++ b/jna/pom.xml @@ -20,7 +20,12 @@ net.java.dev.jna jna - 5.13.0 + 5.2.0 + + + net.java.dev.jna + jna-platform + 5.2.0 \ No newline at end of file diff --git a/jna/src/main/java/com/wyl/jna/BmpData.java b/jna/src/main/java/com/wyl/jna/BmpData.java new file mode 100644 index 0000000..fca549f --- /dev/null +++ b/jna/src/main/java/com/wyl/jna/BmpData.java @@ -0,0 +1,18 @@ +package com.wyl.jna; + +import com.sun.jna.Pointer; +import com.sun.jna.Structure; + +import java.util.Arrays; +import java.util.List; + +public class BmpData extends Structure { + public Pointer data; + public int size; + + @Override + protected List getFieldOrder() { + return Arrays.asList(new String[]{"data", "size"}); + } + +} diff --git a/jna/src/main/java/com/wyl/jna/Dll1.java b/jna/src/main/java/com/wyl/jna/Dll1.java new file mode 100644 index 0000000..2b515cc --- /dev/null +++ b/jna/src/main/java/com/wyl/jna/Dll1.java @@ -0,0 +1,26 @@ +package com.wyl.jna; + +import com.sun.jna.Library; +import com.sun.jna.Native; + +public class Dll1 { + public interface Dll1lib extends Library { + Dll1lib INSTANCE = Native.load("Dll1", Dll1lib.class); + + void fibonacci_init(int x, int y); + + boolean fibonacci_next(); + + long fibonacci_current(); + + void fibonacci_index(); + } + + public static void main(String[] args) { + Dll1lib.INSTANCE.fibonacci_init(6, 7); + long a = Dll1lib.INSTANCE.fibonacci_current(); + boolean b = Dll1lib.INSTANCE.fibonacci_next(); + System.out.println(a); + System.out.println(b); + } +} diff --git a/jna/src/main/java/com/wyl/jna/Main.java b/jna/src/main/java/com/wyl/jna/Main.java index f694673..2929b2d 100644 --- a/jna/src/main/java/com/wyl/jna/Main.java +++ b/jna/src/main/java/com/wyl/jna/Main.java @@ -1,10 +1,112 @@ package com.wyl.jna; -import java.io.File; +import com.sun.jna.Library; +import com.sun.jna.Native; +import com.sun.jna.Pointer; + +import java.io.FileOutputStream; import java.io.IOException; +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; public class Main { - public static void main(String[] args) throws IOException { - File tempFile = File.createTempFile("file", ".dll"); + public interface CLibrary extends Library { + CLibrary INSTANCE = (CLibrary) + Native.load("JavaImageDLL", CLibrary.class); + + int getValue1(); + + BmpData getStruct1(String imagePath); } + + public static void main1(String[] args) { + System.setProperty("jna.debug_load", "true"); + System.setProperty("jna.debug_load.jna", "true"); + System.setProperty("jna.platform.library.path", "C:\\Users\\95981\\Desktop\\dll"); +// int value1 = CLibrary.INSTANCE.getValue1(); +// System.out.println(value1); + BmpData struct1 = CLibrary.INSTANCE.getStruct1("C:\\Users\\95981\\Desktop\\wangyongliang.jpg"); + int datasize = struct1.size; + Pointer data = struct1.data; + byte[] byteArray = data.getByteArray(0, datasize); + String filePath = "C:\\Users\\95981\\Desktop\\wyl001.jpg"; // 替换为您要写入的文件路径 + try (FileOutputStream fos = new FileOutputStream(filePath)) { + fos.write(byteArray); + System.out.println("字节数组成功写入文件。"); + } catch (IOException e) { + System.out.println("写入文件时发生错误:" + e.getMessage()); + } + // 将内存块转换为byte[]数组 + } + + public static void main123(String[] args) { + LocalDateTime fromDateTime = LocalDateTime.now(); + LocalDateTime toDateTime = fromDateTime.plusDays(1).plusHours(6).plusMinutes(12); + LocalDateTime tempDateTime = LocalDateTime.from(fromDateTime); + ChronoUnit a = ChronoUnit.MINUTES; + long days = 0; + long hours = 0; + long minutes = 0; + long seconds = 0; + switch (a) { + case DAYS: + days = tempDateTime.until(toDateTime, ChronoUnit.DAYS); + tempDateTime = tempDateTime.plusDays(days); + case HOURS: + hours = tempDateTime.until(toDateTime, ChronoUnit.HOURS); + tempDateTime = tempDateTime.plusHours(hours); + case MINUTES: + minutes = tempDateTime.until(toDateTime, ChronoUnit.MINUTES); + tempDateTime = tempDateTime.plusMinutes(minutes); + case SECONDS: + seconds = tempDateTime.until(toDateTime, ChronoUnit.SECONDS); + + } + + System.out.println( + days + " 天 " + + hours + " 小时 " + + minutes + " 分 " + + seconds + " 秒."); + } + + public static void main(String[] args) { + long minutes = 62; + String result = convertMinutesToUnits(minutes, ChronoUnit.DAYS); + System.out.println(result); + } + + + public static String convertMinutesToUnits(long minutes1, ChronoUnit maxUnit) { + long min = minutes1; + long days = 0; + long hours = 0; + long minutes = 0; + long secound = 0; + long millis = 0; + switch (maxUnit) { + case DAYS: + days = min / 1440; + min = min % 1440; + case HOURS: + hours = min / 60; + min = min % 60; + case MINUTES: + minutes = min / 1; + break; + case SECONDS: + secound = min * 60; + break; + case MILLIS: + millis = min * 6000; + } + String reult = days + " 天 " + + hours + " 小时 " + + minutes + " 分 " + + secound + " 秒 " + + millis + " 毫秒 "; + return reult; + } + + } diff --git a/jna/src/main/java/com/wyl/jna/MyLibrary.java b/jna/src/main/java/com/wyl/jna/MyLibrary.java deleted file mode 100644 index 3c41275..0000000 --- a/jna/src/main/java/com/wyl/jna/MyLibrary.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.wyl.jna; - -import com.sun.jna.Library; -import com.sun.jna.Native; - -public interface MyLibrary extends Library { - MyLibrary INSTANCE = Native.load("mylibrary", MyLibrary.class); - void myFunction(); -} diff --git a/jna/src/main/java/com/wyl/jna/RecursiveFileDeletion.java b/jna/src/main/java/com/wyl/jna/RecursiveFileDeletion.java new file mode 100644 index 0000000..b4111da --- /dev/null +++ b/jna/src/main/java/com/wyl/jna/RecursiveFileDeletion.java @@ -0,0 +1,28 @@ +package com.wyl.jna; + +import java.io.File; + +public class RecursiveFileDeletion { + public static void main(String[] args) { + String targetDirectory = "C:\\Users\\95981\\Desktop\\文件\\10_565"; + deleteFiles(targetDirectory); + System.out.println("Deletion complete."); + } + + private static void deleteFiles(String directoryPath) { + File directory = new File(directoryPath); + File[] files = directory.listFiles(); + if (files != null) { + for (File file : files) { + if (file.isDirectory()) { + if (!file.getName().equalsIgnoreCase("原图")) { + deleteFiles(file.getAbsolutePath()); + } + } else { + System.out.println("Deleting: " + file.getAbsolutePath()); + file.delete(); + } + } + } + } +} diff --git a/jna/src/main/java/com/wyl/jna/UsageSystem.java b/jna/src/main/java/com/wyl/jna/UsageSystem.java new file mode 100644 index 0000000..7f2b833 --- /dev/null +++ b/jna/src/main/java/com/wyl/jna/UsageSystem.java @@ -0,0 +1,28 @@ +package com.wyl.jna; + +import com.sun.jna.Library; +import com.sun.jna.Native; +import com.sun.jna.Platform; + +/** + * @description: 调用系统库 + * @author: wangyl + * @date: 2023/6/27 + */ +public class UsageSystem { + + public interface CLibrary extends Library { + CLibrary INSTANCE = (CLibrary) + Native.load((Platform.isWindows() ? "msvcrt" : "c"), + CLibrary.class); + + void printf(String format, Object... args); + } + + public static void main(String[] args) { + CLibrary.INSTANCE.printf("Hello, World\n"); + for (int i = 0; i < args.length; i++) { + CLibrary.INSTANCE.printf("Argument %d: %s\n", i, args[i]); + } + } +} \ No newline at end of file diff --git a/jna/src/main/java/com/wyl/jna/UsageTest.java b/jna/src/main/java/com/wyl/jna/UsageTest.java new file mode 100644 index 0000000..4c9417f --- /dev/null +++ b/jna/src/main/java/com/wyl/jna/UsageTest.java @@ -0,0 +1,42 @@ +package com.wyl.jna; + +import com.sun.jna.Library; +import com.sun.jna.Native; +import com.sun.jna.Pointer; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +/** + * @description: 调用系统库 + * @author: wangyl + * @date: 2023/6/27 + */ +public class UsageTest { + public interface CLibrary extends Library { + CLibrary INSTANCE = Native.load("wyltest123", CLibrary.class); + +// BmpData getStruct(String imagePath); + BmpData getStruct(); + } + + public static void main(String[] args) { + System.setProperty("jna.debug_load", "true"); + System.setProperty("jna.debug_load.jna", "true"); + System.setProperty("jna.library.path", "C:\\Users\\95981\\Desktop\\dll"); + String inFilePath = "C:\\Users\\95981\\Desktop\\wangyongliang.jpg"; +// BmpData struct1 = CLibrary.INSTANCE.getStruct(new String(inFilePath.getBytes(), StandardCharsets.UTF_8)); + BmpData struct1 = CLibrary.INSTANCE.getStruct(); + int datasize = struct1.size; + Pointer data = struct1.data; + byte[] byteArray = data.getByteArray(0, datasize); + String filePath = "C:\\Users\\95981\\Desktop\\wyl001.jpg"; // 替换为您要写入的文件路径 + try (FileOutputStream fos = new FileOutputStream(filePath)) { + fos.write(byteArray); + System.out.println("字节数组成功写入文件。"); + } catch (IOException e) { + System.out.println("写入文件时发生错误:" + e.getMessage()); + } + } +} diff --git a/jna/src/main/resources/Dll1.dll b/jna/src/main/resources/Dll1.dll new file mode 100644 index 0000000..4b33a6b Binary files /dev/null and b/jna/src/main/resources/Dll1.dll differ diff --git a/jna/src/main/resources/Math.dll b/jna/src/main/resources/Math.dll new file mode 100644 index 0000000..b69c109 Binary files /dev/null and b/jna/src/main/resources/Math.dll differ diff --git a/kafka/pom.xml b/kafka/pom.xml index dc0057d..e1da8c2 100644 --- a/kafka/pom.xml +++ b/kafka/pom.xml @@ -11,13 +11,25 @@ kafka - 8 - 8 + 11 + 11 org.apache.kafka kafka-clients + + + com.google.protobuf + protobuf-java + 3.22.3 + + + + com.google.protobuf + protobuf-java-util + 3.22.3 + \ No newline at end of file diff --git a/kafka/src/main/java/com/wyl/kafka/consumer/KafkaConsumerPoll.java b/kafka/src/main/java/com/wyl/kafka/consumer/KafkaConsumerPoll.java index 1e2f6c9..7a5334e 100644 --- a/kafka/src/main/java/com/wyl/kafka/consumer/KafkaConsumerPoll.java +++ b/kafka/src/main/java/com/wyl/kafka/consumer/KafkaConsumerPoll.java @@ -14,15 +14,17 @@ import java.util.stream.Stream; /** * kafka发送消息测试 - * @ClassName: KafkaProducerSend - * @Date: 2022/4/12 15:18 + * * @author wangyl * @version V1.0 + * @ClassName: KafkaProducerSend + * @Date: 2022/4/12 15:18 */ @Slf4j public class KafkaConsumerPoll { /** * 消费者消费消息 + * * @param kafkaConsumerNormal * @param topic * @return void @@ -32,18 +34,21 @@ public class KafkaConsumerPoll { */ public static void PollMessage(Consumer kafkaConsumerNormal, String topic) { //消费者消费消息 - kafkaConsumerNormal.subscribe(Arrays.asList(topic)); +// kafkaConsumerNormal.subscribe(Arrays.asList(topic)); + TopicPartition topicPartition = new TopicPartition(topic, 1); + kafkaConsumerNormal.assign(Arrays.asList(topicPartition)); while (true) { //消费消息 kafkaConsumerNormal.poll(Duration.ofMillis(100)) - .forEach(record -> { - log.info("消费者消费消息:{},分区:{},topic:{},offset:{}", record.value(), record.partition(), record.topic(), record.offset()); - }); + .forEach(record -> { + log.info("消费者消费消息:{},分区:{},topic:{},offset:{}", record.value(), record.partition(), record.topic(), record.offset()); + }); } } /** * 同步手动提交 + * * @param kafkaConsumerNormal * @param topic * @return void @@ -57,9 +62,9 @@ public class KafkaConsumerPoll { while (true) { //消费消息 kafkaConsumerNormal.poll(Duration.ofMillis(100)) - .forEach(record -> { - log.info("消费者消费消息:{},分区:{},topic:{},offset:{}", record.value(), record.partition(), record.topic(), record.offset()); - }); + .forEach(record -> { + log.info("消费者消费消息:{},分区:{},topic:{},offset:{}", record.value(), record.partition(), record.topic(), record.offset()); + }); kafkaConsumerNormal.commitSync(); } @@ -67,6 +72,7 @@ public class KafkaConsumerPoll { /** * 同步手动提交offset + * * @param kafkaConsumerNormal * @param topic * @return void @@ -81,10 +87,10 @@ public class KafkaConsumerPoll { while (true) { //消费消息 kafkaConsumerNormal.poll(Duration.ofMillis(100)) - .forEach(record -> { - log.info("消费者消费消息:{},分区:{},topic:{},offset:{}", record.value(), record.partition(), record.topic(), record.offset()); - offsets.put(new TopicPartition(record.topic(), record.partition()), new OffsetAndMetadata(record.offset() + 1)); - }); + .forEach(record -> { + log.info("消费者消费消息:{},分区:{},topic:{},offset:{}", record.value(), record.partition(), record.topic(), record.offset()); + offsets.put(new TopicPartition(record.topic(), record.partition()), new OffsetAndMetadata(record.offset() + 1)); + }); kafkaConsumerNormal.commitSync(offsets); offsets.clear(); } @@ -92,6 +98,7 @@ public class KafkaConsumerPoll { /** * 异步提交,有回调 + * * @param kafkaConsumerNormal * @param topic * @return void @@ -106,10 +113,10 @@ public class KafkaConsumerPoll { while (true) { //消费消息 kafkaConsumerNormal.poll(Duration.ofMillis(100)) - .forEach(record -> { - log.info("消费者消费消息:{},分区:{},topic:{},offset:{}", record.value(), record.partition(), record.topic(), record.offset()); - offsets.put(new TopicPartition(record.topic(), record.partition()), new OffsetAndMetadata(record.offset() + 1)); - }); + .forEach(record -> { + log.info("消费者消费消息:{},分区:{},topic:{},offset:{}", record.value(), record.partition(), record.topic(), record.offset()); + offsets.put(new TopicPartition(record.topic(), record.partition()), new OffsetAndMetadata(record.offset() + 1)); + }); kafkaConsumerNormal.commitAsync(offsets, (offsetsInfo, exception) -> { if (exception != null) { log.error("提交消息异常:{}", exception.getMessage()); @@ -122,6 +129,7 @@ public class KafkaConsumerPoll { /** * 异步回调offsets + * * @param kafkaConsumerNormal * @param topic * @return void @@ -135,15 +143,15 @@ public class KafkaConsumerPoll { while (true) { //消费消息 kafkaConsumerNormal.poll(Duration.ofMillis(100)) - .forEach(record -> { - log.info("消费者消费消息:{},分区:{},topic:{},offset:{}", record.value(), record.partition(), record.topic(), record.offset()); - }); + .forEach(record -> { + log.info("消费者消费消息:{},分区:{},topic:{},offset:{}", record.value(), record.partition(), record.topic(), record.offset()); + }); kafkaConsumerNormal.commitAsync(); } } - public static void PollMessageSeek(Consumer kafkaConsumerNormal, String topic,int partition,int offset) { + public static void PollMessageSeek(Consumer kafkaConsumerNormal, String topic, int partition, int offset) { //消费者消费消息 kafkaConsumerNormal.subscribe(Arrays.asList(topic), new ConsumerRebalanceListener() { @Override @@ -160,14 +168,14 @@ public class KafkaConsumerPoll { while (true) { //消费消息 kafkaConsumerNormal.poll(Duration.ofMillis(100)) - .forEach(record -> { - log.info("消费者消费消息:{},分区:{},topic:{},offset:{}", record.value(), record.partition(), record.topic(), record.offset()); - }); + .forEach(record -> { + log.info("消费者消费消息:{},分区:{},topic:{},offset:{}", record.value(), record.partition(), record.topic(), record.offset()); + }); kafkaConsumerNormal.commitAsync(); } } - public static void PollMessageSeekBegin(Consumer kafkaConsumerNormal, String topic,int partition) { + public static void PollMessageSeekBegin(Consumer kafkaConsumerNormal, String topic, int partition) { final TopicPartition topicPartition = new TopicPartition(topic, partition); final List topicPartitions = Arrays.asList(topicPartition); kafkaConsumerNormal.subscribe(Arrays.asList(topic), new ConsumerRebalanceListener() { @@ -185,14 +193,14 @@ public class KafkaConsumerPoll { while (true) { //消费消息 kafkaConsumerNormal.poll(Duration.ofMillis(100)) - .forEach(record -> { - log.info("消费者消费消息:{},分区:{},topic:{},offset:{}", record.value(), record.partition(), record.topic(), record.offset()); - }); + .forEach(record -> { + log.info("消费者消费消息:{},分区:{},topic:{},offset:{}", record.value(), record.partition(), record.topic(), record.offset()); + }); kafkaConsumerNormal.commitAsync(); } } - public static void PollMessageSeekEnd(Consumer kafkaConsumerNormal, String topic,int partition) { + public static void PollMessageSeekEnd(Consumer kafkaConsumerNormal, String topic, int partition) { //消费者消费消息 final TopicPartition topicPartition = new TopicPartition(topic, partition); final List topicPartitions = Arrays.asList(topicPartition); @@ -211,9 +219,9 @@ public class KafkaConsumerPoll { while (true) { //消费消息 kafkaConsumerNormal.poll(Duration.ofMillis(100)) - .forEach(record -> { - log.info("消费者消费消息:{},分区:{},topic:{},offset:{}", record.value(), record.partition(), record.topic(), record.offset()); - }); + .forEach(record -> { + log.info("消费者消费消息:{},分区:{},topic:{},offset:{}", record.value(), record.partition(), record.topic(), record.offset()); + }); kafkaConsumerNormal.commitAsync(); } } diff --git a/kafka/src/main/java/com/wyl/kafka/producers/KafkaProducerExample.java b/kafka/src/main/java/com/wyl/kafka/producers/KafkaProducerExample.java index 53bda7d..d97202f 100644 --- a/kafka/src/main/java/com/wyl/kafka/producers/KafkaProducerExample.java +++ b/kafka/src/main/java/com/wyl/kafka/producers/KafkaProducerExample.java @@ -8,10 +8,11 @@ import java.util.Properties; /** * kafak生产者示例 - * @ClassName: KafkaProducer - * @Date: 2022/4/12 14:36 + * * @author wangyl * @version V1.0 + * @ClassName: KafkaProducer + * @Date: 2022/4/12 14:36 */ public class KafkaProducerExample { diff --git a/kafka/src/main/proto/ImageDTO.proto b/kafka/src/main/proto/ImageDTO.proto new file mode 100644 index 0000000..a8f0552 --- /dev/null +++ b/kafka/src/main/proto/ImageDTO.proto @@ -0,0 +1,107 @@ +syntax = "proto3"; + +package ivf_tl_Entity.DTO; + +//生成的java文件名 +option java_package = "com.aivfo.data.transmission.entity.dto"; +option java_outer_classname = "ImageDataDTO"; + +message ImageDTO { + /** + * tl设备编号 + */ + string tlSn = 1; + + /** + * 仓室编号:1-10 + */ + int32 houseSn = 2; + /** + * well编号 1-16 + */ + int32 wellSn = 3; + + /** + * ccd编号 + */ + string ccdSn = 4; + + /** + * 原图名字 + */ + string sourceImageName = 5; + + /** + * 原图的本地路径(不是上传后的保存路径) + */ + string sourceImagePath = 6; + + /** + * 原图宽 + */ + int32 sourceImageWidth = 7; + + /** + * 原图高 + */ + int32 sourceImageHeight = 8; + + /** + * 设备拍摄时间 格式2020-10-10 00:00:00 + */ + string imageTime = 9; + + /** + * 受精时间 格式2020-10-10 00:00:00 + */ + string fertilizationTime = 10; + + /** + * 对焦还是ccd拍照 1 自动对焦 0 CCD拍照 + */ + int32 photographType = 11; + + /** + * 拍照总层数 + */ + int32 totalLayer = 12; + + /** + * 图片层 + */ + int32 pictureLayer = 13; + + /** + * 垂直电机位置 + */ + int32 shootingPosition = 14; + + /** + * 是否是最清晰的(CCD拍照才有)0不是 1最清晰 + */ + int32 clearest = 15; + + /** + * 拍照结束标记 1 结束 0 未结束 (结束后开始更新对焦起点,ccd拍照结束开始合成视频) + */ + int32 end = 16; + + /** + * 培养记录id + */ + uint64 embryoCultureRecordId = 17; + /** + * 胚胎id + */ + uint64 embryoId = 18; + /** + * 图片数据 + */ + bytes imageData = 19; + + /** + * 水平电机位置 + */ + int32 horizontalPosition = 20; + +} \ No newline at end of file diff --git a/kafka/src/test/java/com/wyl/kafka/test/ConsumerTest.java b/kafka/src/test/java/com/wyl/kafka/test/ConsumerTest.java index 6af4df2..1a9f691 100644 --- a/kafka/src/test/java/com/wyl/kafka/test/ConsumerTest.java +++ b/kafka/src/test/java/com/wyl/kafka/test/ConsumerTest.java @@ -12,9 +12,11 @@ import org.apache.kafka.clients.consumer.KafkaConsumer; import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.Producer; import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.common.TopicPartition; import org.junit.jupiter.api.Test; import java.io.*; +import java.time.Duration; import java.util.Arrays; import java.util.Properties; @@ -70,7 +72,7 @@ public class ConsumerTest { } /** - * 移动到指定问位置消费消息 + * 移动到指定问位置消费消息 */ @Test public void pollMessageSeekTest() { @@ -79,7 +81,7 @@ public class ConsumerTest { } /** - * 移动到开始位置消费消息 + * 移动到开始位置消费消息 */ @Test public void pollMessageSeekBeginTest() { @@ -88,7 +90,7 @@ public class ConsumerTest { } /** - * 移动到结束位置消费消息 + * 移动到结束位置消费消息 */ @Test public void pollMessageCommitSeekEndTest() { @@ -102,27 +104,21 @@ public class ConsumerTest { // 创建 Kafka 消费者配置 Properties consumerProps = new Properties(); - consumerProps.put("bootstrap.servers", "localhost:9092"); + consumerProps.put("bootstrap.servers", "192.168.31.89:9092"); consumerProps.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); consumerProps.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); - consumerProps.put("group.id","test"); + consumerProps.put("group.id", "test"); consumerProps.put("max.request.size", "2097152"); - // 创建 Kafka 生产者和消费者 KafkaConsumer consumer = new KafkaConsumer<>(consumerProps); + TopicPartition topicPartition = new TopicPartition("wyl_topic", 1); + consumer.assign(Arrays.asList(topicPartition)); // 接收图片消息从 Kafka - consumer.subscribe(Arrays.asList("wyl-events")); while (true) { - ConsumerRecords records = consumer.poll(100); + ConsumerRecords records = consumer.poll(Duration.ofMillis(100)); for (ConsumerRecord record : records) { - byte[] imageBytes = record.value().getBytes(ISO_8859_1); - // 将图片字节数组保存到文件中 - // 这里假设图片文件名为 received-image.jpg - File receivedFile = new File("/Users/wyl/Desktop/wyl01.png"); - FileOutputStream fileOutputStream = new FileOutputStream(receivedFile); - fileOutputStream.write(imageBytes); - fileOutputStream.close(); - System.out.println(11); + String value = record.value(); + System.out.println(value); } } } diff --git a/kafka/src/test/java/com/wyl/kafka/test/ProducerTest.java b/kafka/src/test/java/com/wyl/kafka/test/ProducerTest.java index a51a7e7..14a0b6d 100644 --- a/kafka/src/test/java/com/wyl/kafka/test/ProducerTest.java +++ b/kafka/src/test/java/com/wyl/kafka/test/ProducerTest.java @@ -1,18 +1,22 @@ package com.wyl.kafka.test; +import com.google.protobuf.ByteString; import com.wyl.kafka.producers.KafkaProducerExample; import com.wyl.kafka.producers.KafkaProducerSend; -import jdk.jfr.internal.tool.Main; import lombok.extern.slf4j.Slf4j; import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.Producer; import org.apache.kafka.clients.producer.ProducerRecord; import org.junit.jupiter.api.Test; -import java.io.*; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.Arrays; +import java.util.List; import java.util.Objects; import java.util.Properties; @@ -31,73 +35,4 @@ public class ProducerTest { final Producer stringStringProducer = KafkaProducerExample.KafkaProducerTransactional(); KafkaProducerSend.sendMessageTransactional(stringStringProducer, TOPIC_NAME, "test123"); } - - @Test - public void imageSend() throws IOException, InterruptedException { - - // 创建 Kafka 生产者配置 - Properties producerProps = new Properties(); - producerProps.put("bootstrap.servers", "localhost:9092"); - producerProps.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); - producerProps.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); - producerProps.put("max.request.size", "2097152"); - - // 创建 Kafka 生产者和消费者 - KafkaProducer producer = new KafkaProducer<>(producerProps); - - // 发送图片消息到 Kafka - File file = new File("/Users/wyl/Desktop/wyl.png"); - InputStream inputStream = new FileInputStream(file); - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - byte[] buffer = new byte[1024]; - int bytesRead; - while ((bytesRead = inputStream.read(buffer)) != -1) { - outputStream.write(buffer, 0, bytesRead); - } - byte[] imageData = outputStream.toByteArray(); - String s = new String(imageData,StandardCharsets.ISO_8859_1); - ProducerRecord record = new ProducerRecord<>("wyl-events", s); - producer.send(record,(m,e)->{ - if(Objects.nonNull(e)) - { - e.printStackTrace(); - } - System.out.println(m); - - }); - Thread.sleep(100000); - } - - public static void main(String[] args) throws IOException { - byte[] byteArray = { -119, 66, 67 }; - String str = new String(byteArray,StandardCharsets.ISO_8859_1); - System.out.println(str); - byte[] bytes = str.getBytes(StandardCharsets.ISO_8859_1); - System.out.println(bytes); - } - - public static void main1(String[] args) throws IOException { - File file = new File("/Users/wyl/Desktop/wyl.png"); - InputStream inputStream = new FileInputStream(file); - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - byte[] buffer = new byte[1024]; - int bytesRead; - while ((bytesRead = inputStream.read(buffer)) != -1) { - outputStream.write(buffer, 0, bytesRead); - } - byte[] imageData = outputStream.toByteArray(); - String s = new String(imageData); - } - - public static void main2(String[] args) { - byte[] byteArray = { -119, 66, 67 }; - Charset[] charsets = { StandardCharsets.UTF_8, Charset.forName("ISO-8859-1"), Charset.forName("GBK") }; - for (Charset charset : charsets) { - String str = new String(byteArray, charset); - System.out.println(charset.name() + ": " + str); - byte[] newByteArray = str.getBytes(charset); - System.out.println(charset.name() + ": " + Arrays.toString(newByteArray)); - } - - } } diff --git a/kafka/src/test/java/com/wyl/kafka/test/TlPictureProducerTest.java b/kafka/src/test/java/com/wyl/kafka/test/TlPictureProducerTest.java new file mode 100644 index 0000000..29e9569 --- /dev/null +++ b/kafka/src/test/java/com/wyl/kafka/test/TlPictureProducerTest.java @@ -0,0 +1,216 @@ +package com.wyl.kafka.test; + +import com.google.protobuf.ByteString; +import lombok.Data; +import lombok.SneakyThrows; +import org.apache.kafka.clients.producer.KafkaProducer; +import org.apache.kafka.clients.producer.ProducerRecord; +import org.junit.jupiter.api.Test; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.concurrent.atomic.AtomicReference; + +public class TlPictureProducerTest { + + @SneakyThrows + @Test + public void autofocus() { + /** + * 构建kafka 生产者 + */ + KafkaProducer kafkaProducer = buildProducer(); + String topic = "CCD-PICTURE-NEO-1-wyltest"; + AtomicReference partition = new AtomicReference<>(0); + LocalDateTime now = LocalDateTime.now(); + String format = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + List embryoList = bulidEmbtyo(); + Integer shootingPosition = 10000; + embryoList.stream().forEach(embryo -> { + embryo.embryoIds.entrySet().stream().forEach(id -> { + for (int i = 1; i < 81; i++) { + Integer end = 0; + if (i == 80) { + end = 1; + } + ImageDataDTO.ImageDTO image = makeSendData(null, embryo.getHouseSn(), id.getKey(), 1, format, embryo.getFertilizationTime(), i, shootingPosition * (125 + i), end, id.getValue(), embryo.getId()); + partition.set(image.getHouseSn() % 3); + ProducerRecord record = new ProducerRecord<>(topic, partition.get(), null, image.toByteArray()); + /** + * 发送消息 + */ + kafkaProducer.send(record, (m, e) -> { + if (!Objects.isNull(e)) { + e.printStackTrace(); + } else { + System.out.println(m.timestamp()); + } + }); + } + }); + + }); + + Thread.sleep(100000); + } + + + @SneakyThrows + @Test + public void ccd() { + /** + * 构建kafka 生产者 + */ + KafkaProducer kafkaProducer = buildProducer(); + String topic = "CCD-PICTURE-NEO-1-wyltest"; + AtomicReference partition = new AtomicReference<>(0); + LocalDateTime now = LocalDateTime.now(); + String format = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + List embryoList = bulidEmbtyo(); + Integer shootingPosition = 40000; + embryoList.stream().forEach(embryo -> { + embryo.embryoIds.entrySet().stream().forEach(id -> { + for (int i = 1; i < 22; i++) { + Integer end = 0; + if (i == 21) { + end = 1; + } + int a = (i + 1) / 2; + int c = 0; + if (a == 11) { + c = 1; + } + ImageDataDTO.ImageDTO image = makeSendData(c, embryo.getHouseSn(), id.getKey(), 0, format, + embryo.getFertilizationTime(), i, shootingPosition * (125 + i), + end, id.getValue(), embryo.getId()); + partition.set(image.getHouseSn() % 3); + ProducerRecord record = new ProducerRecord<>(topic, partition.get(), null, image.toByteArray()); + /** + * 发送消息 + */ + kafkaProducer.send(record, (m, e) -> { + if (!Objects.isNull(e)) { + e.printStackTrace(); + } else { + System.out.println(m.timestamp()); + } + }); + } + }); + + }); + + Thread.sleep(100000); + } + + /** + * 构建kafka生产者 + * + * @param + * @return org.apache.kafka.clients.producer.KafkaProducer + * @Date 2023/7/18 + * @Author wangyl + */ + private static KafkaProducer buildProducer() { + Properties producerProps = new Properties(); + producerProps.put("bootstrap.servers", "192.168.31.89:9092"); + producerProps.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); + producerProps.put("value.serializer", "org.apache.kafka.common.serialization.ByteArraySerializer"); + producerProps.put("max.request.size", "2097152"); + KafkaProducer producer = new KafkaProducer<>(producerProps); + return producer; + } + + /** + * 获取图片数据 + * + * @param + * @return byte[] + * @Date 2023/7/18 + * @Author wangyl + */ + public static byte[] getImageData() throws IOException { + File file = new File("C:\\Users\\95981\\Desktop\\wangyongliang.jpg"); + InputStream inputStream = new FileInputStream(file); + byte[] bytes = inputStream.readAllBytes(); + return bytes; + } + + /** + * 构建图片传输数据 + * + * @param imageTime + * @param pictureLayer + * @param shootingPosition + * @param end + * @return com.wyl.kafka.test.ImageDataDTO.ImageDTO + * @Date 2023/7/18 + * @Author wangyl + */ + @SneakyThrows + public static ImageDataDTO.ImageDTO makeSendData(Integer c, Integer houseSn, Integer wellSn, Integer photographType, String imageTime, String fertilizationTime, Integer pictureLayer, Integer shootingPosition, Integer end, long embryoCultureRecordId, long embryoId) { + ImageDataDTO.ImageDTO.Builder builder = ImageDataDTO.ImageDTO.newBuilder() + .setTlSn("NEO-1-wyltest") + .setHouseSn(houseSn) + .setWellSn(wellSn) + .setCcdSn("dfbb63a9-20ee-4b9b-9f0d-ae8205f4fa1f") + .setSourceImageName(UUID.randomUUID().toString()) + .setSourceImagePath("TLData/Embryos/1_558/13_6578/1/") + .setSourceImageWidth(753) + .setSourceImageHeight(895) + .setImageTime(imageTime) + .setFertilizationTime(fertilizationTime) + .setPhotographType(photographType) + .setTotalLayer(40) + .setPictureLayer(pictureLayer) + .setShootingPosition(shootingPosition) + .setEnd(end) + .setEmbryoCultureRecordId(embryoCultureRecordId) + .setEmbryoId(embryoId) + .setImageData(ByteString.copyFrom(getImageData())) + .setHorizontalPosition(0); + if (Objects.nonNull(c)) { + builder.setClearest(c); + } + + return builder.build(); + } + + public static List bulidEmbtyo() { + List embryoList = new ArrayList<>(); + Embryo embryo = new Embryo(); + embryo.setId(10L); + embryo.setHouseSn(1); + embryo.setFertilizationTime("2023-07-13 11:06:23"); + Map embryoIds = new HashMap<>(); + embryoIds.put(1, 33L); + embryoIds.put(2, 34L); + embryoIds.put(3, 35L); + embryo.setEmbryoIds(embryoIds); + embryoList.add(embryo); + Embryo embryo2 = new Embryo(); + embryo2.setId(11L); + embryo2.setHouseSn(2); + embryo2.setFertilizationTime("2023-07-13 11:06:23"); + Map embryoIds2 = new HashMap<>(); + embryoIds2.put(2, 36L); + embryoIds2.put(3, 37L); + embryoIds2.put(4, 38L); + embryo2.setEmbryoIds(embryoIds2); + embryoList.add(embryo2); + return embryoList; + } + + @Data + public static class Embryo { + private Long id; + private Integer houseSn; + private Map embryoIds; + private String fertilizationTime; + } +} diff --git a/mqtt/pom.xml b/mqtt/pom.xml index ccae63b..da399f6 100644 --- a/mqtt/pom.xml +++ b/mqtt/pom.xml @@ -22,6 +22,12 @@ org.eclipse.paho.client.mqttv3 1.2.5 + + + org.eclipse.paho + org.eclipse.paho.mqttv5.client + 1.2.5 + \ No newline at end of file diff --git a/mqtt/src/main/java/com/wyl/mqtt/MqttClientPublish5.java b/mqtt/src/main/java/com/wyl/mqtt/MqttClientPublish5.java new file mode 100644 index 0000000..1af0752 --- /dev/null +++ b/mqtt/src/main/java/com/wyl/mqtt/MqttClientPublish5.java @@ -0,0 +1,52 @@ +package com.wyl.mqtt; + +import org.eclipse.paho.mqttv5.client.IMqttToken; +import org.eclipse.paho.mqttv5.client.MqttAsyncClient; +import org.eclipse.paho.mqttv5.client.MqttConnectionOptions; +import org.eclipse.paho.mqttv5.client.persist.MemoryPersistence; +import org.eclipse.paho.mqttv5.common.MqttException; +import org.eclipse.paho.mqttv5.common.MqttMessage; + +import java.nio.charset.StandardCharsets; + +public class MqttClientPublish5 { + + public static void main(String[] args) { + + String topic = "test"; + String content = "Message from MqttPublishSample"; + int qos = 2; + String broker = "tcp://192.168.31.89:1883"; + String clientId = "JavaClientPublish"; + MemoryPersistence persistence = new MemoryPersistence(); + + try { + MqttConnectionOptions connOpts = new MqttConnectionOptions(); + connOpts.setUserName("aivfo"); + connOpts.setPassword("aivfo".getBytes(StandardCharsets.UTF_8)); + connOpts.setCleanStart(false); + MqttAsyncClient sampleClient = new MqttAsyncClient(broker, clientId, persistence); + System.out.println("Connecting to broker: " + broker); + IMqttToken token = sampleClient.connect(connOpts); + token.waitForCompletion(); + System.out.println("Connected"); + System.out.println("Publishing message: " + content); + MqttMessage message = new MqttMessage(content.getBytes()); + message.setQos(qos); + token = sampleClient.publish(topic, message); + token.waitForCompletion(); + System.out.println("Disconnected"); + System.out.println("Close client."); + sampleClient.close(); + System.exit(0); + } catch (MqttException me) { + System.out.println("reason " + me.getReasonCode()); + System.out.println("msg " + me.getMessage()); + System.out.println("loc " + me.getLocalizedMessage()); + System.out.println("cause " + me.getCause()); + System.out.println("excep " + me); + me.printStackTrace(); + } + } + +} \ No newline at end of file diff --git a/spring-boot/spring-boot-common/pom.xml b/spring-boot/spring-boot-common/pom.xml index b395000..969fc98 100644 --- a/spring-boot/spring-boot-common/pom.xml +++ b/spring-boot/spring-boot-common/pom.xml @@ -21,11 +21,23 @@ org.springframework.boot spring-boot-starter + + + + + + + + com.aivfo + aivfo-kafka-spring-boot-starter + 1.0.0-SNAPSHOT + + org.springframework.retry spring-retry diff --git a/spring-boot/spring-boot-common/src/main/java/com/wyl/spring/boot/common/service/impl/LogTestServiceImpl.java b/spring-boot/spring-boot-common/src/main/java/com/wyl/spring/boot/common/service/impl/LogTestServiceImpl.java index b03263a..27c6ddf 100644 --- a/spring-boot/spring-boot-common/src/main/java/com/wyl/spring/boot/common/service/impl/LogTestServiceImpl.java +++ b/spring-boot/spring-boot-common/src/main/java/com/wyl/spring/boot/common/service/impl/LogTestServiceImpl.java @@ -3,6 +3,7 @@ package com.wyl.spring.boot.common.service.impl; import com.wyl.spring.boot.common.service.LogTestService; import com.wyl.spring.boot.common.spel.annotation.SpelTest; import com.wyl.spring.boot.common.spel.bean.Order; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -11,7 +12,6 @@ import java.util.List; @Service public class LogTestServiceImpl implements LogTestService { - @Override // @LogTest @Transactional diff --git a/spring-boot/spring-boot-common/src/main/resources/application.properties b/spring-boot/spring-boot-common/src/main/resources/application.properties index ad916a8..41ba219 100644 --- a/spring-boot/spring-boot-common/src/main/resources/application.properties +++ b/spring-boot/spring-boot-common/src/main/resources/application.properties @@ -1,3 +1,7 @@ -auth.should.skip.url[0] =1 -auth.should.skip.url[1] =2 -auth.should.skip.url[2] =3 +auth.should.skip.url[0]=1 +auth.should.skip.url[1]=2 +auth.should.skip.url[2]=3 +aivfo.dfs.fastdfs.enable=true +aivfo.dfs.fastdfs.trackerServers=172.23.194.180:22122 +aivfo.kafka.properties.ips=192.168.31.89:9092 +aivfo.kafka.properties.producer.enable=true \ No newline at end of file diff --git a/spring-boot/spring-boot-drools/src/main/java/com/wyl/spring/drools/controller/RuleContreller.java b/spring-boot/spring-boot-drools/src/main/java/com/wyl/spring/drools/controller/RuleContreller.java index 8a0effa..f3fe408 100644 --- a/spring-boot/spring-boot-drools/src/main/java/com/wyl/spring/drools/controller/RuleContreller.java +++ b/spring-boot/spring-boot-drools/src/main/java/com/wyl/spring/drools/controller/RuleContreller.java @@ -8,11 +8,10 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.ArrayList; import java.util.List; @RestController -@RequestMapping("rule") +@RequestMapping("rule1") public class RuleContreller { @Autowired RuleGenerator ruleGenerator; @@ -21,8 +20,14 @@ public class RuleContreller { public void add(@RequestBody RuleDTO ruleDTO) { ruleGenerator.generateRules(List.of(ruleDTO)); } + @PostMapping("del") public void del() { ruleGenerator.removeRules(); } + + @PostMapping("/test") + public String test() { + return "123"; + } } diff --git a/spring-boot/spring-boot-mybatis/pom.xml b/spring-boot/spring-boot-mybatis/pom.xml index eddc226..89dd4dd 100644 --- a/spring-boot/spring-boot-mybatis/pom.xml +++ b/spring-boot/spring-boot-mybatis/pom.xml @@ -34,6 +34,11 @@ spring-boot-starter-test test + + com.aivfo + aivfo-dfs-client-spring-boot-starter + 1.0.0-SNAPSHOT + diff --git a/spring-boot/spring-boot-mybatis/src/main/resources/application.properties b/spring-boot/spring-boot-mybatis/src/main/resources/application.properties index eee96da..86fa67b 100644 --- a/spring-boot/spring-boot-mybatis/src/main/resources/application.properties +++ b/spring-boot/spring-boot-mybatis/src/main/resources/application.properties @@ -1,5 +1,7 @@ -spring.datasource.url=jdbc:mysql://192.168.123.102:3306/wyl_test?useUnicode=true&serverTimezone=UTC&characterEncoding=utf8&useSSL=false&autoReconnect=true&failOverReadOnly=false&rewriteBatchedStatements=true +spring.datasource.url=jdbc:mysql://wylgyx.top:3306/wyl_test?useUnicode=true&serverTimezone=UTC&characterEncoding=utf8&useSSL=false&autoReconnect=true&failOverReadOnly=false&rewriteBatchedStatements=true spring.datasource.username=root spring.datasource.password=Wyl.0629 spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver server.port=80 +aivfo.dsf.fastDFS.enable=true +aivfo.dsf.enable=true \ No newline at end of file diff --git a/spring-boot/spring-boot-mybatis/src/test/java/com/wyl/springbootmybatis/mybatis/SpringBootXxjobApplicationTests.java b/spring-boot/spring-boot-mybatis/src/test/java/com/wyl/springbootmybatis/mybatis/SpringBootXxjobApplicationTests.java index 683880d..f678919 100644 --- a/spring-boot/spring-boot-mybatis/src/test/java/com/wyl/springbootmybatis/mybatis/SpringBootXxjobApplicationTests.java +++ b/spring-boot/spring-boot-mybatis/src/test/java/com/wyl/springbootmybatis/mybatis/SpringBootXxjobApplicationTests.java @@ -4,11 +4,9 @@ import com.wyl.springbootmybatis.BaseTest; import com.wyl.springbootmybatis.mybatis.domain.KeyTest; import com.wyl.springbootmybatis.mybatis.domain.MybatisTest; import com.wyl.springbootmybatis.mybatis.mapper.KeyTestMapper; -import com.wyl.springbootmybatis.mybatis.service.KeyTestService; import com.wyl.springbootmybatis.mybatis.service.MybatisTestService; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import sun.security.krb5.internal.ktab.KeyTabEntry; import java.util.ArrayList; import java.util.List; @@ -30,10 +28,10 @@ class SpringBootMybatisApplicationTests extends BaseTest { @Test void saveDataTest() { - for (int i = 0; i < 300000; i++){ + for (int i = 0; i < 300000; i++) { MybatisTest mybatisTest = new MybatisTest(); mybatisTest.setCode(UUID.randomUUID() - .toString()); + .toString()); mybatisTestService.save(mybatisTest); } }