lifuquan 6 일 전
부모
커밋
3d2d020193

+ 2 - 0
doc/dw_complain_realtime_alarm_h.sql

@@ -53,3 +53,5 @@ CREATE TABLE tsfx.dw_complain_realtime_alarm_h
     tacid              varchar(200) NULL,
     alarmtext          text NULL
 ) DISTRIBUTED BY (uniqueid);
+
+CREATE TABLE dw_complain_realtime_alarm_h ( sdate timestamp without time zone, uniqueid character varying(200), uniqueclearid character varying(200), eventtime character varying(50), canceltime character varying(50), status numeric, projectstatus numeric, vendoralarmserial character varying(200), alarmtitle character varying(200), vendorseverity character varying(200), vendoralarmtype character varying(200), specificproblem character varying(1000), specificproblemid character varying(200), equipmentclass character varying(200), equipmentname character varying(1000), locateneclass character varying(500), locatenename character varying(1000), province character varying(200), region character varying(200), city character varying(200), grid character varying(200), area character varying(200), vendor character varying(200), specialty numeric, siteid character varying(200), roomid character varying(1000), towersiteno character varying(200), proequipmentstatus numeric, projectname character varying(200), projectno character varying(200), projectstarttime character varying(200), projectendtime character varying(200), worksendstatus numeric, workstatus numeric, workno character varying(200), workarchivedtime character varying(200), workdutydep character varying(200), worksendperson character varying(200), alarmlogicclass character varying(200), alarmlogicsubclass character varying(200), standardalarmname character varying(1000), alarmseverity numeric, standardalarmid character varying(500), effectonequipment character varying(200), effectonbusiness character varying(200), standardflag numeric, networktype numeric, equipmentdn character varying(500), locatenedn character varying(500), taccode character varying(500), tacid character varying(200), alarmtext text );

+ 5 - 5
pom.xml

@@ -9,7 +9,7 @@
     </parent>
 
     <artifactId>alarm</artifactId>
-    <version>1.3</version>
+    <version>1.4</version>
     <packaging>jar</packaging>
 
     <properties>
@@ -38,6 +38,7 @@
             <version>1.0.0-SNAPSHOT</version>
             <scope>system</scope>
             <systemPath>${project.basedir}/lib/opnc-sdk-1.0.0-SNAPSHOT.jar</systemPath>
+            <optional>true</optional>
         </dependency>
         <!-- opnc-sdk 依赖开始 -->
         <dependency>
@@ -52,11 +53,10 @@
         </dependency>
         <!-- opnc-sdk 依赖结束 -->
         <!-- 本地依赖结束 -->
-        <!-- mybatis -->
+        <!-- spring-boot-starter-jdbc -->
         <dependency>
-            <groupId>org.mybatis.spring.boot</groupId>
-            <artifactId>mybatis-spring-boot-starter</artifactId>
-            <version>2.2.2</version>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-jdbc</artifactId>
         </dependency>
         <!-- postgresql数据库和greenplum数据库驱动 -->
         <dependency>

+ 2 - 1
src/main/java/com/nokia/alarm/AlarmApplication.java

@@ -2,9 +2,10 @@ package com.nokia.alarm;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
 import org.springframework.scheduling.annotation.EnableScheduling;
 
-@SpringBootApplication
+@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
 @EnableScheduling
 public class AlarmApplication {
     public static void main(String[] args) {

+ 59 - 0
src/main/java/com/nokia/alarm/config/BeanConfig.java

@@ -0,0 +1,59 @@
+package com.nokia.alarm.config;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
+
+import com.zaxxer.hikari.HikariConfig;
+import com.zaxxer.hikari.HikariDataSource;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+@Configuration
+
+public class BeanConfig {
+
+    @Value("${scheduling.scheduler.pool.size:5}")
+    private int poolSize;
+
+    @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;
+    }
+
+    // 使用gpload速度较快
+    @Bean("pgJdbcTemplate")
+    public JdbcTemplate pgJdbcTemplate() {
+        HikariConfig config = new HikariConfig();
+        config.setDriverClassName("org.postgresql.Driver");
+        config.setJdbcUrl("jdbc:postgresql://192.168.70.172:5432/sqmmt");
+        config.setUsername("sqmdb");
+        config.setPassword("sqmdb_1QAZ");
+        config.setMaximumPoolSize(1);
+        config.setMinimumIdle(1);
+        return new JdbcTemplate(new HikariDataSource(config));
+    }
+
+    // @Bean("gpJdbcTemplate")
+    public JdbcTemplate gpJdbcTemplate() {
+        HikariConfig config = new HikariConfig();
+        config.setDriverClassName("org.postgresql.Driver");
+        config.setJdbcUrl("jdbc:postgresql://192.168.70.109:5432/sqmmt");
+        config.setUsername("sqmdb");
+        config.setPassword("sqmdb_1QAZ");
+        config.setMaximumPoolSize(1);
+        config.setMinimumIdle(1);
+        return new JdbcTemplate(new HikariDataSource(config));
+    }
+
+}

+ 7 - 4
src/main/java/com/nokia/alarm/config/CronTaskConfig.java

@@ -38,19 +38,22 @@ public class CronTaskConfig implements SchedulingConfigurer {
                 service.newAlarm(date);
                 service.updateAlarm(date);
             });
-        }, "0 */5 * * * ?");
+        }, "0 0/5 * * * ?");
 
         // 删除临时文件的任务
         taskRegistrar.addCronTask(() -> {
             String day = DateTimeFormatter.ofPattern("yyyyMMdd").withZone(ZoneId.of("Asia/Shanghai"))
-                    .format(LocalDate.now().plusDays(-7));
+                    .format(LocalDate.now().plusDays(-8));
             try {
-                Runtime.getRuntime().exec("rm /data1/s130/allarm/csv/resultMap" + day + "*").waitFor();
+                String command = "rm /data1/s130/alarm/csv/resultMap" + day + "*.csv -rf";
+                log.info("删除文件 {} ...", command);
+                int waitFor = Runtime.getRuntime().exec(new String[] { "/bin/sh", "-c", command }).waitFor();
+                log.info("删除文件完成 {} ...", waitFor);
             } catch (InterruptedException | IOException e) {
                 e.printStackTrace();
                 log.error("删除文件出错...");
             }
-        }, "0 0 0 * * ?");
+        }, "0 29 18 * * ?");
 
         log.info("已开启周期任务调度...");
     }

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

@@ -1,31 +0,0 @@
-package com.nokia.alarm.config;
-
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@Configuration
-
-public class SchedulingConfig {
-
-    @Value("${scheduling.scheduler.pool.size:5}")
-    private int poolSize;
-
-    @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;
-    }
-
-    
-
-}

+ 27 - 0
src/main/java/com/nokia/alarm/mapper/GpResultMapDao.java

@@ -0,0 +1,27 @@
+package com.nokia.alarm.mapper;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.jdbc.core.JdbcTemplate;
+
+// @Component
+public class GpResultMapDao {
+
+    @Autowired
+    @Qualifier("gpJdbcTemplate")
+    private JdbcTemplate jdbcTemplate;
+
+    public void batchInsert(List<Object[]> data) {
+        String sql = "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 "
+                + "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
+        jdbcTemplate.batchUpdate(sql, data);
+    }
+}

+ 28 - 0
src/main/java/com/nokia/alarm/mapper/PgResultMapDao.java

@@ -0,0 +1,28 @@
+package com.nokia.alarm.mapper;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Component;
+
+@Component
+public class PgResultMapDao {
+
+    @Autowired
+    @Qualifier("pgJdbcTemplate")
+    private JdbcTemplate jdbcTemplate;
+
+    public void batchInsert(List<Object[]> data) {
+        String sql = "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 "
+                + "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
+        jdbcTemplate.batchUpdate(sql, data);
+    }
+}

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

@@ -1,37 +0,0 @@
-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;
-
-/* cspell:disable */
-@Mapper
-public interface ResultMapDao {
-
-        @Select("select count(1) from app_screen.dw_complain_realtime_alarm_h where sdate = to_timestamp(#{eventTime}, 'yyyy-MM-dd HH24:00:00') and uniqueId=#{uniqueId}")
-        int findByUniqueId(ResultMap result);
-
-        @Update("update app_screen.dw_complain_realtime_alarm_h set cancelTime=#{cancelTime},status=#{status},projectStatus=#{projectStatus},workStatus=#{workStatus}"
-                        + " where sdate=to_timestamp(#{eventTime}, 'yyyy-MM-dd HH24:00:00') and uniqueId=#{uniqueId}")
-        void updateData(ResultMap result);
-
-        @Insert("insert into app_screen.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);
-}

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

@@ -1,133 +0,0 @@
-package com.nokia.alarm.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;
-
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
-
-import java.io.IOException;
-import java.util.Date;
-import java.util.List;
-
-@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 {
-            String responseStr = response.getRespStr();
-            ResponseBody resObj;
-            try {
-                resObj = JSON.parseObject(responseStr, ResponseBody.class);
-            } catch (Exception e) {
-                log.error("返回消息json解析错误: {}", responseStr);
-                e.printStackTrace();
-                return;
-            }
-            String body = (String) resObj.getUNI_NET_BODY();
-            // log.info(body);
-            // body = body.replace("null", "\"\"");
-            ResultInfo info;
-            try {
-                info = JSON.parseObject(body, ResultInfo.class);
-            } catch (Exception e) {
-                log.error("返回消息json解析错误: {}", responseStr);
-                e.printStackTrace();
-                return;
-            }
-            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 (Exception 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 {
-            String responseStr = response.getRespStr();
-            ResponseBody resObj;
-            try {
-                resObj = JSON.parseObject(responseStr, ResponseBody.class);
-            } catch (Exception e) {
-                log.error("返回消息json解析错误: {}", responseStr);
-                e.printStackTrace();
-                return;
-            }
-            String body = (String) resObj.getUNI_NET_BODY();
-            // body = body.replace("null", "\"\"");
-            ResultInfo info;
-            try {
-                info = JSON.parseObject(body, ResultInfo.class);
-            } catch (Exception e) {
-                log.error("返回消息json解析错误: {}", responseStr);
-                e.printStackTrace();
-                return;
-            }
-            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 (Exception e) {
-            log.info("查询消除告警出错=====================================================");
-            e.printStackTrace();
-        }
-    }
-}

+ 69 - 32
src/main/java/com/nokia/alarm/service/AlarmSaveToGPandPGService.java

@@ -7,6 +7,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.nokia.alarm.entity.ResultMap;
+import com.nokia.alarm.util.ExportUtil;
+
 import lombok.extern.slf4j.Slf4j;
 
 @Slf4j
@@ -19,47 +21,82 @@ public class AlarmSaveToGPandPGService {
     @Autowired
     private ResultMapService resultMapService;
 
+    @Autowired
+    private SmsSendService smsSendService;
+
     public void newAlarm(Date date) {
         long start = System.currentTimeMillis();
         // 获取新增告警
         List<ResultMap> results = apiCallService.getNewAlarm(date);
-        // // 使用gpload入库到GP数据库
-        // // 写入文件
-        // String dString = ExportUtil.saveToCsv(results);
-        // // gpload
-        // String gploadCommand = "sh /data1/s130/alarm/gpload/alarm.sh " + dString;
-        // log.info("新增告警gpload:--{}", gploadCommand);
-        // try {
-        //     int exitCode = Runtime.getRuntime().exec(gploadCommand).waitFor();
-        //     log.info("新增告警gpload完成...{}, 耗时 {} 毫秒...", exitCode, System.currentTimeMillis() - start);
-        // } catch (InterruptedException | IOException e) {
-        //     e.printStackTrace();
-        //     log.error("新增告警gpload失败: {}", e.getMessage());
-        // }
-        // 通过轮询批量插入PG数据库
-        resultMapService.insertData(results);
-        log.info("新增告警 {} 时间 入库PG完成, 耗时 {} 毫秒...", date, (System.currentTimeMillis() - start));
+        log.debug("新增告警 {} 时间 获取耗时 {} 毫秒...", date, (System.currentTimeMillis() - start));
+        if (results == null || results.size() == 0) {
+            log.info("新增告警 {} 时间 没有数据...", date);
+            return;
+        }
+        // 使用gpload入库到GP数据库
+        // 写入文件
+        String dString = ExportUtil.saveToCsv(results, date);
+        // gpload
+        String gploadCommand = "sh /data1/s130/alarm/gpload/alarm.sh " + dString;
+        log.info("新增告警gpload:--{}", gploadCommand);
+        try {
+            start = System.currentTimeMillis();
+            int exitCode = Runtime.getRuntime().exec(gploadCommand).waitFor();
+            log.info("新增告警gpload完成...{}, 耗时 {} 毫秒...", exitCode, System.currentTimeMillis() - start);
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("新增告警gpload失败: {}", e.getMessage());
+            // 发送短信
+            smsSendService.send("13231899751", date + "新增告警gpload失败, 请检查!");
+        }
+        // 批量插入到PG数据库
+        try {
+            start = System.currentTimeMillis();
+            resultMapService.pgBatchInsert(results, date);
+            log.debug("新增告警 {} 时间 入库PG完成, 耗时 {} 毫秒...", date, (System.currentTimeMillis() - start));
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("新增告警 入库PG失败: {}", e.getMessage());
+            // 发送短信
+            smsSendService.send("13231899751", date + "新增告警入库PG失败, 请检查!");
+        }
     }
 
     public void updateAlarm(Date date) {
         long start = System.currentTimeMillis();
         // 获取取消告警
         List<ResultMap> results = apiCallService.getCanceledAlarm(date);
-        // // 通过gpload入库到GP数据库
-        // // 写入文件
-        // String dString = ExportUtil.saveToCsv(results);
-        // // gpload
-        // String gploadCommand = "sh /data1/s130/alarm/gpload/alarm.sh " + dString;
-        // log.info("消除告警gpload:--{}", gploadCommand);
-        // try {
-        //     int exitCode = Runtime.getRuntime().exec(gploadCommand).waitFor();
-        //     log.info("消除告警gpload完成。。。。。{}", exitCode);
-        // } catch (InterruptedException | IOException e) {
-        //     e.printStackTrace();
-        //     log.error("消除告警gpload失败: {}", e.getMessage());
-        // }
-        // 通过resultMapService更新到PG数据库
-        resultMapService.updateOrInsertData(results);
-        log.info("消除告警 {} 时间 入库完成, 耗时 {} 毫秒...", date, (System.currentTimeMillis() - start));
+        log.debug("消除告警 {} 时间 获取耗时 {} 毫秒...", date, (System.currentTimeMillis() - start));
+        if (results == null || results.size() == 0) {
+            log.info("消除告警 {} 时间 没有数据...", date);
+            return; 
+        }
+        // 使用gpload入库到GP数据库
+        // 写入文件
+        String dString = ExportUtil.saveToCsv(results, date);
+        // gpload
+        String gploadCommand = "sh /data1/s130/alarm/gpload/alarm.sh " + dString;
+        log.info("消除告警gpload:--{}", gploadCommand);
+        try {
+            start = System.currentTimeMillis();
+            int exitCode = Runtime.getRuntime().exec(gploadCommand).waitFor();
+            log.info("消除告警gpload完成...{}, 耗时 {} 毫秒...", exitCode, System.currentTimeMillis() - start);
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("消除告警gpload失败: {}", e.getMessage());
+            // 发送短信
+            smsSendService.send("13231899751", date + "消除告警gpload失败, 请检查!");
+        }
+        // 批量插入到PG数据库
+        try {
+            start = System.currentTimeMillis();
+            resultMapService.pgBatchInsert(results, date);
+            log.debug("消除告警 {} 时间 入库PG完成, 耗时 {} 毫秒...", date, (System.currentTimeMillis() - start));
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("消除告警 入库PG失败: {}", e.getMessage());
+            // 发送短信
+            smsSendService.send("13231899751", date + "消除告警入库PG失败, 请检查!");
+        }
     }
 }

+ 16 - 0
src/main/java/com/nokia/alarm/service/ApiCallService.java

@@ -4,6 +4,7 @@ import java.io.IOException;
 import java.util.Date;
 import java.util.List;
 
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
@@ -30,6 +31,9 @@ public class ApiCallService {
     @Value("${secret:087b1ceb698140cd8c65543f5ace0490}")
     private String secret;
 
+    @Autowired
+    private SmsSendService smsService;
+
     public List<ResultMap> getNewAlarm(Date date) {
         log.info("查询新增告警开始...");
         InvokeManager manager = new AbilityInvokeManager(appId, secret);
@@ -43,6 +47,8 @@ public class ApiCallService {
             } catch (Exception e) {
                 log.error("返回消息json解析错误: {}", responseStr);
                 e.printStackTrace();
+                // 发送短信
+                smsService.send("13231899751", date + " 查询新增告警 返回消息第一层json解析错误");
                 return null;
             }
             String body = (String) resObj.getUNI_NET_BODY();
@@ -54,6 +60,8 @@ public class ApiCallService {
             } catch (Exception e) {
                 log.error("返回消息json解析错误: {}", responseStr);
                 e.printStackTrace();
+                // 发送短信
+                smsService.send("13231899751", date + " 查询新增告警 返回消息第二层json解析错误");
                 return null;
             }
             int rows = info.getTotal();
@@ -61,6 +69,8 @@ public class ApiCallService {
             return info.getResult();
         } catch (Exception e) {
             log.error("查询新增告警出错: {}", e.getMessage());
+            // 发送短信
+            smsService.send("13231899751", date + " 查询新增告警出错" + e.getMessage());
             e.printStackTrace();
             return null;
         } finally {
@@ -85,6 +95,8 @@ public class ApiCallService {
             } catch (Exception e) {
                 log.error("返回消息json解析错误: {}", responseStr);
                 e.printStackTrace();
+                // 发送短信
+                smsService.send("13231899751", date + " 查询消除告警 返回消息第一层json解析错误");
                 return null;
             }
             String body = (String) resObj.getUNI_NET_BODY();
@@ -95,6 +107,8 @@ public class ApiCallService {
             } catch (Exception e) {
                 log.error("返回消息json解析错误: {}", responseStr);
                 e.printStackTrace();
+                // 发送短信
+                smsService.send("13231899751", date + " 查询消除告警 返回消息第二层json解析错误");
                 return null;
             }
             int rows = info.getTotal();
@@ -103,6 +117,8 @@ public class ApiCallService {
         } catch (Exception e) {
             log.error("查询消除告警出错: {}...", e.getMessage());
             e.printStackTrace();
+            // 发送短信
+            smsService.send("13231899751", date + " 查询消除告警出错" + e.getMessage());
             return null;
         } finally {
             try {

+ 86 - 28
src/main/java/com/nokia/alarm/service/ResultMapService.java

@@ -1,10 +1,17 @@
 package com.nokia.alarm.service;
 
+import java.util.Date;
+import java.sql.Timestamp;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.List;
 
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
 import com.nokia.alarm.entity.ResultMap;
-import com.nokia.alarm.mapper.ResultMapDao;
+import com.nokia.alarm.mapper.PgResultMapDao;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -12,37 +19,88 @@ import lombok.extern.slf4j.Slf4j;
 @Service
 public class ResultMapService {
 
-    private final ResultMapDao resultMapDao;
-
-    public ResultMapService(ResultMapDao resultMapDao) {
-        this.resultMapDao = resultMapDao;
-    }
+    @Autowired
+    private PgResultMapDao pgResultMapDao;
 
-    public boolean isExist(ResultMap resultMap) {
-        int count = resultMapDao.findByUniqueId(resultMap);
-        return count != 0;
-    }
+    // @Autowired
+    // private GpResultMapDao gpResultMapDao;
 
-    public void updateOrInsertData(List<ResultMap> results) {
-        if (results != null) {
-            for (ResultMap result : results) {
-                if (isExist(result)) {
-                    log.debug("更新数据 {}", result.getUniqueId());
-                    resultMapDao.updateData(result);
-                } else {
-                    resultMapDao.insertData(result);
-                }
-            }
+    public void pgBatchInsert(List<ResultMap> resultMaps, Date date) {
+        long start = System.currentTimeMillis();
+        List<Object[]> objects = new ArrayList<>();
+        for (ResultMap resultMap : resultMaps) {
+            objects.add(tObjects(resultMap, date));
         }
+        pgResultMapDao.batchInsert(objects);
+        log.info("批量插入PG数据库耗时: {}ms", System.currentTimeMillis() - start);
     }
 
-    public void insertData(List<ResultMap> results) {
-        if (results != null) {
-            for (ResultMap result : results) {
-                if (!isExist(result)) {
-                    resultMapDao.insertData(result);
-                }
-            }
-        }
+    // public void gpBatchInsert(List<ResultMap> resultMaps, Date date) {
+    //     long start = System.currentTimeMillis();
+    //     List<Object[]> objects = new ArrayList<>();
+    //     for (ResultMap resultMap : resultMaps) {
+    //         objects.add(tObjects(resultMap, date));
+    //     }
+    //     gpResultMapDao.batchInsert(objects);
+    //     log.info("批量插入GP数据库耗时: {}ms", System.currentTimeMillis() - start);
+    // }
+
+    private Object[] tObjects(ResultMap resultMap, Date date) {
+        DateFormat format2 = new SimpleDateFormat("yyyy-MM-dd HH:00:00");
+        String sdate = format2.format(date);
+        return new Object[] {
+                Timestamp.valueOf(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()
+        };
     }
 }

+ 36 - 0
src/main/java/com/nokia/alarm/service/SmsSendService.java

@@ -0,0 +1,36 @@
+package com.nokia.alarm.service;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+
+import com.fasterxml.jackson.databind.JsonNode;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+@Service
+public class SmsSendService {
+
+    private final RestTemplate restTemplate = new RestTemplate();
+    private final String url = "http://10.17.160.12:12080/api/sms/sendByPhoneNumber";
+
+    public void send(String phoneNumber, String content) {
+        Map<String, Object> request = new HashMap<>();
+        request.put("phoneNumber", phoneNumber);
+        request.put("content", content);
+        request.put("fromSystem", "SmsAlarmReport");
+        request.put("smsType", "SmsAlarmReport");
+        request.put("internalId", "000001");
+        JsonNode jsonNode = restTemplate.postForObject(url, request, JsonNode.class);
+        log.info("send message to {}: {}", phoneNumber, jsonNode);
+    }
+
+    public void send(String[] phoneNumbers, String content) {
+        for (String phoneNumber : phoneNumbers) {
+            send(phoneNumber, content);
+        }
+    }
+}

+ 57 - 65
src/main/java/com/nokia/alarm/util/ExportUtil.java

@@ -6,7 +6,6 @@ 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;
@@ -22,7 +21,7 @@ public class ExportUtil {
     public static final String recordSeparator = "\r\n";
     public static final char delimiter = ',';
 
-    public static String saveToCsv(List<ResultMap> results) {
+    public static String saveToCsv(List<ResultMap> results, Date date) {
         DateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
         String dString = format.format(new Date());
         File file = new File(filePath, fileNamePrifix + dString + ".csv");
@@ -39,7 +38,7 @@ public class ExportUtil {
             writer = new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8);
             printer = csvFormat.print(writer);
             for (ResultMap resultMap : results) {
-                Object[] arr = toArray(resultMap);
+                Object[] arr = toArray(resultMap, date);
                 if (arr != null) {
                     printer.printRecord(arr);
                 }
@@ -52,68 +51,61 @@ public class ExportUtil {
         return dString;
     }
 
-    private static Object[] toArray(ResultMap resultMap) {
-        DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+    private static Object[] toArray(ResultMap resultMap, Date date) {
         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;
-        }
+        String sdate = format2.format(date);
+        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()
+        };
     }
 }

+ 0 - 22
src/main/resources/application-prod.properties

@@ -1,22 +0,0 @@
-server.port=8081
-
-# 入库GP数据库使用的是GPload,不需要配置
-
-# 入库PG数据库
-# PG数据库登录信息
-spring.datasource.driverClassName=org.postgresql.Driver
-spring.datasource.url=jdbc:postgresql://172.16.103.7:5432/sqmmt
-spring.datasource.username=pmparse
-spring.datasource.password=WLdnJ1@!864C
-
-# 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
-#10.17.160.12
-httpurl=http://10.17.160.12:12090/esb/HEB_AlarmCustomQuery/0?authcode=SEVCX1VDSUFQI0BhdXRoQCNTWnFsVk9QeA
-
-# httpurl=http://10.160.84.7:8888/esb/HEB_AlarmCustomQuery/0?authcode=SEVCX1VDSUFQI0BhdXRoQCNTWnFsVk9QeA

+ 0 - 17
src/main/resources/application-test.properties

@@ -1,17 +0,0 @@
-server.port=8081
-
-# # 本地postgresql
-spring.datasource.driverClassName=org.postgresql.Driver
-spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
-spring.datasource.username=postgres
-spring.datasource.password=fantuan1985
-
-# 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

+ 10 - 1
src/main/resources/application.properties

@@ -1 +1,10 @@
-spring.profiles.active=prod
+server.port=8081
+
+# log配置
+logging.level.com.nokia=debug
+# logging.level.com.zaxxer.hikari=debug
+
+httpurl=http://192.168.70.125:12090/esb/HEB_AlarmCustomQuery/0?authcode=SEVCX1VDSUFQI0BhdXRoQCNTWnFsVk9QeA
+
+# httpurl=http://10.17.160.12:12090/esb/HEB_AlarmCustomQuery/0?authcode=SEVCX1VDSUFQI0BhdXRoQCNTWnFsVk9QeA
+# httpurl=http://10.160.84.7:8888/esb/HEB_AlarmCustomQuery/0?authcode=SEVCX1VDSUFQI0BhdXRoQCNTWnFsVk9QeA