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