diff --git a/pom.xml b/pom.xml index 9fb6f35..8427901 100644 --- a/pom.xml +++ b/pom.xml @@ -90,6 +90,14 @@ 1.2.73 + + + + commons-httpclient + commons-httpclient + 3.1 + + xyz.downgoon snowflake diff --git a/pom.xml b/pom.xml index 9fb6f35..8427901 100644 --- a/pom.xml +++ b/pom.xml @@ -90,6 +90,14 @@ 1.2.73 + + + + commons-httpclient + commons-httpclient + 3.1 + + xyz.downgoon snowflake diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 4dbefff..3b9793b 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -16,7 +16,6 @@ @RequestMapping("/casic") public class DeviceController { - private final DeviceService deviceService; public DeviceController(DeviceService deviceService) { @@ -30,9 +29,7 @@ @PostMapping("/household/gas") public ResponseData saveDataGas(@RequestBody Map receiveData) { - log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + log.info("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); return deviceService.saveDataGas(receiveData); } - - } diff --git a/pom.xml b/pom.xml index 9fb6f35..8427901 100644 --- a/pom.xml +++ b/pom.xml @@ -90,6 +90,14 @@ 1.2.73 + + + + commons-httpclient + commons-httpclient + 3.1 + + xyz.downgoon snowflake diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 4dbefff..3b9793b 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -16,7 +16,6 @@ @RequestMapping("/casic") public class DeviceController { - private final DeviceService deviceService; public DeviceController(DeviceService deviceService) { @@ -30,9 +29,7 @@ @PostMapping("/household/gas") public ResponseData saveDataGas(@RequestBody Map receiveData) { - log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + log.info("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); return deviceService.saveDataGas(receiveData); } - - } diff --git a/src/main/java/com/casic/dao/AlarmRecordsMapper.java b/src/main/java/com/casic/dao/AlarmRecordsMapper.java index 9f79655..b7fbd34 100644 --- a/src/main/java/com/casic/dao/AlarmRecordsMapper.java +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.casic.entity.AlarmRecord; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; @@ -15,4 +16,9 @@ "FROM ALARM_DEVICE " + "WHERE ACTIVE=1 AND DEVCODE=#{devcode} ") Long getDevcode(@Param("devcode") String devcode); + + @Select("SELECT DBID as id, DEVCODE as devCode, DEVNAME as devName, FACTORY as factory, SIMID as simid " + + "FROM ALARM_DEVICE " + + "WHERE ACTIVE=1 AND DEVCODE=#{devcode} ") + Device getDevice(@Param("devcode") String devcode); } diff --git a/pom.xml b/pom.xml index 9fb6f35..8427901 100644 --- a/pom.xml +++ b/pom.xml @@ -90,6 +90,14 @@ 1.2.73 + + + + commons-httpclient + commons-httpclient + 3.1 + + xyz.downgoon snowflake diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 4dbefff..3b9793b 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -16,7 +16,6 @@ @RequestMapping("/casic") public class DeviceController { - private final DeviceService deviceService; public DeviceController(DeviceService deviceService) { @@ -30,9 +29,7 @@ @PostMapping("/household/gas") public ResponseData saveDataGas(@RequestBody Map receiveData) { - log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + log.info("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); return deviceService.saveDataGas(receiveData); } - - } diff --git a/src/main/java/com/casic/dao/AlarmRecordsMapper.java b/src/main/java/com/casic/dao/AlarmRecordsMapper.java index 9f79655..b7fbd34 100644 --- a/src/main/java/com/casic/dao/AlarmRecordsMapper.java +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.casic.entity.AlarmRecord; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; @@ -15,4 +16,9 @@ "FROM ALARM_DEVICE " + "WHERE ACTIVE=1 AND DEVCODE=#{devcode} ") Long getDevcode(@Param("devcode") String devcode); + + @Select("SELECT DBID as id, DEVCODE as devCode, DEVNAME as devName, FACTORY as factory, SIMID as simid " + + "FROM ALARM_DEVICE " + + "WHERE ACTIVE=1 AND DEVCODE=#{devcode} ") + Device getDevice(@Param("devcode") String devcode); } diff --git a/src/main/java/com/casic/entity/Device.java b/src/main/java/com/casic/entity/Device.java new file mode 100644 index 0000000..0360e41 --- /dev/null +++ b/src/main/java/com/casic/entity/Device.java @@ -0,0 +1,27 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; + +@Data +@TableName("ALARM_DEVICE") +public class Device implements Serializable { + /** + * 设备基本信息表 + */ + private static final long serialVersionUID = -2023118078562324658L; + @TableId(value = "DBID") + private Long id; + @TableId(value = "DEVCODE") + private String devCode; + @TableId(value = "DEVNAME") + private String devName; + @TableId(value = "FACTORY") + private String factory; + @TableId(value = "SIMID") + private String simid; // SIM卡号 + +} diff --git a/pom.xml b/pom.xml index 9fb6f35..8427901 100644 --- a/pom.xml +++ b/pom.xml @@ -90,6 +90,14 @@ 1.2.73 + + + + commons-httpclient + commons-httpclient + 3.1 + + xyz.downgoon snowflake diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 4dbefff..3b9793b 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -16,7 +16,6 @@ @RequestMapping("/casic") public class DeviceController { - private final DeviceService deviceService; public DeviceController(DeviceService deviceService) { @@ -30,9 +29,7 @@ @PostMapping("/household/gas") public ResponseData saveDataGas(@RequestBody Map receiveData) { - log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + log.info("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); return deviceService.saveDataGas(receiveData); } - - } diff --git a/src/main/java/com/casic/dao/AlarmRecordsMapper.java b/src/main/java/com/casic/dao/AlarmRecordsMapper.java index 9f79655..b7fbd34 100644 --- a/src/main/java/com/casic/dao/AlarmRecordsMapper.java +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.casic.entity.AlarmRecord; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; @@ -15,4 +16,9 @@ "FROM ALARM_DEVICE " + "WHERE ACTIVE=1 AND DEVCODE=#{devcode} ") Long getDevcode(@Param("devcode") String devcode); + + @Select("SELECT DBID as id, DEVCODE as devCode, DEVNAME as devName, FACTORY as factory, SIMID as simid " + + "FROM ALARM_DEVICE " + + "WHERE ACTIVE=1 AND DEVCODE=#{devcode} ") + Device getDevice(@Param("devcode") String devcode); } diff --git a/src/main/java/com/casic/entity/Device.java b/src/main/java/com/casic/entity/Device.java new file mode 100644 index 0000000..0360e41 --- /dev/null +++ b/src/main/java/com/casic/entity/Device.java @@ -0,0 +1,27 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; + +@Data +@TableName("ALARM_DEVICE") +public class Device implements Serializable { + /** + * 设备基本信息表 + */ + private static final long serialVersionUID = -2023118078562324658L; + @TableId(value = "DBID") + private Long id; + @TableId(value = "DEVCODE") + private String devCode; + @TableId(value = "DEVNAME") + private String devName; + @TableId(value = "FACTORY") + private String factory; + @TableId(value = "SIMID") + private String simid; // SIM卡号 + +} diff --git a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java index 4966ae7..70a667f 100644 --- a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java @@ -1,15 +1,19 @@ package com.casic.service.impl; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.dao.AlarmRecordsMapper; import com.casic.dao.ButaneDataMapper; import com.casic.entity.AlarmRecord; import com.casic.entity.ButaneData; +import com.casic.entity.Device; import com.casic.model.ResponseData; import com.casic.service.AlarmRecordFly; import com.casic.service.DeviceService; +import com.casic.util.SendUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import xyz.downgoon.snowflake.Snowflake; @@ -26,6 +30,8 @@ private final ButaneDataMapper butaneDataMapper; private final AlarmRecordsMapper alarmRecordsMapper; private static Snowflake snowflake = new Snowflake(0, 2); + @Autowired + private SendUtil sendUtil; @Override public ResponseData testMysql() { @@ -53,7 +59,7 @@ responseData.setCode(200); responseData.setMessage("保存成功"); } catch (Exception dex) { - log.error("主题:广东台燃气设备存储异常,异常信息:{}", dex.getMessage()); + log.error("主题:燃气设备存储异常,异常信息:{}", dex.getMessage()); responseData.setCode(500); responseData.setMessage("保存异常"); } @@ -97,13 +103,23 @@ //产生新的报警,消除报警 butaneData.setDescn("可燃气体探测器报警"); butaneData.setStatus("1"); - synchronized (alarmRecord){ + synchronized (alarmRecord) { alarmRecord.setDbid(null); alarmRecord.setDeviceCode(devcode); alarmRecord.setDeviceId(alarmRecordsMapper.getDevcode(devcode)); alarmRecordsMapper.insert(alarmRecord); } butaneDataMapper.insert(butaneData); + + try { + //推送短信至第三方 + Device device = alarmRecordsMapper.getDevice(devcode); + JSONObject eventObj = new JSONObject(); + eventObj.put("type", "燃气报警"); + sendUtil.sendEventBySms(device, eventObj); + }catch (Exception exception){ + exception.printStackTrace(); + } } return true; } diff --git a/pom.xml b/pom.xml index 9fb6f35..8427901 100644 --- a/pom.xml +++ b/pom.xml @@ -90,6 +90,14 @@ 1.2.73 + + + + commons-httpclient + commons-httpclient + 3.1 + + xyz.downgoon snowflake diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 4dbefff..3b9793b 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -16,7 +16,6 @@ @RequestMapping("/casic") public class DeviceController { - private final DeviceService deviceService; public DeviceController(DeviceService deviceService) { @@ -30,9 +29,7 @@ @PostMapping("/household/gas") public ResponseData saveDataGas(@RequestBody Map receiveData) { - log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + log.info("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); return deviceService.saveDataGas(receiveData); } - - } diff --git a/src/main/java/com/casic/dao/AlarmRecordsMapper.java b/src/main/java/com/casic/dao/AlarmRecordsMapper.java index 9f79655..b7fbd34 100644 --- a/src/main/java/com/casic/dao/AlarmRecordsMapper.java +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.casic.entity.AlarmRecord; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; @@ -15,4 +16,9 @@ "FROM ALARM_DEVICE " + "WHERE ACTIVE=1 AND DEVCODE=#{devcode} ") Long getDevcode(@Param("devcode") String devcode); + + @Select("SELECT DBID as id, DEVCODE as devCode, DEVNAME as devName, FACTORY as factory, SIMID as simid " + + "FROM ALARM_DEVICE " + + "WHERE ACTIVE=1 AND DEVCODE=#{devcode} ") + Device getDevice(@Param("devcode") String devcode); } diff --git a/src/main/java/com/casic/entity/Device.java b/src/main/java/com/casic/entity/Device.java new file mode 100644 index 0000000..0360e41 --- /dev/null +++ b/src/main/java/com/casic/entity/Device.java @@ -0,0 +1,27 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; + +@Data +@TableName("ALARM_DEVICE") +public class Device implements Serializable { + /** + * 设备基本信息表 + */ + private static final long serialVersionUID = -2023118078562324658L; + @TableId(value = "DBID") + private Long id; + @TableId(value = "DEVCODE") + private String devCode; + @TableId(value = "DEVNAME") + private String devName; + @TableId(value = "FACTORY") + private String factory; + @TableId(value = "SIMID") + private String simid; // SIM卡号 + +} diff --git a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java index 4966ae7..70a667f 100644 --- a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java @@ -1,15 +1,19 @@ package com.casic.service.impl; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.dao.AlarmRecordsMapper; import com.casic.dao.ButaneDataMapper; import com.casic.entity.AlarmRecord; import com.casic.entity.ButaneData; +import com.casic.entity.Device; import com.casic.model.ResponseData; import com.casic.service.AlarmRecordFly; import com.casic.service.DeviceService; +import com.casic.util.SendUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import xyz.downgoon.snowflake.Snowflake; @@ -26,6 +30,8 @@ private final ButaneDataMapper butaneDataMapper; private final AlarmRecordsMapper alarmRecordsMapper; private static Snowflake snowflake = new Snowflake(0, 2); + @Autowired + private SendUtil sendUtil; @Override public ResponseData testMysql() { @@ -53,7 +59,7 @@ responseData.setCode(200); responseData.setMessage("保存成功"); } catch (Exception dex) { - log.error("主题:广东台燃气设备存储异常,异常信息:{}", dex.getMessage()); + log.error("主题:燃气设备存储异常,异常信息:{}", dex.getMessage()); responseData.setCode(500); responseData.setMessage("保存异常"); } @@ -97,13 +103,23 @@ //产生新的报警,消除报警 butaneData.setDescn("可燃气体探测器报警"); butaneData.setStatus("1"); - synchronized (alarmRecord){ + synchronized (alarmRecord) { alarmRecord.setDbid(null); alarmRecord.setDeviceCode(devcode); alarmRecord.setDeviceId(alarmRecordsMapper.getDevcode(devcode)); alarmRecordsMapper.insert(alarmRecord); } butaneDataMapper.insert(butaneData); + + try { + //推送短信至第三方 + Device device = alarmRecordsMapper.getDevice(devcode); + JSONObject eventObj = new JSONObject(); + eventObj.put("type", "燃气报警"); + sendUtil.sendEventBySms(device, eventObj); + }catch (Exception exception){ + exception.printStackTrace(); + } } return true; } diff --git a/src/main/java/com/casic/util/DateUtils.java b/src/main/java/com/casic/util/DateUtils.java new file mode 100644 index 0000000..db2ed9c --- /dev/null +++ b/src/main/java/com/casic/util/DateUtils.java @@ -0,0 +1,63 @@ +package com.casic.util; + +import java.text.SimpleDateFormat; + +/** + * Created by Administrator on 2015/2/25. + */ +public class DateUtils { + public static SimpleDateFormat sdf_day = new SimpleDateFormat("yyyy-MM-dd"); + public static SimpleDateFormat sdf_day_time = new SimpleDateFormat("yyyyMMddHHmmss"); + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + public static final SimpleDateFormat sdf5 = new SimpleDateFormat("HH:mm:ss"); + public static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + public static String DateFormatDate(String dataString) { + + String strymd = dataString.substring(0, 8); + return strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8); + } + + public static String DateFormatTime(String dataString) { + + String strhms = dataString.substring(8); + return strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + } + + /** + * 比较两个时间 时分秒 大小 + * + * @param s1 + * @param s2 + * @return + */ + public static boolean compTime(String s1, String s2) { + try { + if (s1.indexOf(":") < 0 || s1.indexOf(":") < 0) { + System.out.println("格式不正确"); + } else { + String[] array1 = s1.split(":"); + int total1 = Integer.valueOf(array1[0]) * 3600 + Integer.valueOf(array1[1]) * 60; + String[] array2 = s2.split(":"); + int total2 = Integer.valueOf(array2[0]) * 3600 + Integer.valueOf(array2[1]) * 60; + return total1 - total2 > 0 ? true : false; + } + } catch (NumberFormatException e) { + // TODO Auto-generated catch block + return false; + } + return false; + + } +} diff --git a/pom.xml b/pom.xml index 9fb6f35..8427901 100644 --- a/pom.xml +++ b/pom.xml @@ -90,6 +90,14 @@ 1.2.73 + + + + commons-httpclient + commons-httpclient + 3.1 + + xyz.downgoon snowflake diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 4dbefff..3b9793b 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -16,7 +16,6 @@ @RequestMapping("/casic") public class DeviceController { - private final DeviceService deviceService; public DeviceController(DeviceService deviceService) { @@ -30,9 +29,7 @@ @PostMapping("/household/gas") public ResponseData saveDataGas(@RequestBody Map receiveData) { - log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + log.info("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); return deviceService.saveDataGas(receiveData); } - - } diff --git a/src/main/java/com/casic/dao/AlarmRecordsMapper.java b/src/main/java/com/casic/dao/AlarmRecordsMapper.java index 9f79655..b7fbd34 100644 --- a/src/main/java/com/casic/dao/AlarmRecordsMapper.java +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.casic.entity.AlarmRecord; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; @@ -15,4 +16,9 @@ "FROM ALARM_DEVICE " + "WHERE ACTIVE=1 AND DEVCODE=#{devcode} ") Long getDevcode(@Param("devcode") String devcode); + + @Select("SELECT DBID as id, DEVCODE as devCode, DEVNAME as devName, FACTORY as factory, SIMID as simid " + + "FROM ALARM_DEVICE " + + "WHERE ACTIVE=1 AND DEVCODE=#{devcode} ") + Device getDevice(@Param("devcode") String devcode); } diff --git a/src/main/java/com/casic/entity/Device.java b/src/main/java/com/casic/entity/Device.java new file mode 100644 index 0000000..0360e41 --- /dev/null +++ b/src/main/java/com/casic/entity/Device.java @@ -0,0 +1,27 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; + +@Data +@TableName("ALARM_DEVICE") +public class Device implements Serializable { + /** + * 设备基本信息表 + */ + private static final long serialVersionUID = -2023118078562324658L; + @TableId(value = "DBID") + private Long id; + @TableId(value = "DEVCODE") + private String devCode; + @TableId(value = "DEVNAME") + private String devName; + @TableId(value = "FACTORY") + private String factory; + @TableId(value = "SIMID") + private String simid; // SIM卡号 + +} diff --git a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java index 4966ae7..70a667f 100644 --- a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java @@ -1,15 +1,19 @@ package com.casic.service.impl; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.dao.AlarmRecordsMapper; import com.casic.dao.ButaneDataMapper; import com.casic.entity.AlarmRecord; import com.casic.entity.ButaneData; +import com.casic.entity.Device; import com.casic.model.ResponseData; import com.casic.service.AlarmRecordFly; import com.casic.service.DeviceService; +import com.casic.util.SendUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import xyz.downgoon.snowflake.Snowflake; @@ -26,6 +30,8 @@ private final ButaneDataMapper butaneDataMapper; private final AlarmRecordsMapper alarmRecordsMapper; private static Snowflake snowflake = new Snowflake(0, 2); + @Autowired + private SendUtil sendUtil; @Override public ResponseData testMysql() { @@ -53,7 +59,7 @@ responseData.setCode(200); responseData.setMessage("保存成功"); } catch (Exception dex) { - log.error("主题:广东台燃气设备存储异常,异常信息:{}", dex.getMessage()); + log.error("主题:燃气设备存储异常,异常信息:{}", dex.getMessage()); responseData.setCode(500); responseData.setMessage("保存异常"); } @@ -97,13 +103,23 @@ //产生新的报警,消除报警 butaneData.setDescn("可燃气体探测器报警"); butaneData.setStatus("1"); - synchronized (alarmRecord){ + synchronized (alarmRecord) { alarmRecord.setDbid(null); alarmRecord.setDeviceCode(devcode); alarmRecord.setDeviceId(alarmRecordsMapper.getDevcode(devcode)); alarmRecordsMapper.insert(alarmRecord); } butaneDataMapper.insert(butaneData); + + try { + //推送短信至第三方 + Device device = alarmRecordsMapper.getDevice(devcode); + JSONObject eventObj = new JSONObject(); + eventObj.put("type", "燃气报警"); + sendUtil.sendEventBySms(device, eventObj); + }catch (Exception exception){ + exception.printStackTrace(); + } } return true; } diff --git a/src/main/java/com/casic/util/DateUtils.java b/src/main/java/com/casic/util/DateUtils.java new file mode 100644 index 0000000..db2ed9c --- /dev/null +++ b/src/main/java/com/casic/util/DateUtils.java @@ -0,0 +1,63 @@ +package com.casic.util; + +import java.text.SimpleDateFormat; + +/** + * Created by Administrator on 2015/2/25. + */ +public class DateUtils { + public static SimpleDateFormat sdf_day = new SimpleDateFormat("yyyy-MM-dd"); + public static SimpleDateFormat sdf_day_time = new SimpleDateFormat("yyyyMMddHHmmss"); + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + public static final SimpleDateFormat sdf5 = new SimpleDateFormat("HH:mm:ss"); + public static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + public static String DateFormatDate(String dataString) { + + String strymd = dataString.substring(0, 8); + return strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8); + } + + public static String DateFormatTime(String dataString) { + + String strhms = dataString.substring(8); + return strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + } + + /** + * 比较两个时间 时分秒 大小 + * + * @param s1 + * @param s2 + * @return + */ + public static boolean compTime(String s1, String s2) { + try { + if (s1.indexOf(":") < 0 || s1.indexOf(":") < 0) { + System.out.println("格式不正确"); + } else { + String[] array1 = s1.split(":"); + int total1 = Integer.valueOf(array1[0]) * 3600 + Integer.valueOf(array1[1]) * 60; + String[] array2 = s2.split(":"); + int total2 = Integer.valueOf(array2[0]) * 3600 + Integer.valueOf(array2[1]) * 60; + return total1 - total2 > 0 ? true : false; + } + } catch (NumberFormatException e) { + // TODO Auto-generated catch block + return false; + } + return false; + + } +} diff --git a/src/main/java/com/casic/util/HttpClientUtils.java b/src/main/java/com/casic/util/HttpClientUtils.java new file mode 100644 index 0000000..91a631e --- /dev/null +++ b/src/main/java/com/casic/util/HttpClientUtils.java @@ -0,0 +1,40 @@ +package com.casic.util; + + +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + + + public static String post(String url, String body, JSONObject header) { + HttpClient client = new HttpClient(); + client.setTimeout(30000); + PostMethod method = new PostMethod(url); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); + method.addRequestHeader("X-APP-KEY", header.getString("X-APP-KEY")); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + +} diff --git a/pom.xml b/pom.xml index 9fb6f35..8427901 100644 --- a/pom.xml +++ b/pom.xml @@ -90,6 +90,14 @@ 1.2.73 + + + + commons-httpclient + commons-httpclient + 3.1 + + xyz.downgoon snowflake diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 4dbefff..3b9793b 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -16,7 +16,6 @@ @RequestMapping("/casic") public class DeviceController { - private final DeviceService deviceService; public DeviceController(DeviceService deviceService) { @@ -30,9 +29,7 @@ @PostMapping("/household/gas") public ResponseData saveDataGas(@RequestBody Map receiveData) { - log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + log.info("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); return deviceService.saveDataGas(receiveData); } - - } diff --git a/src/main/java/com/casic/dao/AlarmRecordsMapper.java b/src/main/java/com/casic/dao/AlarmRecordsMapper.java index 9f79655..b7fbd34 100644 --- a/src/main/java/com/casic/dao/AlarmRecordsMapper.java +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.casic.entity.AlarmRecord; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; @@ -15,4 +16,9 @@ "FROM ALARM_DEVICE " + "WHERE ACTIVE=1 AND DEVCODE=#{devcode} ") Long getDevcode(@Param("devcode") String devcode); + + @Select("SELECT DBID as id, DEVCODE as devCode, DEVNAME as devName, FACTORY as factory, SIMID as simid " + + "FROM ALARM_DEVICE " + + "WHERE ACTIVE=1 AND DEVCODE=#{devcode} ") + Device getDevice(@Param("devcode") String devcode); } diff --git a/src/main/java/com/casic/entity/Device.java b/src/main/java/com/casic/entity/Device.java new file mode 100644 index 0000000..0360e41 --- /dev/null +++ b/src/main/java/com/casic/entity/Device.java @@ -0,0 +1,27 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; + +@Data +@TableName("ALARM_DEVICE") +public class Device implements Serializable { + /** + * 设备基本信息表 + */ + private static final long serialVersionUID = -2023118078562324658L; + @TableId(value = "DBID") + private Long id; + @TableId(value = "DEVCODE") + private String devCode; + @TableId(value = "DEVNAME") + private String devName; + @TableId(value = "FACTORY") + private String factory; + @TableId(value = "SIMID") + private String simid; // SIM卡号 + +} diff --git a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java index 4966ae7..70a667f 100644 --- a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java @@ -1,15 +1,19 @@ package com.casic.service.impl; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.dao.AlarmRecordsMapper; import com.casic.dao.ButaneDataMapper; import com.casic.entity.AlarmRecord; import com.casic.entity.ButaneData; +import com.casic.entity.Device; import com.casic.model.ResponseData; import com.casic.service.AlarmRecordFly; import com.casic.service.DeviceService; +import com.casic.util.SendUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import xyz.downgoon.snowflake.Snowflake; @@ -26,6 +30,8 @@ private final ButaneDataMapper butaneDataMapper; private final AlarmRecordsMapper alarmRecordsMapper; private static Snowflake snowflake = new Snowflake(0, 2); + @Autowired + private SendUtil sendUtil; @Override public ResponseData testMysql() { @@ -53,7 +59,7 @@ responseData.setCode(200); responseData.setMessage("保存成功"); } catch (Exception dex) { - log.error("主题:广东台燃气设备存储异常,异常信息:{}", dex.getMessage()); + log.error("主题:燃气设备存储异常,异常信息:{}", dex.getMessage()); responseData.setCode(500); responseData.setMessage("保存异常"); } @@ -97,13 +103,23 @@ //产生新的报警,消除报警 butaneData.setDescn("可燃气体探测器报警"); butaneData.setStatus("1"); - synchronized (alarmRecord){ + synchronized (alarmRecord) { alarmRecord.setDbid(null); alarmRecord.setDeviceCode(devcode); alarmRecord.setDeviceId(alarmRecordsMapper.getDevcode(devcode)); alarmRecordsMapper.insert(alarmRecord); } butaneDataMapper.insert(butaneData); + + try { + //推送短信至第三方 + Device device = alarmRecordsMapper.getDevice(devcode); + JSONObject eventObj = new JSONObject(); + eventObj.put("type", "燃气报警"); + sendUtil.sendEventBySms(device, eventObj); + }catch (Exception exception){ + exception.printStackTrace(); + } } return true; } diff --git a/src/main/java/com/casic/util/DateUtils.java b/src/main/java/com/casic/util/DateUtils.java new file mode 100644 index 0000000..db2ed9c --- /dev/null +++ b/src/main/java/com/casic/util/DateUtils.java @@ -0,0 +1,63 @@ +package com.casic.util; + +import java.text.SimpleDateFormat; + +/** + * Created by Administrator on 2015/2/25. + */ +public class DateUtils { + public static SimpleDateFormat sdf_day = new SimpleDateFormat("yyyy-MM-dd"); + public static SimpleDateFormat sdf_day_time = new SimpleDateFormat("yyyyMMddHHmmss"); + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + public static final SimpleDateFormat sdf5 = new SimpleDateFormat("HH:mm:ss"); + public static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + public static String DateFormatDate(String dataString) { + + String strymd = dataString.substring(0, 8); + return strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8); + } + + public static String DateFormatTime(String dataString) { + + String strhms = dataString.substring(8); + return strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + } + + /** + * 比较两个时间 时分秒 大小 + * + * @param s1 + * @param s2 + * @return + */ + public static boolean compTime(String s1, String s2) { + try { + if (s1.indexOf(":") < 0 || s1.indexOf(":") < 0) { + System.out.println("格式不正确"); + } else { + String[] array1 = s1.split(":"); + int total1 = Integer.valueOf(array1[0]) * 3600 + Integer.valueOf(array1[1]) * 60; + String[] array2 = s2.split(":"); + int total2 = Integer.valueOf(array2[0]) * 3600 + Integer.valueOf(array2[1]) * 60; + return total1 - total2 > 0 ? true : false; + } + } catch (NumberFormatException e) { + // TODO Auto-generated catch block + return false; + } + return false; + + } +} diff --git a/src/main/java/com/casic/util/HttpClientUtils.java b/src/main/java/com/casic/util/HttpClientUtils.java new file mode 100644 index 0000000..91a631e --- /dev/null +++ b/src/main/java/com/casic/util/HttpClientUtils.java @@ -0,0 +1,40 @@ +package com.casic.util; + + +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + + + public static String post(String url, String body, JSONObject header) { + HttpClient client = new HttpClient(); + client.setTimeout(30000); + PostMethod method = new PostMethod(url); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); + method.addRequestHeader("X-APP-KEY", header.getString("X-APP-KEY")); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/casic/util/SendUtil.java b/src/main/java/com/casic/util/SendUtil.java new file mode 100644 index 0000000..2d73db1 --- /dev/null +++ b/src/main/java/com/casic/util/SendUtil.java @@ -0,0 +1,67 @@ +package com.casic.util; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.casic.entity.Device; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.util.Date; + +@Slf4j +@Component +public class SendUtil { + @Value("${casic.synchronizeSms.enabled}") + private String enabled; + @Value("${casic.smsSenderURL}") + private String smsSenderUrl; + @Value("${casic.X-APP-KEY-SMS}") + private String smsAppKey; + + public void sendEventBySms(Device device, JSONObject eventObj) { + if ("true".equals(enabled)) { +// String smsSenderUrl = Configure.getProperty("smsSenderURL", "http://general.bushub.rj.prd/sms/user/send"); +// String smsAppKey = Configure.getProperty("X-APP-KEY-SMS", "2d3a8e35-0533-42a0-97a2-63f82a3216f9"); + String sim = device.getSimid(); + if (null == sim || StringUtils.isBlank(sim)) { + return; + } + + if (null == smsAppKey || StringUtils.isBlank(smsAppKey)) { + return; + } + + JSONObject header = new JSONObject(); + header.put("X-APP-KEY", smsAppKey); + + StringBuilder params = new StringBuilder(); + params.append("{"); + params.append("\"mobile\":"); + params.append("\"").append(sim).append("\"").append(","); + + String prefix = "【智慧蓉江】"; + String eventTm = DateUtils.sdf4.format(new Date()); + String devName = device.getDevName(); + String place = device.getFactory(); + + StringBuilder content = new StringBuilder(""); + content.append(prefix); + content.append(eventTm).append(","); + content.append("管网监测设备[").append(devName).append("],"); + content.append("发生").append(eventObj.getString("type")).append(","); + if (eventObj.containsKey("value") == true) { + content.append(eventObj.getString("value")).append(","); + } + content.append("详细地址是:").append(place).append(","); + content.append("请关注并及时处理。"); + + params.append("\"content\":"); + params.append("\"").append(content.toString()).append("\""); + params.append("}"); + + String resp = HttpClientUtils.post(smsSenderUrl, params.toString(), header); + log.info("已发送短信"+resp); + } + } +} diff --git a/pom.xml b/pom.xml index 9fb6f35..8427901 100644 --- a/pom.xml +++ b/pom.xml @@ -90,6 +90,14 @@ 1.2.73 + + + + commons-httpclient + commons-httpclient + 3.1 + + xyz.downgoon snowflake diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 4dbefff..3b9793b 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -16,7 +16,6 @@ @RequestMapping("/casic") public class DeviceController { - private final DeviceService deviceService; public DeviceController(DeviceService deviceService) { @@ -30,9 +29,7 @@ @PostMapping("/household/gas") public ResponseData saveDataGas(@RequestBody Map receiveData) { - log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + log.info("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); return deviceService.saveDataGas(receiveData); } - - } diff --git a/src/main/java/com/casic/dao/AlarmRecordsMapper.java b/src/main/java/com/casic/dao/AlarmRecordsMapper.java index 9f79655..b7fbd34 100644 --- a/src/main/java/com/casic/dao/AlarmRecordsMapper.java +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.casic.entity.AlarmRecord; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; @@ -15,4 +16,9 @@ "FROM ALARM_DEVICE " + "WHERE ACTIVE=1 AND DEVCODE=#{devcode} ") Long getDevcode(@Param("devcode") String devcode); + + @Select("SELECT DBID as id, DEVCODE as devCode, DEVNAME as devName, FACTORY as factory, SIMID as simid " + + "FROM ALARM_DEVICE " + + "WHERE ACTIVE=1 AND DEVCODE=#{devcode} ") + Device getDevice(@Param("devcode") String devcode); } diff --git a/src/main/java/com/casic/entity/Device.java b/src/main/java/com/casic/entity/Device.java new file mode 100644 index 0000000..0360e41 --- /dev/null +++ b/src/main/java/com/casic/entity/Device.java @@ -0,0 +1,27 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; + +@Data +@TableName("ALARM_DEVICE") +public class Device implements Serializable { + /** + * 设备基本信息表 + */ + private static final long serialVersionUID = -2023118078562324658L; + @TableId(value = "DBID") + private Long id; + @TableId(value = "DEVCODE") + private String devCode; + @TableId(value = "DEVNAME") + private String devName; + @TableId(value = "FACTORY") + private String factory; + @TableId(value = "SIMID") + private String simid; // SIM卡号 + +} diff --git a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java index 4966ae7..70a667f 100644 --- a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java @@ -1,15 +1,19 @@ package com.casic.service.impl; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.dao.AlarmRecordsMapper; import com.casic.dao.ButaneDataMapper; import com.casic.entity.AlarmRecord; import com.casic.entity.ButaneData; +import com.casic.entity.Device; import com.casic.model.ResponseData; import com.casic.service.AlarmRecordFly; import com.casic.service.DeviceService; +import com.casic.util.SendUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import xyz.downgoon.snowflake.Snowflake; @@ -26,6 +30,8 @@ private final ButaneDataMapper butaneDataMapper; private final AlarmRecordsMapper alarmRecordsMapper; private static Snowflake snowflake = new Snowflake(0, 2); + @Autowired + private SendUtil sendUtil; @Override public ResponseData testMysql() { @@ -53,7 +59,7 @@ responseData.setCode(200); responseData.setMessage("保存成功"); } catch (Exception dex) { - log.error("主题:广东台燃气设备存储异常,异常信息:{}", dex.getMessage()); + log.error("主题:燃气设备存储异常,异常信息:{}", dex.getMessage()); responseData.setCode(500); responseData.setMessage("保存异常"); } @@ -97,13 +103,23 @@ //产生新的报警,消除报警 butaneData.setDescn("可燃气体探测器报警"); butaneData.setStatus("1"); - synchronized (alarmRecord){ + synchronized (alarmRecord) { alarmRecord.setDbid(null); alarmRecord.setDeviceCode(devcode); alarmRecord.setDeviceId(alarmRecordsMapper.getDevcode(devcode)); alarmRecordsMapper.insert(alarmRecord); } butaneDataMapper.insert(butaneData); + + try { + //推送短信至第三方 + Device device = alarmRecordsMapper.getDevice(devcode); + JSONObject eventObj = new JSONObject(); + eventObj.put("type", "燃气报警"); + sendUtil.sendEventBySms(device, eventObj); + }catch (Exception exception){ + exception.printStackTrace(); + } } return true; } diff --git a/src/main/java/com/casic/util/DateUtils.java b/src/main/java/com/casic/util/DateUtils.java new file mode 100644 index 0000000..db2ed9c --- /dev/null +++ b/src/main/java/com/casic/util/DateUtils.java @@ -0,0 +1,63 @@ +package com.casic.util; + +import java.text.SimpleDateFormat; + +/** + * Created by Administrator on 2015/2/25. + */ +public class DateUtils { + public static SimpleDateFormat sdf_day = new SimpleDateFormat("yyyy-MM-dd"); + public static SimpleDateFormat sdf_day_time = new SimpleDateFormat("yyyyMMddHHmmss"); + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + public static final SimpleDateFormat sdf5 = new SimpleDateFormat("HH:mm:ss"); + public static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + public static String DateFormatDate(String dataString) { + + String strymd = dataString.substring(0, 8); + return strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8); + } + + public static String DateFormatTime(String dataString) { + + String strhms = dataString.substring(8); + return strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + } + + /** + * 比较两个时间 时分秒 大小 + * + * @param s1 + * @param s2 + * @return + */ + public static boolean compTime(String s1, String s2) { + try { + if (s1.indexOf(":") < 0 || s1.indexOf(":") < 0) { + System.out.println("格式不正确"); + } else { + String[] array1 = s1.split(":"); + int total1 = Integer.valueOf(array1[0]) * 3600 + Integer.valueOf(array1[1]) * 60; + String[] array2 = s2.split(":"); + int total2 = Integer.valueOf(array2[0]) * 3600 + Integer.valueOf(array2[1]) * 60; + return total1 - total2 > 0 ? true : false; + } + } catch (NumberFormatException e) { + // TODO Auto-generated catch block + return false; + } + return false; + + } +} diff --git a/src/main/java/com/casic/util/HttpClientUtils.java b/src/main/java/com/casic/util/HttpClientUtils.java new file mode 100644 index 0000000..91a631e --- /dev/null +++ b/src/main/java/com/casic/util/HttpClientUtils.java @@ -0,0 +1,40 @@ +package com.casic.util; + + +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + + + public static String post(String url, String body, JSONObject header) { + HttpClient client = new HttpClient(); + client.setTimeout(30000); + PostMethod method = new PostMethod(url); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); + method.addRequestHeader("X-APP-KEY", header.getString("X-APP-KEY")); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/casic/util/SendUtil.java b/src/main/java/com/casic/util/SendUtil.java new file mode 100644 index 0000000..2d73db1 --- /dev/null +++ b/src/main/java/com/casic/util/SendUtil.java @@ -0,0 +1,67 @@ +package com.casic.util; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.casic.entity.Device; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.util.Date; + +@Slf4j +@Component +public class SendUtil { + @Value("${casic.synchronizeSms.enabled}") + private String enabled; + @Value("${casic.smsSenderURL}") + private String smsSenderUrl; + @Value("${casic.X-APP-KEY-SMS}") + private String smsAppKey; + + public void sendEventBySms(Device device, JSONObject eventObj) { + if ("true".equals(enabled)) { +// String smsSenderUrl = Configure.getProperty("smsSenderURL", "http://general.bushub.rj.prd/sms/user/send"); +// String smsAppKey = Configure.getProperty("X-APP-KEY-SMS", "2d3a8e35-0533-42a0-97a2-63f82a3216f9"); + String sim = device.getSimid(); + if (null == sim || StringUtils.isBlank(sim)) { + return; + } + + if (null == smsAppKey || StringUtils.isBlank(smsAppKey)) { + return; + } + + JSONObject header = new JSONObject(); + header.put("X-APP-KEY", smsAppKey); + + StringBuilder params = new StringBuilder(); + params.append("{"); + params.append("\"mobile\":"); + params.append("\"").append(sim).append("\"").append(","); + + String prefix = "【智慧蓉江】"; + String eventTm = DateUtils.sdf4.format(new Date()); + String devName = device.getDevName(); + String place = device.getFactory(); + + StringBuilder content = new StringBuilder(""); + content.append(prefix); + content.append(eventTm).append(","); + content.append("管网监测设备[").append(devName).append("],"); + content.append("发生").append(eventObj.getString("type")).append(","); + if (eventObj.containsKey("value") == true) { + content.append(eventObj.getString("value")).append(","); + } + content.append("详细地址是:").append(place).append(","); + content.append("请关注并及时处理。"); + + params.append("\"content\":"); + params.append("\"").append(content.toString()).append("\""); + params.append("}"); + + String resp = HttpClientUtils.post(smsSenderUrl, params.toString(), header); + log.info("已发送短信"+resp); + } + } +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index a2fd2c5..b8e32b3 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -4,7 +4,7 @@ spring: datasource: driverClassName: oracle.jdbc.driver.OracleDriver - url: jdbc:oracle:thin:@11.100.6.183:1521:orcl + url: jdbc:oracle:thin:@11.100.6.181:1521:orcl username: gzsg password: gzsg session: @@ -19,8 +19,15 @@ # session: #flowable数据源和多数据源配置 logging: - level.root: error - level.com.casic: error + level.root: info + level.com.casic: debug + level.org.springframework.web: info file: path: logs/ - name: missiles.log \ No newline at end of file + name: missiles.log +#短信推送 +casic: + synchronizeSms.enabled: true + smsSenderURL: http://general.bushub.rj.prd/sms/user/send + X-APP-KEY-SMS: 2d3a8e35-0533-42a0-97a2-63f82a3216f9 + sms-prefix: 【智慧蓉江】 \ No newline at end of file diff --git a/pom.xml b/pom.xml index 9fb6f35..8427901 100644 --- a/pom.xml +++ b/pom.xml @@ -90,6 +90,14 @@ 1.2.73 + + + + commons-httpclient + commons-httpclient + 3.1 + + xyz.downgoon snowflake diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 4dbefff..3b9793b 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -16,7 +16,6 @@ @RequestMapping("/casic") public class DeviceController { - private final DeviceService deviceService; public DeviceController(DeviceService deviceService) { @@ -30,9 +29,7 @@ @PostMapping("/household/gas") public ResponseData saveDataGas(@RequestBody Map receiveData) { - log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + log.info("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); return deviceService.saveDataGas(receiveData); } - - } diff --git a/src/main/java/com/casic/dao/AlarmRecordsMapper.java b/src/main/java/com/casic/dao/AlarmRecordsMapper.java index 9f79655..b7fbd34 100644 --- a/src/main/java/com/casic/dao/AlarmRecordsMapper.java +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.casic.entity.AlarmRecord; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; @@ -15,4 +16,9 @@ "FROM ALARM_DEVICE " + "WHERE ACTIVE=1 AND DEVCODE=#{devcode} ") Long getDevcode(@Param("devcode") String devcode); + + @Select("SELECT DBID as id, DEVCODE as devCode, DEVNAME as devName, FACTORY as factory, SIMID as simid " + + "FROM ALARM_DEVICE " + + "WHERE ACTIVE=1 AND DEVCODE=#{devcode} ") + Device getDevice(@Param("devcode") String devcode); } diff --git a/src/main/java/com/casic/entity/Device.java b/src/main/java/com/casic/entity/Device.java new file mode 100644 index 0000000..0360e41 --- /dev/null +++ b/src/main/java/com/casic/entity/Device.java @@ -0,0 +1,27 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; + +@Data +@TableName("ALARM_DEVICE") +public class Device implements Serializable { + /** + * 设备基本信息表 + */ + private static final long serialVersionUID = -2023118078562324658L; + @TableId(value = "DBID") + private Long id; + @TableId(value = "DEVCODE") + private String devCode; + @TableId(value = "DEVNAME") + private String devName; + @TableId(value = "FACTORY") + private String factory; + @TableId(value = "SIMID") + private String simid; // SIM卡号 + +} diff --git a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java index 4966ae7..70a667f 100644 --- a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java @@ -1,15 +1,19 @@ package com.casic.service.impl; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.dao.AlarmRecordsMapper; import com.casic.dao.ButaneDataMapper; import com.casic.entity.AlarmRecord; import com.casic.entity.ButaneData; +import com.casic.entity.Device; import com.casic.model.ResponseData; import com.casic.service.AlarmRecordFly; import com.casic.service.DeviceService; +import com.casic.util.SendUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import xyz.downgoon.snowflake.Snowflake; @@ -26,6 +30,8 @@ private final ButaneDataMapper butaneDataMapper; private final AlarmRecordsMapper alarmRecordsMapper; private static Snowflake snowflake = new Snowflake(0, 2); + @Autowired + private SendUtil sendUtil; @Override public ResponseData testMysql() { @@ -53,7 +59,7 @@ responseData.setCode(200); responseData.setMessage("保存成功"); } catch (Exception dex) { - log.error("主题:广东台燃气设备存储异常,异常信息:{}", dex.getMessage()); + log.error("主题:燃气设备存储异常,异常信息:{}", dex.getMessage()); responseData.setCode(500); responseData.setMessage("保存异常"); } @@ -97,13 +103,23 @@ //产生新的报警,消除报警 butaneData.setDescn("可燃气体探测器报警"); butaneData.setStatus("1"); - synchronized (alarmRecord){ + synchronized (alarmRecord) { alarmRecord.setDbid(null); alarmRecord.setDeviceCode(devcode); alarmRecord.setDeviceId(alarmRecordsMapper.getDevcode(devcode)); alarmRecordsMapper.insert(alarmRecord); } butaneDataMapper.insert(butaneData); + + try { + //推送短信至第三方 + Device device = alarmRecordsMapper.getDevice(devcode); + JSONObject eventObj = new JSONObject(); + eventObj.put("type", "燃气报警"); + sendUtil.sendEventBySms(device, eventObj); + }catch (Exception exception){ + exception.printStackTrace(); + } } return true; } diff --git a/src/main/java/com/casic/util/DateUtils.java b/src/main/java/com/casic/util/DateUtils.java new file mode 100644 index 0000000..db2ed9c --- /dev/null +++ b/src/main/java/com/casic/util/DateUtils.java @@ -0,0 +1,63 @@ +package com.casic.util; + +import java.text.SimpleDateFormat; + +/** + * Created by Administrator on 2015/2/25. + */ +public class DateUtils { + public static SimpleDateFormat sdf_day = new SimpleDateFormat("yyyy-MM-dd"); + public static SimpleDateFormat sdf_day_time = new SimpleDateFormat("yyyyMMddHHmmss"); + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + public static final SimpleDateFormat sdf5 = new SimpleDateFormat("HH:mm:ss"); + public static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + public static String DateFormatDate(String dataString) { + + String strymd = dataString.substring(0, 8); + return strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8); + } + + public static String DateFormatTime(String dataString) { + + String strhms = dataString.substring(8); + return strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + } + + /** + * 比较两个时间 时分秒 大小 + * + * @param s1 + * @param s2 + * @return + */ + public static boolean compTime(String s1, String s2) { + try { + if (s1.indexOf(":") < 0 || s1.indexOf(":") < 0) { + System.out.println("格式不正确"); + } else { + String[] array1 = s1.split(":"); + int total1 = Integer.valueOf(array1[0]) * 3600 + Integer.valueOf(array1[1]) * 60; + String[] array2 = s2.split(":"); + int total2 = Integer.valueOf(array2[0]) * 3600 + Integer.valueOf(array2[1]) * 60; + return total1 - total2 > 0 ? true : false; + } + } catch (NumberFormatException e) { + // TODO Auto-generated catch block + return false; + } + return false; + + } +} diff --git a/src/main/java/com/casic/util/HttpClientUtils.java b/src/main/java/com/casic/util/HttpClientUtils.java new file mode 100644 index 0000000..91a631e --- /dev/null +++ b/src/main/java/com/casic/util/HttpClientUtils.java @@ -0,0 +1,40 @@ +package com.casic.util; + + +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + + + public static String post(String url, String body, JSONObject header) { + HttpClient client = new HttpClient(); + client.setTimeout(30000); + PostMethod method = new PostMethod(url); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); + method.addRequestHeader("X-APP-KEY", header.getString("X-APP-KEY")); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/casic/util/SendUtil.java b/src/main/java/com/casic/util/SendUtil.java new file mode 100644 index 0000000..2d73db1 --- /dev/null +++ b/src/main/java/com/casic/util/SendUtil.java @@ -0,0 +1,67 @@ +package com.casic.util; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.casic.entity.Device; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.util.Date; + +@Slf4j +@Component +public class SendUtil { + @Value("${casic.synchronizeSms.enabled}") + private String enabled; + @Value("${casic.smsSenderURL}") + private String smsSenderUrl; + @Value("${casic.X-APP-KEY-SMS}") + private String smsAppKey; + + public void sendEventBySms(Device device, JSONObject eventObj) { + if ("true".equals(enabled)) { +// String smsSenderUrl = Configure.getProperty("smsSenderURL", "http://general.bushub.rj.prd/sms/user/send"); +// String smsAppKey = Configure.getProperty("X-APP-KEY-SMS", "2d3a8e35-0533-42a0-97a2-63f82a3216f9"); + String sim = device.getSimid(); + if (null == sim || StringUtils.isBlank(sim)) { + return; + } + + if (null == smsAppKey || StringUtils.isBlank(smsAppKey)) { + return; + } + + JSONObject header = new JSONObject(); + header.put("X-APP-KEY", smsAppKey); + + StringBuilder params = new StringBuilder(); + params.append("{"); + params.append("\"mobile\":"); + params.append("\"").append(sim).append("\"").append(","); + + String prefix = "【智慧蓉江】"; + String eventTm = DateUtils.sdf4.format(new Date()); + String devName = device.getDevName(); + String place = device.getFactory(); + + StringBuilder content = new StringBuilder(""); + content.append(prefix); + content.append(eventTm).append(","); + content.append("管网监测设备[").append(devName).append("],"); + content.append("发生").append(eventObj.getString("type")).append(","); + if (eventObj.containsKey("value") == true) { + content.append(eventObj.getString("value")).append(","); + } + content.append("详细地址是:").append(place).append(","); + content.append("请关注并及时处理。"); + + params.append("\"content\":"); + params.append("\"").append(content.toString()).append("\""); + params.append("}"); + + String resp = HttpClientUtils.post(smsSenderUrl, params.toString(), header); + log.info("已发送短信"+resp); + } + } +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index a2fd2c5..b8e32b3 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -4,7 +4,7 @@ spring: datasource: driverClassName: oracle.jdbc.driver.OracleDriver - url: jdbc:oracle:thin:@11.100.6.183:1521:orcl + url: jdbc:oracle:thin:@11.100.6.181:1521:orcl username: gzsg password: gzsg session: @@ -19,8 +19,15 @@ # session: #flowable数据源和多数据源配置 logging: - level.root: error - level.com.casic: error + level.root: info + level.com.casic: debug + level.org.springframework.web: info file: path: logs/ - name: missiles.log \ No newline at end of file + name: missiles.log +#短信推送 +casic: + synchronizeSms.enabled: true + smsSenderURL: http://general.bushub.rj.prd/sms/user/send + X-APP-KEY-SMS: 2d3a8e35-0533-42a0-97a2-63f82a3216f9 + sms-prefix: 【智慧蓉江】 \ No newline at end of file diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..c0c7ac9 --- /dev/null +++ b/src/main/resources/logback-spring.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + utf-8 + + + + + + + + + + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + utf-8 + + + + + + + + ${LOG_PATH}/missiles_error.log + + + + + + ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log + + + + 10MB + + + + + true + + + + ${FILE_LOG_PATTERN} + utf-8 + + + + + error + ACCEPT + DENY + + + + + + + + ${LOG_PATH}/missiles_total.log + + + + + + ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log + + + + 10MB + + + + + true + + + + ${FILE_LOG_PATTERN} + utf-8 + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 9fb6f35..8427901 100644 --- a/pom.xml +++ b/pom.xml @@ -90,6 +90,14 @@ 1.2.73 + + + + commons-httpclient + commons-httpclient + 3.1 + + xyz.downgoon snowflake diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 4dbefff..3b9793b 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -16,7 +16,6 @@ @RequestMapping("/casic") public class DeviceController { - private final DeviceService deviceService; public DeviceController(DeviceService deviceService) { @@ -30,9 +29,7 @@ @PostMapping("/household/gas") public ResponseData saveDataGas(@RequestBody Map receiveData) { - log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + log.info("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); return deviceService.saveDataGas(receiveData); } - - } diff --git a/src/main/java/com/casic/dao/AlarmRecordsMapper.java b/src/main/java/com/casic/dao/AlarmRecordsMapper.java index 9f79655..b7fbd34 100644 --- a/src/main/java/com/casic/dao/AlarmRecordsMapper.java +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.casic.entity.AlarmRecord; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; @@ -15,4 +16,9 @@ "FROM ALARM_DEVICE " + "WHERE ACTIVE=1 AND DEVCODE=#{devcode} ") Long getDevcode(@Param("devcode") String devcode); + + @Select("SELECT DBID as id, DEVCODE as devCode, DEVNAME as devName, FACTORY as factory, SIMID as simid " + + "FROM ALARM_DEVICE " + + "WHERE ACTIVE=1 AND DEVCODE=#{devcode} ") + Device getDevice(@Param("devcode") String devcode); } diff --git a/src/main/java/com/casic/entity/Device.java b/src/main/java/com/casic/entity/Device.java new file mode 100644 index 0000000..0360e41 --- /dev/null +++ b/src/main/java/com/casic/entity/Device.java @@ -0,0 +1,27 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; + +@Data +@TableName("ALARM_DEVICE") +public class Device implements Serializable { + /** + * 设备基本信息表 + */ + private static final long serialVersionUID = -2023118078562324658L; + @TableId(value = "DBID") + private Long id; + @TableId(value = "DEVCODE") + private String devCode; + @TableId(value = "DEVNAME") + private String devName; + @TableId(value = "FACTORY") + private String factory; + @TableId(value = "SIMID") + private String simid; // SIM卡号 + +} diff --git a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java index 4966ae7..70a667f 100644 --- a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java @@ -1,15 +1,19 @@ package com.casic.service.impl; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.dao.AlarmRecordsMapper; import com.casic.dao.ButaneDataMapper; import com.casic.entity.AlarmRecord; import com.casic.entity.ButaneData; +import com.casic.entity.Device; import com.casic.model.ResponseData; import com.casic.service.AlarmRecordFly; import com.casic.service.DeviceService; +import com.casic.util.SendUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import xyz.downgoon.snowflake.Snowflake; @@ -26,6 +30,8 @@ private final ButaneDataMapper butaneDataMapper; private final AlarmRecordsMapper alarmRecordsMapper; private static Snowflake snowflake = new Snowflake(0, 2); + @Autowired + private SendUtil sendUtil; @Override public ResponseData testMysql() { @@ -53,7 +59,7 @@ responseData.setCode(200); responseData.setMessage("保存成功"); } catch (Exception dex) { - log.error("主题:广东台燃气设备存储异常,异常信息:{}", dex.getMessage()); + log.error("主题:燃气设备存储异常,异常信息:{}", dex.getMessage()); responseData.setCode(500); responseData.setMessage("保存异常"); } @@ -97,13 +103,23 @@ //产生新的报警,消除报警 butaneData.setDescn("可燃气体探测器报警"); butaneData.setStatus("1"); - synchronized (alarmRecord){ + synchronized (alarmRecord) { alarmRecord.setDbid(null); alarmRecord.setDeviceCode(devcode); alarmRecord.setDeviceId(alarmRecordsMapper.getDevcode(devcode)); alarmRecordsMapper.insert(alarmRecord); } butaneDataMapper.insert(butaneData); + + try { + //推送短信至第三方 + Device device = alarmRecordsMapper.getDevice(devcode); + JSONObject eventObj = new JSONObject(); + eventObj.put("type", "燃气报警"); + sendUtil.sendEventBySms(device, eventObj); + }catch (Exception exception){ + exception.printStackTrace(); + } } return true; } diff --git a/src/main/java/com/casic/util/DateUtils.java b/src/main/java/com/casic/util/DateUtils.java new file mode 100644 index 0000000..db2ed9c --- /dev/null +++ b/src/main/java/com/casic/util/DateUtils.java @@ -0,0 +1,63 @@ +package com.casic.util; + +import java.text.SimpleDateFormat; + +/** + * Created by Administrator on 2015/2/25. + */ +public class DateUtils { + public static SimpleDateFormat sdf_day = new SimpleDateFormat("yyyy-MM-dd"); + public static SimpleDateFormat sdf_day_time = new SimpleDateFormat("yyyyMMddHHmmss"); + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + public static final SimpleDateFormat sdf5 = new SimpleDateFormat("HH:mm:ss"); + public static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + public static String DateFormatDate(String dataString) { + + String strymd = dataString.substring(0, 8); + return strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8); + } + + public static String DateFormatTime(String dataString) { + + String strhms = dataString.substring(8); + return strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + } + + /** + * 比较两个时间 时分秒 大小 + * + * @param s1 + * @param s2 + * @return + */ + public static boolean compTime(String s1, String s2) { + try { + if (s1.indexOf(":") < 0 || s1.indexOf(":") < 0) { + System.out.println("格式不正确"); + } else { + String[] array1 = s1.split(":"); + int total1 = Integer.valueOf(array1[0]) * 3600 + Integer.valueOf(array1[1]) * 60; + String[] array2 = s2.split(":"); + int total2 = Integer.valueOf(array2[0]) * 3600 + Integer.valueOf(array2[1]) * 60; + return total1 - total2 > 0 ? true : false; + } + } catch (NumberFormatException e) { + // TODO Auto-generated catch block + return false; + } + return false; + + } +} diff --git a/src/main/java/com/casic/util/HttpClientUtils.java b/src/main/java/com/casic/util/HttpClientUtils.java new file mode 100644 index 0000000..91a631e --- /dev/null +++ b/src/main/java/com/casic/util/HttpClientUtils.java @@ -0,0 +1,40 @@ +package com.casic.util; + + +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + + + public static String post(String url, String body, JSONObject header) { + HttpClient client = new HttpClient(); + client.setTimeout(30000); + PostMethod method = new PostMethod(url); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); + method.addRequestHeader("X-APP-KEY", header.getString("X-APP-KEY")); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/casic/util/SendUtil.java b/src/main/java/com/casic/util/SendUtil.java new file mode 100644 index 0000000..2d73db1 --- /dev/null +++ b/src/main/java/com/casic/util/SendUtil.java @@ -0,0 +1,67 @@ +package com.casic.util; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.casic.entity.Device; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.util.Date; + +@Slf4j +@Component +public class SendUtil { + @Value("${casic.synchronizeSms.enabled}") + private String enabled; + @Value("${casic.smsSenderURL}") + private String smsSenderUrl; + @Value("${casic.X-APP-KEY-SMS}") + private String smsAppKey; + + public void sendEventBySms(Device device, JSONObject eventObj) { + if ("true".equals(enabled)) { +// String smsSenderUrl = Configure.getProperty("smsSenderURL", "http://general.bushub.rj.prd/sms/user/send"); +// String smsAppKey = Configure.getProperty("X-APP-KEY-SMS", "2d3a8e35-0533-42a0-97a2-63f82a3216f9"); + String sim = device.getSimid(); + if (null == sim || StringUtils.isBlank(sim)) { + return; + } + + if (null == smsAppKey || StringUtils.isBlank(smsAppKey)) { + return; + } + + JSONObject header = new JSONObject(); + header.put("X-APP-KEY", smsAppKey); + + StringBuilder params = new StringBuilder(); + params.append("{"); + params.append("\"mobile\":"); + params.append("\"").append(sim).append("\"").append(","); + + String prefix = "【智慧蓉江】"; + String eventTm = DateUtils.sdf4.format(new Date()); + String devName = device.getDevName(); + String place = device.getFactory(); + + StringBuilder content = new StringBuilder(""); + content.append(prefix); + content.append(eventTm).append(","); + content.append("管网监测设备[").append(devName).append("],"); + content.append("发生").append(eventObj.getString("type")).append(","); + if (eventObj.containsKey("value") == true) { + content.append(eventObj.getString("value")).append(","); + } + content.append("详细地址是:").append(place).append(","); + content.append("请关注并及时处理。"); + + params.append("\"content\":"); + params.append("\"").append(content.toString()).append("\""); + params.append("}"); + + String resp = HttpClientUtils.post(smsSenderUrl, params.toString(), header); + log.info("已发送短信"+resp); + } + } +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index a2fd2c5..b8e32b3 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -4,7 +4,7 @@ spring: datasource: driverClassName: oracle.jdbc.driver.OracleDriver - url: jdbc:oracle:thin:@11.100.6.183:1521:orcl + url: jdbc:oracle:thin:@11.100.6.181:1521:orcl username: gzsg password: gzsg session: @@ -19,8 +19,15 @@ # session: #flowable数据源和多数据源配置 logging: - level.root: error - level.com.casic: error + level.root: info + level.com.casic: debug + level.org.springframework.web: info file: path: logs/ - name: missiles.log \ No newline at end of file + name: missiles.log +#短信推送 +casic: + synchronizeSms.enabled: true + smsSenderURL: http://general.bushub.rj.prd/sms/user/send + X-APP-KEY-SMS: 2d3a8e35-0533-42a0-97a2-63f82a3216f9 + sms-prefix: 【智慧蓉江】 \ No newline at end of file diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..c0c7ac9 --- /dev/null +++ b/src/main/resources/logback-spring.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + utf-8 + + + + + + + + + + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + utf-8 + + + + + + + + ${LOG_PATH}/missiles_error.log + + + + + + ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log + + + + 10MB + + + + + true + + + + ${FILE_LOG_PATTERN} + utf-8 + + + + + error + ACCEPT + DENY + + + + + + + + ${LOG_PATH}/missiles_total.log + + + + + + ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log + + + + 10MB + + + + + true + + + + ${FILE_LOG_PATTERN} + utf-8 + + + + + + + + + + + \ No newline at end of file diff --git a/target/classes/application-dev.yml b/target/classes/application-dev.yml index a2fd2c5..b8e32b3 100644 --- a/target/classes/application-dev.yml +++ b/target/classes/application-dev.yml @@ -4,7 +4,7 @@ spring: datasource: driverClassName: oracle.jdbc.driver.OracleDriver - url: jdbc:oracle:thin:@11.100.6.183:1521:orcl + url: jdbc:oracle:thin:@11.100.6.181:1521:orcl username: gzsg password: gzsg session: @@ -19,8 +19,15 @@ # session: #flowable数据源和多数据源配置 logging: - level.root: error - level.com.casic: error + level.root: info + level.com.casic: debug + level.org.springframework.web: info file: path: logs/ - name: missiles.log \ No newline at end of file + name: missiles.log +#短信推送 +casic: + synchronizeSms.enabled: true + smsSenderURL: http://general.bushub.rj.prd/sms/user/send + X-APP-KEY-SMS: 2d3a8e35-0533-42a0-97a2-63f82a3216f9 + sms-prefix: 【智慧蓉江】 \ No newline at end of file diff --git a/pom.xml b/pom.xml index 9fb6f35..8427901 100644 --- a/pom.xml +++ b/pom.xml @@ -90,6 +90,14 @@ 1.2.73 + + + + commons-httpclient + commons-httpclient + 3.1 + + xyz.downgoon snowflake diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 4dbefff..3b9793b 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -16,7 +16,6 @@ @RequestMapping("/casic") public class DeviceController { - private final DeviceService deviceService; public DeviceController(DeviceService deviceService) { @@ -30,9 +29,7 @@ @PostMapping("/household/gas") public ResponseData saveDataGas(@RequestBody Map receiveData) { - log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + log.info("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); return deviceService.saveDataGas(receiveData); } - - } diff --git a/src/main/java/com/casic/dao/AlarmRecordsMapper.java b/src/main/java/com/casic/dao/AlarmRecordsMapper.java index 9f79655..b7fbd34 100644 --- a/src/main/java/com/casic/dao/AlarmRecordsMapper.java +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.casic.entity.AlarmRecord; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; @@ -15,4 +16,9 @@ "FROM ALARM_DEVICE " + "WHERE ACTIVE=1 AND DEVCODE=#{devcode} ") Long getDevcode(@Param("devcode") String devcode); + + @Select("SELECT DBID as id, DEVCODE as devCode, DEVNAME as devName, FACTORY as factory, SIMID as simid " + + "FROM ALARM_DEVICE " + + "WHERE ACTIVE=1 AND DEVCODE=#{devcode} ") + Device getDevice(@Param("devcode") String devcode); } diff --git a/src/main/java/com/casic/entity/Device.java b/src/main/java/com/casic/entity/Device.java new file mode 100644 index 0000000..0360e41 --- /dev/null +++ b/src/main/java/com/casic/entity/Device.java @@ -0,0 +1,27 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; + +@Data +@TableName("ALARM_DEVICE") +public class Device implements Serializable { + /** + * 设备基本信息表 + */ + private static final long serialVersionUID = -2023118078562324658L; + @TableId(value = "DBID") + private Long id; + @TableId(value = "DEVCODE") + private String devCode; + @TableId(value = "DEVNAME") + private String devName; + @TableId(value = "FACTORY") + private String factory; + @TableId(value = "SIMID") + private String simid; // SIM卡号 + +} diff --git a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java index 4966ae7..70a667f 100644 --- a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java @@ -1,15 +1,19 @@ package com.casic.service.impl; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.dao.AlarmRecordsMapper; import com.casic.dao.ButaneDataMapper; import com.casic.entity.AlarmRecord; import com.casic.entity.ButaneData; +import com.casic.entity.Device; import com.casic.model.ResponseData; import com.casic.service.AlarmRecordFly; import com.casic.service.DeviceService; +import com.casic.util.SendUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import xyz.downgoon.snowflake.Snowflake; @@ -26,6 +30,8 @@ private final ButaneDataMapper butaneDataMapper; private final AlarmRecordsMapper alarmRecordsMapper; private static Snowflake snowflake = new Snowflake(0, 2); + @Autowired + private SendUtil sendUtil; @Override public ResponseData testMysql() { @@ -53,7 +59,7 @@ responseData.setCode(200); responseData.setMessage("保存成功"); } catch (Exception dex) { - log.error("主题:广东台燃气设备存储异常,异常信息:{}", dex.getMessage()); + log.error("主题:燃气设备存储异常,异常信息:{}", dex.getMessage()); responseData.setCode(500); responseData.setMessage("保存异常"); } @@ -97,13 +103,23 @@ //产生新的报警,消除报警 butaneData.setDescn("可燃气体探测器报警"); butaneData.setStatus("1"); - synchronized (alarmRecord){ + synchronized (alarmRecord) { alarmRecord.setDbid(null); alarmRecord.setDeviceCode(devcode); alarmRecord.setDeviceId(alarmRecordsMapper.getDevcode(devcode)); alarmRecordsMapper.insert(alarmRecord); } butaneDataMapper.insert(butaneData); + + try { + //推送短信至第三方 + Device device = alarmRecordsMapper.getDevice(devcode); + JSONObject eventObj = new JSONObject(); + eventObj.put("type", "燃气报警"); + sendUtil.sendEventBySms(device, eventObj); + }catch (Exception exception){ + exception.printStackTrace(); + } } return true; } diff --git a/src/main/java/com/casic/util/DateUtils.java b/src/main/java/com/casic/util/DateUtils.java new file mode 100644 index 0000000..db2ed9c --- /dev/null +++ b/src/main/java/com/casic/util/DateUtils.java @@ -0,0 +1,63 @@ +package com.casic.util; + +import java.text.SimpleDateFormat; + +/** + * Created by Administrator on 2015/2/25. + */ +public class DateUtils { + public static SimpleDateFormat sdf_day = new SimpleDateFormat("yyyy-MM-dd"); + public static SimpleDateFormat sdf_day_time = new SimpleDateFormat("yyyyMMddHHmmss"); + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + public static final SimpleDateFormat sdf5 = new SimpleDateFormat("HH:mm:ss"); + public static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + public static String DateFormatDate(String dataString) { + + String strymd = dataString.substring(0, 8); + return strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8); + } + + public static String DateFormatTime(String dataString) { + + String strhms = dataString.substring(8); + return strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + } + + /** + * 比较两个时间 时分秒 大小 + * + * @param s1 + * @param s2 + * @return + */ + public static boolean compTime(String s1, String s2) { + try { + if (s1.indexOf(":") < 0 || s1.indexOf(":") < 0) { + System.out.println("格式不正确"); + } else { + String[] array1 = s1.split(":"); + int total1 = Integer.valueOf(array1[0]) * 3600 + Integer.valueOf(array1[1]) * 60; + String[] array2 = s2.split(":"); + int total2 = Integer.valueOf(array2[0]) * 3600 + Integer.valueOf(array2[1]) * 60; + return total1 - total2 > 0 ? true : false; + } + } catch (NumberFormatException e) { + // TODO Auto-generated catch block + return false; + } + return false; + + } +} diff --git a/src/main/java/com/casic/util/HttpClientUtils.java b/src/main/java/com/casic/util/HttpClientUtils.java new file mode 100644 index 0000000..91a631e --- /dev/null +++ b/src/main/java/com/casic/util/HttpClientUtils.java @@ -0,0 +1,40 @@ +package com.casic.util; + + +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + + + public static String post(String url, String body, JSONObject header) { + HttpClient client = new HttpClient(); + client.setTimeout(30000); + PostMethod method = new PostMethod(url); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); + method.addRequestHeader("X-APP-KEY", header.getString("X-APP-KEY")); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/casic/util/SendUtil.java b/src/main/java/com/casic/util/SendUtil.java new file mode 100644 index 0000000..2d73db1 --- /dev/null +++ b/src/main/java/com/casic/util/SendUtil.java @@ -0,0 +1,67 @@ +package com.casic.util; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.casic.entity.Device; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.util.Date; + +@Slf4j +@Component +public class SendUtil { + @Value("${casic.synchronizeSms.enabled}") + private String enabled; + @Value("${casic.smsSenderURL}") + private String smsSenderUrl; + @Value("${casic.X-APP-KEY-SMS}") + private String smsAppKey; + + public void sendEventBySms(Device device, JSONObject eventObj) { + if ("true".equals(enabled)) { +// String smsSenderUrl = Configure.getProperty("smsSenderURL", "http://general.bushub.rj.prd/sms/user/send"); +// String smsAppKey = Configure.getProperty("X-APP-KEY-SMS", "2d3a8e35-0533-42a0-97a2-63f82a3216f9"); + String sim = device.getSimid(); + if (null == sim || StringUtils.isBlank(sim)) { + return; + } + + if (null == smsAppKey || StringUtils.isBlank(smsAppKey)) { + return; + } + + JSONObject header = new JSONObject(); + header.put("X-APP-KEY", smsAppKey); + + StringBuilder params = new StringBuilder(); + params.append("{"); + params.append("\"mobile\":"); + params.append("\"").append(sim).append("\"").append(","); + + String prefix = "【智慧蓉江】"; + String eventTm = DateUtils.sdf4.format(new Date()); + String devName = device.getDevName(); + String place = device.getFactory(); + + StringBuilder content = new StringBuilder(""); + content.append(prefix); + content.append(eventTm).append(","); + content.append("管网监测设备[").append(devName).append("],"); + content.append("发生").append(eventObj.getString("type")).append(","); + if (eventObj.containsKey("value") == true) { + content.append(eventObj.getString("value")).append(","); + } + content.append("详细地址是:").append(place).append(","); + content.append("请关注并及时处理。"); + + params.append("\"content\":"); + params.append("\"").append(content.toString()).append("\""); + params.append("}"); + + String resp = HttpClientUtils.post(smsSenderUrl, params.toString(), header); + log.info("已发送短信"+resp); + } + } +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index a2fd2c5..b8e32b3 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -4,7 +4,7 @@ spring: datasource: driverClassName: oracle.jdbc.driver.OracleDriver - url: jdbc:oracle:thin:@11.100.6.183:1521:orcl + url: jdbc:oracle:thin:@11.100.6.181:1521:orcl username: gzsg password: gzsg session: @@ -19,8 +19,15 @@ # session: #flowable数据源和多数据源配置 logging: - level.root: error - level.com.casic: error + level.root: info + level.com.casic: debug + level.org.springframework.web: info file: path: logs/ - name: missiles.log \ No newline at end of file + name: missiles.log +#短信推送 +casic: + synchronizeSms.enabled: true + smsSenderURL: http://general.bushub.rj.prd/sms/user/send + X-APP-KEY-SMS: 2d3a8e35-0533-42a0-97a2-63f82a3216f9 + sms-prefix: 【智慧蓉江】 \ No newline at end of file diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..c0c7ac9 --- /dev/null +++ b/src/main/resources/logback-spring.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + utf-8 + + + + + + + + + + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + utf-8 + + + + + + + + ${LOG_PATH}/missiles_error.log + + + + + + ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log + + + + 10MB + + + + + true + + + + ${FILE_LOG_PATTERN} + utf-8 + + + + + error + ACCEPT + DENY + + + + + + + + ${LOG_PATH}/missiles_total.log + + + + + + ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log + + + + 10MB + + + + + true + + + + ${FILE_LOG_PATTERN} + utf-8 + + + + + + + + + + + \ No newline at end of file diff --git a/target/classes/application-dev.yml b/target/classes/application-dev.yml index a2fd2c5..b8e32b3 100644 --- a/target/classes/application-dev.yml +++ b/target/classes/application-dev.yml @@ -4,7 +4,7 @@ spring: datasource: driverClassName: oracle.jdbc.driver.OracleDriver - url: jdbc:oracle:thin:@11.100.6.183:1521:orcl + url: jdbc:oracle:thin:@11.100.6.181:1521:orcl username: gzsg password: gzsg session: @@ -19,8 +19,15 @@ # session: #flowable数据源和多数据源配置 logging: - level.root: error - level.com.casic: error + level.root: info + level.com.casic: debug + level.org.springframework.web: info file: path: logs/ - name: missiles.log \ No newline at end of file + name: missiles.log +#短信推送 +casic: + synchronizeSms.enabled: true + smsSenderURL: http://general.bushub.rj.prd/sms/user/send + X-APP-KEY-SMS: 2d3a8e35-0533-42a0-97a2-63f82a3216f9 + sms-prefix: 【智慧蓉江】 \ No newline at end of file diff --git a/target/classes/com/casic/controller/DeviceController.class b/target/classes/com/casic/controller/DeviceController.class index c9aea71..fd9b8ca 100644 --- a/target/classes/com/casic/controller/DeviceController.class +++ b/target/classes/com/casic/controller/DeviceController.class Binary files differ diff --git a/pom.xml b/pom.xml index 9fb6f35..8427901 100644 --- a/pom.xml +++ b/pom.xml @@ -90,6 +90,14 @@ 1.2.73 + + + + commons-httpclient + commons-httpclient + 3.1 + + xyz.downgoon snowflake diff --git a/src/main/java/com/casic/controller/DeviceController.java b/src/main/java/com/casic/controller/DeviceController.java index 4dbefff..3b9793b 100644 --- a/src/main/java/com/casic/controller/DeviceController.java +++ b/src/main/java/com/casic/controller/DeviceController.java @@ -16,7 +16,6 @@ @RequestMapping("/casic") public class DeviceController { - private final DeviceService deviceService; public DeviceController(DeviceService deviceService) { @@ -30,9 +29,7 @@ @PostMapping("/household/gas") public ResponseData saveDataGas(@RequestBody Map receiveData) { - log.error("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); + log.info("----------------------第三方燃气数据上报为{}",JSONObject.toJSONString(receiveData)); return deviceService.saveDataGas(receiveData); } - - } diff --git a/src/main/java/com/casic/dao/AlarmRecordsMapper.java b/src/main/java/com/casic/dao/AlarmRecordsMapper.java index 9f79655..b7fbd34 100644 --- a/src/main/java/com/casic/dao/AlarmRecordsMapper.java +++ b/src/main/java/com/casic/dao/AlarmRecordsMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.casic.entity.AlarmRecord; +import com.casic.entity.Device; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; @@ -15,4 +16,9 @@ "FROM ALARM_DEVICE " + "WHERE ACTIVE=1 AND DEVCODE=#{devcode} ") Long getDevcode(@Param("devcode") String devcode); + + @Select("SELECT DBID as id, DEVCODE as devCode, DEVNAME as devName, FACTORY as factory, SIMID as simid " + + "FROM ALARM_DEVICE " + + "WHERE ACTIVE=1 AND DEVCODE=#{devcode} ") + Device getDevice(@Param("devcode") String devcode); } diff --git a/src/main/java/com/casic/entity/Device.java b/src/main/java/com/casic/entity/Device.java new file mode 100644 index 0000000..0360e41 --- /dev/null +++ b/src/main/java/com/casic/entity/Device.java @@ -0,0 +1,27 @@ +package com.casic.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; + +@Data +@TableName("ALARM_DEVICE") +public class Device implements Serializable { + /** + * 设备基本信息表 + */ + private static final long serialVersionUID = -2023118078562324658L; + @TableId(value = "DBID") + private Long id; + @TableId(value = "DEVCODE") + private String devCode; + @TableId(value = "DEVNAME") + private String devName; + @TableId(value = "FACTORY") + private String factory; + @TableId(value = "SIMID") + private String simid; // SIM卡号 + +} diff --git a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java index 4966ae7..70a667f 100644 --- a/src/main/java/com/casic/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/casic/service/impl/DeviceServiceImpl.java @@ -1,15 +1,19 @@ package com.casic.service.impl; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.dao.AlarmRecordsMapper; import com.casic.dao.ButaneDataMapper; import com.casic.entity.AlarmRecord; import com.casic.entity.ButaneData; +import com.casic.entity.Device; import com.casic.model.ResponseData; import com.casic.service.AlarmRecordFly; import com.casic.service.DeviceService; +import com.casic.util.SendUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import xyz.downgoon.snowflake.Snowflake; @@ -26,6 +30,8 @@ private final ButaneDataMapper butaneDataMapper; private final AlarmRecordsMapper alarmRecordsMapper; private static Snowflake snowflake = new Snowflake(0, 2); + @Autowired + private SendUtil sendUtil; @Override public ResponseData testMysql() { @@ -53,7 +59,7 @@ responseData.setCode(200); responseData.setMessage("保存成功"); } catch (Exception dex) { - log.error("主题:广东台燃气设备存储异常,异常信息:{}", dex.getMessage()); + log.error("主题:燃气设备存储异常,异常信息:{}", dex.getMessage()); responseData.setCode(500); responseData.setMessage("保存异常"); } @@ -97,13 +103,23 @@ //产生新的报警,消除报警 butaneData.setDescn("可燃气体探测器报警"); butaneData.setStatus("1"); - synchronized (alarmRecord){ + synchronized (alarmRecord) { alarmRecord.setDbid(null); alarmRecord.setDeviceCode(devcode); alarmRecord.setDeviceId(alarmRecordsMapper.getDevcode(devcode)); alarmRecordsMapper.insert(alarmRecord); } butaneDataMapper.insert(butaneData); + + try { + //推送短信至第三方 + Device device = alarmRecordsMapper.getDevice(devcode); + JSONObject eventObj = new JSONObject(); + eventObj.put("type", "燃气报警"); + sendUtil.sendEventBySms(device, eventObj); + }catch (Exception exception){ + exception.printStackTrace(); + } } return true; } diff --git a/src/main/java/com/casic/util/DateUtils.java b/src/main/java/com/casic/util/DateUtils.java new file mode 100644 index 0000000..db2ed9c --- /dev/null +++ b/src/main/java/com/casic/util/DateUtils.java @@ -0,0 +1,63 @@ +package com.casic.util; + +import java.text.SimpleDateFormat; + +/** + * Created by Administrator on 2015/2/25. + */ +public class DateUtils { + public static SimpleDateFormat sdf_day = new SimpleDateFormat("yyyy-MM-dd"); + public static SimpleDateFormat sdf_day_time = new SimpleDateFormat("yyyyMMddHHmmss"); + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + public static final SimpleDateFormat sdf5 = new SimpleDateFormat("HH:mm:ss"); + public static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + public static String DateFormatDate(String dataString) { + + String strymd = dataString.substring(0, 8); + return strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8); + } + + public static String DateFormatTime(String dataString) { + + String strhms = dataString.substring(8); + return strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + } + + /** + * 比较两个时间 时分秒 大小 + * + * @param s1 + * @param s2 + * @return + */ + public static boolean compTime(String s1, String s2) { + try { + if (s1.indexOf(":") < 0 || s1.indexOf(":") < 0) { + System.out.println("格式不正确"); + } else { + String[] array1 = s1.split(":"); + int total1 = Integer.valueOf(array1[0]) * 3600 + Integer.valueOf(array1[1]) * 60; + String[] array2 = s2.split(":"); + int total2 = Integer.valueOf(array2[0]) * 3600 + Integer.valueOf(array2[1]) * 60; + return total1 - total2 > 0 ? true : false; + } + } catch (NumberFormatException e) { + // TODO Auto-generated catch block + return false; + } + return false; + + } +} diff --git a/src/main/java/com/casic/util/HttpClientUtils.java b/src/main/java/com/casic/util/HttpClientUtils.java new file mode 100644 index 0000000..91a631e --- /dev/null +++ b/src/main/java/com/casic/util/HttpClientUtils.java @@ -0,0 +1,40 @@ +package com.casic.util; + + +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + + + public static String post(String url, String body, JSONObject header) { + HttpClient client = new HttpClient(); + client.setTimeout(30000); + PostMethod method = new PostMethod(url); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); + method.addRequestHeader("X-APP-KEY", header.getString("X-APP-KEY")); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/casic/util/SendUtil.java b/src/main/java/com/casic/util/SendUtil.java new file mode 100644 index 0000000..2d73db1 --- /dev/null +++ b/src/main/java/com/casic/util/SendUtil.java @@ -0,0 +1,67 @@ +package com.casic.util; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.casic.entity.Device; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.util.Date; + +@Slf4j +@Component +public class SendUtil { + @Value("${casic.synchronizeSms.enabled}") + private String enabled; + @Value("${casic.smsSenderURL}") + private String smsSenderUrl; + @Value("${casic.X-APP-KEY-SMS}") + private String smsAppKey; + + public void sendEventBySms(Device device, JSONObject eventObj) { + if ("true".equals(enabled)) { +// String smsSenderUrl = Configure.getProperty("smsSenderURL", "http://general.bushub.rj.prd/sms/user/send"); +// String smsAppKey = Configure.getProperty("X-APP-KEY-SMS", "2d3a8e35-0533-42a0-97a2-63f82a3216f9"); + String sim = device.getSimid(); + if (null == sim || StringUtils.isBlank(sim)) { + return; + } + + if (null == smsAppKey || StringUtils.isBlank(smsAppKey)) { + return; + } + + JSONObject header = new JSONObject(); + header.put("X-APP-KEY", smsAppKey); + + StringBuilder params = new StringBuilder(); + params.append("{"); + params.append("\"mobile\":"); + params.append("\"").append(sim).append("\"").append(","); + + String prefix = "【智慧蓉江】"; + String eventTm = DateUtils.sdf4.format(new Date()); + String devName = device.getDevName(); + String place = device.getFactory(); + + StringBuilder content = new StringBuilder(""); + content.append(prefix); + content.append(eventTm).append(","); + content.append("管网监测设备[").append(devName).append("],"); + content.append("发生").append(eventObj.getString("type")).append(","); + if (eventObj.containsKey("value") == true) { + content.append(eventObj.getString("value")).append(","); + } + content.append("详细地址是:").append(place).append(","); + content.append("请关注并及时处理。"); + + params.append("\"content\":"); + params.append("\"").append(content.toString()).append("\""); + params.append("}"); + + String resp = HttpClientUtils.post(smsSenderUrl, params.toString(), header); + log.info("已发送短信"+resp); + } + } +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index a2fd2c5..b8e32b3 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -4,7 +4,7 @@ spring: datasource: driverClassName: oracle.jdbc.driver.OracleDriver - url: jdbc:oracle:thin:@11.100.6.183:1521:orcl + url: jdbc:oracle:thin:@11.100.6.181:1521:orcl username: gzsg password: gzsg session: @@ -19,8 +19,15 @@ # session: #flowable数据源和多数据源配置 logging: - level.root: error - level.com.casic: error + level.root: info + level.com.casic: debug + level.org.springframework.web: info file: path: logs/ - name: missiles.log \ No newline at end of file + name: missiles.log +#短信推送 +casic: + synchronizeSms.enabled: true + smsSenderURL: http://general.bushub.rj.prd/sms/user/send + X-APP-KEY-SMS: 2d3a8e35-0533-42a0-97a2-63f82a3216f9 + sms-prefix: 【智慧蓉江】 \ No newline at end of file diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..c0c7ac9 --- /dev/null +++ b/src/main/resources/logback-spring.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + utf-8 + + + + + + + + + + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + utf-8 + + + + + + + + ${LOG_PATH}/missiles_error.log + + + + + + ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log + + + + 10MB + + + + + true + + + + ${FILE_LOG_PATTERN} + utf-8 + + + + + error + ACCEPT + DENY + + + + + + + + ${LOG_PATH}/missiles_total.log + + + + + + ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log + + + + 10MB + + + + + true + + + + ${FILE_LOG_PATTERN} + utf-8 + + + + + + + + + + + \ No newline at end of file diff --git a/target/classes/application-dev.yml b/target/classes/application-dev.yml index a2fd2c5..b8e32b3 100644 --- a/target/classes/application-dev.yml +++ b/target/classes/application-dev.yml @@ -4,7 +4,7 @@ spring: datasource: driverClassName: oracle.jdbc.driver.OracleDriver - url: jdbc:oracle:thin:@11.100.6.183:1521:orcl + url: jdbc:oracle:thin:@11.100.6.181:1521:orcl username: gzsg password: gzsg session: @@ -19,8 +19,15 @@ # session: #flowable数据源和多数据源配置 logging: - level.root: error - level.com.casic: error + level.root: info + level.com.casic: debug + level.org.springframework.web: info file: path: logs/ - name: missiles.log \ No newline at end of file + name: missiles.log +#短信推送 +casic: + synchronizeSms.enabled: true + smsSenderURL: http://general.bushub.rj.prd/sms/user/send + X-APP-KEY-SMS: 2d3a8e35-0533-42a0-97a2-63f82a3216f9 + sms-prefix: 【智慧蓉江】 \ No newline at end of file diff --git a/target/classes/com/casic/controller/DeviceController.class b/target/classes/com/casic/controller/DeviceController.class index c9aea71..fd9b8ca 100644 --- a/target/classes/com/casic/controller/DeviceController.class +++ b/target/classes/com/casic/controller/DeviceController.class Binary files differ diff --git a/target/classes/com/casic/service/impl/DeviceServiceImpl.class b/target/classes/com/casic/service/impl/DeviceServiceImpl.class index 6e7738a..a6d4dcb 100644 --- a/target/classes/com/casic/service/impl/DeviceServiceImpl.class +++ b/target/classes/com/casic/service/impl/DeviceServiceImpl.class Binary files differ