diff --git a/src/main/java/com/casic/dao/DeviceDataMapper.java b/src/main/java/com/casic/dao/DeviceDataMapper.java new file mode 100644 index 0000000..e9456c1 --- /dev/null +++ b/src/main/java/com/casic/dao/DeviceDataMapper.java @@ -0,0 +1,18 @@ +package com.casic.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface DeviceDataMapper { + + List> getDevcodeByType(@Param("devciceType") Integer devciceType); + + List getRecentData(@Param("dataDay") Integer dataDay); + + int updateOnlineByDevs(@Param("dataSortList") List dataSortDevcodeList); + +} diff --git a/src/main/java/com/casic/dao/DeviceDataMapper.java b/src/main/java/com/casic/dao/DeviceDataMapper.java new file mode 100644 index 0000000..e9456c1 --- /dev/null +++ b/src/main/java/com/casic/dao/DeviceDataMapper.java @@ -0,0 +1,18 @@ +package com.casic.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface DeviceDataMapper { + + List> getDevcodeByType(@Param("devciceType") Integer devciceType); + + List getRecentData(@Param("dataDay") Integer dataDay); + + int updateOnlineByDevs(@Param("dataSortList") List dataSortDevcodeList); + +} diff --git a/src/main/java/com/casic/entity/AlarmRecord.java b/src/main/java/com/casic/entity/AlarmRecord.java index 4057df1..137d805 100644 --- a/src/main/java/com/casic/entity/AlarmRecord.java +++ b/src/main/java/com/casic/entity/AlarmRecord.java @@ -71,7 +71,7 @@ @TableField("RECORDCODE") private String recordcode; /** - * 告警状态 + * 告警日期 */ @TableField("RECORDDATE") private Date recorddate; diff --git a/src/main/java/com/casic/dao/DeviceDataMapper.java b/src/main/java/com/casic/dao/DeviceDataMapper.java new file mode 100644 index 0000000..e9456c1 --- /dev/null +++ b/src/main/java/com/casic/dao/DeviceDataMapper.java @@ -0,0 +1,18 @@ +package com.casic.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface DeviceDataMapper { + + List> getDevcodeByType(@Param("devciceType") Integer devciceType); + + List getRecentData(@Param("dataDay") Integer dataDay); + + int updateOnlineByDevs(@Param("dataSortList") List dataSortDevcodeList); + +} diff --git a/src/main/java/com/casic/entity/AlarmRecord.java b/src/main/java/com/casic/entity/AlarmRecord.java index 4057df1..137d805 100644 --- a/src/main/java/com/casic/entity/AlarmRecord.java +++ b/src/main/java/com/casic/entity/AlarmRecord.java @@ -71,7 +71,7 @@ @TableField("RECORDCODE") private String recordcode; /** - * 告警状态 + * 告警日期 */ @TableField("RECORDDATE") private Date recorddate; diff --git a/src/main/java/com/casic/schedule/TaskConfigurer.java b/src/main/java/com/casic/schedule/TaskConfigurer.java new file mode 100644 index 0000000..77c5d5a --- /dev/null +++ b/src/main/java/com/casic/schedule/TaskConfigurer.java @@ -0,0 +1,47 @@ +package com.casic.schedule; + +import com.casic.service.DeviceDataService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.SchedulingConfigurer; +import org.springframework.scheduling.config.ScheduledTaskRegistrar; +import org.springframework.scheduling.config.TriggerTask; +import org.springframework.scheduling.support.CronTrigger; + +/** + * @author cz + */ +@Configuration +@EnableScheduling +@Slf4j +@RequiredArgsConstructor +public class TaskConfigurer implements SchedulingConfigurer { + + @Value("${casic.device.online.cron}") + private String onlineStateCron; + + private final DeviceDataService deviceDataService; + + @Override + public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { + TriggerTask onlineStateTask = new TriggerTask(nextDayDevice(), + triggerContext -> { + return new CronTrigger(onlineStateCron).nextExecutionTime(triggerContext); + }); + taskRegistrar.addTriggerTask(onlineStateTask); + } + + private Runnable nextDayDevice() { + return new Runnable() { + @Override + public void run() { + log.info("定时查询在线离线运行了..."); + deviceDataService.checkAndUpdateDeviceOnline(); + } + }; + } + +} \ No newline at end of file diff --git a/src/main/java/com/casic/dao/DeviceDataMapper.java b/src/main/java/com/casic/dao/DeviceDataMapper.java new file mode 100644 index 0000000..e9456c1 --- /dev/null +++ b/src/main/java/com/casic/dao/DeviceDataMapper.java @@ -0,0 +1,18 @@ +package com.casic.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface DeviceDataMapper { + + List> getDevcodeByType(@Param("devciceType") Integer devciceType); + + List getRecentData(@Param("dataDay") Integer dataDay); + + int updateOnlineByDevs(@Param("dataSortList") List dataSortDevcodeList); + +} diff --git a/src/main/java/com/casic/entity/AlarmRecord.java b/src/main/java/com/casic/entity/AlarmRecord.java index 4057df1..137d805 100644 --- a/src/main/java/com/casic/entity/AlarmRecord.java +++ b/src/main/java/com/casic/entity/AlarmRecord.java @@ -71,7 +71,7 @@ @TableField("RECORDCODE") private String recordcode; /** - * 告警状态 + * 告警日期 */ @TableField("RECORDDATE") private Date recorddate; diff --git a/src/main/java/com/casic/schedule/TaskConfigurer.java b/src/main/java/com/casic/schedule/TaskConfigurer.java new file mode 100644 index 0000000..77c5d5a --- /dev/null +++ b/src/main/java/com/casic/schedule/TaskConfigurer.java @@ -0,0 +1,47 @@ +package com.casic.schedule; + +import com.casic.service.DeviceDataService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.SchedulingConfigurer; +import org.springframework.scheduling.config.ScheduledTaskRegistrar; +import org.springframework.scheduling.config.TriggerTask; +import org.springframework.scheduling.support.CronTrigger; + +/** + * @author cz + */ +@Configuration +@EnableScheduling +@Slf4j +@RequiredArgsConstructor +public class TaskConfigurer implements SchedulingConfigurer { + + @Value("${casic.device.online.cron}") + private String onlineStateCron; + + private final DeviceDataService deviceDataService; + + @Override + public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { + TriggerTask onlineStateTask = new TriggerTask(nextDayDevice(), + triggerContext -> { + return new CronTrigger(onlineStateCron).nextExecutionTime(triggerContext); + }); + taskRegistrar.addTriggerTask(onlineStateTask); + } + + private Runnable nextDayDevice() { + return new Runnable() { + @Override + public void run() { + log.info("定时查询在线离线运行了..."); + deviceDataService.checkAndUpdateDeviceOnline(); + } + }; + } + +} \ No newline at end of file diff --git a/src/main/java/com/casic/service/AlarmRecordFly.java b/src/main/java/com/casic/service/AlarmRecordFly.java index 339034e..47c7969 100644 --- a/src/main/java/com/casic/service/AlarmRecordFly.java +++ b/src/main/java/com/casic/service/AlarmRecordFly.java @@ -10,12 +10,10 @@ alarmRecord = new AlarmRecord(); alarmRecord.setIssend("0"); alarmRecord.setDeviceTypeName("可燃气体探测器"); - alarmRecord.setIssend("0"); alarmRecord.setItemname("default"); alarmRecord.setMessage("1"); alarmRecord.setMessageStatus("0"); alarmRecord.setRecordcode("0"); - alarmRecord.setRecordcode("0"); alarmRecord.setActive(1); } @@ -23,4 +21,19 @@ return alarmRecord; } + public static AlarmRecord getPrototype(){ + AlarmRecord alarmRecord = new AlarmRecord(); + alarmRecord.setIssend("0"); + alarmRecord.setDeviceTypeName("可燃气体探测器"); + alarmRecord.setItemname("default"); + alarmRecord.setMessage("-1"); + alarmRecord.setMessageStatus("0"); + alarmRecord.setRecordcode("1"); + alarmRecord.setActive(1); + return alarmRecord; + } + + + + } diff --git a/src/main/java/com/casic/dao/DeviceDataMapper.java b/src/main/java/com/casic/dao/DeviceDataMapper.java new file mode 100644 index 0000000..e9456c1 --- /dev/null +++ b/src/main/java/com/casic/dao/DeviceDataMapper.java @@ -0,0 +1,18 @@ +package com.casic.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface DeviceDataMapper { + + List> getDevcodeByType(@Param("devciceType") Integer devciceType); + + List getRecentData(@Param("dataDay") Integer dataDay); + + int updateOnlineByDevs(@Param("dataSortList") List dataSortDevcodeList); + +} diff --git a/src/main/java/com/casic/entity/AlarmRecord.java b/src/main/java/com/casic/entity/AlarmRecord.java index 4057df1..137d805 100644 --- a/src/main/java/com/casic/entity/AlarmRecord.java +++ b/src/main/java/com/casic/entity/AlarmRecord.java @@ -71,7 +71,7 @@ @TableField("RECORDCODE") private String recordcode; /** - * 告警状态 + * 告警日期 */ @TableField("RECORDDATE") private Date recorddate; diff --git a/src/main/java/com/casic/schedule/TaskConfigurer.java b/src/main/java/com/casic/schedule/TaskConfigurer.java new file mode 100644 index 0000000..77c5d5a --- /dev/null +++ b/src/main/java/com/casic/schedule/TaskConfigurer.java @@ -0,0 +1,47 @@ +package com.casic.schedule; + +import com.casic.service.DeviceDataService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.SchedulingConfigurer; +import org.springframework.scheduling.config.ScheduledTaskRegistrar; +import org.springframework.scheduling.config.TriggerTask; +import org.springframework.scheduling.support.CronTrigger; + +/** + * @author cz + */ +@Configuration +@EnableScheduling +@Slf4j +@RequiredArgsConstructor +public class TaskConfigurer implements SchedulingConfigurer { + + @Value("${casic.device.online.cron}") + private String onlineStateCron; + + private final DeviceDataService deviceDataService; + + @Override + public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { + TriggerTask onlineStateTask = new TriggerTask(nextDayDevice(), + triggerContext -> { + return new CronTrigger(onlineStateCron).nextExecutionTime(triggerContext); + }); + taskRegistrar.addTriggerTask(onlineStateTask); + } + + private Runnable nextDayDevice() { + return new Runnable() { + @Override + public void run() { + log.info("定时查询在线离线运行了..."); + deviceDataService.checkAndUpdateDeviceOnline(); + } + }; + } + +} \ No newline at end of file diff --git a/src/main/java/com/casic/service/AlarmRecordFly.java b/src/main/java/com/casic/service/AlarmRecordFly.java index 339034e..47c7969 100644 --- a/src/main/java/com/casic/service/AlarmRecordFly.java +++ b/src/main/java/com/casic/service/AlarmRecordFly.java @@ -10,12 +10,10 @@ alarmRecord = new AlarmRecord(); alarmRecord.setIssend("0"); alarmRecord.setDeviceTypeName("可燃气体探测器"); - alarmRecord.setIssend("0"); alarmRecord.setItemname("default"); alarmRecord.setMessage("1"); alarmRecord.setMessageStatus("0"); alarmRecord.setRecordcode("0"); - alarmRecord.setRecordcode("0"); alarmRecord.setActive(1); } @@ -23,4 +21,19 @@ return alarmRecord; } + public static AlarmRecord getPrototype(){ + AlarmRecord alarmRecord = new AlarmRecord(); + alarmRecord.setIssend("0"); + alarmRecord.setDeviceTypeName("可燃气体探测器"); + alarmRecord.setItemname("default"); + alarmRecord.setMessage("-1"); + alarmRecord.setMessageStatus("0"); + alarmRecord.setRecordcode("1"); + alarmRecord.setActive(1); + return alarmRecord; + } + + + + } diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java new file mode 100644 index 0000000..f972981 --- /dev/null +++ b/src/main/java/com/casic/service/DeviceDataService.java @@ -0,0 +1,7 @@ +package com.casic.service; + +public interface DeviceDataService { + + void checkAndUpdateDeviceOnline(); + +} diff --git a/src/main/java/com/casic/dao/DeviceDataMapper.java b/src/main/java/com/casic/dao/DeviceDataMapper.java new file mode 100644 index 0000000..e9456c1 --- /dev/null +++ b/src/main/java/com/casic/dao/DeviceDataMapper.java @@ -0,0 +1,18 @@ +package com.casic.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface DeviceDataMapper { + + List> getDevcodeByType(@Param("devciceType") Integer devciceType); + + List getRecentData(@Param("dataDay") Integer dataDay); + + int updateOnlineByDevs(@Param("dataSortList") List dataSortDevcodeList); + +} diff --git a/src/main/java/com/casic/entity/AlarmRecord.java b/src/main/java/com/casic/entity/AlarmRecord.java index 4057df1..137d805 100644 --- a/src/main/java/com/casic/entity/AlarmRecord.java +++ b/src/main/java/com/casic/entity/AlarmRecord.java @@ -71,7 +71,7 @@ @TableField("RECORDCODE") private String recordcode; /** - * 告警状态 + * 告警日期 */ @TableField("RECORDDATE") private Date recorddate; diff --git a/src/main/java/com/casic/schedule/TaskConfigurer.java b/src/main/java/com/casic/schedule/TaskConfigurer.java new file mode 100644 index 0000000..77c5d5a --- /dev/null +++ b/src/main/java/com/casic/schedule/TaskConfigurer.java @@ -0,0 +1,47 @@ +package com.casic.schedule; + +import com.casic.service.DeviceDataService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.SchedulingConfigurer; +import org.springframework.scheduling.config.ScheduledTaskRegistrar; +import org.springframework.scheduling.config.TriggerTask; +import org.springframework.scheduling.support.CronTrigger; + +/** + * @author cz + */ +@Configuration +@EnableScheduling +@Slf4j +@RequiredArgsConstructor +public class TaskConfigurer implements SchedulingConfigurer { + + @Value("${casic.device.online.cron}") + private String onlineStateCron; + + private final DeviceDataService deviceDataService; + + @Override + public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { + TriggerTask onlineStateTask = new TriggerTask(nextDayDevice(), + triggerContext -> { + return new CronTrigger(onlineStateCron).nextExecutionTime(triggerContext); + }); + taskRegistrar.addTriggerTask(onlineStateTask); + } + + private Runnable nextDayDevice() { + return new Runnable() { + @Override + public void run() { + log.info("定时查询在线离线运行了..."); + deviceDataService.checkAndUpdateDeviceOnline(); + } + }; + } + +} \ No newline at end of file diff --git a/src/main/java/com/casic/service/AlarmRecordFly.java b/src/main/java/com/casic/service/AlarmRecordFly.java index 339034e..47c7969 100644 --- a/src/main/java/com/casic/service/AlarmRecordFly.java +++ b/src/main/java/com/casic/service/AlarmRecordFly.java @@ -10,12 +10,10 @@ alarmRecord = new AlarmRecord(); alarmRecord.setIssend("0"); alarmRecord.setDeviceTypeName("可燃气体探测器"); - alarmRecord.setIssend("0"); alarmRecord.setItemname("default"); alarmRecord.setMessage("1"); alarmRecord.setMessageStatus("0"); alarmRecord.setRecordcode("0"); - alarmRecord.setRecordcode("0"); alarmRecord.setActive(1); } @@ -23,4 +21,19 @@ return alarmRecord; } + public static AlarmRecord getPrototype(){ + AlarmRecord alarmRecord = new AlarmRecord(); + alarmRecord.setIssend("0"); + alarmRecord.setDeviceTypeName("可燃气体探测器"); + alarmRecord.setItemname("default"); + alarmRecord.setMessage("-1"); + alarmRecord.setMessageStatus("0"); + alarmRecord.setRecordcode("1"); + alarmRecord.setActive(1); + return alarmRecord; + } + + + + } diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java new file mode 100644 index 0000000..f972981 --- /dev/null +++ b/src/main/java/com/casic/service/DeviceDataService.java @@ -0,0 +1,7 @@ +package com.casic.service; + +public interface DeviceDataService { + + void checkAndUpdateDeviceOnline(); + +} diff --git a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java new file mode 100644 index 0000000..f41a44d --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java @@ -0,0 +1,68 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.dao.AlarmRecordsMapper; +import com.casic.dao.DeviceDataMapper; +import com.casic.entity.AlarmRecord; +import com.casic.service.AlarmRecordFly; +import com.casic.service.DeviceDataService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author cz + */ +@Service +@RequiredArgsConstructor +public class DeviceDataServiceImpl extends ServiceImpl implements DeviceDataService { + + private final DeviceDataMapper deviceDataMapper; + + @Value("${casic.device.data-day}") + private Integer dataDay; + + @Value("${casic.device.gas-dector.type}") + private Integer devciceType; + + + @Override + public void checkAndUpdateDeviceOnline() { + //查询硫化氢设备 + List> devcodeList = deviceDataMapper.getDevcodeByType(devciceType); + //统一查询所有设备的3天内数据的设备编号,然后设备编号转成map,进行 + List dataList = deviceDataMapper.getRecentData(dataDay); + List> dataSortDevcodeList = devcodeList; + if (dataList != null) { + Map devOnlineMap = new HashMap<>(); + for (String devcodeData : dataList) { + devOnlineMap.put(devcodeData, ""); + } + dataSortDevcodeList = dataSortDevcodeList.stream().filter( + e -> !devOnlineMap.containsKey((String) e.get("devcode"))).collect(Collectors.toList()); + } + //批量产生离线报警 + if (CollectionUtils.isNotEmpty(dataSortDevcodeList)) { + List alarmRecords = new ArrayList<>(); + for (Map dataDevcodeMap : dataSortDevcodeList) { + alarmRecords.add(createAlarmRecord(((BigDecimal)dataDevcodeMap.get("id")).longValue(), (String) dataDevcodeMap.get("devcode"))); + } + this.saveBatch(alarmRecords); + } + } + + private AlarmRecord createAlarmRecord(Long id, String devcode) { + AlarmRecord alarmRecord = AlarmRecordFly.getPrototype(); + alarmRecord.setRecorddate(new Date()); + alarmRecord.setDbid(null); + alarmRecord.setDeviceCode(devcode); + alarmRecord.setDeviceId(id); + return alarmRecord; + } + +} diff --git a/src/main/java/com/casic/dao/DeviceDataMapper.java b/src/main/java/com/casic/dao/DeviceDataMapper.java new file mode 100644 index 0000000..e9456c1 --- /dev/null +++ b/src/main/java/com/casic/dao/DeviceDataMapper.java @@ -0,0 +1,18 @@ +package com.casic.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface DeviceDataMapper { + + List> getDevcodeByType(@Param("devciceType") Integer devciceType); + + List getRecentData(@Param("dataDay") Integer dataDay); + + int updateOnlineByDevs(@Param("dataSortList") List dataSortDevcodeList); + +} diff --git a/src/main/java/com/casic/entity/AlarmRecord.java b/src/main/java/com/casic/entity/AlarmRecord.java index 4057df1..137d805 100644 --- a/src/main/java/com/casic/entity/AlarmRecord.java +++ b/src/main/java/com/casic/entity/AlarmRecord.java @@ -71,7 +71,7 @@ @TableField("RECORDCODE") private String recordcode; /** - * 告警状态 + * 告警日期 */ @TableField("RECORDDATE") private Date recorddate; diff --git a/src/main/java/com/casic/schedule/TaskConfigurer.java b/src/main/java/com/casic/schedule/TaskConfigurer.java new file mode 100644 index 0000000..77c5d5a --- /dev/null +++ b/src/main/java/com/casic/schedule/TaskConfigurer.java @@ -0,0 +1,47 @@ +package com.casic.schedule; + +import com.casic.service.DeviceDataService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.SchedulingConfigurer; +import org.springframework.scheduling.config.ScheduledTaskRegistrar; +import org.springframework.scheduling.config.TriggerTask; +import org.springframework.scheduling.support.CronTrigger; + +/** + * @author cz + */ +@Configuration +@EnableScheduling +@Slf4j +@RequiredArgsConstructor +public class TaskConfigurer implements SchedulingConfigurer { + + @Value("${casic.device.online.cron}") + private String onlineStateCron; + + private final DeviceDataService deviceDataService; + + @Override + public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { + TriggerTask onlineStateTask = new TriggerTask(nextDayDevice(), + triggerContext -> { + return new CronTrigger(onlineStateCron).nextExecutionTime(triggerContext); + }); + taskRegistrar.addTriggerTask(onlineStateTask); + } + + private Runnable nextDayDevice() { + return new Runnable() { + @Override + public void run() { + log.info("定时查询在线离线运行了..."); + deviceDataService.checkAndUpdateDeviceOnline(); + } + }; + } + +} \ No newline at end of file diff --git a/src/main/java/com/casic/service/AlarmRecordFly.java b/src/main/java/com/casic/service/AlarmRecordFly.java index 339034e..47c7969 100644 --- a/src/main/java/com/casic/service/AlarmRecordFly.java +++ b/src/main/java/com/casic/service/AlarmRecordFly.java @@ -10,12 +10,10 @@ alarmRecord = new AlarmRecord(); alarmRecord.setIssend("0"); alarmRecord.setDeviceTypeName("可燃气体探测器"); - alarmRecord.setIssend("0"); alarmRecord.setItemname("default"); alarmRecord.setMessage("1"); alarmRecord.setMessageStatus("0"); alarmRecord.setRecordcode("0"); - alarmRecord.setRecordcode("0"); alarmRecord.setActive(1); } @@ -23,4 +21,19 @@ return alarmRecord; } + public static AlarmRecord getPrototype(){ + AlarmRecord alarmRecord = new AlarmRecord(); + alarmRecord.setIssend("0"); + alarmRecord.setDeviceTypeName("可燃气体探测器"); + alarmRecord.setItemname("default"); + alarmRecord.setMessage("-1"); + alarmRecord.setMessageStatus("0"); + alarmRecord.setRecordcode("1"); + alarmRecord.setActive(1); + return alarmRecord; + } + + + + } diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java new file mode 100644 index 0000000..f972981 --- /dev/null +++ b/src/main/java/com/casic/service/DeviceDataService.java @@ -0,0 +1,7 @@ +package com.casic.service; + +public interface DeviceDataService { + + void checkAndUpdateDeviceOnline(); + +} diff --git a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java new file mode 100644 index 0000000..f41a44d --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java @@ -0,0 +1,68 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.dao.AlarmRecordsMapper; +import com.casic.dao.DeviceDataMapper; +import com.casic.entity.AlarmRecord; +import com.casic.service.AlarmRecordFly; +import com.casic.service.DeviceDataService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author cz + */ +@Service +@RequiredArgsConstructor +public class DeviceDataServiceImpl extends ServiceImpl implements DeviceDataService { + + private final DeviceDataMapper deviceDataMapper; + + @Value("${casic.device.data-day}") + private Integer dataDay; + + @Value("${casic.device.gas-dector.type}") + private Integer devciceType; + + + @Override + public void checkAndUpdateDeviceOnline() { + //查询硫化氢设备 + List> devcodeList = deviceDataMapper.getDevcodeByType(devciceType); + //统一查询所有设备的3天内数据的设备编号,然后设备编号转成map,进行 + List dataList = deviceDataMapper.getRecentData(dataDay); + List> dataSortDevcodeList = devcodeList; + if (dataList != null) { + Map devOnlineMap = new HashMap<>(); + for (String devcodeData : dataList) { + devOnlineMap.put(devcodeData, ""); + } + dataSortDevcodeList = dataSortDevcodeList.stream().filter( + e -> !devOnlineMap.containsKey((String) e.get("devcode"))).collect(Collectors.toList()); + } + //批量产生离线报警 + if (CollectionUtils.isNotEmpty(dataSortDevcodeList)) { + List alarmRecords = new ArrayList<>(); + for (Map dataDevcodeMap : dataSortDevcodeList) { + alarmRecords.add(createAlarmRecord(((BigDecimal)dataDevcodeMap.get("id")).longValue(), (String) dataDevcodeMap.get("devcode"))); + } + this.saveBatch(alarmRecords); + } + } + + private AlarmRecord createAlarmRecord(Long id, String devcode) { + AlarmRecord alarmRecord = AlarmRecordFly.getPrototype(); + alarmRecord.setRecorddate(new Date()); + alarmRecord.setDbid(null); + alarmRecord.setDeviceCode(devcode); + alarmRecord.setDeviceId(id); + return alarmRecord; + } + +} diff --git a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java index f72f764..176b389 100644 --- a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java @@ -86,6 +86,7 @@ //判断事件类型 0正常 1低报 2高报 String alarmSituation = payloadData.get("gas_sensor_state").toString(); String devcode = receiveData.get("IMEI").toString(); + clearOnlineData(devcode); //构建数据 ButaneData butaneData = ButaneData.builder() .devcode(devcode) @@ -130,8 +131,8 @@ public Boolean dealNormalData(Map receiveData) { String devcode = receiveData.get("IMEI").toString(); - //第一条上来,消除报警 -// clearAlarmData(devcode); + //第一条上来,清除离线 + clearOnlineData(devcode); ButaneData butaneData = ButaneData.builder() .devcode(devcode) .dbid(snowflake.nextId()) @@ -161,6 +162,22 @@ private void clearAlarmData(String devcode) { QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("DEVICE_CODE", devcode); + queryWrapper.eq("ACTIVE", 1); + try { + AlarmRecord alarmRecord = new AlarmRecord(); + alarmRecord.setActive(0); + alarmRecordsMapper.update(alarmRecord, queryWrapper); + } catch (Exception e) { + log.error("清除报警失败,设备编号为{},异常信息{}", devcode, e); + } + } + + private void clearOnlineData(String devcode) { + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("DEVICE_CODE", devcode); + queryWrapper.eq("ACTIVE", 1); + queryWrapper.eq("MESSAGE_STATUS", "0"); + queryWrapper.eq("RECORDCODE", "1"); try { AlarmRecord alarmRecord = new AlarmRecord(); alarmRecord.setActive(0); diff --git a/src/main/java/com/casic/dao/DeviceDataMapper.java b/src/main/java/com/casic/dao/DeviceDataMapper.java new file mode 100644 index 0000000..e9456c1 --- /dev/null +++ b/src/main/java/com/casic/dao/DeviceDataMapper.java @@ -0,0 +1,18 @@ +package com.casic.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface DeviceDataMapper { + + List> getDevcodeByType(@Param("devciceType") Integer devciceType); + + List getRecentData(@Param("dataDay") Integer dataDay); + + int updateOnlineByDevs(@Param("dataSortList") List dataSortDevcodeList); + +} diff --git a/src/main/java/com/casic/entity/AlarmRecord.java b/src/main/java/com/casic/entity/AlarmRecord.java index 4057df1..137d805 100644 --- a/src/main/java/com/casic/entity/AlarmRecord.java +++ b/src/main/java/com/casic/entity/AlarmRecord.java @@ -71,7 +71,7 @@ @TableField("RECORDCODE") private String recordcode; /** - * 告警状态 + * 告警日期 */ @TableField("RECORDDATE") private Date recorddate; diff --git a/src/main/java/com/casic/schedule/TaskConfigurer.java b/src/main/java/com/casic/schedule/TaskConfigurer.java new file mode 100644 index 0000000..77c5d5a --- /dev/null +++ b/src/main/java/com/casic/schedule/TaskConfigurer.java @@ -0,0 +1,47 @@ +package com.casic.schedule; + +import com.casic.service.DeviceDataService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.SchedulingConfigurer; +import org.springframework.scheduling.config.ScheduledTaskRegistrar; +import org.springframework.scheduling.config.TriggerTask; +import org.springframework.scheduling.support.CronTrigger; + +/** + * @author cz + */ +@Configuration +@EnableScheduling +@Slf4j +@RequiredArgsConstructor +public class TaskConfigurer implements SchedulingConfigurer { + + @Value("${casic.device.online.cron}") + private String onlineStateCron; + + private final DeviceDataService deviceDataService; + + @Override + public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { + TriggerTask onlineStateTask = new TriggerTask(nextDayDevice(), + triggerContext -> { + return new CronTrigger(onlineStateCron).nextExecutionTime(triggerContext); + }); + taskRegistrar.addTriggerTask(onlineStateTask); + } + + private Runnable nextDayDevice() { + return new Runnable() { + @Override + public void run() { + log.info("定时查询在线离线运行了..."); + deviceDataService.checkAndUpdateDeviceOnline(); + } + }; + } + +} \ No newline at end of file diff --git a/src/main/java/com/casic/service/AlarmRecordFly.java b/src/main/java/com/casic/service/AlarmRecordFly.java index 339034e..47c7969 100644 --- a/src/main/java/com/casic/service/AlarmRecordFly.java +++ b/src/main/java/com/casic/service/AlarmRecordFly.java @@ -10,12 +10,10 @@ alarmRecord = new AlarmRecord(); alarmRecord.setIssend("0"); alarmRecord.setDeviceTypeName("可燃气体探测器"); - alarmRecord.setIssend("0"); alarmRecord.setItemname("default"); alarmRecord.setMessage("1"); alarmRecord.setMessageStatus("0"); alarmRecord.setRecordcode("0"); - alarmRecord.setRecordcode("0"); alarmRecord.setActive(1); } @@ -23,4 +21,19 @@ return alarmRecord; } + public static AlarmRecord getPrototype(){ + AlarmRecord alarmRecord = new AlarmRecord(); + alarmRecord.setIssend("0"); + alarmRecord.setDeviceTypeName("可燃气体探测器"); + alarmRecord.setItemname("default"); + alarmRecord.setMessage("-1"); + alarmRecord.setMessageStatus("0"); + alarmRecord.setRecordcode("1"); + alarmRecord.setActive(1); + return alarmRecord; + } + + + + } diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java new file mode 100644 index 0000000..f972981 --- /dev/null +++ b/src/main/java/com/casic/service/DeviceDataService.java @@ -0,0 +1,7 @@ +package com.casic.service; + +public interface DeviceDataService { + + void checkAndUpdateDeviceOnline(); + +} diff --git a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java new file mode 100644 index 0000000..f41a44d --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java @@ -0,0 +1,68 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.dao.AlarmRecordsMapper; +import com.casic.dao.DeviceDataMapper; +import com.casic.entity.AlarmRecord; +import com.casic.service.AlarmRecordFly; +import com.casic.service.DeviceDataService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author cz + */ +@Service +@RequiredArgsConstructor +public class DeviceDataServiceImpl extends ServiceImpl implements DeviceDataService { + + private final DeviceDataMapper deviceDataMapper; + + @Value("${casic.device.data-day}") + private Integer dataDay; + + @Value("${casic.device.gas-dector.type}") + private Integer devciceType; + + + @Override + public void checkAndUpdateDeviceOnline() { + //查询硫化氢设备 + List> devcodeList = deviceDataMapper.getDevcodeByType(devciceType); + //统一查询所有设备的3天内数据的设备编号,然后设备编号转成map,进行 + List dataList = deviceDataMapper.getRecentData(dataDay); + List> dataSortDevcodeList = devcodeList; + if (dataList != null) { + Map devOnlineMap = new HashMap<>(); + for (String devcodeData : dataList) { + devOnlineMap.put(devcodeData, ""); + } + dataSortDevcodeList = dataSortDevcodeList.stream().filter( + e -> !devOnlineMap.containsKey((String) e.get("devcode"))).collect(Collectors.toList()); + } + //批量产生离线报警 + if (CollectionUtils.isNotEmpty(dataSortDevcodeList)) { + List alarmRecords = new ArrayList<>(); + for (Map dataDevcodeMap : dataSortDevcodeList) { + alarmRecords.add(createAlarmRecord(((BigDecimal)dataDevcodeMap.get("id")).longValue(), (String) dataDevcodeMap.get("devcode"))); + } + this.saveBatch(alarmRecords); + } + } + + private AlarmRecord createAlarmRecord(Long id, String devcode) { + AlarmRecord alarmRecord = AlarmRecordFly.getPrototype(); + alarmRecord.setRecorddate(new Date()); + alarmRecord.setDbid(null); + alarmRecord.setDeviceCode(devcode); + alarmRecord.setDeviceId(id); + return alarmRecord; + } + +} diff --git a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java index f72f764..176b389 100644 --- a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java @@ -86,6 +86,7 @@ //判断事件类型 0正常 1低报 2高报 String alarmSituation = payloadData.get("gas_sensor_state").toString(); String devcode = receiveData.get("IMEI").toString(); + clearOnlineData(devcode); //构建数据 ButaneData butaneData = ButaneData.builder() .devcode(devcode) @@ -130,8 +131,8 @@ public Boolean dealNormalData(Map receiveData) { String devcode = receiveData.get("IMEI").toString(); - //第一条上来,消除报警 -// clearAlarmData(devcode); + //第一条上来,清除离线 + clearOnlineData(devcode); ButaneData butaneData = ButaneData.builder() .devcode(devcode) .dbid(snowflake.nextId()) @@ -161,6 +162,22 @@ private void clearAlarmData(String devcode) { QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("DEVICE_CODE", devcode); + queryWrapper.eq("ACTIVE", 1); + try { + AlarmRecord alarmRecord = new AlarmRecord(); + alarmRecord.setActive(0); + alarmRecordsMapper.update(alarmRecord, queryWrapper); + } catch (Exception e) { + log.error("清除报警失败,设备编号为{},异常信息{}", devcode, e); + } + } + + private void clearOnlineData(String devcode) { + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("DEVICE_CODE", devcode); + queryWrapper.eq("ACTIVE", 1); + queryWrapper.eq("MESSAGE_STATUS", "0"); + queryWrapper.eq("RECORDCODE", "1"); try { AlarmRecord alarmRecord = new AlarmRecord(); alarmRecord.setActive(0); diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 8a5929a..d47010a 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -4,7 +4,7 @@ spring: datasource: driverClassName: oracle.jdbc.driver.OracleDriver - url: jdbc:oracle:thin:@11.100.6.181:1521:orcl + url: jdbc:oracle:thin:@11.100.6.183:1521:orcl username: gzsg password: gzsg session: diff --git a/src/main/java/com/casic/dao/DeviceDataMapper.java b/src/main/java/com/casic/dao/DeviceDataMapper.java new file mode 100644 index 0000000..e9456c1 --- /dev/null +++ b/src/main/java/com/casic/dao/DeviceDataMapper.java @@ -0,0 +1,18 @@ +package com.casic.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface DeviceDataMapper { + + List> getDevcodeByType(@Param("devciceType") Integer devciceType); + + List getRecentData(@Param("dataDay") Integer dataDay); + + int updateOnlineByDevs(@Param("dataSortList") List dataSortDevcodeList); + +} diff --git a/src/main/java/com/casic/entity/AlarmRecord.java b/src/main/java/com/casic/entity/AlarmRecord.java index 4057df1..137d805 100644 --- a/src/main/java/com/casic/entity/AlarmRecord.java +++ b/src/main/java/com/casic/entity/AlarmRecord.java @@ -71,7 +71,7 @@ @TableField("RECORDCODE") private String recordcode; /** - * 告警状态 + * 告警日期 */ @TableField("RECORDDATE") private Date recorddate; diff --git a/src/main/java/com/casic/schedule/TaskConfigurer.java b/src/main/java/com/casic/schedule/TaskConfigurer.java new file mode 100644 index 0000000..77c5d5a --- /dev/null +++ b/src/main/java/com/casic/schedule/TaskConfigurer.java @@ -0,0 +1,47 @@ +package com.casic.schedule; + +import com.casic.service.DeviceDataService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.SchedulingConfigurer; +import org.springframework.scheduling.config.ScheduledTaskRegistrar; +import org.springframework.scheduling.config.TriggerTask; +import org.springframework.scheduling.support.CronTrigger; + +/** + * @author cz + */ +@Configuration +@EnableScheduling +@Slf4j +@RequiredArgsConstructor +public class TaskConfigurer implements SchedulingConfigurer { + + @Value("${casic.device.online.cron}") + private String onlineStateCron; + + private final DeviceDataService deviceDataService; + + @Override + public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { + TriggerTask onlineStateTask = new TriggerTask(nextDayDevice(), + triggerContext -> { + return new CronTrigger(onlineStateCron).nextExecutionTime(triggerContext); + }); + taskRegistrar.addTriggerTask(onlineStateTask); + } + + private Runnable nextDayDevice() { + return new Runnable() { + @Override + public void run() { + log.info("定时查询在线离线运行了..."); + deviceDataService.checkAndUpdateDeviceOnline(); + } + }; + } + +} \ No newline at end of file diff --git a/src/main/java/com/casic/service/AlarmRecordFly.java b/src/main/java/com/casic/service/AlarmRecordFly.java index 339034e..47c7969 100644 --- a/src/main/java/com/casic/service/AlarmRecordFly.java +++ b/src/main/java/com/casic/service/AlarmRecordFly.java @@ -10,12 +10,10 @@ alarmRecord = new AlarmRecord(); alarmRecord.setIssend("0"); alarmRecord.setDeviceTypeName("可燃气体探测器"); - alarmRecord.setIssend("0"); alarmRecord.setItemname("default"); alarmRecord.setMessage("1"); alarmRecord.setMessageStatus("0"); alarmRecord.setRecordcode("0"); - alarmRecord.setRecordcode("0"); alarmRecord.setActive(1); } @@ -23,4 +21,19 @@ return alarmRecord; } + public static AlarmRecord getPrototype(){ + AlarmRecord alarmRecord = new AlarmRecord(); + alarmRecord.setIssend("0"); + alarmRecord.setDeviceTypeName("可燃气体探测器"); + alarmRecord.setItemname("default"); + alarmRecord.setMessage("-1"); + alarmRecord.setMessageStatus("0"); + alarmRecord.setRecordcode("1"); + alarmRecord.setActive(1); + return alarmRecord; + } + + + + } diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java new file mode 100644 index 0000000..f972981 --- /dev/null +++ b/src/main/java/com/casic/service/DeviceDataService.java @@ -0,0 +1,7 @@ +package com.casic.service; + +public interface DeviceDataService { + + void checkAndUpdateDeviceOnline(); + +} diff --git a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java new file mode 100644 index 0000000..f41a44d --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java @@ -0,0 +1,68 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.dao.AlarmRecordsMapper; +import com.casic.dao.DeviceDataMapper; +import com.casic.entity.AlarmRecord; +import com.casic.service.AlarmRecordFly; +import com.casic.service.DeviceDataService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author cz + */ +@Service +@RequiredArgsConstructor +public class DeviceDataServiceImpl extends ServiceImpl implements DeviceDataService { + + private final DeviceDataMapper deviceDataMapper; + + @Value("${casic.device.data-day}") + private Integer dataDay; + + @Value("${casic.device.gas-dector.type}") + private Integer devciceType; + + + @Override + public void checkAndUpdateDeviceOnline() { + //查询硫化氢设备 + List> devcodeList = deviceDataMapper.getDevcodeByType(devciceType); + //统一查询所有设备的3天内数据的设备编号,然后设备编号转成map,进行 + List dataList = deviceDataMapper.getRecentData(dataDay); + List> dataSortDevcodeList = devcodeList; + if (dataList != null) { + Map devOnlineMap = new HashMap<>(); + for (String devcodeData : dataList) { + devOnlineMap.put(devcodeData, ""); + } + dataSortDevcodeList = dataSortDevcodeList.stream().filter( + e -> !devOnlineMap.containsKey((String) e.get("devcode"))).collect(Collectors.toList()); + } + //批量产生离线报警 + if (CollectionUtils.isNotEmpty(dataSortDevcodeList)) { + List alarmRecords = new ArrayList<>(); + for (Map dataDevcodeMap : dataSortDevcodeList) { + alarmRecords.add(createAlarmRecord(((BigDecimal)dataDevcodeMap.get("id")).longValue(), (String) dataDevcodeMap.get("devcode"))); + } + this.saveBatch(alarmRecords); + } + } + + private AlarmRecord createAlarmRecord(Long id, String devcode) { + AlarmRecord alarmRecord = AlarmRecordFly.getPrototype(); + alarmRecord.setRecorddate(new Date()); + alarmRecord.setDbid(null); + alarmRecord.setDeviceCode(devcode); + alarmRecord.setDeviceId(id); + return alarmRecord; + } + +} diff --git a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java index f72f764..176b389 100644 --- a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java @@ -86,6 +86,7 @@ //判断事件类型 0正常 1低报 2高报 String alarmSituation = payloadData.get("gas_sensor_state").toString(); String devcode = receiveData.get("IMEI").toString(); + clearOnlineData(devcode); //构建数据 ButaneData butaneData = ButaneData.builder() .devcode(devcode) @@ -130,8 +131,8 @@ public Boolean dealNormalData(Map receiveData) { String devcode = receiveData.get("IMEI").toString(); - //第一条上来,消除报警 -// clearAlarmData(devcode); + //第一条上来,清除离线 + clearOnlineData(devcode); ButaneData butaneData = ButaneData.builder() .devcode(devcode) .dbid(snowflake.nextId()) @@ -161,6 +162,22 @@ private void clearAlarmData(String devcode) { QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("DEVICE_CODE", devcode); + queryWrapper.eq("ACTIVE", 1); + try { + AlarmRecord alarmRecord = new AlarmRecord(); + alarmRecord.setActive(0); + alarmRecordsMapper.update(alarmRecord, queryWrapper); + } catch (Exception e) { + log.error("清除报警失败,设备编号为{},异常信息{}", devcode, e); + } + } + + private void clearOnlineData(String devcode) { + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("DEVICE_CODE", devcode); + queryWrapper.eq("ACTIVE", 1); + queryWrapper.eq("MESSAGE_STATUS", "0"); + queryWrapper.eq("RECORDCODE", "1"); try { AlarmRecord alarmRecord = new AlarmRecord(); alarmRecord.setActive(0); diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 8a5929a..d47010a 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -4,7 +4,7 @@ spring: datasource: driverClassName: oracle.jdbc.driver.OracleDriver - url: jdbc:oracle:thin:@11.100.6.181:1521:orcl + url: jdbc:oracle:thin:@11.100.6.183:1521:orcl username: gzsg password: gzsg session: diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 4038629..21ecda8 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -24,6 +24,9 @@ casic: device: gas-dector: - type: 10 + type: 30 minutes: 60 - enable-local: false \ No newline at end of file + enable-local: false + data-day: 1 # 时间多少的为离线 + online: + cron: 0 0/1 * * * ? # 多长时间判断离线 \ No newline at end of file diff --git a/src/main/java/com/casic/dao/DeviceDataMapper.java b/src/main/java/com/casic/dao/DeviceDataMapper.java new file mode 100644 index 0000000..e9456c1 --- /dev/null +++ b/src/main/java/com/casic/dao/DeviceDataMapper.java @@ -0,0 +1,18 @@ +package com.casic.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface DeviceDataMapper { + + List> getDevcodeByType(@Param("devciceType") Integer devciceType); + + List getRecentData(@Param("dataDay") Integer dataDay); + + int updateOnlineByDevs(@Param("dataSortList") List dataSortDevcodeList); + +} diff --git a/src/main/java/com/casic/entity/AlarmRecord.java b/src/main/java/com/casic/entity/AlarmRecord.java index 4057df1..137d805 100644 --- a/src/main/java/com/casic/entity/AlarmRecord.java +++ b/src/main/java/com/casic/entity/AlarmRecord.java @@ -71,7 +71,7 @@ @TableField("RECORDCODE") private String recordcode; /** - * 告警状态 + * 告警日期 */ @TableField("RECORDDATE") private Date recorddate; diff --git a/src/main/java/com/casic/schedule/TaskConfigurer.java b/src/main/java/com/casic/schedule/TaskConfigurer.java new file mode 100644 index 0000000..77c5d5a --- /dev/null +++ b/src/main/java/com/casic/schedule/TaskConfigurer.java @@ -0,0 +1,47 @@ +package com.casic.schedule; + +import com.casic.service.DeviceDataService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.SchedulingConfigurer; +import org.springframework.scheduling.config.ScheduledTaskRegistrar; +import org.springframework.scheduling.config.TriggerTask; +import org.springframework.scheduling.support.CronTrigger; + +/** + * @author cz + */ +@Configuration +@EnableScheduling +@Slf4j +@RequiredArgsConstructor +public class TaskConfigurer implements SchedulingConfigurer { + + @Value("${casic.device.online.cron}") + private String onlineStateCron; + + private final DeviceDataService deviceDataService; + + @Override + public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { + TriggerTask onlineStateTask = new TriggerTask(nextDayDevice(), + triggerContext -> { + return new CronTrigger(onlineStateCron).nextExecutionTime(triggerContext); + }); + taskRegistrar.addTriggerTask(onlineStateTask); + } + + private Runnable nextDayDevice() { + return new Runnable() { + @Override + public void run() { + log.info("定时查询在线离线运行了..."); + deviceDataService.checkAndUpdateDeviceOnline(); + } + }; + } + +} \ No newline at end of file diff --git a/src/main/java/com/casic/service/AlarmRecordFly.java b/src/main/java/com/casic/service/AlarmRecordFly.java index 339034e..47c7969 100644 --- a/src/main/java/com/casic/service/AlarmRecordFly.java +++ b/src/main/java/com/casic/service/AlarmRecordFly.java @@ -10,12 +10,10 @@ alarmRecord = new AlarmRecord(); alarmRecord.setIssend("0"); alarmRecord.setDeviceTypeName("可燃气体探测器"); - alarmRecord.setIssend("0"); alarmRecord.setItemname("default"); alarmRecord.setMessage("1"); alarmRecord.setMessageStatus("0"); alarmRecord.setRecordcode("0"); - alarmRecord.setRecordcode("0"); alarmRecord.setActive(1); } @@ -23,4 +21,19 @@ return alarmRecord; } + public static AlarmRecord getPrototype(){ + AlarmRecord alarmRecord = new AlarmRecord(); + alarmRecord.setIssend("0"); + alarmRecord.setDeviceTypeName("可燃气体探测器"); + alarmRecord.setItemname("default"); + alarmRecord.setMessage("-1"); + alarmRecord.setMessageStatus("0"); + alarmRecord.setRecordcode("1"); + alarmRecord.setActive(1); + return alarmRecord; + } + + + + } diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java new file mode 100644 index 0000000..f972981 --- /dev/null +++ b/src/main/java/com/casic/service/DeviceDataService.java @@ -0,0 +1,7 @@ +package com.casic.service; + +public interface DeviceDataService { + + void checkAndUpdateDeviceOnline(); + +} diff --git a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java new file mode 100644 index 0000000..f41a44d --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java @@ -0,0 +1,68 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.dao.AlarmRecordsMapper; +import com.casic.dao.DeviceDataMapper; +import com.casic.entity.AlarmRecord; +import com.casic.service.AlarmRecordFly; +import com.casic.service.DeviceDataService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author cz + */ +@Service +@RequiredArgsConstructor +public class DeviceDataServiceImpl extends ServiceImpl implements DeviceDataService { + + private final DeviceDataMapper deviceDataMapper; + + @Value("${casic.device.data-day}") + private Integer dataDay; + + @Value("${casic.device.gas-dector.type}") + private Integer devciceType; + + + @Override + public void checkAndUpdateDeviceOnline() { + //查询硫化氢设备 + List> devcodeList = deviceDataMapper.getDevcodeByType(devciceType); + //统一查询所有设备的3天内数据的设备编号,然后设备编号转成map,进行 + List dataList = deviceDataMapper.getRecentData(dataDay); + List> dataSortDevcodeList = devcodeList; + if (dataList != null) { + Map devOnlineMap = new HashMap<>(); + for (String devcodeData : dataList) { + devOnlineMap.put(devcodeData, ""); + } + dataSortDevcodeList = dataSortDevcodeList.stream().filter( + e -> !devOnlineMap.containsKey((String) e.get("devcode"))).collect(Collectors.toList()); + } + //批量产生离线报警 + if (CollectionUtils.isNotEmpty(dataSortDevcodeList)) { + List alarmRecords = new ArrayList<>(); + for (Map dataDevcodeMap : dataSortDevcodeList) { + alarmRecords.add(createAlarmRecord(((BigDecimal)dataDevcodeMap.get("id")).longValue(), (String) dataDevcodeMap.get("devcode"))); + } + this.saveBatch(alarmRecords); + } + } + + private AlarmRecord createAlarmRecord(Long id, String devcode) { + AlarmRecord alarmRecord = AlarmRecordFly.getPrototype(); + alarmRecord.setRecorddate(new Date()); + alarmRecord.setDbid(null); + alarmRecord.setDeviceCode(devcode); + alarmRecord.setDeviceId(id); + return alarmRecord; + } + +} diff --git a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java index f72f764..176b389 100644 --- a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java @@ -86,6 +86,7 @@ //判断事件类型 0正常 1低报 2高报 String alarmSituation = payloadData.get("gas_sensor_state").toString(); String devcode = receiveData.get("IMEI").toString(); + clearOnlineData(devcode); //构建数据 ButaneData butaneData = ButaneData.builder() .devcode(devcode) @@ -130,8 +131,8 @@ public Boolean dealNormalData(Map receiveData) { String devcode = receiveData.get("IMEI").toString(); - //第一条上来,消除报警 -// clearAlarmData(devcode); + //第一条上来,清除离线 + clearOnlineData(devcode); ButaneData butaneData = ButaneData.builder() .devcode(devcode) .dbid(snowflake.nextId()) @@ -161,6 +162,22 @@ private void clearAlarmData(String devcode) { QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("DEVICE_CODE", devcode); + queryWrapper.eq("ACTIVE", 1); + try { + AlarmRecord alarmRecord = new AlarmRecord(); + alarmRecord.setActive(0); + alarmRecordsMapper.update(alarmRecord, queryWrapper); + } catch (Exception e) { + log.error("清除报警失败,设备编号为{},异常信息{}", devcode, e); + } + } + + private void clearOnlineData(String devcode) { + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("DEVICE_CODE", devcode); + queryWrapper.eq("ACTIVE", 1); + queryWrapper.eq("MESSAGE_STATUS", "0"); + queryWrapper.eq("RECORDCODE", "1"); try { AlarmRecord alarmRecord = new AlarmRecord(); alarmRecord.setActive(0); diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 8a5929a..d47010a 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -4,7 +4,7 @@ spring: datasource: driverClassName: oracle.jdbc.driver.OracleDriver - url: jdbc:oracle:thin:@11.100.6.181:1521:orcl + url: jdbc:oracle:thin:@11.100.6.183:1521:orcl username: gzsg password: gzsg session: diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 4038629..21ecda8 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -24,6 +24,9 @@ casic: device: gas-dector: - type: 10 + type: 30 minutes: 60 - enable-local: false \ No newline at end of file + enable-local: false + data-day: 1 # 时间多少的为离线 + online: + cron: 0 0/1 * * * ? # 多长时间判断离线 \ No newline at end of file diff --git a/src/main/resources/mapper/DeviceDataMapper.xml b/src/main/resources/mapper/DeviceDataMapper.xml new file mode 100644 index 0000000..4e15de9 --- /dev/null +++ b/src/main/resources/mapper/DeviceDataMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/dao/DeviceDataMapper.java b/src/main/java/com/casic/dao/DeviceDataMapper.java new file mode 100644 index 0000000..e9456c1 --- /dev/null +++ b/src/main/java/com/casic/dao/DeviceDataMapper.java @@ -0,0 +1,18 @@ +package com.casic.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface DeviceDataMapper { + + List> getDevcodeByType(@Param("devciceType") Integer devciceType); + + List getRecentData(@Param("dataDay") Integer dataDay); + + int updateOnlineByDevs(@Param("dataSortList") List dataSortDevcodeList); + +} diff --git a/src/main/java/com/casic/entity/AlarmRecord.java b/src/main/java/com/casic/entity/AlarmRecord.java index 4057df1..137d805 100644 --- a/src/main/java/com/casic/entity/AlarmRecord.java +++ b/src/main/java/com/casic/entity/AlarmRecord.java @@ -71,7 +71,7 @@ @TableField("RECORDCODE") private String recordcode; /** - * 告警状态 + * 告警日期 */ @TableField("RECORDDATE") private Date recorddate; diff --git a/src/main/java/com/casic/schedule/TaskConfigurer.java b/src/main/java/com/casic/schedule/TaskConfigurer.java new file mode 100644 index 0000000..77c5d5a --- /dev/null +++ b/src/main/java/com/casic/schedule/TaskConfigurer.java @@ -0,0 +1,47 @@ +package com.casic.schedule; + +import com.casic.service.DeviceDataService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.SchedulingConfigurer; +import org.springframework.scheduling.config.ScheduledTaskRegistrar; +import org.springframework.scheduling.config.TriggerTask; +import org.springframework.scheduling.support.CronTrigger; + +/** + * @author cz + */ +@Configuration +@EnableScheduling +@Slf4j +@RequiredArgsConstructor +public class TaskConfigurer implements SchedulingConfigurer { + + @Value("${casic.device.online.cron}") + private String onlineStateCron; + + private final DeviceDataService deviceDataService; + + @Override + public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { + TriggerTask onlineStateTask = new TriggerTask(nextDayDevice(), + triggerContext -> { + return new CronTrigger(onlineStateCron).nextExecutionTime(triggerContext); + }); + taskRegistrar.addTriggerTask(onlineStateTask); + } + + private Runnable nextDayDevice() { + return new Runnable() { + @Override + public void run() { + log.info("定时查询在线离线运行了..."); + deviceDataService.checkAndUpdateDeviceOnline(); + } + }; + } + +} \ No newline at end of file diff --git a/src/main/java/com/casic/service/AlarmRecordFly.java b/src/main/java/com/casic/service/AlarmRecordFly.java index 339034e..47c7969 100644 --- a/src/main/java/com/casic/service/AlarmRecordFly.java +++ b/src/main/java/com/casic/service/AlarmRecordFly.java @@ -10,12 +10,10 @@ alarmRecord = new AlarmRecord(); alarmRecord.setIssend("0"); alarmRecord.setDeviceTypeName("可燃气体探测器"); - alarmRecord.setIssend("0"); alarmRecord.setItemname("default"); alarmRecord.setMessage("1"); alarmRecord.setMessageStatus("0"); alarmRecord.setRecordcode("0"); - alarmRecord.setRecordcode("0"); alarmRecord.setActive(1); } @@ -23,4 +21,19 @@ return alarmRecord; } + public static AlarmRecord getPrototype(){ + AlarmRecord alarmRecord = new AlarmRecord(); + alarmRecord.setIssend("0"); + alarmRecord.setDeviceTypeName("可燃气体探测器"); + alarmRecord.setItemname("default"); + alarmRecord.setMessage("-1"); + alarmRecord.setMessageStatus("0"); + alarmRecord.setRecordcode("1"); + alarmRecord.setActive(1); + return alarmRecord; + } + + + + } diff --git a/src/main/java/com/casic/service/DeviceDataService.java b/src/main/java/com/casic/service/DeviceDataService.java new file mode 100644 index 0000000..f972981 --- /dev/null +++ b/src/main/java/com/casic/service/DeviceDataService.java @@ -0,0 +1,7 @@ +package com.casic.service; + +public interface DeviceDataService { + + void checkAndUpdateDeviceOnline(); + +} diff --git a/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java new file mode 100644 index 0000000..f41a44d --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeviceDataServiceImpl.java @@ -0,0 +1,68 @@ +package com.casic.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.dao.AlarmRecordsMapper; +import com.casic.dao.DeviceDataMapper; +import com.casic.entity.AlarmRecord; +import com.casic.service.AlarmRecordFly; +import com.casic.service.DeviceDataService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author cz + */ +@Service +@RequiredArgsConstructor +public class DeviceDataServiceImpl extends ServiceImpl implements DeviceDataService { + + private final DeviceDataMapper deviceDataMapper; + + @Value("${casic.device.data-day}") + private Integer dataDay; + + @Value("${casic.device.gas-dector.type}") + private Integer devciceType; + + + @Override + public void checkAndUpdateDeviceOnline() { + //查询硫化氢设备 + List> devcodeList = deviceDataMapper.getDevcodeByType(devciceType); + //统一查询所有设备的3天内数据的设备编号,然后设备编号转成map,进行 + List dataList = deviceDataMapper.getRecentData(dataDay); + List> dataSortDevcodeList = devcodeList; + if (dataList != null) { + Map devOnlineMap = new HashMap<>(); + for (String devcodeData : dataList) { + devOnlineMap.put(devcodeData, ""); + } + dataSortDevcodeList = dataSortDevcodeList.stream().filter( + e -> !devOnlineMap.containsKey((String) e.get("devcode"))).collect(Collectors.toList()); + } + //批量产生离线报警 + if (CollectionUtils.isNotEmpty(dataSortDevcodeList)) { + List alarmRecords = new ArrayList<>(); + for (Map dataDevcodeMap : dataSortDevcodeList) { + alarmRecords.add(createAlarmRecord(((BigDecimal)dataDevcodeMap.get("id")).longValue(), (String) dataDevcodeMap.get("devcode"))); + } + this.saveBatch(alarmRecords); + } + } + + private AlarmRecord createAlarmRecord(Long id, String devcode) { + AlarmRecord alarmRecord = AlarmRecordFly.getPrototype(); + alarmRecord.setRecorddate(new Date()); + alarmRecord.setDbid(null); + alarmRecord.setDeviceCode(devcode); + alarmRecord.setDeviceId(id); + return alarmRecord; + } + +} diff --git a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java index f72f764..176b389 100644 --- a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java @@ -86,6 +86,7 @@ //判断事件类型 0正常 1低报 2高报 String alarmSituation = payloadData.get("gas_sensor_state").toString(); String devcode = receiveData.get("IMEI").toString(); + clearOnlineData(devcode); //构建数据 ButaneData butaneData = ButaneData.builder() .devcode(devcode) @@ -130,8 +131,8 @@ public Boolean dealNormalData(Map receiveData) { String devcode = receiveData.get("IMEI").toString(); - //第一条上来,消除报警 -// clearAlarmData(devcode); + //第一条上来,清除离线 + clearOnlineData(devcode); ButaneData butaneData = ButaneData.builder() .devcode(devcode) .dbid(snowflake.nextId()) @@ -161,6 +162,22 @@ private void clearAlarmData(String devcode) { QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("DEVICE_CODE", devcode); + queryWrapper.eq("ACTIVE", 1); + try { + AlarmRecord alarmRecord = new AlarmRecord(); + alarmRecord.setActive(0); + alarmRecordsMapper.update(alarmRecord, queryWrapper); + } catch (Exception e) { + log.error("清除报警失败,设备编号为{},异常信息{}", devcode, e); + } + } + + private void clearOnlineData(String devcode) { + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("DEVICE_CODE", devcode); + queryWrapper.eq("ACTIVE", 1); + queryWrapper.eq("MESSAGE_STATUS", "0"); + queryWrapper.eq("RECORDCODE", "1"); try { AlarmRecord alarmRecord = new AlarmRecord(); alarmRecord.setActive(0); diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 8a5929a..d47010a 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -4,7 +4,7 @@ spring: datasource: driverClassName: oracle.jdbc.driver.OracleDriver - url: jdbc:oracle:thin:@11.100.6.181:1521:orcl + url: jdbc:oracle:thin:@11.100.6.183:1521:orcl username: gzsg password: gzsg session: diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 4038629..21ecda8 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -24,6 +24,9 @@ casic: device: gas-dector: - type: 10 + type: 30 minutes: 60 - enable-local: false \ No newline at end of file + enable-local: false + data-day: 1 # 时间多少的为离线 + online: + cron: 0 0/1 * * * ? # 多长时间判断离线 \ No newline at end of file diff --git a/src/main/resources/mapper/DeviceDataMapper.xml b/src/main/resources/mapper/DeviceDataMapper.xml new file mode 100644 index 0000000..4e15de9 --- /dev/null +++ b/src/main/resources/mapper/DeviceDataMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/DeviceMapper.xml b/src/main/resources/mapper/DeviceMapper.xml index 4e15de9..d04d912 100644 --- a/src/main/resources/mapper/DeviceMapper.xml +++ b/src/main/resources/mapper/DeviceMapper.xml @@ -1,5 +1,40 @@ - + + + + + + + + UPDATE BUS_DEVICE + SET ONLINE_STATE=0 + WHERE VALID=1 + AND DEVCODE IN + + #{item} + + + \ No newline at end of file