Browse Source

新建定时任务模块

zhongwei
段飞宇 2 years ago
parent
commit
dae160fd76
  1. 242
      hzims-service/hzims-scheduled/pom.xml
  2. 31
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/ScheduledApplication.java
  3. 59
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/config/XxlJobConfig.java
  4. 12
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/constants/ScheduledConstants.java
  5. 20
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/operation/AbnormalAlarmMapper.java
  6. 17
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/operation/AbnormalAlarmMapper.xml
  7. 21
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/operation/HistoryAbnormalAlarmMapper.java
  8. 10
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/operation/HistoryAbnormalAlarmMapper.xml
  9. 13
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/operation/HzimsAnalyzeModelStationMapper.java
  10. 14
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/operation/StAlarmRecordMapper.java
  11. 19
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/operation/StAlarmRecordMapper.xml
  12. 13
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/operation/StFocusPropertiesMapper.java
  13. 13
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/operation/StationAttrConfigMapper.java
  14. 13
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/operation/StationAttributeMapper.java
  15. 21
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/operation/StationMapper.java
  16. 26
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/operation/StationMapper.xml
  17. 46
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/ScheduledCreateTask.java
  18. 101
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/StAlamRecordTask.java
  19. 19
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/AbnormalAlarmService.java
  20. 16
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/HistoryAbnormalAlarmService.java
  21. 17
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/IHzimsAnalyzeModelStationService.java
  22. 16
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/IMainSystemMonitoringService.java
  23. 13
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/IRealMonitorService.java
  24. 16
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/IStationAttrConfigService.java
  25. 13
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/IStationAttributeService.java
  26. 27
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/IStationService.java
  27. 11
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/IWaterService.java
  28. 14
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/StAlamRecordService.java
  29. 14
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/StFocusPropertiesService.java
  30. 242
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/impl/AbnormalAlarmServiceImpl.java
  31. 41
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/impl/HistoryAbnormalAlarmServiceImpl.java
  32. 17
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/impl/HzimsAnalyzeModelStationServiceImpl.java
  33. 51
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/impl/MainSystemMonitoringServiceImpl.java
  34. 713
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/impl/RealMonitorServiceImpl.java
  35. 42
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/impl/StAlamRecordServiceImpl.java
  36. 164
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/impl/StFocusPropertiesServiceImpl.java
  37. 42
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/impl/StationAttrConfigServiceImpl.java
  38. 22
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/impl/StationAttributeServiceImpl.java
  39. 60
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/impl/StationServiceImpl.java
  40. 201
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/impl/WaterServiceImpl.java
  41. 52
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/vo/RealAttributeVo.java
  42. 33
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/vo/RealDeviceVo.java
  43. 54
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/vo/RealStationVo.java
  44. 17
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/vo/StationRealVo.java
  45. 30
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/vo/WeatherVo.java
  46. 193
      hzims-service/hzims-scheduled/src/main/resources/application.yml
  47. 17
      hzims-service/hzims-scheduled/src/test/java/com/hnac/hzims/scheduled/ScheduledApplicationTest.java
  48. 1
      hzims-service/pom.xml

242
hzims-service/hzims-scheduled/pom.xml

@ -0,0 +1,242 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.hnac.hzims</groupId>
<artifactId>hzims-service</artifactId>
<version>4.0.0-SNAPSHOT</version>
</parent>
<artifactId>hzims-scheduled</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.3</version>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-core-boot</artifactId>
<exclusions>
<exclusion>
<groupId>org.springblade</groupId>
<artifactId>blade-core-cloud</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-core-cloud</artifactId>
<exclusions>
<exclusion>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-common</artifactId>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-starter-swagger</artifactId>
</dependency>
<dependency>
<groupId>com.hnac.hzims</groupId>
<artifactId>hzims-operational-api</artifactId>
</dependency>
<dependency>
<groupId>com.hnac.hzinfo</groupId>
<artifactId>inspect-api</artifactId>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-core-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-core-auto</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-dict-api</artifactId>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-flow-api</artifactId>
</dependency>
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
</dependency>
<!-- 月报统计图表导出-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>ooxml-schemas</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.jfree</groupId>
<artifactId>jcommon</artifactId>
<version>1.0.24</version>
</dependency>
<dependency>
<groupId>org.jfree</groupId>
<artifactId>jfreechart</artifactId>
<version>1.5.0</version>
</dependency>
<dependency>
<groupId>com.hikvision.ga</groupId>
<artifactId>artemis-http-client</artifactId>
</dependency>
<!-- ApacheHttp请求工具 Start -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<!-- ApacheHttp请求工具 End -->
<!-- freemark,用于导出word Start-->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
</dependency>
<!-- freemark,用于导出word End-->
<dependency>
<groupId>com.hnac.hzims</groupId>
<artifactId>equipment-api</artifactId>
</dependency>
<dependency>
<groupId>com.hnac.hzims</groupId>
<artifactId>message-api</artifactId>
</dependency>
<dependency>
<groupId>com.hnac.hzims</groupId>
<artifactId>ticket-api</artifactId>
</dependency>
<dependency>
<groupId>com.hnac.hzims</groupId>
<artifactId>assets-api</artifactId>
</dependency>
<!-- -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
</dependency>
<!--${bladex.project.version}-->
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-user-api</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
</dependency>
<!-- spring-boot-websocket start -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-http -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-http</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-core -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
</dependency>
<!--WebSocket核心依赖包-->
<dependency>
<groupId>org.java-websocket</groupId>
<artifactId>Java-WebSocket</artifactId>
</dependency>
<!-- spring-boot-websocket end -->
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-resource-api</artifactId>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
</dependency>
<dependency>
<groupId>com.hnac.hzims</groupId>
<artifactId>weather-api</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-core-tool</artifactId>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-system-api</artifactId>
</dependency>
<dependency>
<groupId>com.hnac.hzinfo.data</groupId>
<artifactId>hzinfo-data-sdk</artifactId>
</dependency>
</dependencies>
<build>
<finalName>${project.name}-${project.version}</finalName>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<configuration>
<username>${docker.username}</username>
<password>${docker.password}</password>
<repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
<tag>${project.version}</tag>
<useMavenSettingsForAuth>true</useMavenSettingsForAuth>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
<skip>false</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>

31
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/ScheduledApplication.java

@ -0,0 +1,31 @@
package com.hnac.hzims.scheduled;
import org.mybatis.spring.annotation.MapperScan;
import org.springblade.core.cloud.feign.EnableBladeFeign;
import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.context.annotation.ComponentScan;
import javax.annotation.Resource;
/**
* @Author dfy
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 9:05
*/
@EnableBladeFeign
@SpringCloudApplication
@MapperScan("com.hnac.hzims.scheduled.**.mapper.**")
@ComponentScan(basePackages = {"com.hnac.*","org.springblade.core.*"})
@Resource
public class ScheduledApplication {
public static void main(String[] args) {
// BladeApplication.run(ScheduledConstants.APP_NAME, ScheduledApplication.class, args);
SpringApplication springApplication = new SpringApplication(ScheduledApplication.class);
springApplication.setBannerMode(Banner.Mode.OFF);
springApplication.run(args);
}
}

59
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/config/XxlJobConfig.java

@ -0,0 +1,59 @@
package com.hnac.hzims.scheduled.config;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2022/1/8 10:23
*/
@Slf4j
@Configuration
//指定任务Handler所在包路径
public class XxlJobConfig {
@Value("${xxl.job.admin.addresses}")
private String adminAddresses;
@Value("${xxl.job.executor.appname}")
private String appName;
@Value("${xxl.job.executor.ip}")
private String ip;
@Value("${xxl.job.executor.port}")
private int port;
@Value("${xxl.job.accessToken}")
private String accessToken;
@Value("${xxl.job.executor.logpath}")
private String logPath;
@Value("${xxl.job.executor.logretentiondays}")
private int logRetentionDays;
@Bean(initMethod = "start", destroyMethod = "destroy")
public XxlJobSpringExecutor xxlJobExecutor() {
log.info("====xxl-job config init====");
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppName(appName);
xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(port);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobSpringExecutor;
}
}

12
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/constants/ScheduledConstants.java

@ -0,0 +1,12 @@
package com.hnac.hzims.scheduled.constants;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 9:06
*/
public class ScheduledConstants {
public final static String APP_NAME = "hzims-scheduled";
}

20
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/operation/AbnormalAlarmMapper.java

@ -0,0 +1,20 @@
package com.hnac.hzims.scheduled.mapper.operation;
import com.hnac.hzims.operational.alert.entity.AbnormalAlarmEntity;
import org.apache.ibatis.annotations.Param;
import org.springblade.core.datascope.mapper.UserDataScopeBaseMapper;
import java.util.List;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 10:30
*/
public interface AbnormalAlarmMapper extends UserDataScopeBaseMapper<AbnormalAlarmEntity>{
AbnormalAlarmEntity getAbnormalAlarm(@Param("stationId") String stationId, @Param("type") String type);
List<String> getAbnormalAlarmList();
}

17
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/operation/AbnormalAlarmMapper.xml

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hnac.hzims.scheduled.mapper.operation.AbnormalAlarmMapper">
<select id="getAbnormalAlarm" resultType="com.hnac.hzims.operational.alert.entity.AbnormalAlarmEntity">
select * from hzims_abnormal_alarm
where station_id = #{stationId}
and type = #{type}
and is_deleted = 0
</select>
<select id="getAbnormalAlarmList" resultType="java.lang.String">
select distinct station_id from hzims_abnormal_alarm
where is_deleted = 0
and type in (13,14)
and `STATUS` = 0
</select>
</mapper>

21
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/operation/HistoryAbnormalAlarmMapper.java

@ -0,0 +1,21 @@
package com.hnac.hzims.scheduled.mapper.operation;
import com.hnac.hzims.operational.alert.entity.HistoryAbnormalAlarmEntity;
import org.apache.ibatis.annotations.Param;
import org.springblade.core.datascope.mapper.UserDataScopeBaseMapper;
import java.util.List;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 11:12
*/
public interface HistoryAbnormalAlarmMapper extends UserDataScopeBaseMapper<HistoryAbnormalAlarmEntity> {
List<HistoryAbnormalAlarmEntity> getHistoryAbnormalAlarm(@Param("stationId") String stationId, @Param("type") String type);
}

10
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/operation/HistoryAbnormalAlarmMapper.xml

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hnac.hzims.scheduled.mapper.operation.HistoryAbnormalAlarmMapper">
<select id="getHistoryAbnormalAlarm" resultType="com.hnac.hzims.operational.alert.entity.HistoryAbnormalAlarmEntity">
select * from hzims_history_abnormal_alarm
where station_id = #{stationId}
and type = #{type}
and status = 0
</select>
</mapper>

13
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/operation/HzimsAnalyzeModelStationMapper.java

@ -0,0 +1,13 @@
package com.hnac.hzims.scheduled.mapper.operation;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hnac.hzims.operational.station.entity.HzimsAnalyzeModelStationEntity;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/22 11:43
*/
public interface HzimsAnalyzeModelStationMapper extends BaseMapper<HzimsAnalyzeModelStationEntity> {
}

14
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/operation/StAlarmRecordMapper.java

@ -0,0 +1,14 @@
package com.hnac.hzims.scheduled.mapper.operation;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hnac.hzims.operational.config.entity.StAlarmRecordEntity;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 15:47
*/
public interface StAlarmRecordMapper extends BaseMapper<StAlarmRecordEntity> {
Long insertReturnId(StAlarmRecordEntity record);
}

19
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/operation/StAlarmRecordMapper.xml

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hnac.hzims.scheduled.mapper.operation.StAlarmRecordMapper">
<insert id="insertReturnId" parameterType="com.hnac.hzims.operational.config.entity.StAlarmRecordEntity">
<selectKey resultType="java.lang.Long" order="AFTER" keyProperty="id">
SELECT LAST_INSERT_ID() AS id
</selectKey>
insert into hy_st_alarm_record (id, station_id, real_id,
status, phone_record, process_desc,
create_time, processor, process_time
)
values (#{id,jdbcType=BIGINT}, #{stationId,jdbcType=VARCHAR}, #{realId,jdbcType=VARCHAR},
#{status,jdbcType=TINYINT}, #{phoneRecord,jdbcType=VARCHAR}, #{processDesc,jdbcType=VARCHAR},
#{createTime,jdbcType=TIMESTAMP}, #{processor,jdbcType=VARCHAR}, #{processTime,jdbcType=TIMESTAMP}
)
</insert>
</mapper>

13
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/operation/StFocusPropertiesMapper.java

@ -0,0 +1,13 @@
package com.hnac.hzims.scheduled.mapper.operation;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hnac.hzims.operational.config.entity.StFocusPropertiesEntity;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 11:28
*/
public interface StFocusPropertiesMapper extends BaseMapper<StFocusPropertiesEntity> {
}

13
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/operation/StationAttrConfigMapper.java

@ -0,0 +1,13 @@
package com.hnac.hzims.scheduled.mapper.operation;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hnac.hzims.operational.station.entity.StationAttrConfigEntity;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 16:09
*/
public interface StationAttrConfigMapper extends BaseMapper<StationAttrConfigEntity> {
}

13
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/operation/StationAttributeMapper.java

@ -0,0 +1,13 @@
package com.hnac.hzims.scheduled.mapper.operation;
import com.hnac.hzims.operational.station.entity.StationAttributeEntity;
import org.springblade.core.datascope.mapper.UserDataScopeBaseMapper;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 11:39
*/
public interface StationAttributeMapper extends UserDataScopeBaseMapper<StationAttributeEntity> {
}

21
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/operation/StationMapper.java

@ -0,0 +1,21 @@
package com.hnac.hzims.scheduled.mapper.operation;
import com.hnac.hzims.operational.station.entity.StationEntity;
import org.springblade.core.datascope.mapper.UserDataScopeBaseMapper;
import java.util.List;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 10:36
*/
public interface StationMapper extends UserDataScopeBaseMapper<StationEntity> {
List<StationEntity> selectStationByType(Integer stationType, Integer serveType);
List<StationEntity> selectAll();
List<StationEntity> selectStationByInCode(List<String> codes);
}

26
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/mapper/operation/StationMapper.xml

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hnac.hzims.scheduled.mapper.operation.StationMapper">
<select id="selectStationByType" resultType="com.hnac.hzims.operational.station.entity.StationEntity">
select * from hzims_station where IS_DELETED = 0 and REF_DEPT IS NOT NULL and `TYPE` IS NOT NULL
<if test="serveType != null">
AND SERVE_TYPE = #{serveType}
</if>
<if test="stationType != null">
AND `TYPE` = #{stationType}
</if>
</select>
<select id="selectAll" resultType="com.hnac.hzims.operational.station.entity.StationEntity">
select * from hzims_station where IS_DELETED = 0 and REF_DEPT IS NOT NULL AND REF_DOMAIN IS NOT NULL AND `TYPE` IS NOT NULL
</select>
<select id="selectStationByInCode" resultType="com.hnac.hzims.operational.station.entity.StationEntity">
SELECT * FROM hzims_station WHERE IS_DELETED = 0 and `CODE` IN
<foreach collection="list" item="item" index="index" open="(" close=")" separator=",">
#{item}
</foreach>
</select>
</mapper>

46
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/ScheduledCreateTask.java

@ -0,0 +1,46 @@
package com.hnac.hzims.scheduled.scheduled;
import com.hnac.hzims.scheduled.service.IWaterService;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Date;
import static com.hnac.hzims.operational.main.constant.MainConstants.LOAD_WATER_LEVEL;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/22 11:21
*/
@Slf4j
@Component
public class ScheduledCreateTask {
@Autowired
private IWaterService waterService;
/**
* 水利-站点水位数据
* @return ReturnT<String>
*/
@XxlJob(LOAD_WATER_LEVEL)
//@Scheduled(cron = "0/40 * * * * ? ")
public ReturnT<String> loadWaterLevel(String param) throws Exception {
if (Func.isBlank(param)) {
param = DateUtil.format(new Date(), "yyyy-MM");
}
waterService.loadWaterLevel(param);
return new ReturnT<>("SUCCESS");
}
}

101
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/StAlamRecordTask.java

@ -0,0 +1,101 @@
package com.hnac.hzims.scheduled.scheduled;
import com.hnac.hzims.scheduled.service.AbnormalAlarmService;
import com.hnac.hzims.scheduled.service.IRealMonitorService;
import com.hnac.hzims.scheduled.service.StFocusPropertiesService;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Date;
import static com.hnac.hzims.operational.main.constant.MainConstants.*;
/**
* 集中监控
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 10:17
*/
@Slf4j
@Component
public class StAlamRecordTask {
@Value("${hzims.operation.comprehensiveD}")
public String path;
// @Autowired
private IRealMonitorService monitorService;
@Autowired
private AbnormalAlarmService abnormalAlarmService;
@Autowired
private StFocusPropertiesService stFocusPropertiesService;
/**
* 数据中断告警
* @return ReturnT<String>
*/
@XxlJob(ALARM_DATA_HANDLE)
public ReturnT<String> alarmDataHandle(String param) throws Exception {
if (Func.isBlank(param)) {
param = DateUtil.format(new Date(), "yyyy-MM");
}
abnormalAlarmService.alarmDataHandle(param);
return new ReturnT<>("SUCCESS");
}
/**
* realId获取
* @return ReturnT<String>
*/
@XxlJob(REAL_ID_DATA)
public ReturnT<String> realIdData(String param) throws Exception {
if (Func.isBlank(param)) {
param = DateUtil.format(new Date(), "yyyy-MM");
}
stFocusPropertiesService.getStationRealIds(param);
return new ReturnT<>("SUCCESS");
}
/**
* 站点实时数据
* @return ReturnT<String>
*/
@XxlJob(REAL_TIME_DATA)
//@Scheduled(cron = "0/40 * * * * ? ")
public ReturnT<String> realTimeData(String param) throws Exception {
if (Func.isBlank(param)) {
param = DateUtil.format(new Date(), "yyyy-MM");
}
monitorService.realTimeData(param);
return new ReturnT<>("SUCCESS");
}
/**
* 集中监控数据处理
* @return ReturnT<String>
*/
@XxlJob(CENTRALIZED_MONITORING)
//@Scheduled(cron = "0/40 * * * * ? ")
public ReturnT<String> centralizedMonitoring(String param) throws Exception {
if (Func.isBlank(param)) {
param = DateUtil.format(new Date(), "yyyy-MM");
}
monitorService.centralizedMonitoring(param);
return new ReturnT<>("SUCCESS");
}
}

19
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/AbnormalAlarmService.java

@ -0,0 +1,19 @@
package com.hnac.hzims.scheduled.service;
import com.hnac.hzims.operational.alert.entity.AbnormalAlarmEntity;
import org.springblade.core.mp.base.BaseService;
import java.util.List;
/**
* 告警处理接口
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 10:20
*/
public interface AbnormalAlarmService extends BaseService<AbnormalAlarmEntity> {
void alarmDataHandle(String param);
List<String> getAbnormalAlarmList();
}

16
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/HistoryAbnormalAlarmService.java

@ -0,0 +1,16 @@
package com.hnac.hzims.scheduled.service;
import com.hnac.hzims.operational.alert.entity.HistoryAbnormalAlarmEntity;
import org.springblade.core.mp.base.BaseService;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 11:09
*/
public interface HistoryAbnormalAlarmService extends BaseService<HistoryAbnormalAlarmEntity> {
HistoryAbnormalAlarmEntity getAbnormalAlarm(String station, String soeType);
}

17
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/IHzimsAnalyzeModelStationService.java

@ -0,0 +1,17 @@
package com.hnac.hzims.scheduled.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.hnac.hzims.operational.station.entity.HzimsAnalyzeModelStationEntity;
import org.springblade.core.mp.base.BaseService;
import java.util.List;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/22 11:31
*/
public interface IHzimsAnalyzeModelStationService extends BaseService<HzimsAnalyzeModelStationEntity> {
}

16
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/IMainSystemMonitoringService.java

@ -0,0 +1,16 @@
package com.hnac.hzims.scheduled.service;
import com.hnac.hzims.equipment.vo.EminfoAndEmParamVo;
import java.util.List;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 14:00
*/
public interface IMainSystemMonitoringService {
List<EminfoAndEmParamVo> getEmInfoList();
}

13
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/IRealMonitorService.java

@ -0,0 +1,13 @@
package com.hnac.hzims.scheduled.service;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 10:20
*/
public interface IRealMonitorService {
void realTimeData(String param);
void centralizedMonitoring(String param);
}

16
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/IStationAttrConfigService.java

@ -0,0 +1,16 @@
package com.hnac.hzims.scheduled.service;
import com.hnac.hzims.operational.station.entity.StationAttrConfigEntity;
import org.springblade.core.mp.base.BaseService;
import java.util.List;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 16:06
*/
public interface IStationAttrConfigService extends BaseService<StationAttrConfigEntity> {
List<String> getHideList();
}

13
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/IStationAttributeService.java

@ -0,0 +1,13 @@
package com.hnac.hzims.scheduled.service;
import com.hnac.hzims.operational.station.entity.StationAttributeEntity;
import org.springblade.core.mp.base.BaseService;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 11:34
*/
public interface IStationAttributeService extends BaseService<StationAttributeEntity> {
}

27
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/IStationService.java

@ -0,0 +1,27 @@
package com.hnac.hzims.scheduled.service;
import com.hnac.hzims.operational.station.entity.StationEntity;
import org.springblade.core.mp.base.BaseService;
import java.util.ArrayList;
import java.util.List;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 10:33
*/
public interface IStationService extends BaseService<StationEntity> {
List<StationEntity> getStationByType(Integer stationType, Integer serveType);
List<StationEntity> getAll();
List<StationEntity> getStationByInCode(List<String> strings);
List<StationEntity> getStationType(Integer serveType,List<Integer> typeList,List<Long> departIdList);
}

11
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/IWaterService.java

@ -0,0 +1,11 @@
package com.hnac.hzims.scheduled.service;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/22 11:22
*/
public interface IWaterService {
void loadWaterLevel(String param);
}

14
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/StAlamRecordService.java

@ -0,0 +1,14 @@
package com.hnac.hzims.scheduled.service;
import com.hnac.hzims.operational.config.entity.StAlarmRecordEntity;
import org.springblade.core.mp.base.BaseService;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 15:41
*/
public interface StAlamRecordService extends BaseService<StAlarmRecordEntity> {
Long insertAlert(String stationId, String monitorId);
}

14
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/StFocusPropertiesService.java

@ -0,0 +1,14 @@
package com.hnac.hzims.scheduled.service;
import com.hnac.hzims.operational.config.entity.StFocusPropertiesEntity;
import org.springblade.core.mp.base.BaseService;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 10:21
*/
public interface StFocusPropertiesService extends BaseService<StFocusPropertiesEntity> {
void getStationRealIds(String param);
}

242
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/impl/AbnormalAlarmServiceImpl.java

@ -0,0 +1,242 @@
package com.hnac.hzims.scheduled.service.impl;
import com.hnac.hzims.message.MessageConstants;
import com.hnac.hzims.message.dto.MessagePushRecordDto;
import com.hnac.hzims.message.fegin.IMessageClient;
import com.hnac.hzims.operational.alert.constants.AbnormalAlarmConstant;
import com.hnac.hzims.operational.alert.entity.AbnormalAlarmEntity;
import com.hnac.hzims.operational.alert.entity.HistoryAbnormalAlarmEntity;
import com.hnac.hzims.operational.main.constant.HomePageConstant;
import com.hnac.hzims.operational.station.entity.StationEntity;
import com.hnac.hzims.scheduled.mapper.operation.AbnormalAlarmMapper;
import com.hnac.hzims.scheduled.service.AbnormalAlarmService;
import com.hnac.hzims.scheduled.service.HistoryAbnormalAlarmService;
import com.hnac.hzims.scheduled.service.IStationService;
import com.hnac.hzinfo.datasearch.soe.ISoeClient;
import com.hnac.hzinfo.datasearch.soe.domian.SoeData;
import com.hnac.hzinfo.datasearch.soe.domian.SoeQueryConditionByStation;
import com.hnac.hzinfo.sdk.core.response.HzPage;
import com.hnac.hzinfo.sdk.core.response.Result;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.CollectionUtil;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.ObjectUtil;
import org.springblade.core.tool.utils.StringUtil;
import org.springblade.system.feign.ISysClient;
import org.springblade.system.user.entity.User;
import org.springblade.system.user.feign.IUserClient;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 10:29
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class AbnormalAlarmServiceImpl extends BaseServiceImpl<AbnormalAlarmMapper, AbnormalAlarmEntity> implements AbnormalAlarmService {
private final IStationService stationService;
private final HistoryAbnormalAlarmService historyAbnormalAlarmService;
private final ISysClient sysClient;
private final ISoeClient soeClient;
private final IUserClient userClient;
private final IMessageClient messageClient;
/**
* 数据中断数据异常告警
* @param param
*/
@Override
public void alarmDataHandle(String param) {
// 查询代运维站点
List<StationEntity> stations = stationService.getStationByType(null, HomePageConstant.HYDROPOWER_SERVETYPE);
if(CollectionUtil.isEmpty(stations)){
return;
}
SoeQueryConditionByStation query = new SoeQueryConditionByStation();
query.setTypes(AbnormalAlarmConstant.SEND_MESSSAGE_TYPE_LIST);
query.setStationIds(stations.stream().map(StationEntity::getCode).collect(Collectors.toList()));
Calendar calendar = Calendar.getInstance();
query.setEndTime(LocalDateTime.parse(DateUtil.format(calendar.getTime(), DateUtil.PATTERN_DATETIME),DateUtil.DATETIME_FORMATTER));
calendar.add(Calendar.MINUTE,-2);
query.setBeginTime(LocalDateTime.parse(DateUtil.format(calendar.getTime() , DateUtil.PATTERN_DATETIME),DateUtil.DATETIME_FORMATTER));
query.setNeedPage(false);
log.error("alarm_data_handle_param : {}",query);
Result<HzPage<SoeData>> result = soeClient.getByStationsAndTime(query);
// 未查询到告警信息
if(!result.isSuccess() || ObjectUtil.isEmpty(result.getData().getRecords())){
return;
}
log.error("alarm_data_handle_begin_result : {}",result.getData().getRecords());
// 遍历告警信息
List<SoeData> list = new ArrayList<>(result.getData().getRecords().stream().sorted(Comparator.comparing(SoeData::getTs).reversed())
.collect(Collectors.toMap(o -> o.getStation() + o.getSoeType(), Function.identity(), (o1, o2) -> o1)).values());
log.error("alarm_data_handle_end_result : {}",list);
list.forEach(item -> {
AbnormalAlarmEntity queryEntity = this.baseMapper.getAbnormalAlarm(item.getStation(),item.getSoeType());
boolean flag = AbnormalAlarmConstant.ABNORMAL_STATUS.equals(item.getSoeAlarmType());
String stationName = Optional.ofNullable(stations.stream().filter(o-> o.getCode().equals(item.getStation())).collect(Collectors.toList())).map(o->o.get(0).getName()).orElse(null);
if(ObjectUtil.isEmpty(queryEntity)){
AbnormalAlarmEntity entity = new AbnormalAlarmEntity();
entity.setStationId(item.getStation());
entity.setStationName(stationName);
entity.setRealId(item.getRealId());
entity.setSoeExplain(item.getSoeExplain());
entity.setType(item.getSoeType());
entity.setStartTime(item.getTs());
entity.setEndTime(null);
entity.setStatus(0);
if(flag){
entity.setStartTime(null);
entity.setEndTime(item.getTs());
entity.setStatus(1);
}
// 保存告警信息
this.save(entity);
return;
}
queryEntity.setSoeExplain(item.getSoeExplain());
queryEntity.setStationName(stationName);
queryEntity.setType(item.getSoeType());
queryEntity.setStartTime(queryEntity.getStartTime());
queryEntity.setUpdateTime(new Date());
queryEntity.setEndTime(null);
queryEntity.setStatus(0);
if(flag){
queryEntity.setEndTime(item.getTs());
queryEntity.setStatus(1);
}
this.updateById(queryEntity);
});
// 异步保存历史告警
CompletableFuture.supplyAsync(()-> this.saveHistoryAlarm(result.getData().getRecords(),stations));
}
/**
* 保存告警历史信息
* @param list
* @return
*/
private String saveHistoryAlarm(List<SoeData> list,List<StationEntity> stations) {
list.forEach(item -> {
Date ts = DateUtil.parse(DateUtil.format(item.getTs(),DateUtil.PATTERN_DATETIME),DateUtil.DATETIME_FORMAT);
// 历史数据异常查询
HistoryAbnormalAlarmEntity queryEntity = this.historyAbnormalAlarmService.getAbnormalAlarm(item.getStation(),item.getSoeType());
// 数据中断恢复
boolean flag = AbnormalAlarmConstant.ABNORMAL_STATUS.equals(item.getSoeAlarmType());
String stationName = Optional.ofNullable(stations.stream().filter(o-> o.getCode().equals(item.getStation())).collect(Collectors.toList())).map(o->o.get(0).getName()).orElse(null);
if(ObjectUtil.isEmpty(queryEntity) || !flag){
HistoryAbnormalAlarmEntity entity = new HistoryAbnormalAlarmEntity();
entity.setAlarmId(item.getId());
entity.setStationId(item.getStation());
entity.setStationName(stationName);
entity.setRealId(item.getRealId());
entity.setSoeExplain(item.getSoeExplain());
entity.setType(item.getSoeType());
entity.setStartTime(ts);
entity.setStatus(0);
this.historyAbnormalAlarmService.save(entity);
// 消息推送
this.sendAlarmMessage(Collections.singletonList(entity),stations);
return;
}
queryEntity.setSoeExplain(item.getSoeExplain());
queryEntity.setUpdateTime(new Date());
queryEntity.setEndTime(ts);
queryEntity.setStatus(1);
this.historyAbnormalAlarmService.updateById(queryEntity);
});
return "success";
}
/**
* 告警消息推送
* @param entitys
*/
private void sendAlarmMessage(List<HistoryAbnormalAlarmEntity> entitys,List<StationEntity> stations) {
if(CollectionUtil.isEmpty(entitys)){
return;
}
// 告警等级 :事故、数据中断
List<HistoryAbnormalAlarmEntity> alarms = entitys.stream().filter(entity -> AbnormalAlarmConstant.SEND_MESSSAGE_TYPE_LIST.contains(entity.getType())).collect(Collectors.toList());
if(CollectionUtil.isEmpty(alarms)){
return;
}
// 查询站点用户
entitys.forEach(entity->{
if(StringUtil.isEmpty(entity.getStationId())){
return;
}
List<Long> depts = stations.stream().filter(station -> station.getCode().equals(entity.getStationId())).map(StationEntity::getRefDept).collect(Collectors.toList());
if(CollectionUtil.isEmpty(depts)){
return;
}
// 获取站点用户
R<List<User>> result = userClient.userListByDeptId(depts.get(0));
if(!result.isSuccess() || CollectionUtil.isEmpty(result.getData())){
return;
}
MessagePushRecordDto message = new MessagePushRecordDto();
message.setBusinessClassify("warning");
message.setBusinessKey(MessageConstants.BusinessClassifyEnum.WARNING.getKey());
message.setSubject(MessageConstants.BusinessClassifyEnum.WARNING.getDescription());
message.setTaskId(entity.getId());
message.setTenantId("200000");
message.setContent(entity.getSoeExplain());
message.setTypes(Arrays.asList(MessageConstants.APP_PUSH, MessageConstants.WS_PUSH));
message.setPushType(MessageConstants.IMMEDIATELY);
message.setDeptId(depts.get(0));
R<String> deptName = sysClient.getDeptName(depts.get(0));
if (deptName.isSuccess()) {
message.setDeptName(deptName.getData());
}
User admin = userClient.userByAccount("200000", "admin").getData();
message.setCreateDept(admin.getCreateDept());
message.setCreateUser(admin.getCreateUser());
result.getData().forEach(user->{
message.setPusher(String.valueOf(user.getId()));
message.setPusherName(user.getName());
message.setAccount(String.valueOf(user.getId()));
messageClient.sendMessage(message);
});
});
}
/**
* 查询实时告警数据
* @return
*/
@Override
public List<String> getAbnormalAlarmList() {
List<String> alarmList = this.baseMapper.getAbnormalAlarmList();
if(CollectionUtil.isEmpty(alarmList)){
return new ArrayList<>();
}
return alarmList;
}
}

41
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/impl/HistoryAbnormalAlarmServiceImpl.java

@ -0,0 +1,41 @@
package com.hnac.hzims.scheduled.service.impl;
import com.hnac.hzims.operational.alert.entity.HistoryAbnormalAlarmEntity;
import com.hnac.hzims.scheduled.mapper.operation.HistoryAbnormalAlarmMapper;
import com.hnac.hzims.scheduled.service.HistoryAbnormalAlarmService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.tool.utils.CollectionUtil;
import org.springframework.stereotype.Service;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 11:12
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class HistoryAbnormalAlarmServiceImpl extends BaseServiceImpl<HistoryAbnormalAlarmMapper, HistoryAbnormalAlarmEntity> implements HistoryAbnormalAlarmService {
/**
* 查询单条历史告警
*
* @param station
* @param soeType
* @return
*/
@Override
public HistoryAbnormalAlarmEntity getAbnormalAlarm(String station, String soeType) {
List<HistoryAbnormalAlarmEntity> alarms = this.baseMapper.getHistoryAbnormalAlarm(station, soeType);
if(CollectionUtil.isEmpty(alarms)){
return null;
}
return alarms.stream().sorted(Comparator.comparing(HistoryAbnormalAlarmEntity::getStartTime)).collect(Collectors.toList()).get(0);
}
}

17
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/impl/HzimsAnalyzeModelStationServiceImpl.java

@ -0,0 +1,17 @@
package com.hnac.hzims.scheduled.service.impl;
import com.hnac.hzims.operational.station.entity.HzimsAnalyzeModelStationEntity;
import com.hnac.hzims.scheduled.mapper.operation.HzimsAnalyzeModelStationMapper;
import com.hnac.hzims.scheduled.service.IHzimsAnalyzeModelStationService;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springframework.stereotype.Service;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/22 11:42
*/
@Service
public class HzimsAnalyzeModelStationServiceImpl extends BaseServiceImpl<HzimsAnalyzeModelStationMapper, HzimsAnalyzeModelStationEntity> implements IHzimsAnalyzeModelStationService {
}

51
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/impl/MainSystemMonitoringServiceImpl.java

@ -0,0 +1,51 @@
package com.hnac.hzims.scheduled.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.hnac.hzims.equipment.vo.EminfoAndEmParamVo;
import com.hnac.hzims.scheduled.service.IMainSystemMonitoringService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.tool.utils.ObjectUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 14:01
*/
@Service
@Slf4j
@RequiredArgsConstructor
public class MainSystemMonitoringServiceImpl implements IMainSystemMonitoringService {
private final RedisTemplate redisTemplate;
@Value("${hzims.equipment.emInfo.emInfoList}")
public String emInfoListPath;
/**
* 从Redis获取设备信息
*
* @return
*/
@Override
public List<EminfoAndEmParamVo> getEmInfoList() {
List<EminfoAndEmParamVo> list = new ArrayList<>();
Object json = redisTemplate.opsForValue().get(emInfoListPath);
if (ObjectUtil.isNotEmpty(json)) {
list = JSONObject.parseObject(json.toString(), new TypeReference<List<EminfoAndEmParamVo>>() {
});
}
return list;
}
}

713
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/impl/RealMonitorServiceImpl.java

@ -0,0 +1,713 @@
package com.hnac.hzims.scheduled.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.hnac.hzims.equipment.vo.EminfoAndEmParamVo;
import com.hnac.hzims.fdp.vo.FdpFaultStatusVo;
import com.hnac.hzims.operational.config.entity.StAlarmRecordEntity;
import com.hnac.hzims.operational.config.enume.ConfigStatus;
import com.hnac.hzims.operational.main.constant.HomePageConstant;
import com.hnac.hzims.operational.station.entity.StationAttributeEntity;
import com.hnac.hzims.operational.station.entity.StationEntity;
import com.hnac.hzims.scheduled.service.*;
import com.hnac.hzims.scheduled.vo.RealAttributeVo;
import com.hnac.hzims.scheduled.vo.RealDeviceVo;
import com.hnac.hzims.scheduled.vo.RealStationVo;
import com.hnac.hzims.scheduled.vo.StationRealVo;
import com.hnac.hzinfo.sdk.v5.redis.RedisClient;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.MapUtils;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.CollectionUtil;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.ObjectUtil;
import org.springblade.core.tool.utils.StringUtil;
import org.springblade.system.entity.Dept;
import org.springblade.system.feign.ISysClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import javax.validation.constraints.NotNull;
import java.util.*;
import java.util.concurrent.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 13:54
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class RealMonitorServiceImpl implements IRealMonitorService {
@NotNull
private final IStationAttributeService attbtService;
private final AbnormalAlarmService abnormalAlarmService;
private final StAlamRecordService alertService;
@NotNull
private final IStationService stationService;
@NotNull
private final IMainSystemMonitoringService maintenanceTaskService;
@NotNull
private final RedisTemplate redisTemplate;
private final IMainSystemMonitoringService systemMonitoringService;
private final RedisClient redisClient;
@NotNull
private final ISysClient sysClient;
private final IStationAttrConfigService stationAttrConfigService;
@Value("${hzims.operation.monitor.realId}")
public String moniter_realId_key;
@Value("${hzims.operation.monitor.station}")
public String moniter_station_key;
@Value("${hzims.equipment.fdp.redisData}")
public String fdp_fault_data_key;
@Value("${hzims.operation.homePage.activePowerKey}")
public String active_power_key;
@Value("${hzims.equipment.fdp.greaterThan}")
public Double greater_than;
@Value("${hzims.equipment.fdp.lessThan}")
public Double less_than;
@Value("${hzims.equipment.fdp.beEqualOrGreaterThan}")
public Double be_equal_or_greater_than;
@Value("${hzims.operation.region.deviceClassifyKey}")
private String device_classify_key;
@Value("${hzims.operation.realIdKeyGather}")
public String real_id_key_gather_path;
@Value("${hzims.operation.realIdKey}")
public String real_id_key_path;
@Value("${hzims.operation.homePage.jointRelayKey}")
public String joint_relay_key;
/**
* 10站点为一组数据
*/
private static final Integer MAX_SEND = 5;
private final static String loadwater_level_key = "hzims:operation:loadwater:level:key";
@Override
public void realTimeData(String param) {
Long beginTime = System.currentTimeMillis();
// 获取设备
List<EminfoAndEmParamVo> devices = systemMonitoringService.getEmInfoList();
// 设备开关机集合监测点
List<String> switchOnOff = devices.stream().map(o->{
Map<String,String> points = o.getPoint();
if(CollectionUtil.isEmpty(points)){
return "";
}
String jointRelay = points.get(HomePageConstant.JOINT_RELAY);
if(!StringUtil.isEmpty(jointRelay)){
return jointRelay;
}
String onOff = points.get(HomePageConstant.SWITCH_ON_OFF);
if(!StringUtil.isEmpty(onOff)){
return onOff;
}
return "";
}).collect(Collectors.toList());
// 获取站点缓存数据
List<StationRealVo> stationRealVos = (List<StationRealVo>) redisTemplate.opsForValue().get(moniter_realId_key);
if(CollectionUtil.isEmpty(stationRealVos)){
return;
}
// 数据切割
int limit = countStep(stationRealVos.size());
List<List<StationRealVo>> list = Stream.iterate(0, n -> n + 1).limit(limit).parallel().map(a -> stationRealVos.stream().skip((long) a * MAX_SEND).limit(MAX_SEND).parallel().collect(Collectors.toList())).collect(Collectors.toList());
ExecutorService pool = Executors.newFixedThreadPool(limit);
// <real,value>
Map<String,String> valueMap = new ConcurrentHashMap<>();
// <real,<attribute,value>>
Map<String,Map<String,String>> keyMap = new ConcurrentHashMap<>();
CountDownLatch countDownLatch = new CountDownLatch(limit);
pool.execute(()-> list.forEach(stations -> {
stations.forEach(stationReal -> {
String[] realIdArr = stationReal.getRealId();
List<String> realIds = Stream.of(realIdArr).collect(Collectors.toList());
if(CollectionUtil.isEmpty(realIds)){
return;
}
log.error("real_time_data: {},{}",stationReal.getStation(),realIds);
List<String> objects = redisClient.getBatchRealDataByRealId(stationReal.getStation(),realIds);
for(int i = 0; i < realIds.size() ;i++){
if(ObjectUtil.isEmpty(objects.get(i))){
log.error(realIds.get(i) + "is null");
}else{
Map<String,String> attribute = (Map<String, String>) JSONObject.parse(objects.get(i));
attribute.put("realId",attribute.get("k"));
attribute.put("value",attribute.get("v"));
attribute.put("time",attribute.get("t"));
attribute.remove("v");
attribute.remove("k");
attribute.remove("t");
this.getCheckMap(attribute,switchOnOff);
valueMap.put(realIdArr[i],attribute.get("value"));
keyMap.put(realIdArr[i],attribute);
}
}
});
countDownLatch.countDown();
}));
// 等待所有线程执行完成
try {
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
Thread.currentThread().interrupt();
}
pool.shutdown();
// redis 存储
redisTemplate.opsForValue().set(real_id_key_path,JSONObject.toJSONString(valueMap));
redisTemplate.opsForValue().set(real_id_key_gather_path,JSONObject.toJSONString(keyMap));
Long endTime = System.currentTimeMillis();
Long time = endTime - beginTime;
log.error("处理redis实时数据 耗时 : {}",time);
}
/**
* 计算切分次数
*/
private static Integer countStep(Integer size) {
return (size + MAX_SEND - 1) / MAX_SEND;
}
/**
* 监测点过期数据检查
* @param value
* @return
*/
private void getCheckMap(Map<String, String> value,List<String> switchOnOff){
// 不处理开机状态监测点
if(switchOnOff.contains(value.get("realId"))){
return;
}
String time = value.get("time");
if(StringUtil.isEmpty(time)){
return;
}
Date date = DateUtil.parse(time,DateUtil.PATTERN_DATETIME);
// 实时数据超出10分钟未刷新,值置为 0 显示
if(System.currentTimeMillis() - date.getTime() > 10 * 60 * 1000L){
value.put("value","0");
}
}
/**
* 集中监控数据处理
* @param param
*/
@Override
public void centralizedMonitoring(String param) {
long beginTime = System.currentTimeMillis();
Thread thread = Thread.currentThread();
Object json = redisTemplate.opsForValue().get(real_id_key_gather_path);
if (ObjectUtil.isEmpty(json)) {
return;
}
Map<String, Map<String, String>> map = JSONObject.parseObject(json.toString(), new TypeReference<Map<String, Map<String, String>>>() {
});
if (MapUtils.isEmpty(map)) {
return;
}
log.info(thread.getName() + "步骤1获取检测点数据耗时 : {}",System.currentTimeMillis() - beginTime);
beginTime = System.currentTimeMillis();
// 获取所有设备重点属性
List<StationAttributeEntity> list = attbtService.list(new LambdaQueryWrapper<StationAttributeEntity>() {{
isNotNull(StationAttributeEntity::getStationId);
eq(StationAttributeEntity::getIsDeleted, "0");
orderByAsc(StationAttributeEntity::getSort);
}});
if (CollectionUtil.isEmpty(list)) {
return;
}
log.info(thread.getName() + "步骤2获取监控配置监测点 耗时 : {}",System.currentTimeMillis() - beginTime);
beginTime = System.currentTimeMillis();
// 获取所有告警记录
List<StAlarmRecordEntity> alertList = alertService.list(new LambdaQueryWrapper<StAlarmRecordEntity>() {{
orderByDesc(StAlarmRecordEntity::getCreateTime);
}});
log.info(thread.getName() + "步骤3获取告警记录 耗时 : {}",System.currentTimeMillis() - beginTime);
beginTime = System.currentTimeMillis();
List<String> alarmList = abnormalAlarmService.getAbnormalAlarmList();
log.info(thread.getName() + "步骤4获取数据中断告警记录 耗时 : {}",System.currentTimeMillis() - beginTime);
beginTime = System.currentTimeMillis();
// 获取所有故障记录
List<FdpFaultStatusVo> faultList = this.getFdpFaultAll();
log.info(thread.getName() + "步骤5获取故障记录 耗时 : {}",System.currentTimeMillis() - beginTime);
beginTime = System.currentTimeMillis();
// 所有设备分类
Map<String, List<String>> deviceClassifyMap = (Map<String, List<String>>) redisTemplate.opsForValue().get(device_classify_key);
log.info(thread.getName() + "步骤6获取设备分类 耗时 : {}",System.currentTimeMillis() - beginTime);
beginTime = System.currentTimeMillis();
// 所有设备
List<EminfoAndEmParamVo> emList = maintenanceTaskService.getEmInfoList();
log.info(thread.getName() + "步骤7获取设备信息 耗时 : {}",System.currentTimeMillis() - beginTime);
beginTime = System.currentTimeMillis();
// 根据站点分组
Map<String, List<StationAttributeEntity>> stationAttbtMap = list.stream().collect(Collectors.groupingBy(StationAttributeEntity::getStationId));
// 获取站点列表
List<StationEntity> stationEntityList = stationService.getStationByInCode(new ArrayList<>(stationAttbtMap.keySet()));
log.info(thread.getName() + "步骤8站点列表 耗时 : {}",System.currentTimeMillis() - beginTime);
beginTime = System.currentTimeMillis();
// 隐藏设备列表
List<String> hideList = stationAttrConfigService.getHideList();
// 分割,每个map限制10个长度
List<Map<String, List<StationAttributeEntity>>> handleList = this.mapChunk(stationAttbtMap);
log.info(thread.getName() + "步骤9监测点数据切割 耗时 : {}",System.currentTimeMillis() - beginTime);
beginTime = System.currentTimeMillis();
// 创建线程池
ExecutorService pool = Executors.newFixedThreadPool(handleList.size());
CountDownLatch countDownLatch = new CountDownLatch(handleList.size());
log.info(thread.getName() +"步骤10创建线程 耗时 : {}",System.currentTimeMillis() - beginTime);
beginTime = System.currentTimeMillis();
// 所有机构
R<List<Dept>> deptAll = sysClient. getDeptList();
// 存储数据节点
List<RealStationVo> stationList = new CopyOnWriteArrayList<>();
pool.execute(()->{
// 线程处理数据
for(Map<String, List<StationAttributeEntity>> item : handleList){
item.forEach((key,value)->{
RealStationVo station = new RealStationVo();
// 站点编码
station.setStationCode(key);
// 设置站点状态
this.setStationStatus(alarmList,station,key);
// 名称、限制水位、服务类型、机构、排序
this.stationParam(stationEntityList,station,deptAll.getData());
// 根据设备名称分组
Map<String, List<StationAttributeEntity>> deviceAttbtMap = value.stream().filter(o -> !hideList.contains(o.getEmName())).collect(Collectors.groupingBy(StationAttributeEntity::getEmName));
List<RealDeviceVo> deviceList = new ArrayList<>();
// device - 设备,arrbt - 设备重点属性
deviceAttbtMap.forEach((device, attbt) -> {
RealDeviceVo deviceVo = new RealDeviceVo();
// 设备名称
deviceVo.setDeviceName(device);
deviceVo.setDeviceCode(attbt.get(0).getEmCode());
// 设备处理
this.handleDevice(attbt, map, deviceVo, alertList, faultList);
deviceList.add(deviceVo);
});
// 设备状态
this.getDeviceParam(emList, deviceClassifyMap, deviceList);
station.setDeviceList(deviceList.stream().sorted(Comparator.comparing((RealDeviceVo::getDeviceName))).collect(Collectors.toList()));
stationList.add(station);
});
countDownLatch.countDown();
}
});
log.info(thread.getName() + "步骤11线程数据处理 耗时 : {}",System.currentTimeMillis() - beginTime);
beginTime = System.currentTimeMillis();
// 等待所有线程执行完成
try {
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
Thread.currentThread().interrupt();
}
pool.shutdown();
log.info(thread.getName() + "步骤12所有线程完成 耗时 : {}",System.currentTimeMillis() - beginTime);
redisTemplate.opsForValue().set(moniter_station_key, stationList);
}
/**
* map分割
*
* @param <k>
* @param <v>
* @param chunkMap
* @return
*/
private <k, v> List<Map<k, v>> mapChunk(Map<k, v> chunkMap) {
if (chunkMap == null || RealMonitorServiceImpl.MAX_SEND <= 0) {
List<Map<k, v>> list = new ArrayList<>();
list.add(chunkMap);
return list;
}
Set<k> keySet = chunkMap.keySet();
Iterator<k> iterator = keySet.iterator();
int i = 1;
List<Map<k, v>> total = new ArrayList<>();
Map<k, v> tem = new HashMap<>();
while (iterator.hasNext()) {
k next = iterator.next();
tem.put(next, chunkMap.get(next));
if (i == RealMonitorServiceImpl.MAX_SEND) {
total.add(tem);
tem = new HashMap<>();
i = 0;
}
i++;
}
if (!CollectionUtil.isEmpty(tem)) {
total.add(tem);
}
return total;
}
/**
* 设备参数设置
*
* @param emList
* @param deviceClassifyMap
* @param deviceList
*/
private void getDeviceParam(List<EminfoAndEmParamVo> emList, Map<String, List<String>> deviceClassifyMap, List<RealDeviceVo> deviceList) {
if (CollectionUtil.isEmpty(emList) || CollectionUtil.isEmpty(deviceList) || MapUtils.isEmpty(deviceClassifyMap)) {
return;
}
List<String> faultList = deviceClassifyMap.get(HomePageConstant.FAULT);
List<String> maintaintList = deviceClassifyMap.get(HomePageConstant.MAINTAIN);
List<String> overhaultList = deviceClassifyMap.get(HomePageConstant.OVERHAUL);
List<String> runtList = deviceClassifyMap.get(HomePageConstant.RUN);
List<String> sparetList = deviceClassifyMap.get(HomePageConstant.SPARE);
deviceList.forEach(device -> {
if (StringUtil.isBlank(device.getDeviceCode())) {
device.setState(-1);
return;
}
List<EminfoAndEmParamVo> list = emList.stream().filter(o -> null != o.getId() && o.getId().toString().equals(device.getDeviceCode())).collect(Collectors.toList());
if (CollectionUtil.isEmpty(list)) {
device.setState(-1);
return;
}
String deviceCode = list.get(0).getEmCode();
if (StringUtil.isBlank(deviceCode)) {
device.setState(-1);
return;
}
// 故障
if (CollectionUtil.isNotEmpty(faultList) && faultList.contains(deviceCode)) {
device.setState(4);
// 保养
} else if (CollectionUtil.isNotEmpty(maintaintList) && maintaintList.contains(deviceCode)) {
device.setState(3);
// 备用
} else if (CollectionUtil.isNotEmpty(sparetList) && sparetList.contains(deviceCode)) {
device.setState(2);
// 运行
} else if (CollectionUtil.isNotEmpty(runtList) && runtList.contains(deviceCode)) {
device.setState(1);
// 检修
} else if (CollectionUtil.isNotEmpty(overhaultList) && overhaultList.contains(deviceCode)) {
device.setState(0);
// 未知
} else {
device.setState(-1);
}
});
}
/**
* 获取所有告警记录
*
* @return
*/
private List<FdpFaultStatusVo> getFdpFaultAll() {
Object json = redisTemplate.opsForValue().get(fdp_fault_data_key);
if (ObjectUtil.isEmpty(json)) {
return new ArrayList<>();
}
return (List<FdpFaultStatusVo>) json;
}
/**
* 设置站点状态
* @param alarmList
* @param station
* @param key
*/
private void setStationStatus(List<String> alarmList, RealStationVo station, String key) {
station.setStatus(0);
if(alarmList.contains(key)){
station.setStatus(1);
}
}
/**
* 获取站点属性
* @param stationEntityList
* @param item
*/
private void stationParam(List<StationEntity> stationEntityList, RealStationVo item,List<Dept> deptAll) {
if(CollectionUtil.isEmpty(stationEntityList)){
return;
}
List<StationEntity> filterList = stationEntityList.stream().filter(o->item.getStationCode().equals(o.getCode())).collect(Collectors.toList());
if(CollectionUtil.isEmpty(filterList)){
return;
}
StationEntity station = filterList.get(0);
if(ObjectUtil.isEmpty(station)){
return;
}
item.setStationName(station.getName());
item.setWaterLevelMax(station.getLimitWaterLevel());
item.setServerType(station.getServeType());
item.setStationDeptId(station.getRefDept());
// 排序
List<Dept> list = deptAll.stream().filter(o-> station.getRefDept().equals(o.getId())).collect(Collectors.toList());
if(CollectionUtil.isEmpty(list)){
return;
}
item.setSort(list.get(0).getSort());
}
/**
* 设备处理
*
* @param list
* @param map
* @param device
*/
private void handleDevice(List<StationAttributeEntity> list, Map<String, Map<String, String>> map,
RealDeviceVo device, List<StAlarmRecordEntity> alertList,
List<FdpFaultStatusVo> faultList) {
if (CollectionUtil.isEmpty(list) || MapUtils.isEmpty(map)) {
return;
}
List<RealAttributeVo> attbtList = new ArrayList<>();
list.forEach(item -> {
RealAttributeVo realAttributeVo = new RealAttributeVo();
// 设备重点属性处理 : 单条-item
Map<String, String> real = map.get(item.getMonitorId());
if(MapUtils.isEmpty(real)){
realAttributeVo.setName(item.getAttributes());
realAttributeVo.setType(item.getAttributeType());
realAttributeVo.setRealId(item.getMonitorId());
realAttributeVo.setQuality(-1);
realAttributeVo.setStatus(0);
realAttributeVo.setValue("0");
realAttributeVo.setUnit(item.getUnit());
attbtList.add(realAttributeVo);
return;
}
realAttributeVo = handleAttbt(item, real, alertList, faultList);
if (ObjectUtil.isEmpty(realAttributeVo)) {
return;
}
attbtList.add(realAttributeVo);
});
device.setAttbtList(attbtList);
}
/**
* 设备单条重点属性处理
*
* @param item
* @param real
* @return
*/
private RealAttributeVo handleAttbt(StationAttributeEntity item, Map<String, String> real,
List<StAlarmRecordEntity> alertList, List<FdpFaultStatusVo> faultList) {
RealAttributeVo attest = new RealAttributeVo();
this.setAttbtParam(attest, real);
attest.setRealId(item.getMonitorId());
attest.setName(item.getAttributes());
attest.setUnit(item.getUnit());
attest.setType(item.getAttributeType());
String value = Optional.ofNullable(attest.getValue()).orElse("-");
// 正常状态
attest.setStatus(ConfigStatus.ConfigStatusEnum.NORMAL.getStatus());
int quality = Optional.ofNullable(attest.getQuality()).orElse(-1);
String time = Optional.ofNullable(attest.getTime()).orElse("");
// 延时状态 :质量为空 && 时间为空
if (-1 == quality && StringUtil.isEmpty(time)) {
attest.setStatus(ConfigStatus.ConfigStatusEnum.GRAY.getStatus());
}
int type = item.getAttributeType();
switch (type) {
case 1://遥测
// 预警状态 :value值为"1" && quality值为0
if ("1".equals(value) && 0 == quality) {
attest.setStatus(ConfigStatus.ConfigStatusEnum.RED.getStatus());
}
break;
case 2://遥信
signalyRemote(item, attest, quality, value, alertList);
//处理
break;
default:
throw new IllegalStateException("Unexpected type: " + type);
}
// 故障信息设置
accidentDetails(attest, faultList, value);
return attest;
}
/**
* 故障信息设置
*
* @param attest
* @param faultList
* @param value
*/
private void accidentDetails(RealAttributeVo attest, List<FdpFaultStatusVo> faultList, String value) {
if (CollectionUtil.isEmpty(faultList) || "-".equals(value)) {
return;
}
List<FdpFaultStatusVo> fault = faultList.stream().filter(o -> o.getRealId().equals(attest.getRealId())).collect(Collectors.toList());
if (CollectionUtil.isEmpty(fault)) {
return;
}
FdpFaultStatusVo fdpFaultStatusVo = fault.get(0);
// 黄色
if (fdpFaultStatusVo.getValue() > greater_than && fdpFaultStatusVo.getValue() < less_than) {
attest.setStatus(ConfigStatus.ConfigStatusEnum.YELLOW.getStatus());
// 橙色
} else if (fdpFaultStatusVo.getValue() >= be_equal_or_greater_than) {
attest.setStatus(ConfigStatus.ConfigStatusEnum.ORANGE.getStatus());
}
attest.setFdpRate(fdpFaultStatusVo.getValue());
attest.setFdpFaultId(fdpFaultStatusVo.getFaultId());
attest.setFdpMonitorId(fdpFaultStatusVo.getMonitorId());
}
/**
* 重点属性类型-遥信 数据逻辑处理
*
* @param attest
*/
private void signalyRemote(StationAttributeEntity item, RealAttributeVo attest, int quality, String strValue, List<StAlarmRecordEntity> alertList) {
//需要所有值的数据不为null,并且满足条件才会进去添加数据返回id
if (null == item.getUpUpLimit() || null == item.getDownDownLimit() || null == item.getUpLimit() || null == item.getDownLimit()) {
return;
}
if (-1 == quality) {
return;
}
if (quality != 0) {
return;
}
if ("-".equals(strValue)) {
return;
}
double upup = item.getUpUpLimit();
double lwlw = item.getDownDownLimit();
double up = item.getUpLimit();
double lw = item.getDownLimit();
//查询出来已处理告警记录
List<StAlarmRecordEntity> handleList = alertList.stream().filter(o -> o.getStationId().equals(item.getStationId()) && o.getRealId().equals(attest.getRealId()) && o.getStatus() == 1).collect(Collectors.toList());
//查询出来未处理告警记录
List<StAlarmRecordEntity> recordList = alertList.stream().filter(o -> o.getStationId().equals(item.getStationId()) && o.getRealId().equals(attest.getRealId()) && o.getStatus() == 0).collect(Collectors.toList());
long past = 0L;
double value = Double.parseDouble(strValue);
if (value > upup || value < lwlw) {
if (CollectionUtil.isNotEmpty(handleList)) {
// 现在时间 - 处理时间
past = System.currentTimeMillis() - handleList.get(0).getProcessTime().getTime();
}
boolean isOverrun = ((CollectionUtil.isEmpty(handleList) && CollectionUtil.isEmpty(recordList)) || (past / 1000 / 60 > 30 && CollectionUtil.isEmpty(recordList)));
if (isOverrun) {
Long alertId = alertService.insertAlert(item.getStationId(), item.getMonitorId());
attest.setId(alertId);
attest.setStatus(ConfigStatus.ConfigStatusEnum.YELLOW.getStatus());
} else if (CollectionUtil.isNotEmpty(recordList)) {
StAlarmRecordEntity record = recordList.get(0);
attest.setId(record.getId());
// 告警处理完成
if (record.getProcessTime() != null && record.getStatus() == (byte) 1) {
attest.setStatus(ConfigStatus.ConfigStatusEnum.NORMAL.getStatus());
// 告警未处理
} else if (record.getProcessTime() == null && record.getStatus() == (byte) 0) {
attest.setStatus(ConfigStatus.ConfigStatusEnum.HAND_DELAY_STATUS.getStatus());
}
}
} else if (value > up && value < upup || value < lw && value > lwlw) {
if (CollectionUtil.isNotEmpty(handleList)) {
// 现在时间 - 处理时间
past = System.currentTimeMillis() - handleList.get(0).getProcessTime().getTime();
}
boolean exist = ((CollectionUtil.isEmpty(handleList) && CollectionUtil.isEmpty(recordList)) || (past / 1000 / 60 > 30 && CollectionUtil.isEmpty(recordList)));
if (exist){
Long alertId = alertService.insertAlert(item.getStationId(), item.getMonitorId());
attest.setId(alertId);
attest.setStatus(ConfigStatus.ConfigStatusEnum.YELLOW.getStatus());
// 存在告警记录
} else if (CollectionUtil.isNotEmpty(recordList)) {
StAlarmRecordEntity record = recordList.get(0);
if (recordList.get(0).getStatus() == (byte) 0 && recordList.get(0).getCreateTime() != null) {
attest.setId(record.getId());
attest.setStatus(ConfigStatus.ConfigStatusEnum.RED.getStatus());
} else {
attest.setId(recordList.get(0).getId());
attest.setStatus(ConfigStatus.ConfigStatusEnum.NORMAL.getStatus());
}
}
}
}
/**
* 设置重点属性参数
*
* @param attest
* @param real
*/
private void setAttbtParam(RealAttributeVo attest, Map<String, String> real) {
if (CollectionUtil.isEmpty(real)) {
return;
}
real.forEach((key, value) -> {
if (StringUtil.isBlank(value)) {
return;
}
switch (key) {
case "q":
attest.setQuality(Integer.parseInt(value));
break;
case "realId":
attest.setRealId(value);
break;
case "value":
attest.setValue(Optional.ofNullable(value).orElse("-"));
break;
case "time":
attest.setTime(value);
break;
}
});
}
}

42
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/impl/StAlamRecordServiceImpl.java

@ -0,0 +1,42 @@
package com.hnac.hzims.scheduled.service.impl;
import com.hnac.hzims.operational.config.entity.StAlarmRecordEntity;
import com.hnac.hzims.scheduled.mapper.operation.StAlarmRecordMapper;
import com.hnac.hzims.scheduled.service.StAlamRecordService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springframework.stereotype.Service;
import java.util.Date;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 15:46
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class StAlamRecordServiceImpl extends BaseServiceImpl<StAlarmRecordMapper, StAlarmRecordEntity> implements StAlamRecordService {
/**
* 添加告警
* @param stationId
* @param realId
* @return
*/
@Override
public Long insertAlert(String stationId, String realId) {
StAlarmRecordEntity record = new StAlarmRecordEntity();
record.setStationId(stationId);
record.setRealId(realId);
record.setStatus(0);
record.setCreateTime(new Date());
log.info("insert_alert_entity:{}",record);
return this.baseMapper.insertReturnId(record);
}
}

164
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/impl/StFocusPropertiesServiceImpl.java

@ -0,0 +1,164 @@
package com.hnac.hzims.scheduled.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.google.common.collect.Lists;
import com.hnac.hzims.equipment.entity.WorkshopInfoEntity;
import com.hnac.hzims.equipment.feign.IEmInfoClient;
import com.hnac.hzims.equipment.feign.IWorkshopInfoClient;
import com.hnac.hzims.equipment.vo.EminfoAndEmParamVo;
import com.hnac.hzims.operational.config.entity.StFocusPropertiesEntity;
import com.hnac.hzims.operational.main.constant.HomePageConstant;
import com.hnac.hzims.operational.station.entity.StationAttributeEntity;
import com.hnac.hzims.operational.station.entity.StationEntity;
import com.hnac.hzims.scheduled.mapper.operation.StFocusPropertiesMapper;
import com.hnac.hzims.scheduled.service.IStationAttributeService;
import com.hnac.hzims.scheduled.service.IStationService;
import com.hnac.hzims.scheduled.service.StFocusPropertiesService;
import com.hnac.hzims.scheduled.vo.StationRealVo;
import com.hnac.hzinfo.datasearch.analyse.IAnalyseDataSearchClient;
import com.hnac.hzinfo.datasearch.analyse.vo.AnalyzeCodeBySignagesVO;
import com.hnac.hzinfo.sdk.analyse.po.MultiAnalyzeCodePO;
import lombok.RequiredArgsConstructor;
import org.springblade.core.log.logger.BladeLogger;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.CollectionUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.ObjectUtil;
import org.springblade.core.tool.utils.StringUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 11:27
*/
@Service
@RequiredArgsConstructor
public class StFocusPropertiesServiceImpl extends BaseServiceImpl<StFocusPropertiesMapper, StFocusPropertiesEntity> implements StFocusPropertiesService {
private final IStationService stationService;
private final IStationAttributeService attbtService;
private final IEmInfoClient emInfoClient;
private final IAnalyseDataSearchClient analyseDataSearchClient;
private final IWorkshopInfoClient workshopInfoClient;
private final RedisTemplate redisTemplate;
private final BladeLogger logger;
@Value("${hzims.operation.monitor.realId}")
public String moniter_realId_key;
@Value("${hzims.equipment.emInfo.emInfoList}")
public String em_info_list_path;
@Override
public void getStationRealIds(String param) {
// 所有站点
List<StationEntity> stationList = stationService.getAll();
if(CollectionUtil.isEmpty(stationList)){
return;
}
// 设备监测点list
Object json = redisTemplate.opsForValue().get(em_info_list_path);
List<EminfoAndEmParamVo> eminfoAndEmParams = JSONObject.parseObject(json.toString(), new TypeReference<List<EminfoAndEmParamVo>>() {});
// 厂房监测点list
List<AnalyzeCodeBySignagesVO> wsMonitorList = this.getRealIdByWsCodeAndSign();
// 实时监控监测点list
List<StationAttributeEntity> timeList = attbtService.list(new LambdaQueryWrapper<StationAttributeEntity>() {{
eq(StationAttributeEntity::getIsDeleted, "0");
isNotNull(StationAttributeEntity::getMonitorId);
orderByAsc(StationAttributeEntity::getSort);
}});
// 监测点存储list
List<StationRealVo> list = new ArrayList<>();
stationList.forEach(station->{
StationRealVo stationRealVo = new StationRealVo();
stationRealVo.setStation(station.getCode());
List<String> realDeviceList = this.getRealDeviceList(station.getRefDept(),eminfoAndEmParams);
// 厂站匹配站点监测点集合
List<String> realWsList = wsMonitorList.stream().filter(
o -> Func.isNotEmpty(o.getStation()) && o.getStation().equals(station.getCode())
).map(AnalyzeCodeBySignagesVO::getRealId).collect(Collectors.toList());
// 实时监控匹配站点监测点集合
List<String> realTimeList = timeList.stream().filter(o -> null != o.getStationId() && o.getStationId().equals(station.getCode())).map(StationAttributeEntity::getMonitorId).collect(Collectors.toList());
if(CollectionUtil.isNotEmpty(realTimeList)){
realDeviceList.addAll(realTimeList);
}
if(CollectionUtil.isNotEmpty(realWsList)) {
realDeviceList.addAll(realWsList);
}
if(CollectionUtil.isEmpty(realDeviceList)){
return;
}
List<String> realList = realDeviceList.stream().distinct().collect(Collectors.toList());
String[] realArr = StringUtil.join(realList,",").split(",");
stationRealVo.setRealId(realArr);
list.add(stationRealVo);
});
redisTemplate.opsForValue().set(moniter_realId_key,list);
}
private List<AnalyzeCodeBySignagesVO> getRealIdByWsCodeAndSign() {
R<List<WorkshopInfoEntity>> wsInfoListR = workshopInfoClient.getAllWorkshop();
List<WorkshopInfoEntity> wsInfoList = Optional.ofNullable(wsInfoListR).filter(r -> r.isSuccess() && CollectionUtil.isNotEmpty(wsInfoListR.getData()))
.map(R::getData).orElse(null);
if(CollectionUtil.isEmpty(wsInfoList)) {
return Lists.newArrayList();
}
Function<String, MultiAnalyzeCodePO> getAnalyzeCodePO = wsCode -> {
MultiAnalyzeCodePO multiAnalyzeCodePO = new MultiAnalyzeCodePO();
multiAnalyzeCodePO.setDeviceCode(wsCode);
multiAnalyzeCodePO.setSignages(Lists.newArrayList(HomePageConstant.PV_JOINT_RELAY,HomePageConstant.PV_REACTIVE_POWER,HomePageConstant.PV_GENERATION_CAPACITY));
return multiAnalyzeCodePO;
};
List<MultiAnalyzeCodePO> analyzeCodePOList = wsInfoList.stream().map(WorkshopInfoEntity::getNumber).map(getAnalyzeCodePO).collect(Collectors.toList());
R<List<AnalyzeCodeBySignagesVO>> analyzeCodeBySignages = analyseDataSearchClient.getAnalyzeCodeBySignages(analyzeCodePOList);
return Optional.ofNullable(analyzeCodeBySignages).filter(r -> r.isSuccess()).map(R::getData).orElse(Lists.newArrayList());
}
/**
* 获取站点realId
* @param refDept
* @param eminfoAndEmParams
* @return
*/
private List<String> getRealDeviceList(Long refDept, List<EminfoAndEmParamVo> eminfoAndEmParams) {
// 参数检查
if(CollectionUtil.isEmpty(eminfoAndEmParams) || ObjectUtil.isEmpty(refDept)){
return new ArrayList<>();
}
// 有效设备
List<EminfoAndEmParamVo> filters = eminfoAndEmParams.stream().filter(o-> o.getCreateDept().equals(refDept)).collect(Collectors.toList());
if(CollectionUtil.isEmpty(filters)){
return new ArrayList<>();
}
// 遍历设备
List<String> result = new ArrayList<>();
for(EminfoAndEmParamVo device : filters){
result.addAll(device.getPoint().values());
}
return result;
}
}

42
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/impl/StationAttrConfigServiceImpl.java

@ -0,0 +1,42 @@
package com.hnac.hzims.scheduled.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.hnac.hzims.operational.station.entity.StationAttrConfigEntity;
import com.hnac.hzims.scheduled.mapper.operation.StationAttrConfigMapper;
import com.hnac.hzims.scheduled.service.IStationAttrConfigService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.tool.utils.CollectionUtil;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 16:07
*/
@Service
@Slf4j
@AllArgsConstructor
public class StationAttrConfigServiceImpl extends BaseServiceImpl<StationAttrConfigMapper, StationAttrConfigEntity>
implements IStationAttrConfigService {
@Override
public List<String> getHideList() {
List<StationAttrConfigEntity> list = this.list(new QueryWrapper<StationAttrConfigEntity>() {{
eq("ENABLE_SHOW", false);
eq("IS_DELETED",0);
}});
if(CollectionUtil.isEmpty(list)){
return new ArrayList<>();
}
return list.stream().map(StationAttrConfigEntity::getEmName).collect(Collectors.toList());
}
}

22
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/impl/StationAttributeServiceImpl.java

@ -0,0 +1,22 @@
package com.hnac.hzims.scheduled.service.impl;
import com.hnac.hzims.operational.station.entity.StationAttributeEntity;
import com.hnac.hzims.scheduled.mapper.operation.StationAttributeMapper;
import com.hnac.hzims.scheduled.service.IStationAttributeService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springframework.stereotype.Service;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 11:39
*/
@Service
@Slf4j
@RequiredArgsConstructor
public class StationAttributeServiceImpl extends BaseServiceImpl<StationAttributeMapper, StationAttributeEntity> implements IStationAttributeService {
}

60
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/impl/StationServiceImpl.java

@ -0,0 +1,60 @@
package com.hnac.hzims.scheduled.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.hnac.hzims.operational.station.entity.StationEntity;
import com.hnac.hzims.scheduled.mapper.operation.StationMapper;
import com.hnac.hzims.scheduled.service.IStationService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.tool.utils.CollectionUtil;
import org.springblade.core.tool.utils.ObjectUtil;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 10:36
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class StationServiceImpl extends BaseServiceImpl<StationMapper, StationEntity> implements IStationService {
@Override
public List<StationEntity> getStationByType(Integer stationType, Integer serveType) {
return this.baseMapper.selectStationByType(stationType, serveType);
}
@Override
public List<StationEntity> getAll() {
return this.baseMapper.selectAll();
}
@Override
public List<StationEntity> getStationByInCode(List<String> codes) {
return this.baseMapper.selectStationByInCode(codes);
}
@Override
public List<StationEntity> getStationType(Integer serveType, List<Integer> typeList, List<Long> departIdList) {
return this.list(new LambdaQueryWrapper<StationEntity>() {{
eq(StationEntity::getIsDeleted, 0);
if (ObjectUtil.isNotEmpty(serveType)) {
eq(StationEntity::getServeType, serveType);
}
if (CollectionUtil.isNotEmpty(typeList)) {
in(StationEntity::getType, typeList);
}
if (CollectionUtil.isNotEmpty(departIdList)) {
in(StationEntity::getRefDept, departIdList);
}
}});
}
}

201
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/impl/WaterServiceImpl.java

@ -0,0 +1,201 @@
package com.hnac.hzims.scheduled.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.hnac.hzims.EquipmentConstants;
import com.hnac.hzims.operational.main.constant.HomePageConstant;
import com.hnac.hzims.operational.main.vo.WaterLevelVo;
import com.hnac.hzims.operational.station.entity.HzimsAnalyzeModelStationEntity;
import com.hnac.hzims.operational.station.entity.StationEntity;
import com.hnac.hzims.scheduled.service.IHzimsAnalyzeModelStationService;
import com.hnac.hzims.scheduled.service.IStationService;
import com.hnac.hzims.scheduled.service.IWaterService;
import com.hnac.hzinfo.datasearch.analyse.IAnalyseDataSearchClient;
import com.hnac.hzinfo.datasearch.analyse.domain.FieldsData;
import com.hnac.hzinfo.datasearch.analyse.po.AnalyseCodeByAnalyseDataPO;
import com.hnac.hzinfo.datasearch.analyse.po.AnalyzeDataConditionPO;
import com.hnac.hzinfo.datasearch.analyse.vo.AnalyzeCodeBySignagesVO;
import com.hnac.hzinfo.datasearch.analyse.vo.AnalyzeDataConditionVO;
import com.hnac.hzinfo.datasearch.real.po.RealDataSearchPO;
import com.hnac.hzinfo.sdk.analyse.po.MultiAnalyzeCodePO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.CollectionUtil;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.StringUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/22 11:23
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class WaterServiceImpl implements IWaterService {
private final IStationService stationService;
private final IHzimsAnalyzeModelStationService modelStationService;
private final IAnalyseDataSearchClient analyseDataSearchClient;
private final RedisTemplate redisTemplate;
private final static String loadwater_level_key = "hzims:operation:loadwater:level:key";
/**
* 水利-站点水位数据
* @param param
*/
@Override
public void loadWaterLevel(String param) {
// 有效站点模型
List<HzimsAnalyzeModelStationEntity> modelList = getModelStationList();
if(CollectionUtil.isEmpty(modelList)){
return;
}
List<WaterLevelVo> list = new ArrayList<>();
modelList.forEach(item -> {
List<MultiAnalyzeCodePO> multiAnalyzeCodePOList = new ArrayList<>();
MultiAnalyzeCodePO multiAnalyzeCodePO = new MultiAnalyzeCodePO();
multiAnalyzeCodePO.setDeviceCode(item.getInstanceCode());
multiAnalyzeCodePO.setSignages(Collections.singletonList(HomePageConstant.FRONT_WATER_LEVEL));
multiAnalyzeCodePOList.add(multiAnalyzeCodePO);
R<List<AnalyzeCodeBySignagesVO>> result = analyseDataSearchClient.getAnalyzeCodeBySignages(multiAnalyzeCodePOList);
if(!result.isSuccess() || CollectionUtil.isEmpty(result.getData())){
return;
}
WaterLevelVo waterLevelVo = new WaterLevelVo();
waterLevelVo.setStationCode(item.getStationId());
// 前水位
double frontWaterLevel = this.getWaterLevel(item.getInstanceCode(),HomePageConstant.FRONT_WATER_LEVEL);
waterLevelVo.setFrontWaterLevel(frontWaterLevel);
// 后水位
double rearWaterLevel = this.getWaterLevel(item.getInstanceCode(),HomePageConstant.REAR_WATER_LEVEL);
waterLevelVo.setRearWaterLevel(rearWaterLevel);
// 前水位当日曲线
Map<Integer,String> frontCurveMap = this.getWaterLevelMap(item.getInstanceCode(),HomePageConstant.FRONT_WATER_LEVEL);
waterLevelVo.setFrontCurveMap(frontCurveMap);
// 后水位当日曲线
Map<Integer,String> rearCurveMap = this.getWaterLevelMap(item.getInstanceCode(),HomePageConstant.REAR_WATER_LEVEL);
waterLevelVo.setRearCurveMap(rearCurveMap);
list.add(waterLevelVo);
});
redisTemplate.opsForValue().set(loadwater_level_key,list);
}
/**
* 获取水位实时数据
* @param instanceCode
* @param signage
* @return
*/
private double getWaterLevel(String instanceCode, String signage) {
RealDataSearchPO realData = new RealDataSearchPO();
realData.setAnalyzeCode(instanceCode);
List<String> signages = Collections.singletonList(signage);
realData.setSignages(signages);
// 调用fegin接口查询实时数据
R<List<FieldsData>> R = analyseDataSearchClient.getRealDataByAnalyzeCode(realData);
if(!R.isSuccess() || CollectionUtil.isEmpty(R.getData())){
return 0.0;
}
// 时间限制
String time = R.getData().get(0).getTime();
if(StringUtil.isEmpty(time) || "-".equals(time)){
return 0.0;
}
Date date = DateUtil.parse(time, "yyyy-MM-dd HH:mm:ss.sss");
if(System.currentTimeMillis() - date.getTime() > 30 * 60 * 1000L){
return 0.0;
}
return Double.parseDouble(R.getData().get(0).getValue());
}
/**
* 获取水位当年数据
* @param instanceCode
* @param signage
* @return
*/
private Map<Integer, String> getWaterLevelMap(String instanceCode, String signage) {
LocalDateTime beginTime = LocalDateTime.parse(DateUtil.format(new Date(), "yyyy-MM-dd 00:00:00"), DateUtil.DATETIME_FORMATTER);
LocalDateTime endTime = LocalDateTime.now();
AnalyseCodeByAnalyseDataPO po = new AnalyseCodeByAnalyseDataPO();
List<AnalyzeDataConditionPO> signboardConditions = new ArrayList<>();
AnalyzeDataConditionPO analyzeDataConditionPO = new AnalyzeDataConditionPO();
analyzeDataConditionPO.setFull(1);
analyzeDataConditionPO.setSignages(signage);
// 取数规则: 0=(整点值/最早值)、1=最大值、2=最小值、3=平均值、4=(累计值/和值)、5=(变化值/差值) 6=最新值
analyzeDataConditionPO.setAccessRules(EquipmentConstants.AccessRulesEnum.FINAL_CYCLE.getType());
// 周期类型: 0-> s(秒) 1->、m(分)、2->h(小时)3->、d(天)4->、w(周)5->、n(自然月)、6->y(自然年)
analyzeDataConditionPO.setSaveTimeType(2);
// 间隔
analyzeDataConditionPO.setTimeInterval(1);
analyzeDataConditionPO.setBeginTime(beginTime);
analyzeDataConditionPO.setEndTime(endTime);
signboardConditions.add(analyzeDataConditionPO);
po.setDeviceCode(instanceCode);
po.setSignboardConditions(signboardConditions);
R<List<AnalyzeDataConditionVO>> R = analyseDataSearchClient.getAnalyzeDataByAnalyzeCodeAndSignages(po);
if(!R.isSuccess() || CollectionUtil.isEmpty(R.getData())){
return null;
}
if(CollectionUtil.isEmpty(R.getData().get(0).getList())){
return null;
}
return R.getData().get(0).getList().stream().collect(Collectors.toMap(key-> {
Date dateTime = DateUtil.parse(key.getTs(), "yyyy-MM-dd HH:mm:ss.s");
return dateTime.getHours();
}, value -> {
if(StringUtil.isBlank(value.getVal())){
return "0";
}
return value.getVal();
}));
}
/**
* 获取有效站点模型
* @return
*/
private List<HzimsAnalyzeModelStationEntity> getModelStationList() {
// 水利站点(All)
List<StationEntity> stationList = stationService.getStationType(HomePageConstant.HYDROPOWER_SERVETYPE, null, null);
if(CollectionUtil.isEmpty(stationList)){
return null;
}
// 站点code集合
List<String> codes = stationList.stream().map(StationEntity::getCode).collect(Collectors.toList());
if(CollectionUtil.isEmpty(codes)){
return null;
}
// 查询站点模型列表
List<HzimsAnalyzeModelStationEntity> list = modelStationService.list(new LambdaQueryWrapper<HzimsAnalyzeModelStationEntity>() {{
in(HzimsAnalyzeModelStationEntity::getStationId, codes);
}});
if(CollectionUtil.isEmpty(list)){
return null;
}
return list;
}
}

52
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/vo/RealAttributeVo.java

@ -0,0 +1,52 @@
package com.hnac.hzims.scheduled.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 15:27
*/
@Data
public class RealAttributeVo implements Serializable {
@ApiModelProperty("属性名称")
private String name;
@ApiModelProperty("属性数值")
private String value;
@ApiModelProperty("属性单位")
private String unit;
@ApiModelProperty("属性类型:1-遥信 2-遥测")
private Integer type;
@ApiModelProperty("属性实时数据Id")
private String realId;
@ApiModelProperty("告警Id")
private Long id;
@ApiModelProperty("属性状态:0:正常、1:预警、2:告警、3:空值、4:黄色、5:橙色")
private int status;
@ApiModelProperty("属性质量")
private int quality;
@ApiModelProperty("属性时间")
private String time;
@ApiModelProperty("属性故障ID")
private String fdpFaultId;
@ApiModelProperty("监测点")
private String fdpMonitorId;
@ApiModelProperty("属性故障值")
private Double fdpRate;
}

33
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/vo/RealDeviceVo.java

@ -0,0 +1,33 @@
package com.hnac.hzims.scheduled.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 15:26
*/
@Data
public class RealDeviceVo implements Serializable {
@ApiModelProperty("设备编号")
private String deviceCode;
@ApiModelProperty("设备名称")
private String deviceName;
@ApiModelProperty("设备状态")
private Integer state;
@ApiModelProperty("排序字段")
private Integer sort;
@ApiModelProperty("设备属性集合")
private List<RealAttributeVo> attbtList;
}

54
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/vo/RealStationVo.java

@ -0,0 +1,54 @@
package com.hnac.hzims.scheduled.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 15:24
*/
@Data
public class RealStationVo implements Serializable {
@ApiModelProperty("站点Id")
private String stationCode;
@ApiModelProperty("站点名称")
private String stationName;
@ApiModelProperty("站点机构Id")
private Long stationDeptId;
@ApiModelProperty("站点类型")
private String serverType;
@ApiModelProperty("当前天气")
private WeatherVo nowWater;
@ApiModelProperty("总有功率")
private Double powerSum;
@ApiModelProperty("降水")
private String precipitation;
@ApiModelProperty("最大前池水位")
private Double waterLevelMax;
@ApiModelProperty("前池水位")
private Double waterLevel;
@ApiModelProperty("设备集合")
private List<RealDeviceVo> deviceList;
@ApiModelProperty("站点状态 : 0-正常 1-数据中断")
private Integer status;
@ApiModelProperty("排序")
private Integer sort;
}

17
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/vo/StationRealVo.java

@ -0,0 +1,17 @@
package com.hnac.hzims.scheduled.vo;
import lombok.Data;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 11:43
*/
@Data
public class StationRealVo {
private String station;
private String[] realId;
}

30
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/vo/WeatherVo.java

@ -0,0 +1,30 @@
package com.hnac.hzims.scheduled.vo;
import lombok.Data;
import java.io.Serializable;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/5/19 15:25
*/
@Data
public class WeatherVo implements Serializable {
/**当前天气状况和图标的代码,图标可通过天气状况和图标下载; //100**/
private String icon;
/**实况温度,默认单位:摄氏度; //21**/
private String temp;
/**实况天气状况的文字描述,包括阴晴雨雪等天气状态的描述; //晴**/
private String text;
/**预报当天最高温度; //4**/
private String tempMax;
/**预报当天最低温度; //-5**/
private String tempMin;
}

193
hzims-service/hzims-scheduled/src/main/resources/application.yml

@ -0,0 +1,193 @@
#服务器端口
server:
port: 8501
#数据源配置
spring:
cloud:
nacos:
discovery:
server-addr: 175.6.40.67:10056
config:
server-addr: 175.6.40.67:10056
application:
name: hzims-scheduled
main:
allow-bean-definition-overriding: true
#排除DruidDataSourceAutoConfigure
autoconfigure:
exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
datasource:
dynamic:
primary: operational #设置默认的数据源或者数据源组,默认值即为master
strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
datasource:
operational:
url: jdbc:mysql://192.168.1.3:3576/dev_hzims_operation?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&tinyInt1isBit=false&allowMultiQueries=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
username: root
password: 123
redis:
# redis数据库索引(默认为0),我们使用索引为0的数据库,避免和其他数据库冲突
database: 0
# redis服务器地址(默认为localhost)
host: 192.168.1.3
# redis端口(默认为6379)
port: 3577
# redis访问密码(默认为空)
password: 1qaz2WSX@redis
xxl:
job:
accessToken: ''
admin:
addresses: http://192.168.1.3:7009/xxl-job-admin
executor:
appname: hzims-operational
ip: 192.168.1.3
logpath: /data/applogs/xxl-job/jobhandler
logretentiondays: -1
port: 28501
#mybatis-plus配置
mybatis-plus:
mapper-locations: classpath:com/hnac/hzims/**/mapper/*Mapper.xml
#实体扫描,多个package用逗号或者分号分隔
typeAliasesPackage: com.hnac.hzims.**.entity
#swagger扫描路径配置
swagger:
base-packages:
- org.springbalde
- com.hnac
hzims:
# 视频配置地址随机码
video:
random-code: qnrld30yto85cji5
# 视频配置秘钥属性
videoProperties:
appKey: 21111042
videoHost: 42.192.39.246:443
appSecret: QXRevZ2AQeXtmlYZT6Rf
equipment:
emInfo:
code: hzims:equipment:emInfo:deviceCode.stationDeviceCode
emInfoList: hzims:equipment:emInfo:deviceCode.emInfoList
fdp:
redisData: hzims:equipment:fdp:fault.data.realIdAndValueList
greaterThan: 0.3
lessThan: 0.9
beEqualOrGreaterThan: 0.9
alert:
# 接收告警的websocket url
ws-url: wss://175.6.40.67:9036/api/hzinfo-data-socket/websocket/soe
config:
#接收遥测或遥信实时数据的websocket url
ws-url: wss://175.6.40.67:9036/api/hzinfo-data-socket/websocket/data
level:
ws-url: wss://175.6.40.67:9036/api/hzinfo-data-socket/websocket/alarm
pdf:
# pdf文件存储路径,请配置绝对路径
#file-path: /data/inspect/pdf/file
file-path: D:/data/hzinfo/file # windows
operation:
access:
task-key: hzims:operation:access:task
alert:
saveDefectIsOpen: true
save:
area:
url: http://49.234.126.72:8255/apiIntroduction/demo/saveHzimsArea
station:
url: http://49.234.126.72:8255/apiIntroduction/demo/saveHzimsStation
defect:
repair: /data/hzims/operational/defect/repair/应急抢修单.docx
area:
report: hzims.operation.area.report
monitor:
station: hzims:operation:monitor:station
realId : hzims:operation:monitor:realId
region:
areaDutyInfoKey: hzims:operation:region:areaDutyInfoKey
deviceClassifyKey: hzims.operation.region.deviceClassifyKey
projectDepartmentId: 200000000000101
projectDepartmentName: 智能运维事业部
notInDept: 2000000000001010048,2000000000001010049,2000000000001010050
tenantId: 200000
#工单返回记录(暂存)
workOrder:
access: hzims:operation:workOrder.access
defect: hzims:operation:workOrder.defect
task:
# 消息推送存入redis的key值
templateCode:
maintenance:
taskDispose: hzinfo:operation:maintenance:task
# 消息推送code
jgPushCode: ops-push
comprehensiveD: hzims:operation:comprehensiveD:real.time
realIdKey: hzims:operation:comprehensiveD:realIdKey.realData
lastDayRealIdKey: hzims:operation:comprehensiveD:lastDayRealIdKey.realData
realIdKeyGather: hzims:operation:comprehensiveD:realIdKeyGather.realData
homePage:
charge:
url: https://www.hznychh.cn/api/charging-manage/manage/external/provide?secretKey=f5aee9fe24e4d1d80eb7564414392bc3
activePowerKey: hzims:operation:homePage:activePowerKey
jointRelayKey: hzims:operation:homePage:jointRelayKey
systemMonitoring:
hydropowerStation:
hisData: hzims:operation:homePage:systemMonitoring:hydropowerStation:hisData:.
hisDataActivePower: hzims:operation:homePage:systemMonitoring:hydropowerStation:hisDataActivePower:.
theDayHydrograph: hzims:operation:homePage:systemMonitoring:hydropowerStation:theDayHydrograph:.
yearGeneration: hzims:operation:homePage:systemMonitoring:hydropowerStation:yearGeneration.data
hisDataNew: hzims:operation:homePage:systemMonitoring:hydropowerStation:hisDataNew
theDayHydrographNew: hzims:operation:homePage:systemMonitoring:hydropowerStation:theDayHydrographNew
alarm:
# "0-默认", "1-系统", "2-告警", "3-故障", "4-用户操作", "5-遥测越限", "6-遥信变位", "7-注册信息", "8-信息提示", "9-设备巡检", "10-遥控操作", "11-遥测越限恢复","12-未定义","13-通讯中断","14-数据异常"
types: 3,2,5,13,14
category:
id: 1384429129110360065
sanya:
one: 2000000000001010048
tow: 2000000000001010049
hoop: 2000000000001010050
defect:
# 超时自动甄别时间间隔:单位(小时)
discriminateDeadline: 1
# 默认计划工时:单位(小时)
defaultPlanHoure: 8
blade:
data:
sdk:
enabled: true
url: http://175.6.40.67:37681/api/hzinfo-data-config
appId: '1635888805125099521'
appSecret: f4b6a4dc696b36445d2e5d38bbab2417
redisIp: 192.168.1.13
redisPort: 3577
password: L_MM&h=+Nm&p)U9sk.uH
maxKeys: 1000
data-scope:
enabled: false
lock:
enabled: true
address: redis://192.168.1.3:3577
password:
database: 0
ssl: false
url:
video:
stationsPath: http://localhost:10001/stations
monitorsPath: http://localhost:10001/monitor
login: https://175.6.40.67:9300/hzApi/auth/mix/login?tenantId=200000&account=videoViewers&pwd=e10adc3949ba59abbe56e057f20f883e&grant_type=password&scope=all&type=account
water-out:
#工单受理
orderCrtPackage: http://175.6.40.67:9021/api/water-out/orderCrt/package
orderCrtGrabPackage: http://175.6.40.67:9021/api/water-out/orderCrt/grabPackage

17
hzims-service/hzims-scheduled/src/test/java/com/hnac/hzims/scheduled/ScheduledApplicationTest.java

@ -0,0 +1,17 @@
package com.hnac.hzims.scheduled;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springblade.core.test.BladeSpringRunner;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest(classes = ScheduledApplication.class)
// @BladeBootTest
public class ScheduledApplicationTest {
@Test
public void testScheduled(){
System.out.println(1);
}
}

1
hzims-service/pom.xml

@ -27,6 +27,7 @@
<module>ticket</module> <module>ticket</module>
<module>weather</module> <module>weather</module>
<module>hzims-middle</module> <module>hzims-middle</module>
<module>hzims-scheduled</module>
</modules> </modules>
<dependencies> <dependencies>

Loading…
Cancel
Save