修改,增加小模版,增加和视觉衔接的代码

bozhou-古井贡酒
LAPTOP-S9HJSOEB\昊天 5 months ago
parent 5ed8998980
commit 01278daf71

@ -9,7 +9,7 @@
<properties>
<java.version>1.8</java.version>
<spring-boot.version>2.1.9.RELEASE</spring-boot.version>
<spring-boot.version>2.3.1.RELEASE</spring-boot.version>
<fastjson.version>1.2.47</fastjson.version>
<qrcode.version>2.1</qrcode.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@ -42,6 +42,8 @@
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<!-- <scope>provided</scope>-->
<optional>true</optional>
</dependency>
@ -98,16 +100,11 @@
<artifactId>core</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.zhehekeji</groupId>
<artifactId>base-assembly</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<!--指定编译的jdk版本-->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
@ -117,14 +114,4 @@
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>nexus</id>
<name>Nexus</name>
<url>http://47.99.98.250:28888/repository/maven-public/</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
</project>

@ -1,12 +1,8 @@
package com.zhehekeji.common.properities;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties("zhehe.common")
@Getter
@Setter
public class Properity {
private String version;

@ -1,10 +1,8 @@
package com.zhehekeji.common.properities;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties("zhehe.common.redis")
@Data
public class RedisProperity {
/**

@ -1,10 +1,8 @@
package com.zhehekeji.common.util;
import lombok.extern.slf4j.Slf4j;
import java.io.*;
@Slf4j
public class FileUtil {
public static void save(String text,String path){
@ -23,7 +21,7 @@ public class FileUtil {
FileOutputStream fileOutputStream = new FileOutputStream(file);
fileOutputStream.write(text.getBytes());
fileOutputStream.close();
log.info("write text success :{}",text);
// log.info("write text success :{}",text);
} catch (Exception e) {
e.printStackTrace();
}

@ -1,7 +1,6 @@
package com.zhehekeji.common.util;
import com.zhehekeji.core.util.Assert;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.client.config.RequestConfig;
@ -19,7 +18,6 @@ import java.net.URLEncoder;
import java.util.Iterator;
import java.util.Map;
@Slf4j
public class HttpUtil {
private static final CloseableHttpClient httpClient;
@ -145,7 +143,7 @@ public class HttpUtil {
param.deleteCharAt(param.length() - 1);
}
} catch (Exception ex) {
log.error("map对象转换为URL异常{}", ex);
// log.error("map对象转换为URL异常{}", ex);
Assert.isTrue(false, "map对象转换为URL异常");
}
return param.toString();

@ -1,6 +1,5 @@
package com.zhehekeji.common.util;
import lombok.extern.slf4j.Slf4j;
import java.io.File;
import java.io.IOException;
@ -10,7 +9,6 @@ import java.time.format.DateTimeFormatter;
import java.util.Random;
import java.util.UUID;
@Slf4j
public class PathUtil {
private static String getRandomString(int length){
@ -57,7 +55,6 @@ public class PathUtil {
try {
file.createNewFile();
} catch (IOException e) {
log.error("创建文件出错:{}",e);
}
}
return file;

@ -15,7 +15,7 @@
<properties>
<java.version>1.8</java.version>
<spring-boot.version>2.1.9.RELEASE</spring-boot.version>
<spring-boot.version>2.3.1.RELEASE</spring-boot.version>
<jwt.version>0.7.0</jwt.version>
</properties>
@ -49,6 +49,8 @@
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<!-- <scope>provided</scope>-->
<optional>true</optional>
</dependency>

@ -11,7 +11,6 @@ import com.zhehekeji.filter.pojo.SessionHandler;
import com.zhehekeji.filter.pojo.UserType;
import com.zhehekeji.filter.util.CurrentUserUtil;
import com.zhehekeji.filter.util.JwtUtil;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.beans.factory.annotation.Value;
@ -30,7 +29,7 @@ import java.io.IOException;
**/
@Aspect
@Component
@Slf4j
//@Slf4j
public class SessionAspect {
@Value("${zhehe.filter.enable}")

@ -1,14 +1,5 @@
package com.zhehekeji.filter.pojo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@Builder
@NoArgsConstructor
public class CurrentUser {
/**

@ -37,6 +37,8 @@
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<!-- <scope>provided</scope>-->
<optional>true</optional>
</dependency>
</dependencies>

@ -24,7 +24,16 @@
<properties>
<java.version>1.8</java.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
@ -34,6 +43,8 @@
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<!-- <scope>provided</scope>-->
<optional>true</optional>
</dependency>
<dependency>

@ -50,6 +50,8 @@
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<!-- <scope>provided</scope>-->
<optional>true</optional>
</dependency>
<dependency>
@ -57,6 +59,12 @@
<artifactId>common</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.zhehekeji</groupId>
<artifactId>core</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>

@ -1,10 +1,10 @@
package codeDetector;
import lombok.extern.slf4j.Slf4j;
//import lombok.extern.slf4j.Slf4j;
import java.lang.reflect.Field;
@Slf4j
//@Slf4j
public class BarcodeDetector{
//Unrecognized :未识别
@ -69,7 +69,7 @@ public class BarcodeDetector{
System.loadLibrary("BarcodeDetectorJNI");
}catch(Exception e)
{
log.error("detectBestBarCode:"+e);
// log.error("detectBestBarCode:"+e);
}
}

@ -9,6 +9,8 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import javax.annotation.Resource;
import java.util.concurrent.Executor;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.logging.Logger;
@ -38,4 +40,20 @@ public class ExecutorConfig {
executor.initialize();
return executor;
}
@Bean(name = "scheduledExecutorService")
public ScheduledExecutorService scheduledExecutorService() {
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(
configProperties.getAsyncExecutorThread().getCorePoolSize(),
r -> {
Thread t = new Thread(r);
t.setDaemon(false);
t.setName("ScheduledExecutor-" + t.getId());
return t;
}
);
executor.setMaximumPoolSize(configProperties.getAsyncExecutorThread().getMaxPoolSize());
return executor;
}
}

@ -293,6 +293,8 @@ public class CameraControlController {
cameraControlModule.ptzControlIrisDecEnd(id,0);
return Result.success();
}
@Resource
private TaskDelayExecutor taskDelayExecutor;
@PostMapping("/pic/{id}")
@ApiOperation(value = "立即拍照")
@ -300,7 +302,7 @@ public class CameraControlController {
checkLogin(id);
String path = "D:\\work\\"+LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))+".jpeg";
cameraControlModule.pic(id,0,path);
TaskDelayExecutor.addPicDelayTask(id,path,0L);
taskDelayExecutor.addPicDelayTask(id,path,0L);
return Result.success(path);
}

@ -3,6 +3,7 @@ package com.zhehekeji.web.entity.yolo;
import lombok.Data;
import java.util.List;
import java.util.Set;
@Data
public class Calculate {
@ -12,6 +13,7 @@ public class Calculate {
int type;
String savePath;
int layers;
Set<Integer> minTypes;
List<String> fisheye;
List<String> closeUp;

@ -1,64 +1,158 @@
package com.zhehekeji.web.lib;
import com.zhehekeji.common.util.SpringContextUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.concurrent.DelayQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
@Slf4j
@Component
public class TaskDelayExecutor {
// 使用Spring管理的线程池ThreadPoolTaskExecutor
@Autowired
@Qualifier("scheduledExecutorService")
private ScheduledExecutorService scheduledExecutorService;
private static ExecutorService exec = Executors.newFixedThreadPool(1);
private static DelayQueue<CameraDelayTask> queue = new DelayQueue<>();
@Resource
CameraControlModule cameraControlModule;
public static void addMp4DelayTask(Integer cameraId, String path, LocalDateTime startTime, LocalDateTime endTime, Long delayTime) {
CameraDelayTask cameraDelayTask = new CameraDelayTask(cameraId, startTime, endTime,path, 0,delayTime);
queue.add(cameraDelayTask);
}
// 使用ConcurrentHashMap存储任务替代DelayQueue
private static final ConcurrentHashMap<String, ScheduledFuture<?>> scheduledTasks = new ConcurrentHashMap<>();
// 任务ID生成器
private static final AtomicLong taskIdGenerator = new AtomicLong(0);
public void addMp4DelayTask(Integer cameraId, String path, LocalDateTime startTime, LocalDateTime endTime, Long delayTime) {
String taskId = "mp4_" + cameraId + "_" + taskIdGenerator.incrementAndGet();
log.info("添加延时录像任务: taskId={}, cameraId={}, path={}, delayTime={}ms", taskId, cameraId, path, delayTime);
public static void addPicDelayTask(Integer cameraId, String path, Long delayTime) {
CameraDelayTask cameraDelayTask = new CameraDelayTask(cameraId, null, null,path, 1,delayTime);
queue.add(cameraDelayTask);
ScheduledFuture<?> scheduledFuture = getExecutorService().schedule(() -> {
try {
log.info("开始执行延时录像任务: taskId={}, cameraId={}, path={}", taskId, cameraId, path);
cameraControlModule.downloadMp4(cameraId, path, startTime, endTime);
// 任务执行完成后从map中移除
scheduledTasks.remove(taskId);
} catch (Exception e) {
log.error("执行延时录像任务时发生异常: taskId={}, cameraId={}, path={}, error={}", taskId, cameraId, path, e.getMessage(), e);
}
}, delayTime, TimeUnit.MILLISECONDS);
scheduledTasks.put(taskId, scheduledFuture);
}
public static void addGyrateCameraTask(Integer cameraId, Long delayTime,Integer ptzId){
CameraDelayTask cameraDelayTask = new CameraDelayTask(cameraId, null, null,null, 2,delayTime);
cameraDelayTask.setPtzId(ptzId);
queue.add(cameraDelayTask);
public void addPicDelayTask(Integer cameraId, String path, Long delayTime) {
String taskId = "pic_" + cameraId + "_" + taskIdGenerator.incrementAndGet();
log.info("添加延时拍照任务: taskId={}, cameraId={}, path={}, delayTime={}ms", taskId, cameraId, path, delayTime);
ScheduledFuture<?> scheduledFuture = getExecutorService().schedule(() -> {
try {
log.info("开始执行延时拍照任务: taskId={}, cameraId={}, path={}", taskId, cameraId, path);
cameraControlModule.pic(cameraId, 0, path);
// 任务执行完成后从map中移除
scheduledTasks.remove(taskId);
} catch (Exception e) {
log.error("执行延时拍照任务时发生异常: taskId={}, cameraId={}, path={}, error={}", taskId, cameraId, path, e.getMessage(), e);
}
}, delayTime, TimeUnit.MILLISECONDS);
scheduledTasks.put(taskId, scheduledFuture);
}
public static void runMp4DownloadExecutor(){
exec.execute(new Consumer());
public void addGyrateCameraTask(Integer cameraId, Long delayTime, Integer ptzId) {
String taskId = "gyrate_" + cameraId + "_" + ptzId + "_" + taskIdGenerator.incrementAndGet();
log.info("添加转至预置点任务: taskId={}, cameraId={}, ptzId={}, delayTime={}ms", taskId, cameraId, ptzId, delayTime);
ScheduledFuture<?> scheduledFuture = getExecutorService().schedule(() -> {
try {
log.info("开始执行转至预置点任务: taskId={}, cameraId={}, ptzId={}", taskId, cameraId, ptzId);
cameraControlModule.toPtz(ptzId, cameraId);
// 任务执行完成后从map中移除
scheduledTasks.remove(taskId);
} catch (Exception e) {
log.error("执行转至预置点任务时发生异常: taskId={}, cameraId={}, ptzId={}, error={}", taskId, cameraId, ptzId, e.getMessage(), e);
}
}, delayTime, TimeUnit.MILLISECONDS);
scheduledTasks.put(taskId, scheduledFuture);
}
private static class Consumer implements Runnable {
@Override
public void run() {
while (true) {
try {
CameraControlModule cameraControlModule = SpringContextUtil.getBean(CameraControlModule.class);
CameraDelayTask cameraDelayTask = queue.take();
if(cameraDelayTask != null){
if(cameraDelayTask.getType() == 0){
cameraControlModule.downloadMp4(cameraDelayTask.getCameraId(), cameraDelayTask.getPath(), cameraDelayTask.getStartTime(), cameraDelayTask.getEndTime());
}else if(cameraDelayTask.getType() == 1){
cameraControlModule.pic(cameraDelayTask.getCameraId(),0, cameraDelayTask.getPath());
}else if(cameraDelayTask.getType() == 2){
cameraControlModule.toPtz(cameraDelayTask.getPtzId(),cameraDelayTask.getCameraId());
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
/**
*
* @param taskId ID
* @return
*/
public static boolean cancelTask(String taskId) {
ScheduledFuture<?> scheduledFuture = scheduledTasks.get(taskId);
if (scheduledFuture != null) {
boolean cancelled = scheduledFuture.cancel(false);
if (cancelled) {
scheduledTasks.remove(taskId);
log.info("成功取消任务: {}", taskId);
} else {
log.warn("取消任务失败: {}", taskId);
}
return cancelled;
}
log.warn("未找到任务: {}", taskId);
return false;
}
/**
*
* @return
*/
public static int getPendingTaskCount() {
return scheduledTasks.size();
}
/**
*
*/
public static void clearAllTasks() {
scheduledTasks.values().forEach(future -> future.cancel(false));
scheduledTasks.clear();
log.info("已清除所有延时任务");
}
/**
* 线
* @return 线
*/
private ScheduledExecutorService getExecutorService() {
TaskDelayExecutor bean = SpringContextUtil.getBean(TaskDelayExecutor.class);
if (bean != null && bean.scheduledExecutorService != null) {
return bean.scheduledExecutorService;
}
// 备用方案:创建独立的调度线程池
log.warn("无法获取Spring管理的线程池使用备用线程池");
return new ScheduledThreadPoolExecutor(5, r -> {
Thread t = new Thread(r, "TaskDelayExecutor-Backup-" + taskIdGenerator.incrementAndGet());
t.setDaemon(false);
return t;
});
}
/**
*
*/
@Scheduled(fixedRate = 60000) // 每分钟执行一次
public void logTaskStatistics() {
log.info("当前等待执行的延时任务数量: {}", scheduledTasks.size());
}
}

@ -92,7 +92,7 @@ public class HikLoginModuleImpl implements CameraControlLoginModule {
m_strLoginInfo.wPort = (short) m_nPort;
m_strLoginInfo.bUseAsynLogin = true; //是否异步登录0- 否1- 是
m_strLoginInfo.bUseAsynLogin = false; //是否异步登录0- 否1- 是
m_strLoginInfo.write();
HCNetSDK.NET_DVR_DEVICEINFO_V30 m_strDeviceInfo30 = new HCNetSDK.NET_DVR_DEVICEINFO_V30();//设备信息

@ -8,6 +8,7 @@ import com.zhehekeji.web.lib.CameraControlModule;
import lombok.extern.slf4j.Slf4j;
import java.time.LocalDateTime;
import java.util.Calendar;
import static com.zhehekeji.web.lib.joyware.JoywareLoginModuleImpl.mp4ReceiveCB;
@ -353,7 +354,17 @@ public class JoywareCameraControlModuleImpl implements CameraControlModule {
}
}
public boolean setCameraTime(Integer cameraId) {
return false;
/**
*
*/
if (CameraConnMap.getConnId(cameraId).longValue() == 0) {
return false;
}
Calendar calendar = Calendar.getInstance();
NetSDKLib.NET_TIME netTime = new NetSDKLib.NET_TIME();
netTime.setTime(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH) + 1, calendar.get(Calendar.DAY_OF_MONTH),
calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND));
return JoywareLoginModuleImpl.netsdk.CLIENT_SetupDeviceTime(CameraConnMap.getConnId(cameraId), netTime);
}
/**

@ -86,10 +86,6 @@ public class InitService implements ApplicationRunner {
//球机登录
List<Camera> cameras = cameraMapper.selectByMap(new HashMap<>(0));
cameras.forEach(camera -> {
LoginThread loginThread = new LoginThread(camera);
loginThread.start();
});
//plc连接
if(configProperties.getServerMode() == 0){
log.info("PLC TCP MODE");
@ -122,10 +118,12 @@ public class InitService implements ApplicationRunner {
log.error("ksec no config");
}
}else if(configProperties.getServerMode() == 3){}
TaskDelayExecutor.runMp4DownloadExecutor();
// TaskDelayExecutor.runMp4DownloadExecutor();
streetController.closeLightSource();
cameras.forEach(camera -> {
LoginThread loginThread = new LoginThread(camera);
loginThread.start();
});
}
class LoginThread extends Thread{

@ -278,6 +278,8 @@ public class PlcService {
upd.setStatus(1);
orderMapper.updateById(upd);
}
@Resource
private TaskDelayExecutor taskDelayExecutor;
public String cameraVideo(Integer cameraId, LocalDateTime startTime, LocalDateTime endTime) {
String path = PathUtil.createFileName("mp4", cameraId);
@ -287,7 +289,7 @@ public class PlcService {
@Override
public void run() {
String realPath = configProperties.getSavePath().getMp4Path() + finalPath;
TaskDelayExecutor.addMp4DelayTask(cameraId, realPath, startTime, endTime, configProperties.getCameraConfig().getDelayDownloadMp4());
taskDelayExecutor.addMp4DelayTask(cameraId, realPath, startTime, endTime, configProperties.getCameraConfig().getDelayDownloadMp4());
}
});
thread.start();
@ -462,7 +464,7 @@ public class PlcService {
String realPath = configProperties.getSavePath().getMediaPath() + path;
log.info("capture picture, cameraId:{},path:{}delayTime:{}", cameraId, realPath, delayTime);
if (delay) {
TaskDelayExecutor.addPicDelayTask(cameraId, realPath, delayTime);
taskDelayExecutor.addPicDelayTask(cameraId, realPath, delayTime);
} else {
cameraControlModule.pic(cameraId, 0, realPath);
}
@ -506,7 +508,7 @@ public class PlcService {
if (ptzId != null && ptzId >= 0) {
log.info("gyrate camera by code, code{},cameraId:{},ptId:{}", code, cameraId, ptzId);
TaskDelayExecutor.addGyrateCameraTask(cameraId, times, ptzId);
taskDelayExecutor.addGyrateCameraTask(cameraId, times, ptzId);
//cameraControlModule.toPtz(ptzId,cameraId);
} else {
log.error("ptz not found ,code{},cameraId:{}", code, cameraId);

@ -60,7 +60,7 @@ public class AlgorithmService {
//String url = "http://127.0.0.1:8083"+"/visionCompute";
try {
System.out.println("1111111111111"+algorithmPojo.toString());
// System.out.println("1111111111111"+algorithmPojo.toString());
// String jsonString = gson.toJson(algorithmPojo);
ResponseEntity<Result<Calculate>> response = restTemplate.exchange(
url,
@ -85,7 +85,7 @@ public class AlgorithmService {
algorithmPojo.setGoodsNumberResult( (calculate.getLayers()-1) * countLayersMap.get(algorithmPojo.getGoodsType()));
}
algorithmPojo.setCalculate(calculate);
System.out.println(calculate);
// System.out.println(calculate);
}catch (RestClientException e){
log.error("未连接上堆垛机"+e);
//Assert.isTrue(false,"请求失败,视觉服务未连接");
@ -93,6 +93,7 @@ public class AlgorithmService {
return algorithmPojo;
}catch (Exception e){
log.error("堆垛机报错"+e);
e.printStackTrace();
}
return algorithmPojo;

Loading…
Cancel
Save