diff --git a/web/src/main/java/com/leaper/web/controller/CameraRecord.java b/web/src/main/java/com/leaper/web/controller/CameraRecord.java index 97eadac..644cee6 100644 --- a/web/src/main/java/com/leaper/web/controller/CameraRecord.java +++ b/web/src/main/java/com/leaper/web/controller/CameraRecord.java @@ -51,7 +51,7 @@ public class CameraRecord { @LicenseHandler public Result record(@RequestBody Record record) { - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-M-dd"); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-M-d"); LocalDate today = LocalDate.parse(record.getDate(), formatter); @@ -100,4 +100,12 @@ public class CameraRecord { Duration duration = Duration.between(midnight, dateTime); return duration.getSeconds(); } + + public static void main(String[] args) { + + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-M-dd"); + + LocalDate today = LocalDate.parse("2024-8-6", formatter); + System.out.printf(today.toString()); + } } diff --git a/web/src/main/java/com/leaper/web/lib/CameraConnMap.java b/web/src/main/java/com/leaper/web/lib/CameraConnMap.java index c861d73..edb5fdb 100644 --- a/web/src/main/java/com/leaper/web/lib/CameraConnMap.java +++ b/web/src/main/java/com/leaper/web/lib/CameraConnMap.java @@ -4,6 +4,7 @@ import com.leaper.web.lib.joyware.NetSDKLib; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; /** * camera login handler @@ -14,13 +15,13 @@ public class CameraConnMap { * key :cameraId * value: loginId */ - public static Map cameraMap = new HashMap<>(); + public static Map cameraMap = new ConcurrentHashMap<>(); /** * key:loginId * value: cameraId */ - public static Map loginMap = new HashMap<>(); + public static Map loginMap = new ConcurrentHashMap<>(); public static void conn(Integer cameraId,NetSDKLib.LLong handlerId){ synchronized (cameraId.toString().intern()){ diff --git a/web/src/main/java/com/leaper/web/lib/hik/HikLoginModuleImpl.java b/web/src/main/java/com/leaper/web/lib/hik/HikLoginModuleImpl.java index 33009b3..8d1808d 100644 --- a/web/src/main/java/com/leaper/web/lib/hik/HikLoginModuleImpl.java +++ b/web/src/main/java/com/leaper/web/lib/hik/HikLoginModuleImpl.java @@ -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();//设备信息 diff --git a/web/src/main/java/com/leaper/web/service/CameraService.java b/web/src/main/java/com/leaper/web/service/CameraService.java index 22959ee..52d94ae 100644 --- a/web/src/main/java/com/leaper/web/service/CameraService.java +++ b/web/src/main/java/com/leaper/web/service/CameraService.java @@ -33,9 +33,10 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.IOException; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import java.util.concurrent.CountDownLatch; +import java.util.concurrent.*; import java.util.stream.Collectors; @Service @@ -114,30 +115,58 @@ public class CameraService { Assert.isTrue(count == null || count == 0, "球机已被绑定"); cameraMapper.deleteById(id); } - + ExecutorService executor = Executors.newFixedThreadPool(20); public PageInfo cameras(StreetSearch streetSearch) { PageHelper.startPage(streetSearch.getPageNum(), streetSearch.getPageSize()); List cameras = cameraMapper.selectByMap(new HashMap<>(0)); - List collect = cameras.parallelStream().peek(camera -> { - - Boolean ok = false; - if(CameraConnMap.getConnId(camera.getId())!=null){ - if (configProperties.getCameraConfig().getCameraType() == ConfigProperties.HIK_CAMERA) { - - ok = HikLoginModuleImpl.connectStatus(CameraConnMap.getConnId(camera.getId()).intValue()); - } else { - ok = JoywareLoginModuleImpl.connectStatus(CameraConnMap.getConnId(camera.getId())); - } - } - if (ok) { - camera.setStatus("连接正常"); - } else { - //CameraConnMap.disConn(camera.getId()); - camera.setStatus("未连接"); - cameraLogin(camera); + if(cameras.size() > 0){ + CountDownLatch latch = new CountDownLatch(cameras.size()); + cameras.forEach(camera -> { + StatusThread statusThread = new StatusThread(camera,latch); + statusThread.start(); + }); + try { + latch.await(); + } catch (InterruptedException e) { + e.printStackTrace(); } - }).collect(Collectors.toList()); - return new PageInfo<>(collect); + } +// List> futureTasks = new ArrayList<>(); +// for(Camera camera : cameras){ +// +// FutureTask futureTask = new FutureTask<>(() -> { +// Boolean ok = false; +// if(CameraConnMap.getConnId(camera.getId())!=null){ +// if (configProperties.getCameraConfig().getCameraType() == ConfigProperties.HIK_CAMERA) { +// +// ok = HikLoginModuleImpl.connectStatus(CameraConnMap.getConnId(camera.getId()).intValue()); +// } else { +// ok = JoywareLoginModuleImpl.connectStatus(CameraConnMap.getConnId(camera.getId())); +// } +// } +// if (ok) { +// camera.setStatus("连接正常"); +// } else { +// //CameraConnMap.disConn(camera.getId()); +// camera.setStatus("未连接"); +// cameraLogin(camera); +// } +// return ok; +// }); +// futureTasks.add(futureTask); +// executor.execute(futureTask); +// } +// for (Future f :futureTasks){ +// try { +// f.get(); +// } catch (InterruptedException e) { +// throw new RuntimeException(e); +// } catch (ExecutionException e) { +// throw new RuntimeException(e); +// } +// } + + return new PageInfo<>(cameras); } public class StatusThread extends Thread { @@ -154,7 +183,7 @@ public class CameraService { try { Boolean ok = false; if (configProperties.getCameraConfig().getCameraType() == ConfigProperties.HIK_CAMERA) { - if(CameraConnMap.getConnId(camera.getId()) ==null){ + if(CameraConnMap.getConnId(camera.getId()) == null){ cameraLogin(camera); } ok = HikLoginModuleImpl.connectStatus(CameraConnMap.getConnId(camera.getId()).intValue()); diff --git a/web/src/main/java/com/leaper/web/service/CronTab.java b/web/src/main/java/com/leaper/web/service/CronTab.java index 36b4eef..bb9bc74 100644 --- a/web/src/main/java/com/leaper/web/service/CronTab.java +++ b/web/src/main/java/com/leaper/web/service/CronTab.java @@ -157,6 +157,9 @@ public class CronTab { LocalDateTime previousMinuteStart = now.minusMinutes(3).withSecond(0).withNano(0); String formattedDate = currentDate.format(formatter); for (Camera camera : cameras){ + if(camera.getChannel() != 1){ + continue; + } String url = formattedDate + "/" +UUID.randomUUID(); boolean ok =cameraControlModule.downloadMp4Stream(camera.getId(), "D:\\" + url, previousMinuteStart, currentMinuteStart, camera.getChannel()); if(ok) { diff --git a/web/src/main/java/com/leaper/web/service/InitService.java b/web/src/main/java/com/leaper/web/service/InitService.java index f9b6742..b6c40ae 100644 --- a/web/src/main/java/com/leaper/web/service/InitService.java +++ b/web/src/main/java/com/leaper/web/service/InitService.java @@ -94,6 +94,8 @@ public class InitService implements ApplicationRunner { loginThread.start(); }); LPLicense.createLicKeyIfNotExist(); + + TaskDelayExecutor.runMp4DownloadExecutor(); //plc连接 if(configProperties.getServerMode() == 0){ log.info("PLC TCP MODE"); @@ -123,7 +125,6 @@ public class InitService implements ApplicationRunner { log.error("ksec no config"); } } - TaskDelayExecutor.runMp4DownloadExecutor(); } class LoginThread extends Thread{