Browse Source

init 20220811

lifuquan 2 years ago
commit
eaf26195c9

+ 2 - 0
.gitignore

@@ -0,0 +1,2 @@
+target/
+.vscode/

+ 21 - 0
doc/gpload/alarm.sh

@@ -0,0 +1,21 @@
+#!/bin/bash
+
+source /usr/local/greenplum-db-clients/greenplum_loaders_path.sh
+
+new_date=$1
+
+# 修改gpload配置文件
+sed -i 's/\/data1\/s130\/alarm\/csv\/resultMap[0-9]\{14\}.csv/\/data1\/s130\/alarm\/csv\/resultMap'${new_date}'.csv/' /data1/s130/alarm/gpload/alarm.yml
+
+# 由于gpload需要输入密码,这里需要使用expect执行
+password=Richr00t#
+
+expect -c "
+set timeout 300
+spawn gpload -f /data1/s130/alarm/gpload/alarm.yml
+expect {
+\"connecting (yes/no)?\" { send \"yes\n\";exp_continue }
+\"Password:\" { send \"${password}\n\"; exp_continue}
+timeout { puts \"超时\" exit 2}
+}
+"

+ 79 - 0
doc/gpload/alarm.yml

@@ -0,0 +1,79 @@
+VERSION: 1.0.0.1
+DATABASE: sqmmt
+USER: gpadmin
+HOST: 192.168.70.109
+PORT: 5432
+GPLOAD:
+  INPUT:
+    - SOURCE:
+        LOCAL_HOSTNAME:
+          - 192.168.70.130
+        PORT: 54321
+        FILE:
+          - /data1/s130/alarm/csv/resultMap20220628132304.csv
+    - FORMAT: csv
+    - DELIMITER: ","
+    - HEADER: false
+    - ENCODING: utf-8
+    - ERROR_LIMIT: 20000000
+    - LOG_ERRORS: true
+  EXTERNAL:
+    - SCHEMA: tsfx
+  OUTPUT:
+    - TABLE: tsfx.dw_complain_realtime_alarm_h
+    - MODE: merge
+    - MATCH_COLUMNS:
+        - uniqueid
+        - sdate
+    - UPDATE_COLUMNS:
+        - sdate
+        - uniqueclearid
+        - eventtime
+        - canceltime
+        - status
+        - projectstatus
+        - vendoralarmserial
+        - alarmtitle
+        - vendorseverity
+        - vendoralarmtype
+        - specificproblem
+        - specificproblemid
+        - equipmentclass
+        - equipmentname
+        - locateneclass
+        - locatenename
+        - province
+        - region
+        - city
+        - grid
+        - area
+        - vendor
+        - specialty
+        - siteid
+        - roomid
+        - towersiteno
+        - proequipmentstatus
+        - projectname
+        - projectno
+        - projectstarttime
+        - projectendtime
+        - worksendstatus
+        - workstatus
+        - workno
+        - workarchivedtime
+        - workdutydep
+        - worksendperson
+        - alarmlogicclass
+        - alarmlogicsubclass
+        - standardalarmname
+        - alarmseverity
+        - standardalarmid
+        - effectonequipment
+        - effectonbusiness
+        - standardflag
+        - networktype
+        - equipmentdn
+        - locatenedn
+        - taccode
+        - tacid
+        - alarmtext

+ 45 - 0
doc/需求文档/告警入库报错.txt

@@ -0,0 +1,45 @@
+2022-07-26 09:17:00.156 ERROR 179932 --- [lerThreadPool-1] o.s.s.s.TaskUtils$LoggingErrorHandler    : Unexpected error occurred in scheduled task
+
+com.alibaba.fastjson.JSONException: illegal character <
+	at com.alibaba.fastjson.JSON.parseObject(JSON.java:193) ~[fastjson-2.0.7.graal.jar!/:na]
+	at com.nokia.alarm.service.AlarmSaveToFileService.getHttpSave(AlarmSaveToFileService.java:43) ~[classes!/:1.2]
+	at com.nokia.alarm.config.SchedulingConfig.lambda$null$0(SchedulingConfig.java:53) ~[classes!/:1.2]
+	at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) ~[spring-context-5.3.21.jar!/:5.3.21]
+	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_301]
+	at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_301]
+	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_301]
+	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.8.0_301]
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_301]
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_301]
+	at java.lang.Thread.run(Thread.java:748) [na:1.8.0_301]
+Caused by: com.alibaba.fastjson2.JSONException: illegal character <
+	at com.alibaba.fastjson2.JSONReaderUTF16.readFieldNameHashCode(JSONReaderUTF16.java:633) ~[fastjson2-2.0.7.graal.jar!/:na]
+	at com.alibaba.fastjson2.reader.ObjectReader4.readObject(ObjectReader4.java:253) ~[fastjson2-2.0.7.graal.jar!/:na]
+	at com.alibaba.fastjson.JSON.parseObject(JSON.java:183) ~[fastjson-2.0.7.graal.jar!/:na]
+	... 10 common frames omitted
+
+
+
+com.alibaba.fastjson.JSONException: illegal character C
+	at com.alibaba.fastjson.JSON.parseObject(JSON.java:193)
+	at com.nokia.alarm.service.AlarmSaveToFileService.getHttpUpdate(AlarmSaveToFileService.java:82)
+	at com.nokia.alarm.config.SchedulingConfig.lambda$configureTasks$1(SchedulingConfig.java:47)
+	at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
+	at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:95)
+	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
+	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
+	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
+	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+Caused by: com.alibaba.fastjson2.JSONException: illegal character C
+	at com.alibaba.fastjson2.JSONReaderUTF16.readFieldNameHashCode(JSONReaderUTF16.java:633)
+	at com.alibaba.fastjson2.reader.ObjectReader4.readObject(ObjectReader4.java:253)
+	at com.alibaba.fastjson.JSON.parseObject(JSON.java:183)
+
+2022-08-10 09:05:19.424  INFO 179932 --- [lerThreadPool-1] c.n.a.service.AlarmSaveToFileService     : 查询消除告警开始=====================================================
+java.lang.NullPointerException
+
+2022-08-10 08:40:00.000  INFO 179932 --- [lerThreadPool-1] c.n.a.service.AlarmSaveToFileService     : 查询新增告警开始=====================================================
+java.lang.NullPointerException

BIN
lib/opnc-sdk-1.0.0-SNAPSHOT.jar


+ 99 - 0
pom.xml

@@ -0,0 +1,99 @@
+<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <groupId>org.springframework.boot</groupId>
+        <version>2.6.9</version>
+    </parent>
+
+    <artifactId>alarm</artifactId>
+    <version>1.2</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <!-- 本地依赖开始 -->
+        <dependency>
+            <groupId>com.hl.opnc</groupId>
+            <artifactId>opnc-sdk</artifactId>
+            <version>1.0.0-SNAPSHOT</version>
+            <scope>system</scope>
+            <systemPath>${project.basedir}\lib\opnc-sdk-1.0.0-SNAPSHOT.jar</systemPath>
+        </dependency>
+        <!-- opnc-sdk 依赖开始 -->
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+            <version>4.5.13</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpmime</artifactId>
+            <version>4.5</version>
+        </dependency>
+        <!-- opnc-sdk 依赖结束 -->
+        <!-- 本地依赖结束 -->
+        <!-- mybatis -->
+        <dependency>
+            <groupId>org.mybatis.spring.boot</groupId>
+            <artifactId>mybatis-spring-boot-starter</artifactId>
+            <version>2.2.2</version>
+        </dependency>
+        <!-- postgresql数据库和greenplum数据库驱动 -->
+        <dependency>
+            <groupId>org.postgresql</groupId>
+            <artifactId>postgresql</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>2.0.7.graal</version>
+        </dependency>
+        <!-- commons-csv -->
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-csv</artifactId>
+            <version>1.9.0</version>
+        </dependency>
+        <!-- commons-beanutils -->
+        <dependency>
+            <groupId>commons-beanutils</groupId>
+            <artifactId>commons-beanutils-core</artifactId>
+            <version>1.8.3</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <!-- testSourceDirectory 测试代码的路径,有的ide是自动识别的 vscode需要通过pom进行配置 -->
+        <testSourceDirectory>src/test</testSourceDirectory>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <!-- 把systemPath指定的依赖一起打包到BOOT-INF/lib -->
+                    <includeSystemScope>true</includeSystemScope>
+                    <!-- 打包1个带exec的可执行jar包和一个不带exec的可作为依赖的jar包 -->
+                    <classifier>exec</classifier>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 13 - 0
src/main/java/com/nokia/alarm/AlarmApplication.java

@@ -0,0 +1,13 @@
+package com.nokia.alarm;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+@SpringBootApplication
+@EnableScheduling
+public class AlarmApplication {
+    public static void main(String[] args) {
+        SpringApplication.run(AlarmApplication.class, args);
+    }
+}

+ 60 - 0
src/main/java/com/nokia/alarm/config/SchedulingConfig.java

@@ -0,0 +1,60 @@
+package com.nokia.alarm.config;
+
+import java.util.Date;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+
+import com.nokia.alarm.service.AlarmSaveToFileService;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+@Configuration
+public class SchedulingConfig implements SchedulingConfigurer {
+
+    @Value("${scheduling.scheduler.pool.size:1}")
+    private int poolSize;
+
+    private final AlarmSaveToFileService service;
+
+    public SchedulingConfig(AlarmSaveToFileService service) {
+        this.service = service;
+    }
+
+    @Bean
+    public ThreadPoolTaskScheduler taskScheduler() {
+        // 使用最常用的ThreadPoolTaskScheduler
+        ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
+        // 线程数
+        taskScheduler.setPoolSize(poolSize);
+        taskScheduler.setRemoveOnCancelPolicy(true);
+        taskScheduler.setThreadNamePrefix("taskSchedulerThreadPool-");
+        log.info("已完成 ThreadPoolTaskScheduler 配置, poolSize = {}", poolSize);
+        return taskScheduler;
+    }
+
+    @Override
+    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+        taskRegistrar.setScheduler(taskScheduler());
+        taskRegistrar.addCronTask(() -> {
+            Date date = new Date();
+            try {
+                service.getHttpSave(date);
+                service.getHttpUpdate(date);
+            } catch (Exception e) {
+                e.printStackTrace();
+                // 延时 2 分钟重新调度一下
+                Date newDate = new Date(date.getTime() + 2 * 60000);
+                taskRegistrar.getScheduler().schedule(() -> {
+                    service.getHttpSave(newDate);
+                    service.getHttpUpdate(newDate);
+                }, newDate);
+            }
+        }, "0 */5 * * * ?");
+    }
+
+}

+ 19 - 0
src/main/java/com/nokia/alarm/entity/MessageCfg.java

@@ -0,0 +1,19 @@
+package com.nokia.alarm.entity;
+
+import java.util.List;
+
+import lombok.Data;
+
+@Data
+public class MessageCfg {
+    private String startTime;
+    private int pageSize;
+    private List<String> fileds;
+    private String endTime;
+    private int resultDataType;
+    private int resultFieldType;
+    private int pageNum;
+    private List<String> province;
+    private List<String> networkType;
+    private List<String> cancelTime;
+}

+ 13 - 0
src/main/java/com/nokia/alarm/entity/ResultInfo.java

@@ -0,0 +1,13 @@
+package com.nokia.alarm.entity;
+
+import java.util.List;
+
+import lombok.Data;
+
+@Data
+public class ResultInfo {
+    private String msg;
+    private int status;
+    private int total;
+    private List<ResultMap> result;
+}

+ 58 - 0
src/main/java/com/nokia/alarm/entity/ResultMap.java

@@ -0,0 +1,58 @@
+package com.nokia.alarm.entity;
+
+import lombok.Data;
+
+@Data
+public class ResultMap {
+    private String uniqueId;
+    private String uniqueClearId;
+    private String eventTime;
+    private String cancelTime;
+    private Integer status;
+    private Integer projectStatus;
+    private String vendorAlarmSerial;
+    private String alarmTitle;
+    private String vendorSeverity;
+    private String vendorAlarmType;
+    private String specificProblem;
+    private String specificProblemID;
+    private String equipmentClass;
+    private String equipmentName;
+    private String locateNeClass;
+    private String locateNeName;
+    private String province;
+    private String region;
+    private String city;
+    private String grid;
+    private String area;
+    private String vendor;
+    private Integer specialty;
+    private String siteId;
+    private String roomId;
+    private String towerSiteNo;
+    private Integer proEquipmentStatus;
+    private String projectName;
+    private String projectNo;
+    private String projectStartTime;
+    private String projectEndTime;
+    private Integer workSendStatus;
+    private Integer workStatus;
+    private String workNo;
+    private String workArchivedTime;
+    private String workDutyDep;
+    private String workSendPerson;
+    private String alarmLogicClass;
+    private String alarmLogicSubClass;
+    private String standardAlarmName;
+    private Integer alarmSeverity;
+    private String standardAlarmId;
+    private String effectOnEquipment;
+    private String effectOnBusiness;
+    private Integer standardFlag;
+    private Integer networkType;
+    private String locateNEDN;
+    private String equipmentDN;
+    private String tacCode;
+    private String tacId;
+    private String alarmText;
+}

+ 36 - 0
src/main/java/com/nokia/alarm/mapper/ResultMapDao.java

@@ -0,0 +1,36 @@
+package com.nokia.alarm.mapper;
+
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+
+import com.nokia.alarm.entity.ResultMap;
+
+@Mapper
+public interface ResultMapDao {
+
+    @Select("select count(1) from tsfx.dw_complain_realtime_alarm_h where uniqueId=#{uniqueId} and sdate = to_timestamp(#{eventTime}, 'yyyy-MM-dd HH24:00:00')")
+    int findByUniqueId(ResultMap result);
+
+    @Update("update tsfx.dw_complain_realtime_alarm_h set cancelTime=#{cancelTime},status=#{status},projectStatus=#{projectStatus},workStatus=#{workStatus}"
+            +" where uniqueId=#{uniqueId}")
+    void updateData(ResultMap result);
+
+    @Insert("insert into tsfx.dw_complain_realtime_alarm_h "
+            + "(sdate,uniqueid,uniqueclearid,eventtime,canceltime,status,projectstatus,vendoralarmserial,alarmtitle,"
+            + "vendorseverity,vendoralarmtype,specificproblem,specificproblemid,equipmentclass,equipmentname,locateneclass,"
+            + "locatenename,province,region,city,grid,area,vendor,specialty,siteid,roomid,towersiteno,proequipmentstatus,"
+            + "projectname,projectno,projectstarttime,projectendtime,worksendstatus,workstatus,workno,workarchivedtime,"
+            + "workdutydep,worksendperson,alarmlogicclass,alarmlogicsubclass,standardalarmname,alarmseverity,standardalarmid,"
+            + "effectonequipment,effectonbusiness,standardflag,networktype,equipmentdn,locatenedn,taccode,tacid,alarmtext) values "
+            + "(to_timestamp(#{eventTime}, 'yyyy-MM-dd HH24:00:00'),#{uniqueId},#{uniqueClearId},#{eventTime},#{cancelTime},"
+            + "#{status},#{projectStatus},#{vendorAlarmSerial},#{alarmTitle},#{vendorSeverity},#{vendorAlarmType},#{specificProblem},"
+            + "#{specificProblemID},#{equipmentClass},#{equipmentName},#{locateNeClass},#{locateNeName},#{province},#{region},#{city},"
+            + "#{grid},#{area},#{vendor},#{specialty},#{siteId},#{roomId},#{towerSiteNo},#{proEquipmentStatus},#{projectName},"
+            + "#{projectNo},#{projectStartTime},#{projectEndTime},#{workSendStatus},#{workStatus},#{workNo},#{workArchivedTime},"
+            + "#{workDutyDep},#{workSendPerson},#{alarmLogicClass},#{alarmLogicSubClass},#{standardAlarmName},#{alarmSeverity},"
+            + "#{standardAlarmId},#{effectOnEquipment},#{effectOnBusiness},#{standardFlag},#{networkType},#{locateNEDN},"
+            + "#{equipmentDN},#{tacCode},#{tacId},#{alarmText})")
+    void insertData(ResultMap result);
+}

+ 104 - 0
src/main/java/com/nokia/alarm/service/AlarmSaveToFileService.java

@@ -0,0 +1,104 @@
+package com.nokia.alarm.service;
+
+import java.io.IOException;
+import java.util.Date;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import com.alibaba.fastjson.JSON;
+import com.hl.opnc.AbilityResponse;
+import com.hl.opnc.ResponseBody;
+import com.hl.opnc.invoke.AbilityInvokeManager;
+import com.hl.opnc.invoke.InvokeManager;
+import com.nokia.alarm.entity.MessageCfg;
+import com.nokia.alarm.entity.ResultInfo;
+import com.nokia.alarm.entity.ResultMap;
+import com.nokia.alarm.util.ExportUtil;
+import com.nokia.alarm.util.SDKUtil;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+@Service
+public class AlarmSaveToFileService {
+    @Value("${httpurl:http://192.168.70.125:12090/esb/HEB_AlarmCustomQuery/0?authcode=SEVCX1VDSUFQI0BhdXRoQCNTWnFsVk9QeA}")
+    private String methodUrl;
+    @Value("${appId:0f9bf497549343e68ca36b4caffbc8c4}")
+    private String appId;
+    @Value("${secret:087b1ceb698140cd8c65543f5ace0490}")
+    private String secret;
+
+    public void getHttpSave(Date date) {
+        log.info("查询新增告警开始=====================================================");
+        InvokeManager manager = new AbilityInvokeManager(appId, secret);
+        MessageCfg cfg = SDKUtil.getBody(date);
+        AbilityResponse response = manager.post(methodUrl, null, JSON.toJSONString(cfg));
+        try {
+            ResponseBody resObj = response.getRespObj();
+            String body = (String) resObj.getUNI_NET_BODY();
+            log.info(body);
+            // body = body.replace("null", "\"\"");
+            ResultInfo info = JSON.parseObject(body, ResultInfo.class);
+            int rows = info.getTotal();
+            log.info("新增告警返回数据{}条", rows);
+            List<ResultMap> results = info.getResult();
+            // 写入文件
+            String dString = ExportUtil.saveToCsv(results);
+            // gpload
+            String gploadCommand = "sh /data1/s130/alarm/gpload/alarm.sh " + dString;
+            log.info("新增告警goload:----{}", gploadCommand);
+            try {
+                int exitCode = Runtime.getRuntime().exec(gploadCommand).waitFor();
+                log.info("新增告警gpload完成。。。。。{}", exitCode);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+                log.error("新增告警gpload失败: {}", e.getMessage());
+            }
+            log.info("查询新增告警完成=====================================================");
+        } catch (IOException e) {
+            log.info("查询新增告警出错=====================================================");
+            e.printStackTrace();
+        } finally {
+            try {
+                response.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+
+        }
+    }
+
+    public void getHttpUpdate(Date date) {
+        log.info("查询消除告警开始=====================================================");
+        InvokeManager manager = new AbilityInvokeManager(appId, secret);
+        MessageCfg cfg = SDKUtil.gethistoryBody(date);
+        AbilityResponse response = manager.post(methodUrl, null, JSON.toJSONString(cfg));
+        try {
+            ResponseBody resObj = response.getRespObj();
+            String body = (String) resObj.getUNI_NET_BODY();
+            // body = body.replace("null", "\"\"");
+            ResultInfo info = JSON.parseObject(body, ResultInfo.class);
+            int rows = info.getTotal();
+            log.info("消除告警返回数据{}条", rows);
+            List<ResultMap> results = info.getResult();
+            // 写入文件
+            String dString = ExportUtil.saveToCsv(results);
+            // gpload
+            String gploadCommand = "sh /data1/s130/alarm/gpload/alarm.sh " + dString;
+            log.info("消除告警goload:----{}", gploadCommand);
+            try {
+                int exitCode = Runtime.getRuntime().exec(gploadCommand).waitFor();
+                log.info("消除告警gpload完成。。。。。{}", exitCode);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+                log.error("消除告警gpload失败: {}", e.getMessage());
+            }
+            log.info("查询消除告警完成=====================================================");
+        } catch (IOException e) {
+            log.info("查询消除告警出错=====================================================");
+            e.printStackTrace();
+        }
+    }
+}

+ 58 - 0
src/main/java/com/nokia/alarm/service/ResultMapService.java

@@ -0,0 +1,58 @@
+package com.nokia.alarm.service;
+
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.nokia.alarm.entity.ResultMap;
+import com.nokia.alarm.mapper.ResultMapDao;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+@Service
+public class ResultMapService {
+
+    private final ResultMapDao resultMapDao;
+
+    public ResultMapService(ResultMapDao resultMapDao) {
+        this.resultMapDao = resultMapDao;
+    }
+
+    public boolean isExist(ResultMap resultMap) {
+        int count = resultMapDao.findByUniqueId(resultMap);
+        return count != 0;
+    }
+
+    @Transactional
+    public void updateOrInsertData(List<ResultMap> results) {
+        if (results != null) {
+            for (ResultMap result : results) {
+                if (isExist(result)) {
+                    log.info("2222============================================================================");
+                    resultMapDao.updateData(result);
+                } else {
+                    log.info("1111============================================================================");
+                    resultMapDao.insertData(result);
+                }
+                try {
+                    log.info("1111============================================================================");
+                    resultMapDao.insertData(result);
+                } catch (Exception e) {
+                    log.info("2222============================================================================");
+                    if (e.getMessage().indexOf("duplicate key value violates unique constraint") != -1) {
+                        resultMapDao.updateData(result);
+                    }
+                }
+            }
+        }
+    }
+
+    @Transactional
+    public void insertdata(List<ResultMap> results) {
+        for (ResultMap result : results) {
+            resultMapDao.insertData(result);
+        }
+    }
+}

+ 119 - 0
src/main/java/com/nokia/alarm/util/ExportUtil.java

@@ -0,0 +1,119 @@
+package com.nokia.alarm.util;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.nio.charset.StandardCharsets;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.commons.csv.CSVFormat;
+import org.apache.commons.csv.CSVPrinter;
+
+import com.nokia.alarm.entity.ResultMap;
+
+public class ExportUtil {
+    public static String filePath = "csv";
+    public static String fileNamePrifix = "resultMap";
+    public static final String recordSeparator = "\r\n";
+    public static final char delimiter = ',';
+
+    public static String saveToCsv(List<ResultMap> results) {
+        DateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
+        String dString = format.format(new Date());
+        File file = new File(filePath, fileNamePrifix + dString + ".csv");
+        if (!file.getParentFile().exists()) {
+            file.getParentFile().mkdirs();
+        }
+        Appendable writer = null;
+        CSVPrinter printer = null;
+        CSVFormat csvFormat = CSVFormat.DEFAULT.builder()
+                .setRecordSeparator(recordSeparator)
+                .setDelimiter(delimiter)
+                .build();
+        try {
+            writer = new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8);
+            printer = csvFormat.print(writer);
+            for (ResultMap resultMap : results) {
+                Object[] arr = toArray(resultMap);
+                if (arr != null) {
+                    printer.printRecord(arr);
+                }
+            }
+            printer.flush();
+            printer.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return dString;
+    }
+
+    private static Object[] toArray(ResultMap resultMap) {
+        DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        DateFormat format2 = new SimpleDateFormat("yyyy-MM-dd HH:00:00");
+        String sdate = resultMap.getEventTime();
+        try {
+            sdate = format2.format(format1.parse(sdate));
+            return new Object[] { sdate,
+                    resultMap.getUniqueId(),
+                    resultMap.getUniqueClearId(),
+                    resultMap.getEventTime(),
+                    resultMap.getCancelTime(),
+                    resultMap.getStatus(),
+                    resultMap.getProjectStatus(),
+                    resultMap.getVendorAlarmSerial(),
+                    resultMap.getAlarmTitle(),
+                    resultMap.getVendorSeverity(),
+                    resultMap.getVendorAlarmType(),
+                    resultMap.getSpecificProblem(),
+                    resultMap.getSpecificProblemID(),
+                    resultMap.getEquipmentClass(),
+                    resultMap.getEquipmentName(),
+                    resultMap.getLocateNeClass(),
+                    resultMap.getLocateNeName(),
+                    resultMap.getProvince(),
+                    resultMap.getRegion(),
+                    resultMap.getCity(),
+                    resultMap.getGrid(),
+                    resultMap.getArea(),
+                    resultMap.getVendor(),
+                    resultMap.getSpecialty(),
+                    resultMap.getSiteId(),
+                    resultMap.getRoomId(),
+                    resultMap.getTowerSiteNo(),
+                    resultMap.getProEquipmentStatus(),
+                    resultMap.getProjectName(),
+                    resultMap.getProjectNo(),
+                    resultMap.getProjectStartTime(),
+                    resultMap.getProjectEndTime(),
+                    resultMap.getWorkSendStatus(),
+                    resultMap.getWorkStatus(),
+                    resultMap.getWorkNo(),
+                    resultMap.getWorkArchivedTime(),
+                    resultMap.getWorkDutyDep(),
+                    resultMap.getWorkSendPerson(),
+                    resultMap.getAlarmLogicClass(),
+                    resultMap.getAlarmLogicSubClass(),
+                    resultMap.getStandardAlarmName(),
+                    resultMap.getAlarmSeverity(),
+                    resultMap.getStandardAlarmId(),
+                    resultMap.getEffectOnEquipment(),
+                    resultMap.getEffectOnBusiness(),
+                    resultMap.getStandardFlag(),
+                    resultMap.getNetworkType(),
+                    resultMap.getEquipmentDN(),
+                    resultMap.getLocateNEDN(),
+                    resultMap.getTacCode(),
+                    resultMap.getTacId(),
+                    resultMap.getAlarmText()
+            };
+        } catch (ParseException e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+}

+ 87 - 0
src/main/java/com/nokia/alarm/util/SDKUtil.java

@@ -0,0 +1,87 @@
+package com.nokia.alarm.util;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+import com.nokia.alarm.entity.MessageCfg;
+
+public class SDKUtil {
+    private final static DateFormat FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+    public static MessageCfg getBody(Date date) {
+        // 查询开始时间
+        String startTime = addDateMinut(date, -35);
+        // 查询结束时间
+        String endTime = addDateMinut(date, -30);
+        MessageCfg cfg = new MessageCfg();
+        cfg.setStartTime(startTime);
+        cfg.setEndTime(endTime);
+        cfg.setResultDataType(1);
+        cfg.setResultFieldType(1);
+        cfg.setPageNum(0);
+        List<String> provincelist = new ArrayList<>();
+        provincelist.add("河北省");
+        cfg.setProvince(provincelist);
+        List<String> networklist = new ArrayList<>();
+        networklist.add("104");
+        networklist.add("105");
+        cfg.setNetworkType(networklist);
+        cfg.setPageSize(10000);
+        return cfg;
+    }
+
+    public static MessageCfg gethistoryBody(Date date) {
+        // 查询开始时间 1个月前
+        String startTime = addDateMonth(date, -1);
+        // 查询结束时间 当前时间
+        String endTime = FORMAT.format(date);
+        MessageCfg cfg = new MessageCfg();
+        cfg.setStartTime(startTime);
+        cfg.setEndTime(endTime);
+        cfg.setResultDataType(1);
+        cfg.setResultFieldType(1);
+        cfg.setPageNum(0);
+        List<String> provincelist = new ArrayList<>();
+        provincelist.add("河北省");
+        cfg.setProvince(provincelist);
+        List<String> networklist = new ArrayList<>();
+        networklist.add("104");
+        networklist.add("105");
+        List<String> cancelTime = new ArrayList<>();
+        // 告警消除的开始时间
+        cancelTime.add(addDateMinut(date, -35));
+        // 告警消除的结束时间
+        cancelTime.add(addDateMinut(date, -30));
+        cfg.setCancelTime(cancelTime);
+        cfg.setNetworkType(networklist);
+        cfg.setPageSize(10000);
+        return cfg;
+    }
+
+    public static String addDateMonth(Date date, int x) {
+        if (date == null)
+            return "";
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(date);
+        cal.add(Calendar.MONTH, x);// 24小时制
+        date = cal.getTime();
+        cal = null;
+        return FORMAT.format(date);
+    }
+
+    private static String addDateMinut(Date date, int x) {
+        // 引号里面个格
+        if (date == null)
+            return "";
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(date);
+        cal.add(Calendar.MINUTE, x);// 24小时制
+        date = cal.getTime();
+        cal = null;
+        return FORMAT.format(date);
+    }
+}

+ 23 - 0
src/main/resources/application.properties

@@ -0,0 +1,23 @@
+sever.port=8081
+
+# # 本地postgresql
+# spring.datasource.driverClassName=org.postgresql.Driver
+# spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
+# spring.datasource.username=postgres
+# spring.datasource.password=fantuan
+
+# 70.109 GreenPlum数据库
+spring.datasource.driverClassName=org.postgresql.Driver
+spring.datasource.url=jdbc:postgresql://192.168.70.109:5432/sqmmt
+spring.datasource.username=sqmdb
+spring.datasource.password=sqmdb_1QAZ
+
+# log配置
+logging.level.com.nokia=info
+# logging.file.name=log/alarm.log
+# logging.charset.file=utf-8
+# logging.charset.console=utf-8
+
+httpurl=http://192.168.70.125:12090/esb/HEB_AlarmCustomQuery/0?authcode=SEVCX1VDSUFQI0BhdXRoQCNTWnFsVk9QeA
+
+# httpurl=http://10.160.84.7:8888/esb/HEB_AlarmCustomQuery/0?authcode=SEVCX1VDSUFQI0BhdXRoQCNTWnFsVk9QeA

+ 41 - 0
src/test/com/nokia/alarm/mapper/ResultMapDaoTest.java

@@ -0,0 +1,41 @@
+package com.nokia.alarm.mapper;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import com.nokia.alarm.entity.ResultMap;
+
+@SpringBootTest
+public class ResultMapDaoTest {
+
+    @Autowired
+    private ResultMapDao resultMapDao;
+
+    @Test
+    void testUpdateData() {
+        ResultMap result = new ResultMap();
+        result.setUniqueId("aaa");
+        result.setCancelTime("2022-6-27 11:00:00");
+        resultMapDao.updateData(result);
+        System.out.println("done!");
+    }
+
+    @Test
+    void testInsertdata() {
+        ResultMap result = new ResultMap();
+        result.setUniqueId("aaa");
+        result.setEventTime("2022-06-27 15:57:05");
+        resultMapDao.insertData(result);
+        System.out.println("done!");
+    }
+
+    @Test
+    void findByUniqueId() {
+        ResultMap result = new ResultMap();
+        result.setUniqueId("24604231315990233716931359656937819837");
+        result.setEventTime("2022-06-27 19:24:58");
+        int findByUniqueId = resultMapDao.findByUniqueId(result);
+        System.out.println(findByUniqueId);
+    }
+}

+ 31 - 0
src/test/com/nokia/alarm/service/AlarmSaveToFileServiceTest.java

@@ -0,0 +1,31 @@
+package com.nokia.alarm.service;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+public class AlarmSaveToFileServiceTest {
+
+    @Autowired
+    private AlarmSaveToFileService service;
+
+    @Test
+    void testGetHttpSave() throws ParseException {
+        DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.sss");
+        Date date = format.parse("2022-08-08 05:35:00.000");
+        service.getHttpSave(date);
+    }
+
+    @Test
+    void testGetHttpUpdate() throws ParseException {
+        DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.sss");
+        Date date = format.parse("2022-06-28 16:55:00.000");
+        service.getHttpUpdate(date);
+    }
+}