|
|
@@ -1,50 +1,243 @@
|
|
|
package com.jyxt.thridparty.exchange.bx.repository;
|
|
|
|
|
|
-import com.jyxt.thridparty.exchange.ExchangeApplication;
|
|
|
+import com.alibaba.fastjson2.JSONArray;
|
|
|
+import com.alibaba.fastjson2.JSONObject;
|
|
|
import com.jyxt.thridparty.exchange.bx.VendorBinxiang;
|
|
|
+import com.jyxt.thridparty.exchange.bx.entity.EquipRelation;
|
|
|
+import com.jyxt.thridparty.exchange.bx.utils.HttpClientUtil;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
|
|
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
import org.springframework.jdbc.core.RowMapper;
|
|
|
import org.springframework.stereotype.Repository;
|
|
|
|
|
|
-import java.sql.ResultSet;
|
|
|
-import java.sql.SQLException;
|
|
|
-import java.util.List;
|
|
|
+import java.security.MessageDigest;
|
|
|
+import java.security.NoSuchAlgorithmException;
|
|
|
+import java.time.Instant;
|
|
|
+import java.time.ZoneId;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
@Repository
|
|
|
public class VendorBinxiangRepository {
|
|
|
private static final Logger log = LoggerFactory.getLogger(VendorBinxiangRepository.class);
|
|
|
@Autowired
|
|
|
private JdbcTemplate jdbcTemplate;
|
|
|
|
|
|
- @Value("${fetch.sql}")
|
|
|
- private String sql;
|
|
|
-
|
|
|
- public List<VendorBinxiang> query() {
|
|
|
- log.info(sql);
|
|
|
- return jdbcTemplate.query(
|
|
|
- sql,new RowMapper<VendorBinxiang>(){
|
|
|
-
|
|
|
- @Override
|
|
|
- public VendorBinxiang mapRow(ResultSet rs, int rowNum) throws SQLException {
|
|
|
- VendorBinxiang bx = new VendorBinxiang();
|
|
|
- bx.setId(rs.getString("id"));
|
|
|
- bx.setWendu(rs.getString("温度"));
|
|
|
- bx.setBinXiangId(rs.getString("冰箱ID"));
|
|
|
- bx.setBinxiangName(rs.getString("冰箱名称"));
|
|
|
- bx.setCaiJiId(rs.getString("采集器ID"));
|
|
|
- bx.setCaiJiName(rs.getString("采集器名称"));
|
|
|
- bx.setCaiJiTime(rs.getString("采集时间"));
|
|
|
- bx.setWenduUp(rs.getString("温度上限"));
|
|
|
- bx.setWenduDown(rs.getString("温度下限"));
|
|
|
- bx.setShiyanzhuName(rs.getString("实验组"));
|
|
|
- bx.setShiyanzhuId(rs.getString("实验组ID"));
|
|
|
- return bx;
|
|
|
+ @Value("${equip.appKey}")
|
|
|
+ private String equipAppKey;
|
|
|
+
|
|
|
+ @Value("${equip.appSecret}")
|
|
|
+ private String equipAppSecret;
|
|
|
+
|
|
|
+ @Value("${humiture.uri}")
|
|
|
+ private String humitureUri;
|
|
|
+
|
|
|
+ @Value("${humiture.latest}")
|
|
|
+ private String humitureLatest;
|
|
|
+
|
|
|
+ @Value("${humiture.history}")
|
|
|
+ private String humitureHistory;
|
|
|
+
|
|
|
+ @Value("${humiture.appKey}")
|
|
|
+ private String humitureAppKey;
|
|
|
+
|
|
|
+ @Value("${humiture.appSecret}")
|
|
|
+ private String humitureAppSecret;
|
|
|
+
|
|
|
+ public List<VendorBinxiang> query(){
|
|
|
+ String second = String.valueOf(Instant.now().getEpochSecond());
|
|
|
+ Map<String, String> headers = new HashMap<>();
|
|
|
+ headers.put("appKey",humitureAppKey);
|
|
|
+ headers.put("time",second);
|
|
|
+ Map<String, String> params = new HashMap<>();
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ long endTime = LocalDateTime.of(now.getYear(), now.getMonthValue(), now.getDayOfMonth(), now.getHour(), now.getMinute()).
|
|
|
+ atZone(ZoneId.systemDefault()).toInstant().getEpochSecond();
|
|
|
+ long startTime = LocalDateTime.of(now.getYear(), now.getMonthValue(), now.getDayOfMonth(), 0, 0).
|
|
|
+ atZone(ZoneId.systemDefault()).toInstant().getEpochSecond();
|
|
|
+ params.put("start",String.valueOf(startTime));
|
|
|
+ params.put("end",String.valueOf(endTime));
|
|
|
+ String sql = "SELECT device_no_,device_name_ from equip_relation WHERE enable_='是' GROUP BY device_no_";
|
|
|
+ RowMapper<EquipRelation> infoRowMapper = new BeanPropertyRowMapper<>(EquipRelation.class);
|
|
|
+ List<EquipRelation> list = jdbcTemplate.query(sql, infoRowMapper);
|
|
|
+ Set<VendorBinxiang> bxSet = new LinkedHashSet<>();
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
+ for(EquipRelation twksbpzb : list){
|
|
|
+ params.put("devices",twksbpzb.getDeviceNo());
|
|
|
+ String paramStr = "devices_"+twksbpzb.getDeviceNo()+"_start"+startTime+"_end"+endTime;
|
|
|
+ String origin = humitureAppKey+"_"+paramStr+"_"+second+"_"+humitureAppSecret;
|
|
|
+ String sign = encryptMD5(origin);
|
|
|
+ headers.put("sign",sign);
|
|
|
+ String result = HttpClientUtil.doPost(humitureUri+humitureHistory,headers,params);
|
|
|
+ JSONObject reposn = JSONObject.parseObject(result);
|
|
|
+ if (reposn.get("status").equals("0000")){
|
|
|
+ JSONArray data = reposn.getJSONArray("data");
|
|
|
+ if(!data.isEmpty()){
|
|
|
+ JSONObject jsonObject = data.getJSONObject(0);
|
|
|
+ JSONArray channels = jsonObject.getJSONArray("channels");
|
|
|
+ if(!data.isEmpty()){
|
|
|
+ for(Object object : channels){
|
|
|
+ // 测点类型:dataitem 0-温湿度 17-经纬度 18-温湿度 19-单温
|
|
|
+ JSONObject channel = (JSONObject) object;
|
|
|
+ String type = channel.getString("dataitem");
|
|
|
+ if (type.equals("0") || type.equals("18")){
|
|
|
+ JSONArray values = channel.getJSONArray("values");
|
|
|
+ for(Object value : values){
|
|
|
+ JSONObject item = (JSONObject) value;
|
|
|
+ VendorBinxiang bx = new VendorBinxiang();
|
|
|
+ long time = Long.parseLong(item.getString("time"));
|
|
|
+ String date = LocalDateTime.ofInstant(Instant.ofEpochSecond(time), ZoneId.systemDefault()).format(formatter);
|
|
|
+ bx.setId(twksbpzb.getDeviceNo()+"-"+time+"-"+type);
|
|
|
+ bx.setWendu(item.getString("temp"));
|
|
|
+ bx.setShidu(item.getString("hum"));
|
|
|
+ bx.setBinXiangId(twksbpzb.getDeviceNo());
|
|
|
+ bx.setBinxiangName(twksbpzb.getDeviceName());
|
|
|
+ bx.setCaiJiId(channel.getString("serial"));
|
|
|
+ bx.setCaiJiName(twksbpzb.getDeviceName());
|
|
|
+ bx.setCaiJiTime(date);
|
|
|
+ EquipRelation wenDu = getWsdRange(twksbpzb.getDeviceNo(),"温度");
|
|
|
+ bx.setWenduUp(wenDu.getHigh());
|
|
|
+ bx.setWenduDown(wenDu.getLow());
|
|
|
+ EquipRelation shiDu = getWsdRange(twksbpzb.getDeviceNo(),"湿度");
|
|
|
+ bx.setShiduUp(shiDu.getHigh());
|
|
|
+ bx.setShiduDown(shiDu.getLow());
|
|
|
+ bx.setShiyanzhuName(shiDu.getDeptName());
|
|
|
+ bx.setShiyanzhuId(shiDu.getDeptId());
|
|
|
+ bx.setType(shiDu.getDeviceType());
|
|
|
+ bx.setArea(shiDu.getArea());
|
|
|
+ bxSet.add(bx);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (channel.get("dataitem").equals("19")){
|
|
|
+ JSONArray values = channel.getJSONArray("values");
|
|
|
+ for(Object value : values){
|
|
|
+ JSONObject item = (JSONObject) value;
|
|
|
+ VendorBinxiang bx = new VendorBinxiang();
|
|
|
+ long time = Long.parseLong(item.getString("time"));
|
|
|
+ String date = LocalDateTime.ofInstant(Instant.ofEpochSecond(time), ZoneId.systemDefault()).format(formatter);
|
|
|
+ bx.setId(twksbpzb.getDeviceNo()+"-"+time+"-"+type);
|
|
|
+ bx.setWendu(item.getString("temp"));
|
|
|
+ bx.setBinXiangId(twksbpzb.getDeviceNo());
|
|
|
+ bx.setBinxiangName(twksbpzb.getDeviceName());
|
|
|
+ bx.setCaiJiId(channel.getString("serial"));
|
|
|
+ bx.setCaiJiName(twksbpzb.getDeviceName());
|
|
|
+ bx.setCaiJiTime(date);
|
|
|
+ EquipRelation wenDu = getWsdRange(twksbpzb.getDeviceNo(),"温度");
|
|
|
+ bx.setWenduUp(wenDu.getHigh());
|
|
|
+ bx.setWenduDown(wenDu.getLow());
|
|
|
+ bx.setShiyanzhuName(wenDu.getDeptName());
|
|
|
+ bx.setShiyanzhuId(wenDu.getDeptId());
|
|
|
+ bx.setType(wenDu.getDeviceType());
|
|
|
+ bx.setArea(wenDu.getArea());
|
|
|
+ bxSet.add(bx);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return new ArrayList<>(bxSet);
|
|
|
+ }
|
|
|
+
|
|
|
+ public EquipRelation getWsdRange(String deviceNo,String type){
|
|
|
+ String sql = "SELECT * FROM equip_relation WHERE enable_='是' and device_no_ = ? and alarm_type_=? ";
|
|
|
+ final EquipRelation equipRelation = jdbcTemplate.queryForObject(sql, new Object[]{deviceNo,type}, (rs, rowNum) -> {
|
|
|
+ EquipRelation er = new EquipRelation();
|
|
|
+ er.setLow(rs.getString("low_"));
|
|
|
+ er.setHigh(rs.getString("high_"));
|
|
|
+ er.setDeviceType(rs.getString("device_type_"));
|
|
|
+ er.setArea(rs.getString("area_"));
|
|
|
+ er.setDeptId(rs.getString("dept_id_"));
|
|
|
+ er.setDeptName(rs.getString("dept_name_"));
|
|
|
+ return er;
|
|
|
+ });
|
|
|
+ return equipRelation;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void getEquipList(){
|
|
|
+ String second = String.valueOf(Instant.now().getEpochSecond());
|
|
|
+ String origin = equipAppKey+"_"+second+"_"+equipAppSecret;
|
|
|
+ log.warn(origin);
|
|
|
+ String sign = encryptMD5(origin);
|
|
|
+ Map<String, String> headers = new HashMap<>();
|
|
|
+ headers.put("appKey",equipAppKey);
|
|
|
+ headers.put("time",second);
|
|
|
+ headers.put("sign",sign);
|
|
|
+ log.warn("heads{}",headers);
|
|
|
+ String url = "";
|
|
|
+ log.warn(url);
|
|
|
+ String result = HttpClientUtil.doGet(url,headers,null);
|
|
|
+ log.warn(result);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void getLatest(){
|
|
|
+ String second = String.valueOf(Instant.now().getEpochSecond());
|
|
|
+ Map<String, String> headers = new HashMap<>();
|
|
|
+ headers.put("appKey",humitureAppKey);
|
|
|
+ headers.put("time",second);
|
|
|
+ Map<String, String> params = new HashMap<>();
|
|
|
+ params.put("devices","66111897,66120895");
|
|
|
+ params.put("force","1");
|
|
|
+ String paramStr = "devices_66111897,66120895_force_1";
|
|
|
+ String origin = humitureAppKey+"_"+paramStr+"_"+second+"_"+humitureAppSecret;
|
|
|
+ log.warn(origin);
|
|
|
+ String sign = encryptMD5(origin);
|
|
|
+ log.warn(sign);
|
|
|
+ headers.put("sign",sign);
|
|
|
+ String result = HttpClientUtil.doPost(humitureUri+humitureLatest,headers,params);
|
|
|
+ log.warn(result);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String encryptMD5(String input) {
|
|
|
+ try {
|
|
|
+ // 创建MD5加密对象
|
|
|
+ MessageDigest md = MessageDigest.getInstance("MD5");
|
|
|
+ // 执行加密操作
|
|
|
+ byte[] messageDigest = md.digest(input.getBytes());
|
|
|
+ // 将字节数组转换为16进制字符串
|
|
|
+ StringBuilder hexString = new StringBuilder();
|
|
|
+ for (byte b : messageDigest) {
|
|
|
+ String hex = Integer.toHexString(0xff & b);
|
|
|
+ if (hex.length() == 1) {
|
|
|
+ hexString.append('0');
|
|
|
+ }
|
|
|
+ hexString.append(hex);
|
|
|
+ }
|
|
|
+ return hexString.toString().toUpperCase();
|
|
|
+ } catch (NoSuchAlgorithmException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+// public List<VendorBinxiang> query() {
|
|
|
+// log.info("sql");
|
|
|
+// return jdbcTemplate.query(
|
|
|
+// "sqlsssss",new RowMapper<VendorBinxiang>(){
|
|
|
+//
|
|
|
+// @Override
|
|
|
+// public VendorBinxiang mapRow(ResultSet rs, int rowNum) throws SQLException {
|
|
|
+// VendorBinxiang bx = new VendorBinxiang();
|
|
|
+// bx.setId(rs.getString("id"));
|
|
|
+// bx.setWendu(rs.getString("温度"));
|
|
|
+// bx.setBinXiangId(rs.getString("冰箱ID"));
|
|
|
+// bx.setBinxiangName(rs.getString("冰箱名称"));
|
|
|
+// bx.setCaiJiId(rs.getString("采集器ID"));
|
|
|
+// bx.setCaiJiName(rs.getString("采集器名称"));
|
|
|
+// bx.setCaiJiTime(rs.getString("采集时间"));
|
|
|
+// bx.setWenduUp(rs.getString("温度上限"));
|
|
|
+// bx.setWenduDown(rs.getString("温度下限"));
|
|
|
+// bx.setShiyanzhuName(rs.getString("实验组"));
|
|
|
+// bx.setShiyanzhuId(rs.getString("实验组ID"));
|
|
|
+// return bx;
|
|
|
+// }
|
|
|
+// }
|
|
|
+// );
|
|
|
+// }
|
|
|
+
|
|
|
}
|