作者 钟来

温度宝支持http数据服务

  1 +driverClassName=com.mysql.cj.jdbc.Driver
  2 +url=jdbc:mysql://rm-wz9740un21f09iokuao.mysql.rds.aliyuncs.com:3306/liu_yu_le?useUnicode=true&characterEncoding=utf8&autoReconnect=true
  3 +username=luhui
  4 +password=Luhui586
  5 +#\u6700\u5927\u8FDE\u63A5\u6570\u91CF
  6 +maxActive=100
  7 +#\u6700\u5927\u7A7A\u95F2\u8FDE\u63A5
  8 +maxIdle=-1
  9 +#\u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5
  10 +minIdle=10
  11 +#\u8D85\u65F6\u7B49\u5F85\u65F6\u95F4\u4EE5\u6BEB\u79D2\u4E3A\u5355\u4F4D 60000\u6BEB\u79D2/1000\u7B49\u4E8E60\u79D2
  12 +maxWait=60000
  13 +#removeAbandoned: \u662F\u5426\u81EA\u52A8\u56DE\u6536\u8D85\u65F6\u8FDE\u63A5
  14 +removeAbandoned=true
  15 +#removeAbandonedTimeout: \u8D85\u65F6\u65F6\u95F4(\u4EE5\u79D2\u6570\u4E3A\u5355\u4F4D)
  16 +removeAbandonedTimeout=120
  17 +testOnBorrow=false
  18 +logAbandoned=true
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<project xmlns="http://maven.apache.org/POM/4.0.0"
  3 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5 + <modelVersion>4.0.0</modelVersion>
  6 + <parent>
  7 + <groupId>com.zhonglai.luhui</groupId>
  8 + <artifactId>lh-device-protocol-agreement</artifactId>
  9 + <version>1.0-SNAPSHOT</version>
  10 + </parent>
  11 +
  12 + <artifactId>lh-device-wendubao</artifactId>
  13 +
  14 + <properties>
  15 + <maven.compiler.source>8</maven.compiler.source>
  16 + <maven.compiler.target>8</maven.compiler.target>
  17 + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  18 + </properties>
  19 +
  20 + <dependencies>
  21 + <dependency>
  22 + <groupId>com.zhonglai.luhui</groupId>
  23 + <artifactId>lh-device-protocol-factory</artifactId>
  24 + </dependency>
  25 + </dependencies>
  26 +</project>
  1 +package com.zhonglai.luhui.device.protocol.wendubao.analysis;
  2 +
  3 +import com.google.gson.JsonObject;
  4 +import com.ruoyi.common.utils.GsonConstructor;
  5 +import com.zhonglai.luhui.device.analysis.comm.dao.BaseDao;
  6 +import com.zhonglai.luhui.device.analysis.comm.dto.DeviceSensorData;
  7 +import com.zhonglai.luhui.device.analysis.comm.dto.LogDeviceOperation;
  8 +import com.zhonglai.luhui.device.analysis.comm.dto.thingsmodels.ThingsModelItemBase;
  9 +import com.zhonglai.luhui.device.protocol.factory.config.DeviceCach;
  10 +import com.zhonglai.luhui.device.protocol.factory.dto.DeviceHost;
  11 +import com.zhonglai.luhui.device.protocol.factory.dto.ParserDeviceHostDto;
  12 +import com.zhonglai.luhui.device.protocol.factory.dto.ParserDeviceInfoDto;
  13 +import com.zhonglai.luhui.device.protocol.factory.sync.ProtocolSyncFactory;
  14 +import com.zhonglai.luhui.device.protocol.wendubao.db.WdbDBFactoryImp;
  15 +import com.zhonglai.luhui.device.protocol.wendubao.dto.WdbTerminal;
  16 +import org.springframework.stereotype.Service;
  17 +
  18 +import java.math.BigDecimal;
  19 +import java.util.List;
  20 +
  21 +@Service
  22 +public class WenDuBaoProtocolSyncFactoryImpl implements ProtocolSyncFactory {
  23 + private BaseDao ly_baseDao = new BaseDao(new WdbDBFactoryImp());
  24 + @Override
  25 + public void updateParserDeviceHostDto(ParserDeviceHostDto parserDeviceHostDto) {
  26 + DeviceHost upDeviceHost = new DeviceHost();
  27 +
  28 + if(null != parserDeviceHostDto.getData())
  29 + {
  30 + DeviceHost deviceHost = (DeviceHost) ly_baseDao.get(DeviceHost.class,parserDeviceHostDto.getId());
  31 + if(null == deviceHost)
  32 + {
  33 + return;
  34 + }
  35 + JsonObject jsonObject = null != deviceHost.getData()?GsonConstructor.get().fromJson(deviceHost.getData(),JsonObject.class):new JsonObject();
  36 + JsonObject hostData = parserDeviceHostDto.getData();
  37 + for (String key:hostData.keySet())
  38 + {
  39 + jsonObject.add(key,hostData.get(key).getAsJsonObject().get("value"));
  40 + }
  41 + upDeviceHost.setData(jsonObject.toString());
  42 +
  43 + if(hostData.has("27"))
  44 + {
  45 + ThingsModelItemBase thingsModelItemBase = ThingsModelItemBase.newhingsModelItem(hostData.get("27").getAsJsonObject());
  46 +
  47 + ParserDeviceHostDto oldParserDeviceHostDto = DeviceCach.getDeviceHost(parserDeviceHostDto.getId());
  48 + ThingsModelItemBase oldthingsModelItemBase = ThingsModelItemBase.newhingsModelItem(oldParserDeviceHostDto.getData().get("27").getAsJsonObject());
  49 + if(!thingsModelItemBase.getSaveView().equals(oldthingsModelItemBase.getSaveView()))
  50 + {
  51 + if(hostData.get("27").getAsJsonObject().get("value").getAsInt()==1)
  52 + {
  53 + upDeviceHost.setAlarmCode("00");
  54 + }else{
  55 + upDeviceHost.setAlarmCode("89");
  56 + }
  57 + }
  58 + }
  59 + }
  60 + upDeviceHost.setId(parserDeviceHostDto.getId());
  61 + upDeviceHost.setOnline("01");
  62 + upDeviceHost.setDataUpdateTime(parserDeviceHostDto.getUpdateTime());
  63 + ly_baseDao.update(upDeviceHost);
  64 + }
  65 +
  66 + @Override
  67 + public void updateParserDeviceInfoDtoList(Integer productId, List<ParserDeviceInfoDto> parserDeviceInfoDtoList) {
  68 + if(null != parserDeviceInfoDtoList && parserDeviceInfoDtoList.size() != 0)
  69 + {
  70 + for (ParserDeviceInfoDto parserDeviceInfoDto:parserDeviceInfoDtoList)
  71 + {
  72 + JsonObject dataObject = parserDeviceInfoDto.getData();
  73 + if(null != dataObject && dataObject.size() != 0)
  74 + {
  75 + String deviceInfoId =dataObject.get("sn").getAsJsonObject().get("value").getAsString(); //25636548,//主机sn号 int 型
  76 + dataObject.remove("sn");
  77 +
  78 + WdbTerminal wdbTerminal = (WdbTerminal) ly_baseDao.get(WdbTerminal.class,deviceInfoId);
  79 +
  80 + if(null == wdbTerminal)
  81 + {
  82 + wdbTerminal = new WdbTerminal();
  83 + wdbTerminal.setId(deviceInfoId);
  84 + wdbTerminal.setCreateTime(parserDeviceInfoDto.getUpdateTime());
  85 + wdbTerminal.setBaseStationId(deviceInfoId);
  86 + wdbTerminal.setBaseStationName(deviceInfoId);
  87 + ly_baseDao.insert(wdbTerminal);
  88 + }
  89 +
  90 + JsonObject jsonObject = new JsonObject();
  91 + JsonObject devcieData = parserDeviceInfoDto.getData();
  92 + for (String key:devcieData.keySet())
  93 + {
  94 + switch (key)
  95 + {
  96 + case "4": //气温float型
  97 + break;
  98 + case "21": //光照 int型
  99 + break;
  100 + case "wt": //水面 float型
  101 + if(null != wdbTerminal && null != wdbTerminal.getWaterSurfaceErrorConfig())
  102 + {
  103 + jsonObject.addProperty("55",new BigDecimal(devcieData.get(key).getAsJsonObject().get("value").getAsFloat()).add(new BigDecimal(wdbTerminal.getWaterSurfaceErrorConfig())).floatValue());
  104 + }
  105 + break;
  106 + case "wm": //水中 float型
  107 + if(null != wdbTerminal && null != wdbTerminal.getWaterSurfaceErrorConfig())
  108 + {
  109 + jsonObject.addProperty("23",new BigDecimal(devcieData.get(key).getAsJsonObject().get("value").getAsFloat()).add(new BigDecimal(wdbTerminal.getWaterErrorConfig())).floatValue());
  110 + }
  111 + break;
  112 + case "wb": //水底 float型
  113 + if(null != wdbTerminal && null != wdbTerminal.getWaterSurfaceErrorConfig())
  114 + {
  115 + jsonObject.addProperty("24",new BigDecimal(devcieData.get(key).getAsJsonObject().get("value").getAsFloat()).add(new BigDecimal(wdbTerminal.getBedErrorConfig())).floatValue());
  116 + }
  117 + break;
  118 + case "bat": //电池电量百分比0-100 int型
  119 + jsonObject.add("25",devcieData.get(key).getAsJsonObject().get("value"));
  120 + break;
  121 + case "mcu": //信噪比 int型
  122 + jsonObject.add("26",devcieData.get(key).getAsJsonObject().get("value"));
  123 + break;
  124 + case "rssi": //信号接收灵敏度 int型
  125 + jsonObject.add("28",devcieData.get(key).getAsJsonObject().get("value"));
  126 + break;
  127 + }
  128 + }
  129 + wdbTerminal.setDataUpdateTime(parserDeviceInfoDto.getUpdateTime());
  130 + wdbTerminal.setOnline("01");
  131 + wdbTerminal.setData(jsonObject.toString());
  132 + ly_baseDao.update(wdbTerminal,"id");
  133 +
  134 + }
  135 + }
  136 + }
  137 + }
  138 +
  139 + @Override
  140 + public void updateDeviceSensorDataList(List<DeviceSensorData> deviceSensorDataList) {
  141 +
  142 + }
  143 +
  144 + @Override
  145 + public void updateLogDeviceOperationList(List<LogDeviceOperation> logDeviceOperationList) {
  146 +
  147 + }
  148 +}
  1 +package com.zhonglai.luhui.device.protocol.wendubao.db;
  2 +
  3 +import com.zhonglai.luhui.device.analysis.comm.dao.DBFactory;
  4 +import org.apache.commons.dbcp.BasicDataSourceFactory;
  5 +
  6 +import javax.sql.DataSource;
  7 +import java.io.FileInputStream;
  8 +import java.util.Properties;
  9 +
  10 +public class WdbDBFactoryImp implements DBFactory {
  11 + private static DataSource ds = null;
  12 + static {
  13 + try {
  14 + if(null==ds )
  15 + {
  16 + String dbPath = System.getProperty("dbPath");
  17 + String path = null != dbPath?dbPath:System.getProperty("user.dir")+"/configs/";
  18 + Properties p = new Properties();
  19 + System.out.println("》》》》》》》》》》》》》数据库配置文件地址:"+path+"wdb_dbcpconfig.properties");
  20 + p.load(new FileInputStream(path+"wdb_dbcpconfig.properties"));
  21 + ds = BasicDataSourceFactory.createDataSource(p);
  22 + }
  23 + } catch (Exception e) {
  24 + e.printStackTrace();
  25 + }
  26 + }
  27 +
  28 + @Override
  29 + public DataSource getDataSource() {
  30 + return ds;
  31 + }
  32 +}
  1 +package com.zhonglai.luhui.device.protocol.wendubao.dto;
  2 +
  3 +import lombok.Data;
  4 +
  5 +import java.math.BigDecimal;
  6 +
  7 +/**
  8 + * @类名 温度宝终端
  9 + * @描述 TODO
  10 + * @创建者 钟来
  11 + * @时间 19-5-28 下午5:13
  12 + * @版本 1.0
  13 + **/
  14 +@Data
  15 +public class WdbTerminal {
  16 + private String id; // VARCHAR(20) NOT NULL COMMENT '主键',
  17 + private String data; // VARCHAR(200) DEFAULT NULL COMMENT '数据',
  18 + private Integer createTime; // INT(11) DEFAULT NULL COMMENT '创建时间',
  19 + private String baseStationId; // VARCHAR(20) DEFAULT NULL COMMENT '基地id',
  20 + private String baseStationName; // VARCHAR(50) DEFAULT NULL COMMENT '基地名称',
  21 + private String alarmCode; // VARCHAR(2) NOT NULL DEFAULT '00' COMMENT '告警状态',
  22 + private Integer dataUpdateTime; // INT(11) DEFAULT NULL COMMENT '数据更新时间',
  23 + private Integer alarmUpdateTime; // INT(11) DEFAULT NULL COMMENT '告警更新时间',
  24 + private String online; // VARCHAR(50) NOT NULL COMMENT '在线状态',
  25 + private Double underwaterUpperLimit; //水底温度上限
  26 + private Double waterLayer; //水分层误差
  27 + private Double bedErrorConfig; // double DEFAULT NULL COMMENT '水底误差配置',
  28 + private Double waterErrorConfig; // double DEFAULT NULL COMMENT '水中误差配置',
  29 + private Double waterSurfaceErrorConfig; // double DEFAULT NULL COMMENT '水面误差配置',
  30 +}
@@ -24,5 +24,6 @@ @@ -24,5 +24,6 @@
24 <module>lh-device-modbus</module> 24 <module>lh-device-modbus</module>
25 <module>lh-device-defaul</module> 25 <module>lh-device-defaul</module>
26 <module>lh-device-6wp</module> 26 <module>lh-device-6wp</module>
  27 + <module>lh-device-wendubao</module>
27 </modules> 28 </modules>
28 </project> 29 </project>