diff --git a/ruoyi-api/hwmom-api-ems/pom.xml b/ruoyi-api/hwmom-api-ems/pom.xml
new file mode 100644
index 00000000..d3be6a17
--- /dev/null
+++ b/ruoyi-api/hwmom-api-ems/pom.xml
@@ -0,0 +1,42 @@
+
+
+
+ org.dromara
+ ruoyi-api
+ ${revision}
+
+ 4.0.0
+
+ hwmom-api-ems
+
+
+ hwmom-api-ems ems接口模块
+
+
+
+
+
+
+ org.dromara
+ ruoyi-common-core
+
+
+
+ org.dromara
+ ruoyi-common-excel
+
+
+ org.projectlombok
+ lombok
+ provided
+
+
+ com.aizuda
+ snail-job-client-job-core
+
+
+
+
+
diff --git a/ruoyi-api/hwmom-api-ems/src/main/java/org/dromara/ems/api/RemoteEmsTaskService.java b/ruoyi-api/hwmom-api-ems/src/main/java/org/dromara/ems/api/RemoteEmsTaskService.java
new file mode 100644
index 00000000..4dd76473
--- /dev/null
+++ b/ruoyi-api/hwmom-api-ems/src/main/java/org/dromara/ems/api/RemoteEmsTaskService.java
@@ -0,0 +1,13 @@
+package org.dromara.ems.api;
+
+import org.dromara.common.core.domain.R;
+
+public interface RemoteEmsTaskService {
+
+ public R collectDeviceAlarmsTask();
+
+ public R exceedDnbThresholdAlarmsTask();
+
+ public R hourlyConsumptionAlarmsTask();
+
+}
diff --git a/ruoyi-api/pom.xml b/ruoyi-api/pom.xml
index d403512e..2e6458b2 100644
--- a/ruoyi-api/pom.xml
+++ b/ruoyi-api/pom.xml
@@ -20,6 +20,7 @@
hwmom-api-dms
ruoyi-api-job
hwmom-api-wms
+ hwmom-api-ems
ruoyi-api
diff --git a/ruoyi-modules/hwmom-ems/pom.xml b/ruoyi-modules/hwmom-ems/pom.xml
index 4322110b..eef12fc1 100644
--- a/ruoyi-modules/hwmom-ems/pom.xml
+++ b/ruoyi-modules/hwmom-ems/pom.xml
@@ -181,15 +181,13 @@
compile
+
org.dromara
- ruoyi-system
- ${revision}
- compile
+ hwmom-api-ems
+ 2.2.2
-
-
diff --git a/ruoyi-modules/hwmom-ems/src/main/java/org/dromara/ems/Dubbo/RemoteEmsTaskServiceImpl.java b/ruoyi-modules/hwmom-ems/src/main/java/org/dromara/ems/Dubbo/RemoteEmsTaskServiceImpl.java
new file mode 100644
index 00000000..18cc4d5f
--- /dev/null
+++ b/ruoyi-modules/hwmom-ems/src/main/java/org/dromara/ems/Dubbo/RemoteEmsTaskServiceImpl.java
@@ -0,0 +1,252 @@
+package org.dromara.ems.Dubbo;
+
+import io.seata.spring.annotation.GlobalTransactional;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.ems.api.RemoteEmsTaskService;
+import org.dromara.ems.base.domain.EmsBaseCollectDeviceInfo;
+import org.dromara.ems.base.domain.EmsBaseMonitorThreshold;
+import org.dromara.ems.base.mapper.EmsBaseCollectDeviceInfoMapper;
+import org.dromara.ems.base.mapper.EmsBaseMonitorThresholdMapper;
+import org.dromara.ems.record.domain.EmsRecordAlarmData;
+import org.dromara.ems.record.domain.EmsRecordAlarmRule;
+import org.dromara.ems.record.domain.EmsRecordDnbInstant;
+import org.dromara.ems.record.mapper.EmsRecordAlarmDataMapper;
+import org.dromara.ems.record.mapper.EmsRecordAlarmRuleMapper;
+import org.dromara.ems.record.mapper.EmsRecordDnbInstantMapper;
+import org.dromara.ems.report.domain.EmsReportPointDnb;
+import org.dromara.ems.report.mapper.EmsReportPointDnbMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@RequiredArgsConstructor
+@Service
+@DubboService
+@Slf4j
+public class RemoteEmsTaskServiceImpl implements RemoteEmsTaskService {
+
+ private final EmsRecordAlarmDataMapper emsRecordAlarmDataMapper;
+
+
+ private final EmsRecordAlarmRuleMapper emsRecordAlarmRuleMapper;
+
+
+ private final EmsBaseCollectDeviceInfoMapper emsBaseCollectDeviceInfoMapper;
+
+
+ private final EmsRecordDnbInstantMapper emsRecordDnbInstantMapper;
+
+
+ private final EmsBaseMonitorThresholdMapper emsBaseMonitorThresholdMapper;
+
+
+ private final EmsReportPointDnbMapper emsReportPointDnbMapper;
+
+/* public RemoteEmsTaskServiceImpl(EmsRecordAlarmDataMapper emsRecordAlarmDataMapper, EmsRecordAlarmRuleMapper emsRecordAlarmRuleMapper, EmsBaseCollectDeviceInfoMapper emsBaseCollectDeviceInfoMapper, EmsRecordDnbInstantMapper emsRecordDnbInstantMapper, EmsBaseMonitorThresholdMapper emsBaseMonitorThresholdMapper, EmsReportPointDnbMapper emsReportPointDnbMapper) {
+ this.emsRecordAlarmDataMapper = emsRecordAlarmDataMapper;
+ this.emsRecordAlarmRuleMapper = emsRecordAlarmRuleMapper;
+ this.emsBaseCollectDeviceInfoMapper = emsBaseCollectDeviceInfoMapper;
+ this.emsRecordDnbInstantMapper = emsRecordDnbInstantMapper;
+ this.emsBaseMonitorThresholdMapper = emsBaseMonitorThresholdMapper;
+ this.emsReportPointDnbMapper = emsReportPointDnbMapper;
+ }*/
+
+
+ /**
+ * 采集设备告警定时任务
+ */
+ @GlobalTransactional(rollbackFor = Exception.class)
+ public R collectDeviceAlarmsTask() {
+ long minuteValue = 1000 * 60;
+ Date date = new Date();
+ EmsRecordAlarmRule alarmRule = new EmsRecordAlarmRule();
+ alarmRule.setTriggerRule(1L);
+ List alarmRules = emsRecordAlarmRuleMapper.selectEmsRecordAlarmRuleList(alarmRule);
+ if (alarmRules.size() > 0) {
+ minuteValue = alarmRules.get(0).getDeviceOfflineTime() * minuteValue;
+ } else {
+ System.out.println("未配置设备离线时间");
+ return R.fail();
+ }
+
+ System.out.println("开始执行设备告警定时任务");
+ EmsBaseCollectDeviceInfo collectDeviceInfo = new EmsBaseCollectDeviceInfo();
+ collectDeviceInfo.setIsFlag("1");
+ List deviceInfoList = emsBaseCollectDeviceInfoMapper.selectEmsBaseCollectDeviceInfoList(collectDeviceInfo);
+
+ if (deviceInfoList.size() > 0) {
+ EmsRecordAlarmData recordAlarmData = new EmsRecordAlarmData();
+ recordAlarmData.setAlarmType(1L);
+ recordAlarmData.setAlarmStatus(1L);
+ List alarmDataList = emsRecordAlarmDataMapper.selectEmsRecordAlarmDataList(recordAlarmData);
+ List collectDeviceIdList = alarmDataList.stream().map(EmsRecordAlarmData::getCollectDeviceId).collect(Collectors.toList());
+ for (EmsBaseCollectDeviceInfo deviceInfo : deviceInfoList) {
+ if (collectDeviceIdList.contains(deviceInfo.getCollectDeviceId())) {
+ continue;
+ }
+ if ((deviceInfo.getUpdateTime().getTime() + minuteValue) < date.getTime()) {
+ EmsRecordAlarmData alarmData = new EmsRecordAlarmData();
+ alarmData.setCollectDeviceId(deviceInfo.getCollectDeviceId());
+ alarmData.setCollectTime(new Date());
+ alarmData.setAlarmType(1L);
+ alarmData.setAlarmStatus(1L);
+ alarmData.setAlarmData("设备离线已超过" + alarmRules.get(0).getDeviceOfflineTime() + "分钟");
+ System.out.println("存入数据:" + alarmData);
+ emsRecordAlarmDataMapper.insertEmsRecordAlarmData(alarmData);
+
+ }
+ }
+ }
+
+ System.out.println("设备告警定时任务执行完毕");
+ return R.ok();
+ }
+
+ /**
+ * 超过电阈值定时任务
+ */
+ @GlobalTransactional(rollbackFor = Exception.class)
+ public R exceedDnbThresholdAlarmsTask() {
+ System.out.println("开始执行超过电阈值定时任务");
+ EmsBaseMonitorThreshold monitorThreshold = new EmsBaseMonitorThreshold();
+ monitorThreshold.setMonitorType(2L);
+ List thresholdList = emsBaseMonitorThresholdMapper.selectEmsBaseMonitorThresholdList(monitorThreshold);
+
+ EmsRecordDnbInstant dnbInstant = new EmsRecordDnbInstant();
+ List dnbInstantList = emsRecordDnbInstantMapper.selectEmsRecordDnbInstantList(dnbInstant);
+ Map thresholdMap = compareThresholdAndRecord(thresholdList, dnbInstantList);
+ //防止多次存入异常数据
+ EmsRecordAlarmData recordAlarmData = new EmsRecordAlarmData();
+ recordAlarmData.setAlarmType(0L);
+ recordAlarmData.setAlarmStatus(1L);
+ List alarmDataList = emsRecordAlarmDataMapper.selectEmsRecordAlarmDataList(recordAlarmData);
+ List monitorIdList = alarmDataList.stream().map(EmsRecordAlarmData::getMonitorId).collect(Collectors.toList());
+ for (String monitorId : thresholdMap.keySet()) {
+ if (monitorIdList.contains(monitorId)) {
+ continue;
+ }
+ EmsRecordAlarmData alarmData = new EmsRecordAlarmData();
+ alarmData.setMonitorId(monitorId);
+ alarmData.setCollectTime(new Date());
+ alarmData.setAlarmType(0L);
+ alarmData.setAlarmStatus(1L);
+ alarmData.setAlarmData(thresholdMap.get(monitorId));
+ System.out.println("存入数据:" + alarmData);
+ emsRecordAlarmDataMapper.insertEmsRecordAlarmData(alarmData);
+
+ }
+
+ System.out.println("完成超过阈值定时任务");
+ return R.ok();
+ }
+
+ /**
+ * 超过电阈值 对比记录
+ *
+ * @param baseDnbThresholds
+ * @param recordDnbInstants
+ * @return
+ */
+ public Map compareThresholdAndRecord(List baseDnbThresholds, List recordDnbInstants) {
+ Map resultMap = new HashMap<>();
+ for (EmsRecordDnbInstant recordDnbInstant : recordDnbInstants) {
+ String monitorCode = recordDnbInstant.getMonitorCode();
+ EmsBaseMonitorThreshold baseDnbThreshold = null;
+ for (EmsBaseMonitorThreshold threshold : baseDnbThresholds) {
+ if (threshold.getMonitorCode().equals(monitorCode)) {
+ baseDnbThreshold = threshold;
+ break;
+ }
+ }
+ if (baseDnbThreshold != null) {
+ String reason = compare(recordDnbInstant, baseDnbThreshold);
+ if (reason != null) {
+ resultMap.put(monitorCode, reason);
+ }
+ }
+ }
+ return resultMap;
+ }
+
+ private String compare(EmsRecordDnbInstant recordDnbInstant, EmsBaseMonitorThreshold baseDnbThreshold) {
+ if (StringUtils.isNull(recordDnbInstant.getIA())) {
+ return null;
+ }
+ BigDecimal zero = new BigDecimal("0.00");
+ if (recordDnbInstant.getVA().compareTo(zero) == 0 || recordDnbInstant.getVB().compareTo(zero) == 0
+ || recordDnbInstant.getVC().compareTo(zero) == 0) {
+ return "缺项报警";
+ }
+ if (recordDnbInstant.getIA().compareTo(baseDnbThreshold.getIBMin()) > 0) {
+ return "超过A相电流最大值";
+ }
+ if (recordDnbInstant.getIB().compareTo(baseDnbThreshold.getIBMax()) > 0) {
+ return "超过B相电流最大值";
+ }
+ if (recordDnbInstant.getIC().compareTo(baseDnbThreshold.getICMax()) > 0) {
+ return "超过C相电流最大值";
+ }
+ if (recordDnbInstant.getVA().compareTo(baseDnbThreshold.getVAMax()) > 0) {
+ return "超过A相电压最大值";
+ }
+ if (recordDnbInstant.getVB().compareTo(baseDnbThreshold.getVBMax()) > 0) {
+ return "超过B相电压最大值";
+ }
+ if (recordDnbInstant.getVC().compareTo(baseDnbThreshold.getVCMax()) > 0) {
+ return "超过C相电压最大值";
+ }
+ if (recordDnbInstant.getIA().compareTo(baseDnbThreshold.getIAMin()) < 0) {
+ return "小于A相电流最小值";
+ }
+ if (recordDnbInstant.getIB().compareTo(baseDnbThreshold.getIBMin()) < 0) {
+ return "小于B相电流最小值";
+ }
+ if (recordDnbInstant.getIC().compareTo(baseDnbThreshold.getICMin()) < 0) {
+ return "小于C相电流最小值";
+ }
+ if (recordDnbInstant.getVA().compareTo(baseDnbThreshold.getVAMin()) < 0) {
+ return "小于A相电压最小值";
+ }
+ if (recordDnbInstant.getVB().compareTo(baseDnbThreshold.getVBMin()) < 0) {
+ return "小于B相电压最小值";
+ }
+ if (recordDnbInstant.getVC().compareTo(baseDnbThreshold.getVCMin()) < 0) {
+ return "小于C相电压最小值";
+ }
+ return null;
+ }
+
+ /**
+ * 小时耗量告警定时任务
+ */
+ @GlobalTransactional(rollbackFor = Exception.class)
+ public R hourlyConsumptionAlarmsTask() {
+ System.out.println("开始执行小时耗量告警定时任务");
+ EmsBaseMonitorThreshold monitorThreshold = new EmsBaseMonitorThreshold();
+ monitorThreshold.setMonitorType(2L);
+ List thresholdList = emsBaseMonitorThresholdMapper.selectEmsBaseMonitorThresholdList(monitorThreshold);
+ for (EmsBaseMonitorThreshold threshold : thresholdList) {
+ BigDecimal consumption = threshold.getHourConsumption();
+ if (consumption.equals(new BigDecimal(0))){
+ continue;
+ }
+ EmsReportPointDnb reportPointDnb = new EmsReportPointDnb();
+ reportPointDnb.setMonitorCode(threshold.getMonitorCode());
+ System.out.println("查询数据:" + reportPointDnb);
+ List dnbList = emsReportPointDnbMapper.selectEmsReportPointDnbList(reportPointDnb);
+ }
+ System.out.println("完成小时耗量告警定时任务");
+ return R.ok();
+ }
+
+}
diff --git a/ruoyi-modules/hwmom-ems/src/main/java/org/dromara/ems/HwMomEmsApplication.java b/ruoyi-modules/hwmom-ems/src/main/java/org/dromara/ems/HwMomEmsApplication.java
index 0d3b99ca..38c718c8 100644
--- a/ruoyi-modules/hwmom-ems/src/main/java/org/dromara/ems/HwMomEmsApplication.java
+++ b/ruoyi-modules/hwmom-ems/src/main/java/org/dromara/ems/HwMomEmsApplication.java
@@ -6,6 +6,7 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.scheduling.annotation.EnableScheduling;
/**
* 系统模块
@@ -15,6 +16,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
@EnableDubbo
@SpringBootApplication
@EnableConfigurationProperties(MesProperties.class)
+@EnableScheduling
public class HwMomEmsApplication {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(HwMomEmsApplication.class);
diff --git a/ruoyi-modules/hwmom-ems/src/main/java/org/dromara/ems/record/service/IEmsRecordAlarmDataService.java b/ruoyi-modules/hwmom-ems/src/main/java/org/dromara/ems/record/service/IEmsRecordAlarmDataService.java
index 7ff4ad47..63976211 100644
--- a/ruoyi-modules/hwmom-ems/src/main/java/org/dromara/ems/record/service/IEmsRecordAlarmDataService.java
+++ b/ruoyi-modules/hwmom-ems/src/main/java/org/dromara/ems/record/service/IEmsRecordAlarmDataService.java
@@ -79,19 +79,19 @@ public interface IEmsRecordAlarmDataService
*/
public int handleExceptionsAlarmData(Long[] objIds);
- /**
+/* *//**
* 采集设备告警定时任务
- */
+ *//*
public void collectDeviceAlarmsTask();
- /**
+ *//**
* 超过电阈值定时任务
- */
+ *//*
public void exceedDnbThresholdAlarmsTask();
- /**
+ *//**
* 小时耗量告警定时任务
- */
- public void hourlyConsumptionAlarmsTask();
+ *//*
+ public void hourlyConsumptionAlarmsTask();*/
}
diff --git a/ruoyi-modules/hwmom-ems/src/main/java/org/dromara/ems/record/service/impl/EmsRecordAlarmDataServiceImpl.java b/ruoyi-modules/hwmom-ems/src/main/java/org/dromara/ems/record/service/impl/EmsRecordAlarmDataServiceImpl.java
index c02470d5..2f2b3406 100644
--- a/ruoyi-modules/hwmom-ems/src/main/java/org/dromara/ems/record/service/impl/EmsRecordAlarmDataServiceImpl.java
+++ b/ruoyi-modules/hwmom-ems/src/main/java/org/dromara/ems/record/service/impl/EmsRecordAlarmDataServiceImpl.java
@@ -24,6 +24,7 @@ import org.dromara.ems.record.mapper.EmsRecordDnbInstantMapper;
import org.dromara.ems.record.service.IEmsRecordAlarmDataService;
import org.dromara.ems.report.domain.EmsReportPointDnb;
import org.dromara.ems.report.mapper.EmsReportPointDnbMapper;
+import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
@@ -192,10 +193,15 @@ public class EmsRecordAlarmDataServiceImpl implements IEmsRecordAlarmDataService
}
return 1;
}
+/*
- /**
+ */
+/**
* 采集设备告警定时任务
- */
+ *//*
+
+// @Scheduled(cron = "0 0/9 * * * ?")
+ @Transactional(rollbackFor = Exception.class)
public void collectDeviceAlarmsTask() {
long minuteValue = 1000 * 60;
Date date = new Date();
@@ -235,9 +241,13 @@ public class EmsRecordAlarmDataServiceImpl implements IEmsRecordAlarmDataService
}
}
- /**
+ */
+/**
* 超过电阈值定时任务
- */
+ *//*
+
+// @Scheduled(cron = "0 0/8 * * * ?")
+ @Transactional(rollbackFor = Exception.class)
public void exceedDnbThresholdAlarmsTask() {
EmsBaseMonitorThreshold monitorThreshold = new EmsBaseMonitorThreshold();
monitorThreshold.setMonitorType(2L);
@@ -267,13 +277,15 @@ public class EmsRecordAlarmDataServiceImpl implements IEmsRecordAlarmDataService
}
- /**
+ */
+/**
* 超过电阈值 对比记录
*
* @param baseDnbThresholds
* @param recordDnbInstants
* @return
- */
+ *//*
+
public Map compareThresholdAndRecord(List baseDnbThresholds, List recordDnbInstants) {
Map resultMap = new HashMap<>();
for (EmsRecordDnbInstant recordDnbInstant : recordDnbInstants) {
@@ -343,9 +355,13 @@ public class EmsRecordAlarmDataServiceImpl implements IEmsRecordAlarmDataService
return null;
}
- /**
+ */
+/**
* 小时耗量告警定时任务
- */
+ *//*
+
+// @Scheduled(cron = "0 0 0/1 * * ?")
+ @Transactional(rollbackFor = Exception.class)
public void hourlyConsumptionAlarmsTask() {
EmsBaseMonitorThreshold monitorThreshold = new EmsBaseMonitorThreshold();
monitorThreshold.setMonitorType(2L);
@@ -361,5 +377,6 @@ public class EmsRecordAlarmDataServiceImpl implements IEmsRecordAlarmDataService
}
}
+*/
}
diff --git a/ruoyi-modules/ruoyi-job/pom.xml b/ruoyi-modules/ruoyi-job/pom.xml
index 478d2706..28ac6d44 100644
--- a/ruoyi-modules/ruoyi-job/pom.xml
+++ b/ruoyi-modules/ruoyi-job/pom.xml
@@ -115,14 +115,21 @@
2.2.2
-
+
+
+
diff --git a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/EmsCollectDeviceAlarmsTask.java b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/EmsCollectDeviceAlarmsTask.java
new file mode 100644
index 00000000..0ad22f95
--- /dev/null
+++ b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/EmsCollectDeviceAlarmsTask.java
@@ -0,0 +1,38 @@
+package org.dromara.job.snailjob;
+
+import com.aizuda.snailjob.client.job.core.annotation.JobExecutor;
+import com.aizuda.snailjob.client.job.core.dto.JobArgs;
+import com.aizuda.snailjob.client.model.ExecuteResult;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.common.core.domain.R;
+import org.dromara.ems.api.RemoteEmsTaskService;
+import org.springframework.stereotype.Component;
+
+@Component
+@JobExecutor(name = "collectDeviceAlarmsTask")
+public class EmsCollectDeviceAlarmsTask {
+
+ private static final ObjectMapper objectMapper = new ObjectMapper();
+
+
+ @DubboReference(timeout = 60000)
+ private RemoteEmsTaskService remoteEmsTaskService;
+
+
+ public EmsCollectDeviceAlarmsTask(RemoteEmsTaskService remoteEmsTaskService) {
+ this.remoteEmsTaskService = remoteEmsTaskService;
+ }
+
+
+ public ExecuteResult jobExecute(JobArgs jobArgs) {
+ try {
+
+ R instance = remoteEmsTaskService.collectDeviceAlarmsTask();
+ return ExecuteResult.success(instance);
+ } catch (Exception e) {
+ return ExecuteResult.failure(e.getMessage());
+ }
+ }
+
+}
diff --git a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/EmsExceedDnbThresholdAlarmsTask.java b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/EmsExceedDnbThresholdAlarmsTask.java
new file mode 100644
index 00000000..b0a6c10a
--- /dev/null
+++ b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/EmsExceedDnbThresholdAlarmsTask.java
@@ -0,0 +1,38 @@
+package org.dromara.job.snailjob;
+
+import com.aizuda.snailjob.client.job.core.annotation.JobExecutor;
+import com.aizuda.snailjob.client.job.core.dto.JobArgs;
+import com.aizuda.snailjob.client.model.ExecuteResult;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.common.core.domain.R;
+import org.dromara.ems.api.RemoteEmsTaskService;
+import org.springframework.stereotype.Component;
+
+@Component
+@JobExecutor(name = "exceedDnbThresholdAlarmsTask")
+public class EmsExceedDnbThresholdAlarmsTask {
+
+ private static final ObjectMapper objectMapper = new ObjectMapper();
+
+
+ @DubboReference(timeout = 60000)
+ private RemoteEmsTaskService remoteEmsTaskService;
+
+
+ public EmsExceedDnbThresholdAlarmsTask(RemoteEmsTaskService remoteEmsTaskService) {
+ this.remoteEmsTaskService = remoteEmsTaskService;
+ }
+
+
+ public ExecuteResult jobExecute(JobArgs jobArgs) {
+ try {
+
+ R instance = remoteEmsTaskService.exceedDnbThresholdAlarmsTask();
+ return ExecuteResult.success(instance);
+ } catch (Exception e) {
+ return ExecuteResult.failure(e.getMessage());
+ }
+ }
+
+}
diff --git a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/EmsHourlyConsumptionAlarmsTask.java b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/EmsHourlyConsumptionAlarmsTask.java
new file mode 100644
index 00000000..075e182e
--- /dev/null
+++ b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/EmsHourlyConsumptionAlarmsTask.java
@@ -0,0 +1,38 @@
+package org.dromara.job.snailjob;
+
+import com.aizuda.snailjob.client.job.core.annotation.JobExecutor;
+import com.aizuda.snailjob.client.job.core.dto.JobArgs;
+import com.aizuda.snailjob.client.model.ExecuteResult;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.common.core.domain.R;
+import org.dromara.ems.api.RemoteEmsTaskService;
+import org.springframework.stereotype.Component;
+
+@Component
+@JobExecutor(name = "hourlyConsumptionAlarmsTask")
+public class EmsHourlyConsumptionAlarmsTask {
+
+ private static final ObjectMapper objectMapper = new ObjectMapper();
+
+
+ @DubboReference(timeout = 60000)
+ private RemoteEmsTaskService remoteEmsTaskService;
+
+
+ public EmsHourlyConsumptionAlarmsTask(RemoteEmsTaskService remoteEmsTaskService) {
+ this.remoteEmsTaskService = remoteEmsTaskService;
+ }
+
+
+ public ExecuteResult jobExecute(JobArgs jobArgs) {
+ try {
+
+ R instance = remoteEmsTaskService.hourlyConsumptionAlarmsTask();
+ return ExecuteResult.success(instance);
+ } catch (Exception e) {
+ return ExecuteResult.failure(e.getMessage());
+ }
+ }
+
+}