展连设备数据解析策略
This commit is contained in:
@ -1,5 +1,6 @@
|
|||||||
package com.fastbee.framework.web.service;
|
package com.fastbee.framework.web.service;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
|
||||||
import com.fastbee.common.constant.CacheConstants;
|
import com.fastbee.common.constant.CacheConstants;
|
||||||
import com.fastbee.common.constant.Constants;
|
import com.fastbee.common.constant.Constants;
|
||||||
import com.fastbee.common.core.domain.entity.SysDept;
|
import com.fastbee.common.core.domain.entity.SysDept;
|
||||||
@ -19,6 +20,7 @@ import com.fastbee.common.utils.ip.IpUtils;
|
|||||||
import com.fastbee.framework.manager.AsyncManager;
|
import com.fastbee.framework.manager.AsyncManager;
|
||||||
import com.fastbee.framework.manager.factory.AsyncFactory;
|
import com.fastbee.framework.manager.factory.AsyncFactory;
|
||||||
import com.fastbee.framework.security.context.AuthenticationContextHolder;
|
import com.fastbee.framework.security.context.AuthenticationContextHolder;
|
||||||
|
import com.fastbee.system.mapper.SysDeptMapper;
|
||||||
import com.fastbee.system.service.ISysConfigService;
|
import com.fastbee.system.service.ISysConfigService;
|
||||||
import com.fastbee.system.service.ISysDeptService;
|
import com.fastbee.system.service.ISysDeptService;
|
||||||
import com.fastbee.system.service.ISysUserService;
|
import com.fastbee.system.service.ISysUserService;
|
||||||
@ -59,8 +61,11 @@ public class SysLoginService {
|
|||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private SysPasswordService passwordService;
|
private SysPasswordService passwordService;
|
||||||
@Resource
|
// @Resource
|
||||||
private ISysDeptService sysDeptService;
|
// private ISysDeptService sysDeptService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SysDeptMapper deptMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 登录验证
|
* 登录验证
|
||||||
@ -111,7 +116,11 @@ public class SysLoginService {
|
|||||||
// throw new ServiceException("只允许终端用户登录!");
|
// throw new ServiceException("只允许终端用户登录!");
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
SysDept sysDept = sysDeptService.selectDeptById(deptId);
|
|
||||||
|
SysDept sysDept = new LambdaQueryChainWrapper<>(deptMapper)
|
||||||
|
.select(SysDept::getDeptUserId)
|
||||||
|
.eq(SysDept::getDeptId, deptId)
|
||||||
|
.one();
|
||||||
recordLoginInfo(loginUser.getUserId());
|
recordLoginInfo(loginUser.getUserId());
|
||||||
loginUser.setLanguage(language);
|
loginUser.setLanguage(language);
|
||||||
loginUser.setDeptUserId(sysDept.getDeptUserId());
|
loginUser.setDeptUserId(sysDept.getDeptUserId());
|
||||||
|
@ -1,12 +1,10 @@
|
|||||||
package com.fastbee.data.controller.aaScreenAgricultural;
|
package com.fastbee.data.controller.aaScreenAgricultural;
|
||||||
|
|
||||||
import cn.hutool.json.JSONArray;
|
|
||||||
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONObject;
|
||||||
import cn.hutool.json.JSONUtil;
|
|
||||||
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
|
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
|
||||||
import com.fastbee.common.core.controller.BaseController;
|
import com.fastbee.common.core.controller.BaseController;
|
||||||
import com.fastbee.common.core.domain.AjaxResult;
|
import com.fastbee.common.core.domain.AjaxResult;
|
||||||
import com.fastbee.deviceData.api.devlink.service.DevLinkBaseService;
|
import com.fastbee.deviceData.api.devlink.service.ZhanLianBaseService;
|
||||||
import com.fastbee.deviceInfo.manager.DeviceInformationManager;
|
import com.fastbee.deviceInfo.manager.DeviceInformationManager;
|
||||||
import com.fastbee.iot.domain.AlertLog;
|
import com.fastbee.iot.domain.AlertLog;
|
||||||
import com.fastbee.iot.mapper.AlertLogMapper;
|
import com.fastbee.iot.mapper.AlertLogMapper;
|
||||||
@ -26,7 +24,7 @@ import java.util.Map;
|
|||||||
public class DeviceAlarmController extends BaseController {
|
public class DeviceAlarmController extends BaseController {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private DevLinkBaseService devLinkBaseService;
|
private ZhanLianBaseService zhanLianBaseService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private AlertLogMapper alertLogMapper;
|
private AlertLogMapper alertLogMapper;
|
||||||
@ -75,7 +73,7 @@ public class DeviceAlarmController extends BaseController {
|
|||||||
HashMap<String, Object> body = new HashMap<>();
|
HashMap<String, Object> body = new HashMap<>();
|
||||||
body.put("method","get");
|
body.put("method","get");
|
||||||
body.put("path","api/v1/product/device/list");
|
body.put("path","api/v1/product/device/list");
|
||||||
JSONObject data = devLinkBaseService.baseRequest(body);
|
JSONObject data = zhanLianBaseService.baseRequest(body);
|
||||||
|
|
||||||
//仁科设备
|
//仁科设备
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.fastbee.data.controller.aaScreenAgricultural;
|
package com.fastbee.data.controller.aaScreenAgricultural;
|
||||||
|
|
||||||
import com.fastbee.common.core.domain.AjaxResult;
|
import com.fastbee.common.core.domain.AjaxResult;
|
||||||
|
import com.fastbee.deviceData.service.IDeviceRealtimedataMeteorologyService;
|
||||||
import com.fastbee.deviceData.service.impl.DeviceRealtimedataMeteorologyServiceImpl;
|
import com.fastbee.deviceData.service.impl.DeviceRealtimedataMeteorologyServiceImpl;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
@ -12,7 +13,7 @@ import org.springframework.web.bind.annotation.RestController;
|
|||||||
public class DeviceRealtimedataMeteorologyController {
|
public class DeviceRealtimedataMeteorologyController {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private DeviceRealtimedataMeteorologyServiceImpl deviceRealtimedataMeteorologyService;
|
private IDeviceRealtimedataMeteorologyService deviceRealtimedataMeteorologyService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取最新的一条气象数据
|
* 获取最新的一条气象数据
|
||||||
|
@ -2,7 +2,9 @@ package com.fastbee.data.controller.aaScreenAgricultural;
|
|||||||
|
|
||||||
import com.fastbee.common.core.domain.AjaxResult;
|
import com.fastbee.common.core.domain.AjaxResult;
|
||||||
import com.fastbee.deviceData.domain.DeviceRealtimedataMoisture;
|
import com.fastbee.deviceData.domain.DeviceRealtimedataMoisture;
|
||||||
|
import com.fastbee.deviceData.service.IDeviceRealtimedataMoistureService;
|
||||||
import com.fastbee.deviceData.service.impl.DeviceRealtimedataMoistureServiceImpl;
|
import com.fastbee.deviceData.service.impl.DeviceRealtimedataMoistureServiceImpl;
|
||||||
|
import com.fastbee.deviceInfo.service.IDeviceInformationMoistureService;
|
||||||
import com.fastbee.deviceInfo.service.impl.DeviceInformationMoistureServiceImpl;
|
import com.fastbee.deviceInfo.service.impl.DeviceInformationMoistureServiceImpl;
|
||||||
import io.lettuce.core.dynamic.annotation.Param;
|
import io.lettuce.core.dynamic.annotation.Param;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@ -14,21 +16,26 @@ import org.springframework.web.bind.annotation.RestController;
|
|||||||
@RestController()
|
@RestController()
|
||||||
@RequestMapping("/moisture")
|
@RequestMapping("/moisture")
|
||||||
public class DeviceRealtimedataMoistureController {
|
public class DeviceRealtimedataMoistureController {
|
||||||
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private DeviceRealtimedataMoistureServiceImpl deviceRealtimedataMoistureServiceImpl;
|
private IDeviceRealtimedataMoistureService deviceRealtimedataMoistureService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private DeviceInformationMoistureServiceImpl deviceInformationMoistureServiceImpl;
|
private IDeviceInformationMoistureService deviceInformationMoistureService;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取最新一条墒情数据
|
* 获取最新一条墒情数据
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
@GetMapping("/weather/realtimedata")
|
@GetMapping("/weather/realtimedata")
|
||||||
public AjaxResult getLatestWeatherRealtimedata( String deviceId) {
|
public AjaxResult getLatestWeatherRealtimedata( String deviceId) {
|
||||||
return AjaxResult.success(deviceRealtimedataMoistureServiceImpl.getLatestWeatherRealtimedata(deviceId));
|
return AjaxResult.success(deviceRealtimedataMoistureService.getLatestWeatherRealtimedata(deviceId));
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* 获取最新一条墒情设备下拉列表
|
||||||
|
*/
|
||||||
@GetMapping("/weather/pullDown")
|
@GetMapping("/weather/pullDown")
|
||||||
public AjaxResult getLatestWeatherPullDown() {
|
public AjaxResult getLatestWeatherPullDown() {
|
||||||
return AjaxResult.success(deviceInformationMoistureServiceImpl.selectDeviceInformationMoistureList(null));
|
return AjaxResult.success(deviceInformationMoistureService.selectDeviceInformationMoistureList(null));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -38,8 +38,6 @@ public class DeviceRealtimedataSeedlingGrowthController {
|
|||||||
.list();
|
.list();
|
||||||
//获取监控播放地址
|
//获取监控播放地址
|
||||||
list.forEach(this::setPlayUrl);
|
list.forEach(this::setPlayUrl);
|
||||||
|
|
||||||
|
|
||||||
return AjaxResult.success(list);
|
return AjaxResult.success(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,53 +0,0 @@
|
|||||||
package com.fastbee.deviceData.api.devlink.service;
|
|
||||||
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import javax.crypto.Mac;
|
|
||||||
import javax.crypto.spec.SecretKeySpec;
|
|
||||||
import javax.xml.bind.DatatypeConverter;
|
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
|
|
||||||
|
|
||||||
@Component
|
|
||||||
public class DevLinkAuthorizationService {
|
|
||||||
|
|
||||||
private final static String ak = "suibin";
|
|
||||||
|
|
||||||
private final static String sk = "MZALH5WB";
|
|
||||||
|
|
||||||
private final static String authId = "23";
|
|
||||||
|
|
||||||
private final static String BASE_URL = "https://plat.developlink.cloud/prod-api/iot/data/forward";
|
|
||||||
|
|
||||||
|
|
||||||
public String getBaseUrl(){
|
|
||||||
return BASE_URL;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getAuth(){
|
|
||||||
String sign;
|
|
||||||
// long time = 1731480451430L;
|
|
||||||
long time = System.currentTimeMillis();
|
|
||||||
String message = "ak=" + ak + "&authId=" + authId + "&time=" + time;
|
|
||||||
try {
|
|
||||||
SecretKeySpec keySpec = new SecretKeySpec(
|
|
||||||
sk.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
|
|
||||||
Mac mac = Mac.getInstance("HmacSHA256");
|
|
||||||
mac.init(keySpec);
|
|
||||||
byte[] rawHmac = mac.doFinal(message.getBytes(StandardCharsets.UTF_8));
|
|
||||||
sign = DatatypeConverter.printHexBinary(rawHmac).toLowerCase();
|
|
||||||
// System.out.println("d6dbca6837dcfec70954b7261eb6dfadc06fcdfdb771d86ee901ab4823bbb33c");
|
|
||||||
System.err.println("result:"+sign);
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new RuntimeException("Unable to generate HMAC : " + e.getMessage(), e);
|
|
||||||
}
|
|
||||||
return "?ak="+ak+"&time="+time+"&sign="+sign+"&authId="+authId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
DevLinkAuthorizationService de = new DevLinkAuthorizationService();
|
|
||||||
de.getAuth();
|
|
||||||
System.out.println(de.getBaseUrl()+de.getAuth());
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,82 @@
|
|||||||
|
package com.fastbee.deviceData.api.devlink.service;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.crypto.Mac;
|
||||||
|
import javax.crypto.spec.SecretKeySpec;
|
||||||
|
import javax.xml.bind.DatatypeConverter;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
public class ZhanLianAuthorizationService {
|
||||||
|
|
||||||
|
private String ak = "suibin";
|
||||||
|
|
||||||
|
private String sk = "MZALH5WB";
|
||||||
|
|
||||||
|
private String authId = "23";
|
||||||
|
|
||||||
|
private String endpoint = "https://plat.developlink.cloud/prod-api/iot/data/forward";
|
||||||
|
|
||||||
|
public String getAuthEndpoint(){
|
||||||
|
return endpoint + getDefaultAuth();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 鉴权参数生成
|
||||||
|
*/
|
||||||
|
public String getDefaultAuth(){
|
||||||
|
String sign;
|
||||||
|
long time = System.currentTimeMillis();
|
||||||
|
String message = "ak=" + ak + "&authId=" + authId + "&time=" + time;
|
||||||
|
try {
|
||||||
|
SecretKeySpec keySpec = new SecretKeySpec(
|
||||||
|
sk.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
|
||||||
|
Mac mac = Mac.getInstance("HmacSHA256");
|
||||||
|
mac.init(keySpec);
|
||||||
|
byte[] rawHmac = mac.doFinal(message.getBytes(StandardCharsets.UTF_8));
|
||||||
|
sign = DatatypeConverter.printHexBinary(rawHmac).toLowerCase();
|
||||||
|
// System.err.println("result:"+sign);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException("签名生成失败! : " + e.getMessage(), e);
|
||||||
|
}
|
||||||
|
return "?ak="+ak+"&time="+time+"&sign="+sign+"&authId="+authId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAuth(ZhanLianConfig zhanLianConfig){
|
||||||
|
String ak = zhanLianConfig.getAk();
|
||||||
|
String sk = zhanLianConfig.getSk();
|
||||||
|
String authId = zhanLianConfig.getAuthId();
|
||||||
|
String sign;
|
||||||
|
long time = System.currentTimeMillis();
|
||||||
|
String message = "ak=" + ak + "&authId=" + authId + "&time=" + time;
|
||||||
|
try {
|
||||||
|
SecretKeySpec keySpec = new SecretKeySpec(
|
||||||
|
sk.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
|
||||||
|
Mac mac = Mac.getInstance("HmacSHA256");
|
||||||
|
mac.init(keySpec);
|
||||||
|
byte[] rawHmac = mac.doFinal(message.getBytes(StandardCharsets.UTF_8));
|
||||||
|
sign = DatatypeConverter.printHexBinary(rawHmac).toLowerCase();
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException("签名生成失败! : " + e.getMessage(), e);
|
||||||
|
}
|
||||||
|
return "?ak="+ak+"&time="+time+"&sign="+sign+"&authId="+authId;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
ZhanLianAuthorizationService de = new ZhanLianAuthorizationService();
|
||||||
|
System.out.println("完整请求路径:"+de.getAuthEndpoint());
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -5,7 +5,6 @@ import cn.hutool.json.JSONArray;
|
|||||||
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONObject;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
import com.fastbee.common.exception.ServiceException;
|
import com.fastbee.common.exception.ServiceException;
|
||||||
import com.fastbee.deviceData.domain.DeviceRealtimedataMeteorology;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@ -14,38 +13,70 @@ import java.util.HashMap;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class DevLinkBaseService {
|
public class ZhanLianBaseService {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private DevLinkAuthorizationService authorizationService;
|
private ZhanLianAuthorizationService authorizationService;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取设备实时数据
|
* 基本请求
|
||||||
|
* @param body 请求负载
|
||||||
|
* @return 请求结果 data
|
||||||
|
*/
|
||||||
|
public JSONObject baseRequest(Map<String,Object> body){
|
||||||
|
String jsonStr = JSONUtil.toJsonStr(body);
|
||||||
|
String respStr = HttpUtil.post(authorizationService.getAuthEndpoint(), jsonStr);
|
||||||
|
JSONObject resp = JSONUtil.parseObj(respStr);
|
||||||
|
if(!resp.get("code").toString().equals("200")){
|
||||||
|
throw new ServiceException(resp.get("message").toString());
|
||||||
|
}
|
||||||
|
return resp.getJSONObject("data");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求设备实时数据
|
||||||
* @param deviceId 设备id
|
* @param deviceId 设备id
|
||||||
* @return 实时数据
|
* @return 实时数据
|
||||||
*/
|
*/
|
||||||
public Map<String,String> getMetDeviceRealData(String deviceId){
|
private JSONObject requestDeviceData(String deviceId) {
|
||||||
String result = requestDeviceData(deviceId);
|
//构建请求体
|
||||||
|
HashMap<String, Object> body = new HashMap<>();
|
||||||
|
body.put("method","get");
|
||||||
|
body.put("path","api/v1/product/device/run_status");
|
||||||
|
Map<String,Object> params=new HashMap<>();
|
||||||
|
params.put("id", deviceId);
|
||||||
|
body.put("params",params);
|
||||||
|
return baseRequest(body);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据设备id请求数据并解析设备实时数据为易于存储的map键值对
|
||||||
|
* @param deviceId 设备id
|
||||||
|
* @return 实时数据
|
||||||
|
*/
|
||||||
|
public Map<String,String> getDeviceRealTimeData(String deviceId){
|
||||||
//解析返回数据
|
//解析返回数据
|
||||||
JSONObject jsonObject = JSONUtil.parseObj(result);
|
JSONObject data = requestDeviceData(deviceId);
|
||||||
Object data = jsonObject.get("data");
|
|
||||||
//获取设备状态
|
//获取设备状态
|
||||||
JSONObject jsonObjectData = JSONUtil.parseObj(data);
|
JSONObject jsonObjectData = JSONUtil.parseObj(data);
|
||||||
Object status = jsonObjectData.get("status");
|
Object status = jsonObjectData.get("status");
|
||||||
// System.err.println("status:"+status);
|
|
||||||
//获取设备属性以及实时数据值
|
//获取设备属性以及实时数据值
|
||||||
Object properties = jsonObjectData.get("properties");
|
Object properties = jsonObjectData.get("properties");
|
||||||
//获取数据上报时间
|
//获取数据上报时间
|
||||||
String time = jsonObjectData.get("lastOnlineTime").toString();
|
String time = jsonObjectData.get("lastOnlineTime").toString();
|
||||||
JSONArray propertiesArray = JSONUtil.parseArray(properties);
|
JSONArray propertiesArray = JSONUtil.parseArray(properties);
|
||||||
DeviceRealtimedataMeteorology realData = new DeviceRealtimedataMeteorology();
|
|
||||||
//获取设备各项属性实时数据
|
//获取设备各项属性实时数据
|
||||||
//设备属性与值建立map
|
//设备属性与值建立map
|
||||||
Map<String, String> propertiesMap = new HashMap<>();
|
Map<String, String> propertiesMap = new HashMap<>();
|
||||||
propertiesArray.forEach(p -> {
|
propertiesArray.forEach(p -> {
|
||||||
Object property = JSONUtil.parseObj(p).get("property");
|
Object property = JSONUtil.parseObj(p).get("property");
|
||||||
JSONObject propertyMap = JSONUtil.parseObj(property);
|
JSONObject propertyMap = JSONUtil.parseObj(property);
|
||||||
// System.err.println("propertyMap:"+propertyMap);
|
|
||||||
//属性名称
|
//属性名称
|
||||||
String name = propertyMap.get("name").toString();
|
String name = propertyMap.get("name").toString();
|
||||||
//属性key
|
//属性key
|
||||||
@ -59,71 +90,32 @@ public class DevLinkBaseService {
|
|||||||
|
|
||||||
//TODO 属性值历史数据,是否需要
|
//TODO 属性值历史数据,是否需要
|
||||||
Object list = JSONUtil.parseObj(p).get("list");
|
Object list = JSONUtil.parseObj(p).get("list");
|
||||||
// System.err.print("name:"+name);
|
|
||||||
// System.err.print("key:"+key);
|
|
||||||
// System.err.println("------------value:"+value);
|
|
||||||
//建立属性-值映射关系
|
//建立属性-值映射关系
|
||||||
propertiesMap.put(key,value);
|
propertiesMap.put(key,value);
|
||||||
// saveRealData(key,value,realData);
|
|
||||||
});
|
});
|
||||||
propertiesMap.put("status",status.toString());
|
propertiesMap.put("status",status.toString());
|
||||||
propertiesMap.put("deviceId",deviceId);
|
propertiesMap.put("deviceId",deviceId);
|
||||||
propertiesMap.put("realTime",time);
|
propertiesMap.put("realTime",time);
|
||||||
|
|
||||||
return propertiesMap;
|
return propertiesMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 请求设备实时数据
|
|
||||||
* @param deviceId 设备id
|
|
||||||
* @return 实时数据
|
|
||||||
*/
|
|
||||||
private String requestDeviceData(String deviceId) {
|
|
||||||
DevLinkAuthorizationService authorization = new DevLinkAuthorizationService();
|
|
||||||
//构建请求体
|
|
||||||
HashMap<String, Object> body = new HashMap<>();
|
|
||||||
body.put("method","get");
|
|
||||||
body.put("path","api/v1/product/device/run_status");
|
|
||||||
Map<String,Object> params=new HashMap<>();
|
|
||||||
params.put("id", deviceId);
|
|
||||||
body.put("params",params);
|
|
||||||
String jsonStr = JSONUtil.toJsonStr(body);
|
|
||||||
System.err.println(authorization.getBaseUrl() + authorization.getAuth());
|
|
||||||
return HttpUtil.post(authorization.getBaseUrl() + authorization.getAuth(), jsonStr);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 基本请求
|
|
||||||
* @return 请求结果data
|
|
||||||
*/
|
|
||||||
public JSONObject baseRequest(Map<String,Object> body){
|
|
||||||
DevLinkAuthorizationService authorization = new DevLinkAuthorizationService();
|
|
||||||
String jsonStr = JSONUtil.toJsonStr(body);
|
|
||||||
System.err.println(authorization.getBaseUrl() + authorization.getAuth());
|
|
||||||
String respStr = HttpUtil.post(authorization.getBaseUrl() + authorization.getAuth(), jsonStr);
|
|
||||||
JSONObject resp = JSONUtil.parseObj(respStr);
|
|
||||||
if(!resp.get("code").toString().equals("200")){
|
|
||||||
throw new ServiceException(resp.get("message").toString());
|
|
||||||
}
|
|
||||||
return resp.getJSONObject("data");
|
|
||||||
}
|
|
||||||
|
|
||||||
public BigDecimal toBigDecimalValue(String str) {
|
public BigDecimal toBigDecimalValue(String str) {
|
||||||
if (str == null||"".equals(str)) {
|
if (str == null|| str.isEmpty()) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return new BigDecimal(str);
|
return new BigDecimal(str);
|
||||||
}
|
}
|
||||||
public Long toLongValue(String str) {
|
public Long toLongValue(String str) {
|
||||||
if (str == null||"".equals(str)) {
|
if (str == null|| str.isEmpty()) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return Long.parseLong(str);
|
return Long.parseLong(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
DevLinkBaseService devLinkBaseService = new DevLinkBaseService();
|
|
||||||
Map<String, String> metDeviceRealData = devLinkBaseService.getMetDeviceRealData("3270");
|
|
||||||
// System.err.println(metDeviceRealData);
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
package com.fastbee.deviceData.api.devlink.service;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
public class ZhanLianConfig {
|
||||||
|
|
||||||
|
private String ak;
|
||||||
|
|
||||||
|
private String sk;
|
||||||
|
|
||||||
|
private String authId;
|
||||||
|
|
||||||
|
private String endpoint;
|
||||||
|
}
|
@ -4,9 +4,9 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class DevLinkCountService {
|
public class ZhanLianCountService {
|
||||||
@Autowired
|
@Autowired
|
||||||
private DevLinkAuthorizationService authorizationService;
|
private ZhanLianAuthorizationService authorizationService;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
@ -17,10 +17,10 @@ import java.util.Map;
|
|||||||
* devLink气象设备数据服务
|
* devLink气象设备数据服务
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
public class DevLinkMetDataService extends DevLinkBaseService {
|
public class ZhanLianMetDataService extends ZhanLianBaseService {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private DevLinkAuthorizationService authorizationService;
|
private ZhanLianAuthorizationService authorizationService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private DeviceRealtimedataMeteorologyMapper deviceRealtimedataMeteorologyMapper;
|
private DeviceRealtimedataMeteorologyMapper deviceRealtimedataMeteorologyMapper;
|
||||||
@ -59,8 +59,8 @@ public class DevLinkMetDataService extends DevLinkBaseService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
DevLinkMetDataService devLinkMetDataService = new DevLinkMetDataService();
|
ZhanLianMetDataService devLinkMetDataService = new ZhanLianMetDataService();
|
||||||
Map<String, String> metDeviceRealData = devLinkMetDataService.getMetDeviceRealData("3269");
|
Map<String, String> metDeviceRealData = devLinkMetDataService.getDeviceRealTimeData("3269");
|
||||||
devLinkMetDataService.setData(metDeviceRealData);
|
devLinkMetDataService.setData(metDeviceRealData);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -16,9 +16,9 @@ import java.util.Map;
|
|||||||
* devLink苗情设备数据服务
|
* devLink苗情设备数据服务
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
public class DevLinkMiaoQingDataService extends DevLinkBaseService {
|
public class ZhanLianMiaoQingDataService extends ZhanLianBaseService {
|
||||||
@Autowired
|
@Autowired
|
||||||
private DevLinkAuthorizationService authorizationService;
|
private ZhanLianAuthorizationService authorizationService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private DeviceRealtimedataMiaoqingMapper deviceRealtimedataMiaoqingMapper;
|
private DeviceRealtimedataMiaoqingMapper deviceRealtimedataMiaoqingMapper;
|
||||||
public DeviceRealtimedataMiaoqing setData(Map<String, String> propertiesMap){
|
public DeviceRealtimedataMiaoqing setData(Map<String, String> propertiesMap){
|
||||||
@ -61,8 +61,8 @@ public class DevLinkMiaoQingDataService extends DevLinkBaseService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
DevLinkMiaoQingDataService devLinkMiaoQingDataService = new DevLinkMiaoQingDataService();
|
ZhanLianMiaoQingDataService devLinkMiaoQingDataService = new ZhanLianMiaoQingDataService();
|
||||||
Map<String, String> metDeviceRealData = devLinkMiaoQingDataService.getMetDeviceRealData("3275");
|
Map<String, String> metDeviceRealData = devLinkMiaoQingDataService.getDeviceRealTimeData("3275");
|
||||||
devLinkMiaoQingDataService.setData(metDeviceRealData);
|
devLinkMiaoQingDataService.setData(metDeviceRealData);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -16,9 +16,9 @@ import java.util.Map;
|
|||||||
* devLink墒情设备数据服务
|
* devLink墒情设备数据服务
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
public class DevLinkMoistureDataService extends DevLinkBaseService {
|
public class ZhanLianMoistureDataService extends ZhanLianBaseService {
|
||||||
@Autowired
|
@Autowired
|
||||||
private DevLinkAuthorizationService authorizationService;
|
private ZhanLianAuthorizationService authorizationService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private DeviceRealtimedataMoistureMapper moistureMapper;
|
private DeviceRealtimedataMoistureMapper moistureMapper;
|
||||||
//封装数据
|
//封装数据
|
||||||
@ -74,8 +74,8 @@ public class DevLinkMoistureDataService extends DevLinkBaseService {
|
|||||||
|
|
||||||
}
|
}
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
DevLinkMoistureDataService devLinkMoistureDataService = new DevLinkMoistureDataService();
|
ZhanLianMoistureDataService devLinkMoistureDataService = new ZhanLianMoistureDataService();
|
||||||
Map<String, String> metDeviceRealData = devLinkMoistureDataService.getMetDeviceRealData("3270");
|
Map<String, String> metDeviceRealData = devLinkMoistureDataService.getDeviceRealTimeData("3270");
|
||||||
devLinkMoistureDataService.setData(metDeviceRealData);
|
devLinkMoistureDataService.setData(metDeviceRealData);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -16,9 +16,9 @@ import java.util.Map;
|
|||||||
* devLink光伏设备数据服务
|
* devLink光伏设备数据服务
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
public class DevLinkPhotovoltaicDataService extends DevLinkBaseService {
|
public class ZhanLianPhotovoltaicDataService extends ZhanLianBaseService {
|
||||||
@Autowired
|
@Autowired
|
||||||
private DevLinkAuthorizationService authorizationService;
|
private ZhanLianAuthorizationService authorizationService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private DeviceRealtimedataPhotovoltaicMapper photovoltaicMapper;
|
private DeviceRealtimedataPhotovoltaicMapper photovoltaicMapper;
|
||||||
//封装数据
|
//封装数据
|
||||||
@ -84,8 +84,8 @@ public class DevLinkPhotovoltaicDataService extends DevLinkBaseService {
|
|||||||
return photovoltaic;
|
return photovoltaic;
|
||||||
}
|
}
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
DevLinkPhotovoltaicDataService devLinkPhotovoltaicDataService = new DevLinkPhotovoltaicDataService();
|
ZhanLianPhotovoltaicDataService devLinkPhotovoltaicDataService = new ZhanLianPhotovoltaicDataService();
|
||||||
Map<String, String> metDeviceRealData = devLinkPhotovoltaicDataService.getMetDeviceRealData("3276");
|
Map<String, String> metDeviceRealData = devLinkPhotovoltaicDataService.getDeviceRealTimeData("3276");
|
||||||
devLinkPhotovoltaicDataService.setData(metDeviceRealData);
|
devLinkPhotovoltaicDataService.setData(metDeviceRealData);
|
||||||
|
|
||||||
}
|
}
|
@ -86,6 +86,10 @@ public class RenkeDeviceDataService {
|
|||||||
JSONArray jsonArray = JSONUtil.parseArray(respBody1.get("data"));
|
JSONArray jsonArray = JSONUtil.parseArray(respBody1.get("data"));
|
||||||
JSONObject entries = JSONUtil.parseObj(jsonArray.get(0));
|
JSONObject entries = JSONUtil.parseObj(jsonArray.get(0));
|
||||||
|
|
||||||
|
//获取害虫种类以及数量
|
||||||
|
JSONArray analyseData = JSONUtil.parseArray(entries.get("analyseData"));
|
||||||
|
//有害虫时保存
|
||||||
|
if(!analyseData.isEmpty()){
|
||||||
//获取拍照图片
|
//获取拍照图片
|
||||||
Object imagesUrl = entries .get("imagesUrl");
|
Object imagesUrl = entries .get("imagesUrl");
|
||||||
//获取虫情分析后的图片地址
|
//获取虫情分析后的图片地址
|
||||||
@ -93,7 +97,7 @@ public class RenkeDeviceDataService {
|
|||||||
|
|
||||||
deviceRealtimedataWorms.setPestPhotos(analyseCoordUrl.toString());
|
deviceRealtimedataWorms.setPestPhotos(analyseCoordUrl.toString());
|
||||||
deviceRealtimedataWorms.setCamera(imagesUrl.toString());
|
deviceRealtimedataWorms.setCamera(imagesUrl.toString());
|
||||||
|
}
|
||||||
|
|
||||||
deviceRealtimedataWorms.setSaveTime(DateUtils.getNowDate());
|
deviceRealtimedataWorms.setSaveTime(DateUtils.getNowDate());
|
||||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||||
|
@ -21,8 +21,6 @@ public class RenkeMetDeviceService {
|
|||||||
private RenKeAuthorizationService authorizationService;
|
private RenKeAuthorizationService authorizationService;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取气象设备全部信息
|
* 获取气象设备全部信息
|
||||||
* @param deviceStr 设备地址,支持多个用英文逗号分隔
|
* @param deviceStr 设备地址,支持多个用英文逗号分隔
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
package com.fastbee.deviceData.service.impl;
|
package com.fastbee.deviceData.service.impl;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
@ -111,9 +108,11 @@ public class DeviceRealtimedataMeteorologyServiceImpl implements IDeviceRealtime
|
|||||||
queryWrapper.orderByDesc("real_time");
|
queryWrapper.orderByDesc("real_time");
|
||||||
queryWrapper.last("limit 1");
|
queryWrapper.last("limit 1");
|
||||||
DeviceRealtimedataMeteorology meteorology = deviceRealtimedataMeteorologyMapper.selectOne(queryWrapper);
|
DeviceRealtimedataMeteorology meteorology = deviceRealtimedataMeteorologyMapper.selectOne(queryWrapper);
|
||||||
List<Map<String, String>> mapList = new ArrayList<>();
|
|
||||||
Map<String, String> map = new HashMap<String, String>();
|
|
||||||
List<DeviceProperties> devicePropertiesList = new ArrayList<>();
|
List<DeviceProperties> devicePropertiesList = new ArrayList<>();
|
||||||
|
if(Objects.isNull(meteorology)){
|
||||||
|
return devicePropertiesList;
|
||||||
|
}
|
||||||
devicePropertiesList.add(DeviceProperties.builder().name("空气温度").value(meteorology.getAirTemp().toString()).unit("°C").build());
|
devicePropertiesList.add(DeviceProperties.builder().name("空气温度").value(meteorology.getAirTemp().toString()).unit("°C").build());
|
||||||
devicePropertiesList.add(DeviceProperties.builder().name("空气湿度").value(meteorology.getAirHumi().toString()).unit("°C").build());
|
devicePropertiesList.add(DeviceProperties.builder().name("空气湿度").value(meteorology.getAirHumi().toString()).unit("°C").build());
|
||||||
devicePropertiesList.add(DeviceProperties.builder().name("风速").value(meteorology.getWindSpeed().toString()).unit("m/s").build());
|
devicePropertiesList.add(DeviceProperties.builder().name("风速").value(meteorology.getWindSpeed().toString()).unit("m/s").build());
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
package com.fastbee.deviceData.service.impl;
|
package com.fastbee.deviceData.service.impl;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.fastbee.deviceData.domain.dto.DeviceProperties;
|
import com.fastbee.deviceData.domain.dto.DeviceProperties;
|
||||||
@ -101,14 +98,17 @@ public class DeviceRealtimedataMoistureServiceImpl implements IDeviceRealtimedat
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public List<DeviceProperties> getLatestWeatherRealtimedata(String deviceId){
|
public List<DeviceProperties> getLatestWeatherRealtimedata(String deviceId){
|
||||||
|
System.err.println(deviceId);
|
||||||
QueryWrapper queryWrapper = new QueryWrapper();
|
QueryWrapper queryWrapper = new QueryWrapper();
|
||||||
queryWrapper.orderByDesc("real_time");
|
queryWrapper.orderByDesc("real_time");
|
||||||
queryWrapper.last("limit 1");
|
queryWrapper.last("limit 1");
|
||||||
queryWrapper.eq("device_id",deviceId);
|
queryWrapper.eq("device_id",deviceId);
|
||||||
DeviceRealtimedataMoisture moisture = deviceRealtimedataMoistureMapper.selectOne(queryWrapper);
|
DeviceRealtimedataMoisture moisture = deviceRealtimedataMoistureMapper.selectOne(queryWrapper);
|
||||||
List<Map<String, String>> mapList = new ArrayList<>();
|
|
||||||
Map<String, String> map = new HashMap<String, String>();
|
|
||||||
List<DeviceProperties> devicePropertiesList = new ArrayList<>();
|
List<DeviceProperties> devicePropertiesList = new ArrayList<>();
|
||||||
|
if(Objects.isNull(moisture)){
|
||||||
|
return devicePropertiesList;
|
||||||
|
}
|
||||||
devicePropertiesList.add(DeviceProperties.builder().name("土壤温度").value(moisture.getSoilTemp().toString()).unit("°C").build());
|
devicePropertiesList.add(DeviceProperties.builder().name("土壤温度").value(moisture.getSoilTemp().toString()).unit("°C").build());
|
||||||
devicePropertiesList.add(DeviceProperties.builder().name("土壤湿度").value(moisture.getSoilHumi().toString()).unit("%").build());
|
devicePropertiesList.add(DeviceProperties.builder().name("土壤湿度").value(moisture.getSoilHumi().toString()).unit("%").build());
|
||||||
devicePropertiesList.add(DeviceProperties.builder().name("土壤EC").value(moisture.getSoilEc().toString()).unit("MS/cm").build());
|
devicePropertiesList.add(DeviceProperties.builder().name("土壤EC").value(moisture.getSoilEc().toString()).unit("MS/cm").build());
|
||||||
|
@ -0,0 +1,8 @@
|
|||||||
|
package com.fastbee.iot.strategy;
|
||||||
|
|
||||||
|
import cn.hutool.json.JSONObject;
|
||||||
|
import java.util.List;
|
||||||
|
public interface DeviceRealTimeDataStrategy {
|
||||||
|
|
||||||
|
List<JSONObject> getDeviceRealTimeData(String deviceId);
|
||||||
|
}
|
@ -0,0 +1,130 @@
|
|||||||
|
package com.fastbee.iot.strategy.impl;
|
||||||
|
|
||||||
|
import cn.hutool.json.JSONArray;
|
||||||
|
import cn.hutool.json.JSONObject;
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
|
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
|
||||||
|
|
||||||
|
|
||||||
|
import com.fastbee.deviceData.api.devlink.service.ZhanLianConfig;
|
||||||
|
import com.fastbee.iot.domain.Device;
|
||||||
|
import com.fastbee.iot.mapper.DeviceMapper;
|
||||||
|
import com.fastbee.iot.strategy.DeviceRealTimeDataStrategy;
|
||||||
|
import com.fastbee.iot.zhanlian.ZhanLianAuthorizationService;
|
||||||
|
import com.fastbee.iot.zhanlian.ZhanLianBaseService;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class ZhanLianDeviceRealTimeDataStrategy implements DeviceRealTimeDataStrategy {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private DeviceMapper deviceMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<JSONObject> getDeviceRealTimeData(String deviceId) {
|
||||||
|
|
||||||
|
//根据产品查询对应设备
|
||||||
|
Device device = new LambdaQueryChainWrapper<>(deviceMapper)
|
||||||
|
.select(Device::getDeviceId,Device::getSerialNumber,Device::getDevParams)
|
||||||
|
.eq(Device::getSerialNumber,deviceId)
|
||||||
|
.eq(Device::getDelFlag, 0)
|
||||||
|
.one();
|
||||||
|
if(device == null){
|
||||||
|
throw new RuntimeException("展连设备不存在!设备id为:"+deviceId);
|
||||||
|
}
|
||||||
|
|
||||||
|
//解析设备对接参数
|
||||||
|
String devParams = device.getDevParams();
|
||||||
|
if(StringUtils.isBlank(devParams)){
|
||||||
|
throw new RuntimeException("展连设备对接参数为空!设备id为:"+device.getDeviceId());
|
||||||
|
}
|
||||||
|
JSONArray paramArray = JSONUtil.parseArray(devParams);
|
||||||
|
//解析参数列表建立map
|
||||||
|
Map<String, String> params = new HashMap<>();
|
||||||
|
//解析参数列表建立map
|
||||||
|
paramArray.forEach(paramObj->{
|
||||||
|
JSONObject entries = JSONUtil.parseObj(paramObj);
|
||||||
|
Object key = entries.get("key");
|
||||||
|
Object value = entries.get("value");
|
||||||
|
params.put(key.toString(),value.toString());
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
//获取请求地址
|
||||||
|
String authEndpoint = ZhanLianAuthorizationService.getAuthEndpoint(ZhanLianConfig.builder()
|
||||||
|
.ak(params.get("ak"))
|
||||||
|
.sk(params.get("sk"))
|
||||||
|
.authId( params.get("authId"))
|
||||||
|
.endpoint("https://plat.developlink.cloud/prod-api/iot/data/forward")
|
||||||
|
.build());
|
||||||
|
|
||||||
|
//请求参数构建
|
||||||
|
HashMap<String, Object> reqBody = new HashMap<>();
|
||||||
|
reqBody.put("method","get");
|
||||||
|
reqBody.put("path","api/v1/product/device/run_status");
|
||||||
|
Map<String,Object> param =new HashMap<>();
|
||||||
|
param.put("id", deviceId);
|
||||||
|
reqBody.put("params",params);
|
||||||
|
|
||||||
|
ZhanLianBaseService zhanLianBaseService = new ZhanLianBaseService();
|
||||||
|
//请求设备
|
||||||
|
JSONObject respObj = zhanLianBaseService.baseRequest(reqBody, authEndpoint);
|
||||||
|
//解析设备实时数据
|
||||||
|
Map<String, String> deviceRealTimeData = getDeviceRealTimeData(respObj, deviceId);
|
||||||
|
//映射为数据存储对象
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据设备id请求数据并解析设备实时数据为易于存储的map键值对
|
||||||
|
* @param deviceId 设备id
|
||||||
|
* @return 实时数据
|
||||||
|
*/
|
||||||
|
public Map<String,String> getDeviceRealTimeData(JSONObject data ,String deviceId){
|
||||||
|
|
||||||
|
//获取设备状态
|
||||||
|
JSONObject jsonObjectData = JSONUtil.parseObj(data);
|
||||||
|
Object status = jsonObjectData.get("status");
|
||||||
|
//获取设备属性以及实时数据值
|
||||||
|
Object properties = jsonObjectData.get("properties");
|
||||||
|
//获取数据上报时间
|
||||||
|
String time = jsonObjectData.get("lastOnlineTime").toString();
|
||||||
|
JSONArray propertiesArray = JSONUtil.parseArray(properties);
|
||||||
|
//获取设备各项属性实时数据
|
||||||
|
//设备属性与值建立map
|
||||||
|
Map<String, String> propertiesMap = new HashMap<>();
|
||||||
|
propertiesArray.forEach(p -> {
|
||||||
|
Object property = JSONUtil.parseObj(p).get("property");
|
||||||
|
JSONObject propertyMap = JSONUtil.parseObj(property);
|
||||||
|
//属性名称
|
||||||
|
String name = propertyMap.get("name").toString();
|
||||||
|
//属性key
|
||||||
|
String key = propertyMap.get("key").toString();
|
||||||
|
//属性值
|
||||||
|
Object value1 = JSONUtil.parseObj(p).get("value");
|
||||||
|
String value="" ;
|
||||||
|
if(value1!=null){
|
||||||
|
value = value1.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO 属性值历史数据,是否需要
|
||||||
|
Object list = JSONUtil.parseObj(p).get("list");
|
||||||
|
//建立属性-值映射关系
|
||||||
|
propertiesMap.put(key,value);
|
||||||
|
|
||||||
|
});
|
||||||
|
propertiesMap.put("status",status.toString());
|
||||||
|
propertiesMap.put("deviceId",deviceId);
|
||||||
|
propertiesMap.put("realTime",time);
|
||||||
|
return propertiesMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,28 +1,16 @@
|
|||||||
package com.fastbee.iot.timer;
|
package com.fastbee.iot.timer;
|
||||||
|
|
||||||
import cn.hutool.core.date.DateTime;
|
import com.fastbee.deviceData.api.devlink.service.ZhanLianMetDataService;
|
||||||
import cn.hutool.http.HttpRequest;
|
import com.fastbee.deviceData.api.devlink.service.ZhanLianMiaoQingDataService;
|
||||||
import cn.hutool.http.HttpResponse;
|
import com.fastbee.deviceData.api.devlink.service.ZhanLianMoistureDataService;
|
||||||
|
import com.fastbee.deviceData.api.devlink.service.ZhanLianPhotovoltaicDataService;
|
||||||
import cn.hutool.json.JSONArray;
|
|
||||||
import cn.hutool.json.JSONObject;
|
|
||||||
import cn.hutool.json.JSONUtil;
|
|
||||||
import com.fastbee.deviceData.api.devlink.service.DevLinkMetDataService;
|
|
||||||
import com.fastbee.deviceData.api.devlink.service.DevLinkMiaoQingDataService;
|
|
||||||
import com.fastbee.deviceData.api.devlink.service.DevLinkMoistureDataService;
|
|
||||||
import com.fastbee.deviceData.api.devlink.service.DevLinkPhotovoltaicDataService;
|
|
||||||
import com.fastbee.deviceData.api.renke.constant.RenKeDeviceTypeConstant;
|
|
||||||
import com.fastbee.deviceData.api.renke.service.RenKeAuthorizationService;
|
|
||||||
import com.fastbee.deviceData.api.renke.service.RenkeDeviceDataService;
|
import com.fastbee.deviceData.api.renke.service.RenkeDeviceDataService;
|
||||||
import com.fastbee.deviceData.domain.*;
|
import com.fastbee.deviceData.domain.*;
|
||||||
|
|
||||||
import com.fastbee.deviceData.mapper.*;
|
import com.fastbee.deviceData.mapper.*;
|
||||||
import com.fastbee.deviceData.service.IDeviceRealtimedataWormsService;
|
import com.fastbee.iot.mapper.DeviceMapper;
|
||||||
import com.fastbee.deviceData.service.impl.DeviceRealtimedataWormsServiceImpl;
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.data.redis.core.StringRedisTemplate;
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -38,6 +26,9 @@ public class DeviceDateTask {
|
|||||||
// @Autowired
|
// @Autowired
|
||||||
// private ThreadPoolTaskExecutor taskExecutor;
|
// private ThreadPoolTaskExecutor taskExecutor;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private DeviceMapper deviceMapper;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private DeviceRealtimedataWormsMapper deviceRealtimedataWormsMapper;
|
private DeviceRealtimedataWormsMapper deviceRealtimedataWormsMapper;
|
||||||
|
|
||||||
@ -57,16 +48,16 @@ public class DeviceDateTask {
|
|||||||
private RenkeDeviceDataService wormsService; //虫情设备数据获取
|
private RenkeDeviceDataService wormsService; //虫情设备数据获取
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private DevLinkMetDataService metDataService; //气象设备数据获取
|
private ZhanLianMetDataService metDataService; //气象设备数据获取
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private DevLinkMoistureDataService moistureDataService; //墒情设备数据获取
|
private ZhanLianMoistureDataService moistureDataService; //墒情设备数据获取
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private DevLinkPhotovoltaicDataService photovoltaicDataService; //光伏设备数据获取
|
private ZhanLianPhotovoltaicDataService photovoltaicDataService; //光伏设备数据获取
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private DevLinkMiaoQingDataService miaoQingDataService; //苗情设备数据获取
|
private ZhanLianMiaoQingDataService miaoQingDataService; //苗情设备数据获取
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -76,6 +67,7 @@ public class DeviceDateTask {
|
|||||||
* 获取虫情设备实时数据并保存
|
* 获取虫情设备实时数据并保存
|
||||||
*/
|
*/
|
||||||
public void getWormsDeviceRealtimeData() throws Exception{
|
public void getWormsDeviceRealtimeData() throws Exception{
|
||||||
|
|
||||||
DeviceRealtimedataWorms deviceRealtimedataWorms = wormsService.setData("1017240042");
|
DeviceRealtimedataWorms deviceRealtimedataWorms = wormsService.setData("1017240042");
|
||||||
int i = deviceRealtimedataWormsMapper.insert(deviceRealtimedataWorms);
|
int i = deviceRealtimedataWormsMapper.insert(deviceRealtimedataWorms);
|
||||||
if (i<1){
|
if (i<1){
|
||||||
@ -87,7 +79,7 @@ public class DeviceDateTask {
|
|||||||
* 获取气象设备实时数据并保存
|
* 获取气象设备实时数据并保存
|
||||||
*/
|
*/
|
||||||
public void getDevLinkMetDeviceRealtimeData() throws Exception{
|
public void getDevLinkMetDeviceRealtimeData() throws Exception{
|
||||||
DeviceRealtimedataMeteorology deviceRealtimedataMeteorology = metDataService.setData(metDataService.getMetDeviceRealData("3269"));
|
DeviceRealtimedataMeteorology deviceRealtimedataMeteorology = metDataService.setData(metDataService.getDeviceRealTimeData("3269"));
|
||||||
int i = deviceRealtimedataMeteorologyMapper.insert(deviceRealtimedataMeteorology);
|
int i = deviceRealtimedataMeteorologyMapper.insert(deviceRealtimedataMeteorology);
|
||||||
if (i<1){
|
if (i<1){
|
||||||
System.out.println("插入数据失败!");
|
System.out.println("插入数据失败!");
|
||||||
@ -98,7 +90,7 @@ public class DeviceDateTask {
|
|||||||
* 获取墒情设备实时数据并保存
|
* 获取墒情设备实时数据并保存
|
||||||
*/
|
*/
|
||||||
public void getDevLinkMoistureDeviceRealtimeData() throws Exception{
|
public void getDevLinkMoistureDeviceRealtimeData() throws Exception{
|
||||||
DeviceRealtimedataMoisture deviceRealtimedataMoisture = moistureDataService.setData(moistureDataService.getMetDeviceRealData("3270"));
|
DeviceRealtimedataMoisture deviceRealtimedataMoisture = moistureDataService.setData(moistureDataService.getDeviceRealTimeData("3270"));
|
||||||
int i = deviceRealtimedataMoistureMapper.insert(deviceRealtimedataMoisture);
|
int i = deviceRealtimedataMoistureMapper.insert(deviceRealtimedataMoisture);
|
||||||
if (i<1)
|
if (i<1)
|
||||||
System.out.println("插入数据失败!");
|
System.out.println("插入数据失败!");
|
||||||
@ -108,7 +100,7 @@ public class DeviceDateTask {
|
|||||||
* 获取光伏设备实时数据并保存
|
* 获取光伏设备实时数据并保存
|
||||||
*/
|
*/
|
||||||
public void getDevLinkPhotovoltaicDeviceRealtimeData() throws Exception{
|
public void getDevLinkPhotovoltaicDeviceRealtimeData() throws Exception{
|
||||||
DeviceRealtimedataPhotovoltaic deviceRealtimedataPhotovoltaic = photovoltaicDataService.setData(photovoltaicDataService.getMetDeviceRealData("3276"));
|
DeviceRealtimedataPhotovoltaic deviceRealtimedataPhotovoltaic = photovoltaicDataService.setData(photovoltaicDataService.getDeviceRealTimeData("3276"));
|
||||||
int i = deviceRealtimedataPhotovoltaicMapper.insert(deviceRealtimedataPhotovoltaic);
|
int i = deviceRealtimedataPhotovoltaicMapper.insert(deviceRealtimedataPhotovoltaic);
|
||||||
if (i<1)
|
if (i<1)
|
||||||
System.out.println("插入数据失败!");
|
System.out.println("插入数据失败!");
|
||||||
@ -118,7 +110,7 @@ public class DeviceDateTask {
|
|||||||
* 获取苗情设备实时数据并保存
|
* 获取苗情设备实时数据并保存
|
||||||
*/
|
*/
|
||||||
public void getDevLinkMiaoqingDeviceRealtimeData() throws Exception{
|
public void getDevLinkMiaoqingDeviceRealtimeData() throws Exception{
|
||||||
DeviceRealtimedataMiaoqing deviceRealtimedataMiaoqing = miaoQingDataService.setData(miaoQingDataService.getMetDeviceRealData("3275"));
|
DeviceRealtimedataMiaoqing deviceRealtimedataMiaoqing = miaoQingDataService.setData(miaoQingDataService.getDeviceRealTimeData("3275"));
|
||||||
int i = deviceRealtimedataMiaoqingMapper.insert(deviceRealtimedataMiaoqing);
|
int i = deviceRealtimedataMiaoqingMapper.insert(deviceRealtimedataMiaoqing);
|
||||||
if (i<1)
|
if (i<1)
|
||||||
System.out.println("插入数据失败!");
|
System.out.println("插入数据失败!");
|
||||||
|
@ -0,0 +1,49 @@
|
|||||||
|
package com.fastbee.iot.zhanlian;
|
||||||
|
|
||||||
|
import com.fastbee.deviceData.api.devlink.service.ZhanLianConfig;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.crypto.Mac;
|
||||||
|
import javax.crypto.spec.SecretKeySpec;
|
||||||
|
import javax.xml.bind.DatatypeConverter;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Builder
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class ZhanLianAuthorizationService {
|
||||||
|
|
||||||
|
|
||||||
|
public static String getAuthEndpoint(ZhanLianConfig zhanLianConfig){
|
||||||
|
String ak = zhanLianConfig.getAk();
|
||||||
|
String sk = zhanLianConfig.getSk();
|
||||||
|
String authId = zhanLianConfig.getAuthId();
|
||||||
|
String endpoint = zhanLianConfig.getEndpoint();
|
||||||
|
String sign;
|
||||||
|
long time = System.currentTimeMillis();
|
||||||
|
String message = "ak=" + ak + "&authId=" + authId + "&time=" + time;
|
||||||
|
try {
|
||||||
|
SecretKeySpec keySpec = new SecretKeySpec(
|
||||||
|
sk.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
|
||||||
|
Mac mac = Mac.getInstance("HmacSHA256");
|
||||||
|
mac.init(keySpec);
|
||||||
|
byte[] rawHmac = mac.doFinal(message.getBytes(StandardCharsets.UTF_8));
|
||||||
|
sign = DatatypeConverter.printHexBinary(rawHmac).toLowerCase();
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException("签名生成失败! : " + e.getMessage(), e);
|
||||||
|
}
|
||||||
|
return endpoint+"?ak="+ak+"&time="+time+"&sign="+sign+"&authId="+authId;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,55 @@
|
|||||||
|
package com.fastbee.iot.zhanlian;
|
||||||
|
|
||||||
|
import cn.hutool.http.HttpUtil;
|
||||||
|
import cn.hutool.json.JSONArray;
|
||||||
|
import cn.hutool.json.JSONObject;
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
|
import com.fastbee.common.exception.ServiceException;
|
||||||
|
import com.fastbee.deviceData.api.devlink.service.ZhanLianAuthorizationService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
|
public class ZhanLianBaseService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 基本请求
|
||||||
|
* @param body 请求负载
|
||||||
|
* @return 请求结果 data
|
||||||
|
*/
|
||||||
|
public JSONObject baseRequest(Map<String,Object> body,String url){
|
||||||
|
String jsonStr = JSONUtil.toJsonStr(body);
|
||||||
|
String respStr = HttpUtil.post(url,jsonStr);
|
||||||
|
JSONObject resp = JSONUtil.parseObj(respStr);
|
||||||
|
if(!resp.get("code").toString().equals("200")){
|
||||||
|
throw new ServiceException(resp.get("message").toString());
|
||||||
|
}
|
||||||
|
return resp.getJSONObject("data");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public BigDecimal toBigDecimalValue(String str) {
|
||||||
|
if (str == null|| str.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return new BigDecimal(str);
|
||||||
|
}
|
||||||
|
public Long toLongValue(String str) {
|
||||||
|
if (str == null|| str.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return Long.parseLong(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
package com.fastbee.iot.zhanlian;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
public class ZhanLianConfig {
|
||||||
|
|
||||||
|
private String ak;
|
||||||
|
|
||||||
|
private String sk;
|
||||||
|
|
||||||
|
private String authId;
|
||||||
|
|
||||||
|
private String endpoint;
|
||||||
|
}
|
@ -129,7 +129,11 @@ public class ProjectServiceImpl implements IProjectService
|
|||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public int insertProject(Project project)
|
public int insertProject(Project project)
|
||||||
{
|
{
|
||||||
|
System.err.println("项目类型:"+project.getType());
|
||||||
//TODO 参数校验
|
//TODO 参数校验
|
||||||
|
if (Objects.isNull(project.getType())||!ProjectTypeConstant.isValidProjectType(project.getType())) {
|
||||||
|
throw new ServiceException("项目类型不能为空或者非法!");
|
||||||
|
}
|
||||||
//获取当前时间
|
//获取当前时间
|
||||||
Date nowDate = DateUtils.getNowDate();
|
Date nowDate = DateUtils.getNowDate();
|
||||||
//处理项目行政区划
|
//处理项目行政区划
|
||||||
@ -152,7 +156,6 @@ public class ProjectServiceImpl implements IProjectService
|
|||||||
newSysDept.setAdministrativeLevel(3);
|
newSysDept.setAdministrativeLevel(3);
|
||||||
//设置机构所属项目id
|
//设置机构所属项目id
|
||||||
|
|
||||||
|
|
||||||
//设置机构型行政区域信息
|
//设置机构型行政区域信息
|
||||||
newSysDept.setAdministrativeAreaCode(Objects.nonNull(project.getAdministrativeAreaCode())?project.getAdministrativeAreaCode():null);
|
newSysDept.setAdministrativeAreaCode(Objects.nonNull(project.getAdministrativeAreaCode())?project.getAdministrativeAreaCode():null);
|
||||||
newSysDept.setAdministrativeArea(Objects.nonNull(project.getAdministrativeArea())?project.getAdministrativeArea():null);
|
newSysDept.setAdministrativeArea(Objects.nonNull(project.getAdministrativeArea())?project.getAdministrativeArea():null);
|
||||||
@ -175,9 +178,7 @@ public class ProjectServiceImpl implements IProjectService
|
|||||||
.map(SysMenu::getMenuId)
|
.map(SysMenu::getMenuId)
|
||||||
.toArray(Long[]::new);
|
.toArray(Long[]::new);
|
||||||
//根据项目类型过滤菜单
|
//根据项目类型过滤菜单
|
||||||
if (!Objects.nonNull(project.getType())||ProjectTypeConstant.isValidProjectType(project.getType())) {
|
|
||||||
throw new ServiceException("项目类型不能为空或者非法!");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Objects.equals(project.getType(),ProjectTypeConstant.WATER)) {
|
if (Objects.equals(project.getType(),ProjectTypeConstant.WATER)) {
|
||||||
List<Long> menuList=Arrays.asList(menuIdList);
|
List<Long> menuList=Arrays.asList(menuIdList);
|
||||||
|
@ -3,6 +3,7 @@ package com.fastbee.system.service.impl;
|
|||||||
import cn.hutool.json.JSONArray;
|
import cn.hutool.json.JSONArray;
|
||||||
import cn.hutool.json.JSONException;
|
import cn.hutool.json.JSONException;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
|
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
|
||||||
import com.fastbee.common.annotation.DataScope;
|
import com.fastbee.common.annotation.DataScope;
|
||||||
import com.fastbee.common.constant.UserConstants;
|
import com.fastbee.common.constant.UserConstants;
|
||||||
import com.fastbee.common.core.domain.TreeSelect;
|
import com.fastbee.common.core.domain.TreeSelect;
|
||||||
@ -133,7 +134,7 @@ public class SysDeptServiceImpl implements ISysDeptService
|
|||||||
* @param roleId 角色ID
|
* @param roleId 角色ID
|
||||||
* @return 选中部门列表
|
* @return 选中部门列表
|
||||||
*/
|
*/
|
||||||
@Cacheable(value = "dept", key = "#root.methodName + '_' + #roleId", unless = "#result == null")
|
// @Cacheable(value = "dept", key = "#root.methodName + '_' + #roleId", unless = "#result == null")
|
||||||
@Override
|
@Override
|
||||||
public List<Long> selectDeptListByRoleId(Long roleId)
|
public List<Long> selectDeptListByRoleId(Long roleId)
|
||||||
{
|
{
|
||||||
@ -151,7 +152,13 @@ public class SysDeptServiceImpl implements ISysDeptService
|
|||||||
@Override
|
@Override
|
||||||
public SysDept selectDeptById(Long deptId)
|
public SysDept selectDeptById(Long deptId)
|
||||||
{
|
{
|
||||||
return deptMapper.selectDeptById(deptId);
|
// return deptMapper.selectDeptById(deptId);
|
||||||
|
SysDept sysDept = new LambdaQueryChainWrapper<>(deptMapper)
|
||||||
|
.select(SysDept::getDeptUserId)
|
||||||
|
.eq(SysDept::getDeptId, deptId)
|
||||||
|
.one();
|
||||||
|
System.err.println(sysDept);
|
||||||
|
return sysDept;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user