diff --git a/pqs-energy/energy-api/pom.xml b/pqs-energy/energy-api/pom.xml
index 5558d940d..23cec5c9c 100644
--- a/pqs-energy/energy-api/pom.xml
+++ b/pqs-energy/energy-api/pom.xml
@@ -43,6 +43,18 @@
com.google.code.gson
gson
+
+
+ com.aliyun
+ aliyun-java-sdk-core
+ 4.1.0
+
+
+ com.aliyun
+ aliyun-java-sdk-dysmsapi
+ 1.1.0
+
+
diff --git a/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/api/EleAirStrategyFeignClient.java b/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/api/EleAirStrategyFeignClient.java
index d9ba91688..829574514 100644
--- a/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/api/EleAirStrategyFeignClient.java
+++ b/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/api/EleAirStrategyFeignClient.java
@@ -1,9 +1,7 @@
package com.njcn.energy.pojo.api;
import com.njcn.common.pojo.constant.ServerInfo;
-import com.njcn.common.pojo.response.HttpResult;
import com.njcn.energy.pojo.api.fallback.EleAirStrategyFallbackFactory;
-import com.njcn.energy.pojo.api.fallback.EleOnlineRateFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@@ -24,6 +22,6 @@ public interface EleAirStrategyFeignClient {
* @date 2022/4/22
*/
@GetMapping("dealAirStrategyId")
- HttpResult dealAirStrategyId(@RequestParam("operation") String operation);
+ void dealAirStrategyId(@RequestParam("operation") String operation);
}
diff --git a/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/api/EnergyStatisticFeignClient.java b/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/api/EnergyStatisticFeignClient.java
index eb458458b..e708ec83c 100644
--- a/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/api/EnergyStatisticFeignClient.java
+++ b/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/api/EnergyStatisticFeignClient.java
@@ -1,11 +1,9 @@
package com.njcn.energy.pojo.api;
import com.njcn.common.pojo.constant.ServerInfo;
-import com.njcn.common.pojo.response.HttpResult;
import com.njcn.energy.pojo.api.fallback.EleOnlineRateFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestParam;
/**
@@ -23,12 +21,12 @@ public interface EnergyStatisticFeignClient {
* @date 2022/4/22
*/
@GetMapping("electricCalJob")
- HttpResult electricCalJob();
+ void electricCalJob();
@GetMapping("eleOnlineRateJob")
- HttpResult eleOnlineRateJobHandler();
+ void eleOnlineRateJobHandler();
@GetMapping("eleIntegrityJob")
- HttpResult eleIntegrityJobHandler();
+ void eleIntegrityJobHandler();
}
diff --git a/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/api/fallback/EleAirStrategyFallbackFactory.java b/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/api/fallback/EleAirStrategyFallbackFactory.java
index 15a9b4bd2..916a06eb9 100644
--- a/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/api/fallback/EleAirStrategyFallbackFactory.java
+++ b/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/api/fallback/EleAirStrategyFallbackFactory.java
@@ -2,7 +2,6 @@ package com.njcn.energy.pojo.api.fallback;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.exception.BusinessException;
-import com.njcn.common.pojo.response.HttpResult;
import com.njcn.energy.pojo.api.EleAirStrategyFeignClient;
import com.njcn.energy.pojo.utils.EnergyEnumUtil;
import feign.hystrix.FallbackFactory;
@@ -33,7 +32,7 @@ public class EleAirStrategyFallbackFactory implements FallbackFactory finalExceptionEnum = exceptionEnum;
return new EleAirStrategyFeignClient() {
@Override
- public HttpResult dealAirStrategyId(String operation) {
+ public void dealAirStrategyId(String operation) {
log.error("{}异常,降级处理,异常为:{}","空调控制策略数据",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
diff --git a/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/api/fallback/EnergyStatisticFallbackFactory.java b/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/api/fallback/EnergyStatisticFallbackFactory.java
index 7dae7aec3..205a2d002 100644
--- a/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/api/fallback/EnergyStatisticFallbackFactory.java
+++ b/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/api/fallback/EnergyStatisticFallbackFactory.java
@@ -2,8 +2,6 @@ package com.njcn.energy.pojo.api.fallback;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.exception.BusinessException;
-import com.njcn.common.pojo.response.HttpResult;
-import com.njcn.energy.pojo.api.EleAirStrategyFeignClient;
import com.njcn.energy.pojo.api.EnergyStatisticFeignClient;
import com.njcn.energy.pojo.utils.EnergyEnumUtil;
import feign.hystrix.FallbackFactory;
@@ -34,19 +32,19 @@ public class EnergyStatisticFallbackFactory implements FallbackFactory finalExceptionEnum = exceptionEnum;
return new EnergyStatisticFeignClient() {
@Override
- public HttpResult electricCalJob() {
+ public void electricCalJob() {
log.error("{}异常,降级处理,异常为:{}","调度统计电量增量",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
@Override
- public HttpResult eleOnlineRateJobHandler() {
+ public void eleOnlineRateJobHandler() {
log.error("{}异常,降级处理,异常为:{}","用能终端在线率数据",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
@Override
- public HttpResult eleIntegrityJobHandler() {
+ public void eleIntegrityJobHandler() {
log.error("{}异常,降级处理,异常为:{}","用能数据完整性数据",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
diff --git a/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/constant/SmsConstant.java b/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/constant/SmsConstant.java
new file mode 100644
index 000000000..db1eeafec
--- /dev/null
+++ b/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/constant/SmsConstant.java
@@ -0,0 +1,19 @@
+package com.njcn.energy.pojo.constant;
+
+public interface SmsConstant {
+
+ String DEFAULT_CONNECT_TIME_OUT = "sun.net.client.defaultConnectTimeout";
+ String DEFAULT_READ_TIME_OUT = "sun.net.client.defaultReadTimeout";
+ //短信API产品名称(短信产品名固定,无需修改)
+ String PRODUCT = "Dysmsapi";
+ //短信API产品域名(接口地址固定,无需修改)
+ String DOMAIN = "dysmsapi.aliyuncs.com";
+ //accessKeyId
+ String ACCESS_KEY_ID = "LTAI4FxsR76x2dq3w9c5puUe";
+ //accessKeySecret
+ String ACCESS_KEY_SECRET = "GxkTR8fsrvHtixTlD9UPmOGli35tZs";
+ //短信所属地
+ String LOCATION = "cn-hangzhou";
+ //签名
+ String SGIN = "灿能云";
+}
diff --git a/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/PvPowerStrategy.java b/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/PvPowerStrategy.java
new file mode 100644
index 000000000..2092309b8
--- /dev/null
+++ b/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/PvPowerStrategy.java
@@ -0,0 +1,20 @@
+package com.njcn.energy.pojo.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * @Author: cdf
+ * @CreateTime: 2025-05-12
+ * @Description: 光伏异常短信策略
+ */
+@Data
+@TableName(value = "pv_power_strategy")
+public class PvPowerStrategy {
+
+ private String id;
+
+ private Double alarmVal;
+
+ private String sendPhone;
+}
diff --git a/pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/StatisticDataRunController.java b/pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/StatisticDataRunController.java
index cb2c62088..e3279fb1c 100644
--- a/pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/StatisticDataRunController.java
+++ b/pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/StatisticDataRunController.java
@@ -16,7 +16,6 @@ import org.influxdb.InfluxDB;
import org.influxdb.dto.BatchPoints;
import org.influxdb.dto.Point;
import org.influxdb.dto.QueryResult;
-import org.springframework.scheduling.annotation.Async;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -52,7 +51,6 @@ public class StatisticDataRunController {
* 调度统计电量增量
*/
@GetMapping("electricCalJob")
- @Async("asyncExecutor")
public void electricCalJob() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar startTime = Calendar.getInstance();
diff --git a/pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/SunPowerScheduledController.java b/pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/SunPowerScheduledController.java
new file mode 100644
index 000000000..165e4fdb4
--- /dev/null
+++ b/pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/SunPowerScheduledController.java
@@ -0,0 +1,181 @@
+package com.njcn.energy.controller;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.NumberUtil;
+import cn.hutool.core.util.StrUtil;
+import com.aliyuncs.DefaultAcsClient;
+import com.aliyuncs.IAcsClient;
+import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
+import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
+import com.aliyuncs.http.MethodType;
+import com.aliyuncs.profile.DefaultProfile;
+import com.aliyuncs.profile.IClientProfile;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.njcn.energy.mapper.EleEpdMapper;
+import com.njcn.energy.mapper.EleLoadSetMapper;
+import com.njcn.energy.mapper.PvPowerStrategyMapper;
+import com.njcn.energy.pojo.constant.SmsConstant;
+import com.njcn.energy.pojo.po.EleEpdPqd;
+import com.njcn.energy.pojo.po.PvPowerStrategy;
+import com.njcn.influx.utils.InfluxDbUtils;
+import com.njcn.system.api.DicDataFeignClient;
+import com.njcn.system.enums.DicDataTypeEnum;
+import com.njcn.system.pojo.po.DictData;
+import io.swagger.annotations.Api;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * @Author: cdf
+ * @CreateTime: 2025-05-12
+ * @Description:
+ */
+@EnableScheduling
+@Slf4j
+@RequiredArgsConstructor
+@RestController
+@Api(tags = "光伏异常运行定时任务")
+public class SunPowerScheduledController {
+
+ private final DicDataFeignClient dicDataFeignClient;
+
+ private final EleLoadSetMapper eleLoadSetMapper;
+
+ private final EleEpdMapper eleEpdMapper;
+
+ private final PvPowerStrategyMapper pvPowerStrategyMapper;
+
+ private static final String PARK_POWER_NOTICE = "SMS_485465792";
+
+ private final InfluxDbUtils influxDbUtils;
+
+ @Scheduled(cron = "0 50 8 * * ?")
+ @GetMapping("sunBadSendMessage")
+ public void sunBadSendMessage() {
+ try {
+ DateTime yesterday = DateUtil.yesterday();
+ String begin = DateUtil.format(DateUtil.beginOfDay(yesterday), DatePattern.NORM_DATETIME_PATTERN);
+ String end = DateUtil.format(DateUtil.endOfDay(yesterday), DatePattern.NORM_DATETIME_PATTERN);
+ EleEpdPqd eleEpdPqd = eleEpdMapper.selectById("64592326d968dd07ffc0437befcfa026");
+ if(Objects.isNull(eleEpdPqd)){
+ log.error("获取净有功电能配置失败,任务终止");
+ return;
+ }
+ DictData dictData = dicDataFeignClient.getDicDataByCodeAndType("Photovoltaic", DicDataTypeEnum.ELE_LOAD_TYPE.getCode()).getData();
+ if(Objects.isNull(dictData)){
+ log.error("获取光伏字典失败,任务终止");
+ return;
+ }
+ List lineIdList = eleLoadSetMapper.getAllLineListRelation(dictData.getId());
+ log.info("获取监测点信息{}",lineIdList);
+ if (CollectionUtil.isNotEmpty(lineIdList)) {
+ StringBuilder lineId = new StringBuilder();
+ for (int i = 0; i < lineIdList.size(); i++) {
+ if (i == lineIdList.size() - 1) {
+ lineId.append("'").append(lineIdList.get(i)).append("'");
+ } else {
+ lineId.append("'").append(lineIdList.get(i)).append("'").append(" or LineId=");
+ }
+ }
+ StringBuilder sql = new StringBuilder("select ");
+ sql.append("SUM(").append(eleEpdPqd.getName()).append(") as ").append(eleEpdPqd.getName()).append(" from ").append(eleEpdPqd.getClassId()).append(" where (LineId = ").append(lineId).append(") and Phase= '").append(eleEpdPqd.getPhase())
+ .append("' and time>='").append(begin).append("' and time<= '").append(end).append("' and ").append(eleEpdPqd.getName()).append(" !=-1000000").append(" group by time(15m)");
+ log.info("执行sql-----------{}",sql);
+ List