1.增加库口搜索

2.增加去相机初始化
联合利华-拍照
LAPTOP-S9HJSOEB\昊天 4 weeks ago
parent cedfc82075
commit 583d812e85

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -1,2 +0,0 @@
2026-05-13 00:10:01.790 [scheduling-1] INFO [com.example.lxcameraapi.service.cron.CronTab] - corn delete file
2026-05-13 00:10:01.796 [scheduling-1] INFO [com.example.lxcameraapi.service.cron.CronTab] - free space :0

@ -1,233 +0,0 @@
2026-05-13 06:21:04.668 [task-8633] ERROR [c.e.lxcameraapi.service.AsyncProcessingService] - 异步任务执行异常
java.lang.StringIndexOutOfBoundsException: Range [0, 8) out of bounds for length 1
at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:55)
at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:52)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210)
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckFromToIndex(Preconditions.java:112)
at java.base/jdk.internal.util.Preconditions.checkFromToIndex(Preconditions.java:349)
at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4849)
at java.base/java.lang.String.substring(String.java:2823)
at com.example.lxcameraapi.service.AsyncProcessingService.processQrCodeAsync(AsyncProcessingService.java:168)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:352)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:765)
at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115)
at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:317)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)
2026-05-13 06:22:10.643 [task-8639] ERROR [c.e.lxcameraapi.service.AsyncProcessingService] - 异步任务执行异常
java.lang.StringIndexOutOfBoundsException: Range [0, 8) out of bounds for length 1
at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:55)
at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:52)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210)
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckFromToIndex(Preconditions.java:112)
at java.base/jdk.internal.util.Preconditions.checkFromToIndex(Preconditions.java:349)
at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4849)
at java.base/java.lang.String.substring(String.java:2823)
at com.example.lxcameraapi.service.AsyncProcessingService.processQrCodeAsync(AsyncProcessingService.java:168)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:352)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:765)
at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115)
at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:317)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)
2026-05-13 06:29:24.842 [task-8678] ERROR [c.e.lxcameraapi.service.AsyncProcessingService] - 异步任务执行异常
java.lang.StringIndexOutOfBoundsException: Range [0, 8) out of bounds for length 1
at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:55)
at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:52)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210)
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckFromToIndex(Preconditions.java:112)
at java.base/jdk.internal.util.Preconditions.checkFromToIndex(Preconditions.java:349)
at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4849)
at java.base/java.lang.String.substring(String.java:2823)
at com.example.lxcameraapi.service.AsyncProcessingService.processQrCodeAsync(AsyncProcessingService.java:168)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:352)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:765)
at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115)
at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:317)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)
2026-05-13 07:26:53.549 [task-8987] ERROR [c.e.lxcameraapi.service.AsyncProcessingService] - 异步任务执行异常
java.lang.StringIndexOutOfBoundsException: Range [0, 8) out of bounds for length 1
at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:55)
at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:52)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210)
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckFromToIndex(Preconditions.java:112)
at java.base/jdk.internal.util.Preconditions.checkFromToIndex(Preconditions.java:349)
at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4849)
at java.base/java.lang.String.substring(String.java:2823)
at com.example.lxcameraapi.service.AsyncProcessingService.processQrCodeAsync(AsyncProcessingService.java:168)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:352)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:765)
at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115)
at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:317)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)
2026-05-13 07:29:38.819 [task-9002] ERROR [c.e.lxcameraapi.service.AsyncProcessingService] - 异步任务执行异常
java.lang.StringIndexOutOfBoundsException: Range [0, 8) out of bounds for length 1
at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:55)
at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:52)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210)
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckFromToIndex(Preconditions.java:112)
at java.base/jdk.internal.util.Preconditions.checkFromToIndex(Preconditions.java:349)
at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4849)
at java.base/java.lang.String.substring(String.java:2823)
at com.example.lxcameraapi.service.AsyncProcessingService.processQrCodeAsync(AsyncProcessingService.java:168)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:352)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:765)
at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115)
at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:317)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)
2026-05-13 08:22:49.447 [task-9287] ERROR [c.e.lxcameraapi.service.AsyncProcessingService] - 异步任务执行异常
java.lang.StringIndexOutOfBoundsException: Range [0, 8) out of bounds for length 1
at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:55)
at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:52)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210)
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckFromToIndex(Preconditions.java:112)
at java.base/jdk.internal.util.Preconditions.checkFromToIndex(Preconditions.java:349)
at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4849)
at java.base/java.lang.String.substring(String.java:2823)
at com.example.lxcameraapi.service.AsyncProcessingService.processQrCodeAsync(AsyncProcessingService.java:168)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:352)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:765)
at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115)
at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:317)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)
2026-05-13 08:26:43.110 [task-9308] ERROR [c.e.lxcameraapi.service.AsyncProcessingService] - 异步任务执行异常
java.lang.StringIndexOutOfBoundsException: Range [0, 8) out of bounds for length 1
at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:55)
at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:52)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210)
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckFromToIndex(Preconditions.java:112)
at java.base/jdk.internal.util.Preconditions.checkFromToIndex(Preconditions.java:349)
at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4849)
at java.base/java.lang.String.substring(String.java:2823)
at com.example.lxcameraapi.service.AsyncProcessingService.processQrCodeAsync(AsyncProcessingService.java:168)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:352)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:765)
at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115)
at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:317)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)
2026-05-13 08:27:51.864 [task-9314] ERROR [c.e.lxcameraapi.service.AsyncProcessingService] - 异步任务执行异常
java.lang.StringIndexOutOfBoundsException: Range [0, 8) out of bounds for length 1
at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:55)
at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:52)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210)
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckFromToIndex(Preconditions.java:112)
at java.base/jdk.internal.util.Preconditions.checkFromToIndex(Preconditions.java:349)
at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4849)
at java.base/java.lang.String.substring(String.java:2823)
at com.example.lxcameraapi.service.AsyncProcessingService.processQrCodeAsync(AsyncProcessingService.java:168)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:352)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:765)
at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115)
at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:317)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)
2026-05-13 09:36:41.023 [task-9680] ERROR [c.e.lxcameraapi.service.AsyncProcessingService] - 异步任务执行异常
java.lang.StringIndexOutOfBoundsException: Range [0, 8) out of bounds for length 1
at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:55)
at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:52)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210)
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckFromToIndex(Preconditions.java:112)
at java.base/jdk.internal.util.Preconditions.checkFromToIndex(Preconditions.java:349)
at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4849)
at java.base/java.lang.String.substring(String.java:2823)
at com.example.lxcameraapi.service.AsyncProcessingService.processQrCodeAsync(AsyncProcessingService.java:168)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:352)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:765)
at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115)
at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:317)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)
2026-05-13 18:02:43.397 [main] ERROR [c.example.lxcameraapi.service.s7.S7MultiPlcService] - PLC PLC1 连接失败: 127.0.0.1, 错误码: 1
2026-05-13 18:02:43.398 [main] ERROR [c.example.lxcameraapi.service.s7.S7MultiPlcService] - PLC PLC1 连接失败: 127.0.0.1, 错误码: 1
2026-05-13 18:02:43.398 [main] ERROR [c.example.lxcameraapi.service.s7.S7MultiPlcService] - PLC PLC1 连接失败: 127.0.0.1, 错误码: 1
2026-05-13 18:02:44.191 [main] ERROR [o.s.b.diagnostics.LoggingFailureAnalysisReporter] -
***************************
APPLICATION FAILED TO START
***************************
Description:
Web server failed to start. Port 8097 was already in use.
Action:
Identify and stop the process that's listening on port 8097 or configure this application to listen on another port.

File diff suppressed because it is too large Load Diff

@ -8,6 +8,7 @@ import java.time.LocalDateTime;
public class CameraUrlQuery {
private String pallet;
private String batch;
private String plc;
private LocalDateTime startTime;
private LocalDateTime endTime;
}

@ -0,0 +1,24 @@
package com.example.lxcameraapi.conf;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* MyBatis-Plus
*/
@Configuration
public class MybatisPlusConfig {
/**
*
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}

@ -26,6 +26,7 @@ public class CameraUrlController {
new Page<>(query.getPageNum(), query.getPageSize()),
params.getPallet(),
params.getBatch(),
params.getPlc(),
params.getStartTime(),
params.getEndTime()
);

@ -185,4 +185,39 @@ public class HikCaptureController {
return BatchCaptureResponse.failure("连拍失败: " + e.getMessage(), ip);
}
}
/**
*
*/
@GetMapping("/batchALL")
public BatchCaptureResponse captureBatchAll(
@RequestParam(defaultValue = "D:\\data") String basePath,
@RequestParam(defaultValue = "0") Integer time,
@RequestParam(defaultValue = "20") int count) {
List<String> successPaths = new ArrayList<>();
StringBuilder basePathAll = new StringBuilder(basePath + "/" + "all" + "/");
try {
for (AppConfig.Camera camera : appConfig.getHikCamera()){
String ip = camera.getIp();
basePathAll.append(camera.getId()).append("/");
Thread.sleep( time);
log.info("开始连拍IP: {}, 路径: {}, 数量: {}", ip, basePathAll, count);
successPaths.addAll(imageCaptureService.captureBatch(ip, basePathAll.toString(), count)) ;
}
} catch (Exception e) {
log.error("连拍异常", e);
return BatchCaptureResponse.failure("连拍失败: " + e.getMessage());
}
if (!successPaths.isEmpty()) {
log.info("连拍完成,, 成功: {}/{}", successPaths.size(), count);
return BatchCaptureResponse.success("all", basePath, count, successPaths.size(), successPaths);
} else {
log.warn("连拍失败, 路径: {}", basePath);
return BatchCaptureResponse.failure("连拍失败,请检查相机是否已初始化");
}
}
}

@ -15,4 +15,5 @@ public class CameraUrl {
private LocalDateTime createTime;
private String upPath;
private String downPath;
private String plc;
}

@ -20,12 +20,14 @@ public class CameraUrlService extends ServiceImpl<CameraUrlMapper, CameraUrl> im
Page<CameraUrl> page,
String pallet,
String batch,
String plc,
java.time.LocalDateTime startTime,
java.time.LocalDateTime endTime
) {
return this.lambdaQuery()
.like(StringUtils.isNotBlank(pallet), CameraUrl::getPallet, pallet)
.like(StringUtils.isNotBlank(batch), CameraUrl::getBatch, batch)
.like(StringUtils.isNotBlank(plc), CameraUrl::getPlc, plc)
.ge(startTime != null, CameraUrl::getDate, startTime)
.le(endTime != null, CameraUrl::getDate, endTime)
.orderByDesc(CameraUrl::getCreateTime)

@ -8,6 +8,9 @@ import org.springframework.stereotype.Service;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@ -82,6 +85,7 @@ public class ImageCaptureService {
// 3. 初始化配置的相机
if (appConfig.getHikCamera() != null && !appConfig.getHikCamera().isEmpty()){
log.info("步骤3: 从配置初始化 {} 个相机...", appConfig.getHikCamera().size());
// 暂时改为需要的时候进行连接
initCamerasFromConfig(appConfig.getHikCamera());
} else {
log.warn("配置中没有海康相机");
@ -242,6 +246,30 @@ public class ImageCaptureService {
}
}
}
public void destroy(String ip) {
log.info("开始清理相机资源...");
// 停止抓图并销毁所有句柄
Handle hCamera = handleMap.get(ip);
try {
// 停止抓图
int nRet = MvCameraControl.MV_CC_StopGrabbing(hCamera);
if (MV_OK != nRet) {
log.warn("相机 {} 停止抓图失败errcode: [0x{}]", ip, Integer.toHexString(nRet));
}
// 销毁句柄
nRet = MvCameraControl.MV_CC_DestroyHandle(hCamera);
if (MV_OK != nRet) {
log.warn("相机 {} 销毁句柄失败errcode: [0x{}]", ip, Integer.toHexString(nRet));
}
log.info("相机 {} 资源已清理", ip);
} catch (Exception e) {
log.error("清理相机 {} 资源时发生异常", ip, e);
}
}
/**
*
@ -445,10 +473,11 @@ public class ImageCaptureService {
// 获取一帧图像
MV_FRAME_OUT_INFO stImageInfo = new MV_FRAME_OUT_INFO();
byte[] pData = new byte[(int) stParam.curValue];
nRet = MvCameraControl.MV_CC_GetOneFrameTimeout(hCamera, pData, stImageInfo, 3000);
nRet = MvCameraControl.MV_CC_GetOneFrameTimeout(hCamera, pData, stImageInfo, 5000);
if (MV_OK != nRet) {
log.warn("获取图像失败 (第{}次)errcode: [0x{}]", attempt, Integer.toHexString(nRet));
destroy(ip);
lastErrorCode = nRet;
if (attempt < maxRetries) {
log.info("等待200ms后重试...");
@ -619,6 +648,7 @@ public class ImageCaptureService {
*/
public List<String> captureBatch(String ip, String basePath, int count) {
List<String> successPaths = new ArrayList<>();
LocalDateTime now = LocalDateTime.now();
// 确保相机已初始化
if (!ensureCameraInitialized(ip)) {
@ -676,6 +706,9 @@ public class ImageCaptureService {
}
}
LocalDateTime endNow = LocalDateTime.now();
log.info("连拍结束,相机: {}, 耗时: {}ms", ip, Duration.between(now, endNow).toMillis());
log.info("连拍完成,相机: {}, 成功: {}/{}", ip, successPaths.size(), count);
return successPaths;
}

@ -391,6 +391,7 @@ public class S7MultiPlcService {
cameraUrl.setCreateTime(LocalDateTime.now());
cameraUrl.setUpPath(photos.get("upPath"));
cameraUrl.setDownPath(photos.get("downPath"));
cameraUrl.setPlc(plcNumber);
cameraUrlService.saveOrUpdate(cameraUrl);
// 标记拍照完成

@ -185,6 +185,10 @@
<h1 class="card-title">相机拍照记录查询</h1>
<div class="form-row">
<div class="form-group query-input">
<label>库口</label>
<input type="text" id="plc" placeholder="plc">
</div>
<div class="form-group query-input">
<label>托盘号</label>
<input type="text" id="pallet" placeholder="托盘号">
@ -216,6 +220,7 @@
<table>
<thead>
<tr>
<th>库口</th>
<th>托盘号</th>
<th>批次号</th>
<th>生产日期</th>
@ -254,12 +259,14 @@
function getQueryParams() {
const pallet = document.getElementById('pallet').value.trim();
const plc = document.getElementById('plc').value.trim();
const batch = document.getElementById('batch').value.trim();
const startTime = document.getElementById('startTime').value;
const endTime = document.getElementById('endTime').value;
const params = {};
if (pallet) params.pallet = pallet;
if (plc) params.plc = plc;
if (batch) params.batch = batch;
if (startTime) params.startTime = startTime.replace('T', ' ') + ':00';
if (endTime) params.endTime = endTime.replace('T', ' ') + ':00';
@ -338,6 +345,8 @@
const tbody = document.getElementById('tableBody');
tbody.innerHTML = data.list.map(item => `
<tr>
<td>${item.plc || '-'}</td>
<td>${item.pallet || '-'}</td>
<td>${item.batch || '-'}</td>
<td>${formatDateTime(item.date)}</td>
@ -370,6 +379,8 @@
function reset() {
document.getElementById('pallet').value = '';
document.getElementById('plc').value = '';
document.getElementById('batch').value = '';
document.getElementById('startTime').value = '';
document.getElementById('endTime').value = '';

Loading…
Cancel
Save