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);
}
}