diff --git a/casic-common/src/main/java/com/casic/missiles/weigeng/CommDoorUtil.java b/casic-common/src/main/java/com/casic/missiles/weigeng/CommDoorUtil.java index 7457109..8922b99 100644 --- a/casic-common/src/main/java/com/casic/missiles/weigeng/CommDoorUtil.java +++ b/casic-common/src/main/java/com/casic/missiles/weigeng/CommDoorUtil.java @@ -142,8 +142,10 @@ Thread.sleep(Integer.valueOf(map.get("time").toString()) * 1000); //重新关闭开关上电 DoorShortUtil.remoteControl(controllerIP, Long.valueOf(controllerSN), 2, 2); - Thread.sleep(2 * 60 * 1000); + Thread.sleep(3 * 60 * 1000); return true; + }else { + Thread.sleep(3 * 60 * 1000); } } catch (Exception e) { e.printStackTrace(); diff --git a/casic-common/src/main/java/com/casic/missiles/weigeng/CommDoorUtil.java b/casic-common/src/main/java/com/casic/missiles/weigeng/CommDoorUtil.java index 7457109..8922b99 100644 --- a/casic-common/src/main/java/com/casic/missiles/weigeng/CommDoorUtil.java +++ b/casic-common/src/main/java/com/casic/missiles/weigeng/CommDoorUtil.java @@ -142,8 +142,10 @@ Thread.sleep(Integer.valueOf(map.get("time").toString()) * 1000); //重新关闭开关上电 DoorShortUtil.remoteControl(controllerIP, Long.valueOf(controllerSN), 2, 2); - Thread.sleep(2 * 60 * 1000); + Thread.sleep(3 * 60 * 1000); return true; + }else { + Thread.sleep(3 * 60 * 1000); } } catch (Exception e) { e.printStackTrace(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java b/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java index 84398ca..e4d3d8c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java @@ -1,158 +1,179 @@ -//package com.casic.missiles.modular.system.task; -// -//import cn.hutool.core.util.ObjectUtil; -//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -//import com.casic.missiles.modular.system.dto.DeviceCommom; -//import com.casic.missiles.modular.system.dto.DeviceInfo; -//import com.casic.missiles.modular.system.model.BusMonipoiInfo; -//import com.casic.missiles.modular.system.service.IBusMonipoiInfoService; -//import com.casic.missiles.modular.system.service.IHCNetService; -//import com.casic.missiles.modular.system.service.impl.HCNetServiceImpl; -//import com.sun.jna.Memory; -//import com.sun.jna.Pointer; -//import org.slf4j.Logger; -//import org.slf4j.LoggerFactory; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.beans.factory.annotation.Value; -//import org.springframework.boot.ApplicationArguments; -//import org.springframework.boot.ApplicationRunner; -//import org.springframework.scheduling.annotation.EnableScheduling; -//import org.springframework.stereotype.Component; -// -//import java.util.Date; -//import java.util.HashMap; -//import java.util.List; -//import java.util.Map; -//import java.util.concurrent.ArrayBlockingQueue; -//import java.util.concurrent.ThreadPoolExecutor; -//import java.util.concurrent.TimeUnit; -// -//@Component -//@EnableScheduling -//public class CollectGasDataTask implements ApplicationRunner { -// private static final Logger logger = LoggerFactory.getLogger(CollectGasDataTask.class); -// -// @Autowired -// private IBusMonipoiInfoService monipoiInfoService; -// @Autowired -// private IHCNetService ihcNetService; -// -// @Autowired -// private HCNetServiceImpl hcNetService; -// -// @Value("${casic.presetInterval}") -// private int presetInterval; -// @Value("${casic.collectInterval}") -// private int collectInterval; -// @Value("${casic.isOpen}") -// private int isOpen; -// -// @Override -// public void run(ApplicationArguments args) throws Exception { -// // 查询全部设备 -// QueryWrapper query = new QueryWrapper(); -// query.eq("VALID", "0"); -// List deviceList = monipoiInfoService.list(query); -// // 创建线程池,每个设备一个线程 -// ThreadPoolExecutor executor = new ThreadPoolExecutor(deviceList.size(), deviceList.size(), 10, TimeUnit.SECONDS, -// new ArrayBlockingQueue<>(20), new ThreadPoolExecutor.CallerRunsPolicy()); -// -// for (BusMonipoiInfo monipoiInfo : deviceList) { -// if (ObjectUtil.isNotEmpty(monipoiInfo.getDeviceIp())) { -// Runnable worker = this.new GasDataRunnable(monipoiInfo.getDeviceIp(), monipoiInfo.getDeviceUser(), monipoiInfo.getDevicePassword()); -// executor.execute(worker); -// } -// } -// } -// -// class GasDataRunnable implements Runnable { -// -// private String deviceIp; -// private String deviceUser; -// private String devicePassword; -// private Long userId; -// private Long serialHandle; -// -// public GasDataRunnable(String deviceIp, String deviceUser, String devicePassword) { -// this.deviceIp = deviceIp; -// this.deviceUser = deviceUser; -// this.devicePassword = devicePassword; -// this.userId = -1L; -// this.serialHandle = -1L; -// } -// -// private boolean registerAndStartSerial() { -// this.userId = ihcNetService.register(this.deviceUser, this.devicePassword, this.deviceIp); -// this.serialHandle = ihcNetService.serialHandle(userId); -// if (this.userId >= 0 && this.serialHandle >= 0) { -// return true; -// } else { -// return false; -// } -// } -// -// private Map map = new HashMap<>(); -// -// private void sendGasCommand() { -// DeviceInfo deviceInfo = DeviceCommom.selectByDeviceIp(this.deviceIp); -// Long serial = deviceInfo.getSerialHandle(); -// if (deviceInfo.getSerialHandle() < 0) { -// return; -// } -// // FF 01 00 90 01 00 92 -// int[] command = {0xff, 0x01, 0x00, 0x90, 0x01, 0x00, 0x92}; -//// int[] command = {0xff,0x01,0x00,0x53,0x00,0x00,0x54}; -// Pointer pointer = new Memory(command.length); -// for (int i = 0; i < command.length; i++) { -// pointer.setByte(i, (byte) command[i]); -// } -// int size = (int) ((Memory) pointer).getSize(); -// //用于与控制指令错开下发 -// hcNetService.setTimestampCollcect(System.currentTimeMillis()); -// -// boolean res = ihcNetService.serialSend(serial, pointer, size); -//// System.out.println("collect**************"+new Date()); -// if (!res) { -// //判断是否掉线,断电重启规则 若同一云台300次(5分钟)获取不到甲烷浓度值,则重启设备 -// //是否配置重启 -// if (isOpen == 1) { -// if (map.get(this.deviceIp) != null) { -// map.put(this.deviceIp, map.get(this.deviceIp) + 1); -// if (map.get(this.deviceIp) == 300L) { -// if (ihcNetService.interruptStart(this.deviceIp)) { -// map.remove(this.deviceIp); -// logger.error(deviceIp.concat("restart success ********************* ")); -// } -// } -// } else { -// map.put(this.deviceIp, 1); -// } -// } -// logger.error(deviceIp.concat("fetch gas data error, error code: ").concat(String.valueOf(ihcNetService.getLastError()))); -// } -// } -// -// @Override -// public void run() { -// System.out.println("Thread-" + deviceIp + " -> start... " + new Date()); -// // 登录,登录失败就一直尝试登录 -// while (true) { -// boolean register = registerAndStartSerial(); -// if (register) { -// break; -// } -// } -// // 登录成功后,按每秒一次查询甲烷数据 -// while (true) { -// try { -// sendGasCommand(); -// Thread.sleep(collectInterval); -// } catch (InterruptedException e) { -// e.printStackTrace(); -// } -// } -// } -// } -// -// -//} +package com.casic.missiles.modular.system.task; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.modular.system.dto.DeviceCommom; +import com.casic.missiles.modular.system.dto.DeviceInfo; +import com.casic.missiles.modular.system.model.BusMonipoiInfo; +import com.casic.missiles.modular.system.service.IBusMonipoiInfoService; +import com.casic.missiles.modular.system.service.IHCNetService; +import com.casic.missiles.modular.system.service.impl.HCNetServiceImpl; +import com.sun.jna.Memory; +import com.sun.jna.Pointer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.stereotype.Component; + +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +@Component +@EnableScheduling +public class CollectGasDataTask implements ApplicationRunner { + private static final Logger logger = LoggerFactory.getLogger(CollectGasDataTask.class); + + @Autowired + private IBusMonipoiInfoService monipoiInfoService; + @Autowired + private IHCNetService ihcNetService; + + @Autowired + private HCNetServiceImpl hcNetService; + + @Value("${casic.presetInterval}") + private int presetInterval; + @Value("${casic.collectInterval}") + private int collectInterval; + @Value("${casic.isOpen}") + private int isOpen; + + @Override + public void run(ApplicationArguments args) throws Exception { + // 查询全部设备 + QueryWrapper query = new QueryWrapper(); + query.eq("VALID", "0"); + List deviceList = monipoiInfoService.list(query); + // 创建线程池,每个设备一个线程 + ThreadPoolExecutor executor = new ThreadPoolExecutor(deviceList.size(), deviceList.size(), 10, TimeUnit.SECONDS, + new ArrayBlockingQueue<>(20), new ThreadPoolExecutor.CallerRunsPolicy()); + + for (BusMonipoiInfo monipoiInfo : deviceList) { + if (ObjectUtil.isNotEmpty(monipoiInfo.getDeviceIp())) { + Runnable worker = this.new GasDataRunnable(monipoiInfo.getDeviceIp(), monipoiInfo.getDeviceUser(), monipoiInfo.getDevicePassword()); + executor.execute(worker); + } + } + } + + class GasDataRunnable implements Runnable { + + private String deviceIp; + private String deviceUser; + private String devicePassword; + private Long userId; + private Long serialHandle; + + public GasDataRunnable(String deviceIp, String deviceUser, String devicePassword) { + this.deviceIp = deviceIp; + this.deviceUser = deviceUser; + this.devicePassword = devicePassword; + this.userId = -1L; + this.serialHandle = -1L; + } + + private boolean registerAndStartSerial() { + this.userId = ihcNetService.register(this.deviceUser, this.devicePassword, this.deviceIp); + this.serialHandle = ihcNetService.serialHandle(userId); + if (this.userId >= 0 && this.serialHandle >= 0) { + return true; + } else { + return false; + } + } + + private volatile Map map = new HashMap<>(); + + private void sendGasCommand() { + DeviceInfo deviceInfo = DeviceCommom.selectByDeviceIp(this.deviceIp); + Long serial = deviceInfo.getSerialHandle(); + if (deviceInfo.getSerialHandle() < 0) { + return; + } + // FF 01 00 90 01 00 92 + int[] command = {0xff, 0x01, 0x00, 0x90, 0x01, 0x00, 0x92}; +// int[] command = {0xff,0x01,0x00,0x53,0x00,0x00,0x54}; + Pointer pointer = new Memory(command.length); + for (int i = 0; i < command.length; i++) { + pointer.setByte(i, (byte) command[i]); + } + int size = (int) ((Memory) pointer).getSize(); + //用于与控制指令错开下发 + hcNetService.setTimestampCollcect(System.currentTimeMillis()); + + boolean res = ihcNetService.serialSend(serial, pointer, size); +// System.out.println("collect**************"+new Date()); + if (!res) { + //判断是否掉线,断电重启规则 若同一云台300次(5分钟)获取不到甲烷浓度值,则重启设备 + //是否配置重启 + if (isOpen == 1) { + if (map.get(this.deviceIp) != null) { + map.put(this.deviceIp, map.get(this.deviceIp) + 1); + if (map.get(this.deviceIp) % 3==0) { + if (ihcNetService.interruptStart(this.deviceIp)) { + map.remove(this.deviceIp); + logger.error(deviceIp.concat("restart success ********************* ")); + } + } + } else { + map.put(this.deviceIp, 1); + } + } + logger.error(deviceIp.concat("fetch gas data error, error code: ").concat(String.valueOf(ihcNetService.getLastError()))); + } + } + private volatile Map restartMap = new HashMap<>(); + @Override + public void run() { + System.out.println("Thread-" + deviceIp + " -> start... " + new Date()); + // 登录,登录失败就一直尝试登录 + while (true) { + boolean register = registerAndStartSerial(); + if (register) { + restartMap.remove(deviceIp); + break; + }else { + try { + //若没连上,一小时内,每隔3分钟通过控制门禁板,让设备重启 + if (null == restartMap.get(deviceIp)) { + restartMap.put(deviceIp, System.currentTimeMillis()); + } else { + Long startTime = restartMap.get(deviceIp); + Long intervalTime = (System.currentTimeMillis() - startTime) / 1000; + if (intervalTime <= 60 * 60) { + logger.error(deviceIp.concat("-->pre door is opening! ********************* ")); + if (ihcNetService.interruptStart(this.deviceIp)) { + logger.error(deviceIp.concat("-->pre start success ********************* ")); + } else { + logger.error(deviceIp.concat("-->pre door start fail ********************* ")); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + // 登录成功后,按每秒一次查询甲烷数据 + while (true) { + try { + sendGasCommand(); + Thread.sleep(collectInterval); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + + +}