From e1b2717e20cc5e75cc7899ba19e69a80105775f2 Mon Sep 17 00:00:00 2001
From: wty <419034340@qq.com>
Date: Mon, 5 Dec 2022 09:28:53 +0800
Subject: [PATCH] fix bug about log4j and add dingding notice type
---
xiuosiot-backend/pom.xml | 15 ++
.../java/com/aiit/xiuos/Utils/DingUtil.java | 74 ++++++++-
.../controller/DataForwardController.java | 8 +-
.../xiuos/controller/DeviceController.java | 2 +-
.../controller/DeviceDataController.java | 21 ++-
.../xiuos/controller/ExcludeController.java | 20 +--
.../xiuos/controller/NoticeController.java | 73 ++++++++-
.../xiuos/dao/mappers/AlarmInfoMapper.java | 4 +-
.../java/com/aiit/xiuos/model/AlarmInfo.java | 8 +-
.../aiit/xiuos/scheduled/TaskScheduled.java | 8 +-
.../src/main/resources/application.yml | 2 +-
.../resources/mappers/AlarmInfoMapper.xml | 153 ------------------
12 files changed, 206 insertions(+), 182 deletions(-)
delete mode 100644 xiuosiot-backend/src/main/resources/mappers/AlarmInfoMapper.xml
diff --git a/xiuosiot-backend/pom.xml b/xiuosiot-backend/pom.xml
index f2abbee..c87863f 100644
--- a/xiuosiot-backend/pom.xml
+++ b/xiuosiot-backend/pom.xml
@@ -20,6 +20,14 @@
org.springframework.boot
spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-logging
+
+
+
org.springframework.boot
@@ -29,6 +37,13 @@
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.2.2
+
+
+
+ org.springframework.boot
+ spring-boot-starter-logging
+
+
diff --git a/xiuosiot-backend/src/main/java/com/aiit/xiuos/Utils/DingUtil.java b/xiuosiot-backend/src/main/java/com/aiit/xiuos/Utils/DingUtil.java
index 34fe792..5301ed9 100644
--- a/xiuosiot-backend/src/main/java/com/aiit/xiuos/Utils/DingUtil.java
+++ b/xiuosiot-backend/src/main/java/com/aiit/xiuos/Utils/DingUtil.java
@@ -1,4 +1,76 @@
package com.aiit.xiuos.Utils;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import lombok.extern.slf4j.Slf4j;
+import java.util.List;
+import java.util.Map;
+@Slf4j
+public class DingUtil {
+ //发起POST请求时,必须将字符集编码设置成UTF-8。
+ //每个机器人每分钟最多发送20条。消息发送太频繁会严重影响群成员的使用体验,大量发消息的场景 (譬如系统监控报警) 可以将这些信息进行整合,通过markdown消息以摘要的形式发送到群里。
+ public static String sendMsg(String url,String content) {
-public class DINGUtils {
+ //群机器人复制到的秘钥secret
+ //String secret = "SEC..........................";
+
+ //获取系统时间戳
+ //Long timestamp = System.currentTimeMillis();
+ //拼接
+ // String stringToSign = timestamp + "\n" + secret;
+ //使用HmacSHA256算法计算签名
+ //Mac mac = Mac.getInstance("HmacSHA256");
+ // mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
+ //byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
+ //进行Base64 encode 得到最后的sign,可以拼接进url里
+ //String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
+ //钉钉机器人地址(配置机器人的webhook)
+ //String dingUrl = "https://oapi.dingtalk.com/robot/send?access_token=61ce597fca7c9f............×tamp=" + timestamp + "&sign=" + sign;
+ String result =null;
+ try {
+ //String url ="https://oapi.dingtalk.com/robot/send?access_token=01590254dff564e8ef9045c3970ea8c8dc5e69a0d05a40b2f9ad62c600226db3";
+ //是否通知所有人
+ boolean isAtAll = true;
+ //通知具体人的手机号码列表
+ List mobileList = Lists.newArrayList();
+ //String userUrl = url;
+ //钉钉机器人消息内容
+ //String content = "收到新的设备告警,请及时登录泛在计算平台进行处理";
+ //组装请求内容
+ JSONObject reqBody = buildReqStr(content, isAtAll, mobileList);
+ log.info("ding request=="+reqBody);
+ //推送消息(http请求)
+ result = HttpClientUtil.doPost(url, reqBody.toJSONString(),null);
+ // String result = HttpClientUtil.sendPostDataByJson(sign, reqStr,"utf8");
+ log.info("result == " + result);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return result;
+ }
+
+ /**
+ * 组装请求报文
+ * @param content
+ * @return
+ */
+ private static JSONObject buildReqStr(String content, boolean isAtAll, List mobileList) {
+ //消息内容
+ Map contentMap = Maps.newHashMap();
+ contentMap.put("content", content);
+ //通知人
+ Map atMap = Maps.newHashMap();
+ //1.是否通知所有人
+ atMap.put("isAtAll", isAtAll);
+ //2.通知具体人的手机号码列表
+ atMap.put("atMobiles", mobileList);
+
+ Map reqMap = Maps.newHashMap();
+ reqMap.put("msgtype", "text");
+ reqMap.put("text", contentMap);
+ reqMap.put("at", atMap);
+
+ return new JSONObject(reqMap);
+ }
}
diff --git a/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/DataForwardController.java b/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/DataForwardController.java
index a561692..f1f345a 100644
--- a/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/DataForwardController.java
+++ b/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/DataForwardController.java
@@ -48,12 +48,12 @@ public class DataForwardController {
flag =true;
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
- e.printStackTrace();
+ log.error(e.getMessage());
} catch (IOException e) {
// TODO Auto-generated catch block
- e.printStackTrace();
+ log.error(e.getMessage());
}catch (Exception e){
- e.printStackTrace();
+ log.error(e.getMessage());
log.info("邮件发送失败");
}
@@ -77,7 +77,7 @@ public class DataForwardController {
try {
resultData = TDengineJDBCUtil.executeSql(sql);
} catch (Exception e) {
- e.printStackTrace();
+ log.error(e.getMessage());
}
if(resultData!=null){
return new ResultRespons(Constant.SUCCESS_CODE,"数据查询成功",resultData);
diff --git a/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/DeviceController.java b/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/DeviceController.java
index 0599fcc..4cd7627 100644
--- a/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/DeviceController.java
+++ b/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/DeviceController.java
@@ -4,11 +4,11 @@ import com.aiit.xiuos.Utils.*;
import com.aiit.xiuos.model.DeviceInfo;
import com.aiit.xiuos.model.UserInfo;
import com.aiit.xiuos.service.DeviceInfoService;
+import com.aiit.xiuos.tdengine.TDengineJDBCUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
-import java.sql.Connection;
import java.util.List;
import java.util.Map;
diff --git a/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/DeviceDataController.java b/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/DeviceDataController.java
index f935b58..bce4052 100644
--- a/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/DeviceDataController.java
+++ b/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/DeviceDataController.java
@@ -1,17 +1,22 @@
package com.aiit.xiuos.controller;
+import com.aiit.xiuos.Utils.BeanUtil;
import com.aiit.xiuos.Utils.Constant;
import com.aiit.xiuos.Utils.HttpClientUtil;
import com.aiit.xiuos.Utils.ResultRespons;
import com.aiit.xiuos.model.AvgDayData;
+import com.aiit.xiuos.model.QjdqElectric;
import com.aiit.xiuos.mqtt.MqttConfiguration;
import com.aiit.xiuos.mqtt.MyMqttClient;
import com.aiit.xiuos.service.AvgDayDataService;
+import com.aiit.xiuos.service.QjdqElectricService;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -22,6 +27,8 @@ public class DeviceDataController {
AvgDayDataService avgDayDataService;
@Autowired
private MyMqttClient myMqttClient;
+ @Autowired
+ private QjdqElectricService qjdqElectricService;
@GetMapping("/getAll")
public ResultRespons getAllDataFromDSD(HttpServletRequest request){
@@ -46,7 +53,19 @@ public class DeviceDataController {
myMqttClient=new MqttConfiguration().getMqttPushClient();
}
myMqttClient.publish("xiuosiot/"+jsonMap.get("deviceno"), JSONObject.toJSONString(jsonMap));
- return new ResultRespons(Constant.ERROR_CODE,"数据发送成功");
+ return new ResultRespons(Constant.SUCCESS_CODE,"数据发送成功");
+ }
+
+ @GetMapping("/getQJDQ")
+ public ResultRespons getQJDQ(){
+ QjdqElectric qjdqElectric = qjdqElectricService.selectElectric(1);
+ if(qjdqElectric!=null){
+ BeanUtil beanUtil =new BeanUtil();
+ Object[] value= beanUtil.getFiledValues(qjdqElectric);
+ return new ResultRespons(Constant.SUCCESS_CODE,"查询数据成功!",value);
+ }
+ return new ResultRespons(Constant.ERROR_CODE,"查询数据失败");
+
}
diff --git a/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/ExcludeController.java b/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/ExcludeController.java
index 3149316..af6f29a 100644
--- a/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/ExcludeController.java
+++ b/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/ExcludeController.java
@@ -25,22 +25,18 @@ public class ExcludeController {
WebSocketServer webSocketServer;
@PostMapping("/addjxsd")
public void addJXSD(@RequestBody String jsonString, HttpServletRequest request) throws ParseException {
- System.out.println("收到的jsonString:"+jsonString);
JSONObject jsonObject = MyUtils.StringToJson(jsonString);
- int valueNum = jsonObject.getInteger("valueNum");
String client =jsonObject.getString("org");
- webSocketServer.sendToMessageById(client,jsonString);
+ webSocketServer.sendInfo(jsonString);
String deviceId= jsonObject.getString("deviceId");
- if(valueNum==72){
- JSONArray jsonArray =jsonObject.getJSONArray("readItemList");
- StringBuilder sql =new StringBuilder("insert into jxsd_1500 values(now");
- for(int i=0;i dataList =new ArrayList<>();
+ dataList.add("11111111111");
+ dataList.add("222222222");
+ dataList.add("33333333344");
+ try {
+ BufferedWriter bufferedWriter = new BufferedWriter(
+ new OutputStreamWriter(new FileOutputStream("F:\\email\\data.txt"), "UTF-8"));
+ for (String s : dataList) {
+ bufferedWriter.write(s);
+ bufferedWriter.newLine();
+ bufferedWriter.flush();
+ }
+ emailUtil.sendMessageCarryFile("419034340@qq.com","test","11111testtest",new File("/email/data.txt"));
+ flag =true;
+ } catch (FileNotFoundException e) {
+ log.error(e.getMessage());
+ } catch (IOException e) {
+ log.error(e.getMessage());
+ }catch (Exception e){
+ log.info("邮件发送失败");
+ }
+
+ if(flag){
+ return new ResultRespons(Constant.SUCCESS_CODE,"发送成功");
+ }else {
+ return new ResultRespons(Constant.ERROR_CODE,"发送失败");
+ }
+
+ }
+ @RequestMapping("/sendDingDing")
+ public ResultRespons sendDingDing(@RequestBody Map jsonMap) {
+ String res=DingUtil.sendMsg(jsonMap.get("url"),jsonMap.get("content"));
+ if(StringUtils.isNotEmpty(res)){
+ return new ResultRespons(Constant.SUCCESS_CODE,"发送成功");
+ }else{
+ return new ResultRespons(Constant.ERROR_CODE,"发送失败");
+ }
+
+ }
+
+
}
diff --git a/xiuosiot-backend/src/main/java/com/aiit/xiuos/dao/mappers/AlarmInfoMapper.java b/xiuosiot-backend/src/main/java/com/aiit/xiuos/dao/mappers/AlarmInfoMapper.java
index e7e4b58..f805d12 100644
--- a/xiuosiot-backend/src/main/java/com/aiit/xiuos/dao/mappers/AlarmInfoMapper.java
+++ b/xiuosiot-backend/src/main/java/com/aiit/xiuos/dao/mappers/AlarmInfoMapper.java
@@ -10,13 +10,13 @@ import java.util.Map;
@Repository
public interface AlarmInfoMapper {
- int deleteByPrimaryKey(@Param("deviceNo") String deviceNo, @Param("alarmName") String alarmName);
+ int deleteByPrimaryKey(@Param("deviceNo") String deviceNo, @Param("alarmName") String alarmName, @Param("alarmLevel") Integer alarmLevel);
int insert(AlarmInfo record);
int insertSelective(AlarmInfo record);
- AlarmInfo selectByPrimaryKey(@Param("deviceNo") String deviceNo, @Param("alarmName") String alarmName);
+ AlarmInfo selectByPrimaryKey(@Param("deviceNo") String deviceNo, @Param("alarmName") String alarmName, @Param("alarmLevel") Integer alarmLevel);
int updateByPrimaryKeySelective(AlarmInfo record);
diff --git a/xiuosiot-backend/src/main/java/com/aiit/xiuos/model/AlarmInfo.java b/xiuosiot-backend/src/main/java/com/aiit/xiuos/model/AlarmInfo.java
index 554de91..33667ed 100644
--- a/xiuosiot-backend/src/main/java/com/aiit/xiuos/model/AlarmInfo.java
+++ b/xiuosiot-backend/src/main/java/com/aiit/xiuos/model/AlarmInfo.java
@@ -12,6 +12,8 @@ public class AlarmInfo {
private String deviceNo;
private String alarmName;
+
+ private Integer alarmLevel;
@JsonFormat(pattern ="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date alarmTime;
@@ -19,19 +21,17 @@ public class AlarmInfo {
private Integer alarmStatus;
- private Integer alarmLevel;
-
private String alarmRes;
private String org;
- public AlarmInfo(String deviceNo, String alarmName, Date alarmTime, String deviceType, Integer alarmStatus, Integer alarmLevel, String alarmRes, String org) {
+ public AlarmInfo(String deviceNo, String alarmName, Integer alarmLevel, Date alarmTime, String deviceType, Integer alarmStatus, String alarmRes, String org) {
this.deviceNo = deviceNo;
this.alarmName = alarmName;
+ this.alarmLevel = alarmLevel;
this.alarmTime = alarmTime;
this.deviceType = deviceType;
this.alarmStatus = alarmStatus;
- this.alarmLevel = alarmLevel;
this.alarmRes = alarmRes;
this.org = org;
}
diff --git a/xiuosiot-backend/src/main/java/com/aiit/xiuos/scheduled/TaskScheduled.java b/xiuosiot-backend/src/main/java/com/aiit/xiuos/scheduled/TaskScheduled.java
index 6eda535..8c512d8 100644
--- a/xiuosiot-backend/src/main/java/com/aiit/xiuos/scheduled/TaskScheduled.java
+++ b/xiuosiot-backend/src/main/java/com/aiit/xiuos/scheduled/TaskScheduled.java
@@ -226,7 +226,12 @@ public class TaskScheduled {
alarmInfo.setAlarmLevel(alarmRule.getAlarmLevel());
alarmInfo.setOrg(alarmRule.getOrg());
//保存告警信息。若已存在,执行更新。
- alarmInfoService.addAlarmInfo(alarmInfo);
+ try{
+ alarmInfoService.addAlarmInfo(alarmInfo);
+ }catch(Exception e){
+ alarmInfo.setAlarmRes("");
+ alarmInfoService.updateAlarmInfo(alarmInfo);
+ }
if (alarmRule.getNoticeType().equals("email")) {
emailUtil.sendMessage(alarmRule.getNoticeAddress(), "设备告警", alarmRule.getNoticeContent());
log.info("邮件发送成功");
@@ -236,7 +241,6 @@ public class TaskScheduled {
}
}
}catch (Exception e){
- alarmInfoService.updateAlarmInfo(alarmInfo);
log.error(e.getMessage());
}
}
diff --git a/xiuosiot-backend/src/main/resources/application.yml b/xiuosiot-backend/src/main/resources/application.yml
index cc4a066..bf63079 100644
--- a/xiuosiot-backend/src/main/resources/application.yml
+++ b/xiuosiot-backend/src/main/resources/application.yml
@@ -5,7 +5,7 @@ server:
timeout: 43200s
spring:
profiles:
- active: local
+ active: {spring.profiles.active}
diff --git a/xiuosiot-backend/src/main/resources/mappers/AlarmInfoMapper.xml b/xiuosiot-backend/src/main/resources/mappers/AlarmInfoMapper.xml
deleted file mode 100644
index 14fe9a2..0000000
--- a/xiuosiot-backend/src/main/resources/mappers/AlarmInfoMapper.xml
+++ /dev/null
@@ -1,153 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- device_no, alarm_name, alarm_time, device_type, alarm_status, alarm_level, alarm_res,
- org
-
-
-
- delete from alarm_info
- where device_no = #{deviceNo,jdbcType=VARCHAR}
- and alarm_name = #{alarmName,jdbcType=VARCHAR}
-
-
- insert into alarm_info (device_no, alarm_name, alarm_time,
- device_type, alarm_status, alarm_level,
- alarm_res, org)
- values (#{deviceNo,jdbcType=VARCHAR}, #{alarmName,jdbcType=VARCHAR}, #{alarmTime,jdbcType=TIMESTAMP},
- #{deviceType,jdbcType=VARCHAR}, #{alarmStatus,jdbcType=INTEGER}, #{alarmLevel,jdbcType=INTEGER},
- #{alarmRes,jdbcType=VARCHAR}, #{org,jdbcType=VARCHAR})
-
-
- insert into alarm_info
-
-
- device_no,
-
-
- alarm_name,
-
-
- alarm_time,
-
-
- device_type,
-
-
- alarm_status,
-
-
- alarm_level,
-
-
- alarm_res,
-
-
- org,
-
-
-
-
- #{deviceNo,jdbcType=VARCHAR},
-
-
- #{alarmName,jdbcType=VARCHAR},
-
-
- #{alarmTime,jdbcType=TIMESTAMP},
-
-
- #{deviceType,jdbcType=VARCHAR},
-
-
- #{alarmStatus,jdbcType=INTEGER},
-
-
- #{alarmLevel,jdbcType=INTEGER},
-
-
- #{alarmRes,jdbcType=VARCHAR},
-
-
- #{org,jdbcType=VARCHAR},
-
-
-
-
- update alarm_info
-
-
- alarm_time = #{alarmTime,jdbcType=TIMESTAMP},
-
-
- device_type = #{deviceType,jdbcType=VARCHAR},
-
-
- alarm_status = #{alarmStatus,jdbcType=INTEGER},
-
-
- alarm_level = #{alarmLevel,jdbcType=INTEGER},
-
-
- alarm_res = #{alarmRes,jdbcType=VARCHAR},
-
-
- org = #{org,jdbcType=VARCHAR},
-
-
- where device_no = #{deviceNo,jdbcType=VARCHAR}
- and alarm_name = #{alarmName,jdbcType=VARCHAR}
-
-
- update alarm_info
- set alarm_time = #{alarmTime,jdbcType=TIMESTAMP},
- device_type = #{deviceType,jdbcType=VARCHAR},
- alarm_status = #{alarmStatus,jdbcType=INTEGER},
- alarm_level = #{alarmLevel,jdbcType=INTEGER},
- alarm_res = #{alarmRes,jdbcType=VARCHAR},
- org = #{org,jdbcType=VARCHAR}
- where device_no = #{deviceNo,jdbcType=VARCHAR}
- and alarm_name = #{alarmName,jdbcType=VARCHAR}
-
-
-
\ No newline at end of file