添加监控设备在线状态;设备详情接口添加projectId

This commit is contained in:
2025-01-14 13:46:45 +08:00
parent 27737c0cb9
commit 2b9a21c063
11 changed files with 240 additions and 67 deletions

View File

@ -7,6 +7,7 @@ import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.fastbee.common.holder.ProjectHolder;
import com.fastbee.deviceData.domain.NgYingshiCloudIntegrationInfo;
import com.fastbee.deviceData.mapper.NgYingshiCloudIntegrationInfoMapper;
@ -96,6 +97,40 @@ public class YingshiyunService {
}
String accessToken = getAuth(infoList.get(0).getAppkey(),infoList.get(0).getAppsecret());
System.err.println(accessToken);
/**
* 获取单个设备信息,包括设备在线状态和设备是否加密
*/
Map<String,Object> info=getInfo(accessToken,deviceSerial);
Long status= (Long) info.get("status"); //设备状态。0=离线1=在线
String statusDesc= info.get("statusDesc").toString();//设备状态描述
int isEncrypt= (int) info.get("isEncrypt");//设备是否加密1=加密
//在数据库中更新设备状态为当前状态
new LambdaUpdateChainWrapper<>(deviceInformationMonitorMapper)
.set(DeviceInformationMonitor::getStatus,status)
.eq(DeviceInformationMonitor::getDeviceEncoding,deviceSerial)
.update();
System.err.println("更新数据库状态为"+status);
if(status==0)
{
map.put("status",status);
map.put("statusDesc","离线");
return map;
}
if(isEncrypt==1)
{
//解密
int decryptFlag=decrypt(accessToken,deviceSerial);//设备解密,1=解密成功
if(decryptFlag!=1)
{
return map;
}
}
/**
* 获取设备播放地址
*/
String VIDEO_PLAY_URL = "https://open.ys7.com/api/lapp/v2/live/address/get";
String body = StrUtil.format("accessToken={}&deviceSerial={}&protocol={}",accessToken ,deviceSerial,"2");
@ -105,24 +140,6 @@ public class YingshiyunService {
JSONObject jsonObject = JSONUtil.parseObj(response.body());
System.err.println("jsonObject:"+jsonObject);
if(jsonObject.get("code").toString().equals("60019"))
{
//如果设备加密
//解密
String VIDEO_DECODE_URL = "https://open.ys7.com/api/lapp/device/encrypt/off";
String decodeBody=StrUtil.format("accessToken={}&deviceSerial={}",accessToken ,deviceSerial);
HttpResponse decodeResponse=HttpRequest.post(VIDEO_DECODE_URL).body(decodeBody).execute();
JSONObject decodeJsonObject=JSONUtil.parseObj(decodeResponse.body());
System.err.println("decodeJsonObject:"+decodeJsonObject);
if(!decodeJsonObject.get("code").toString().equals("200"))
{
return map;
}
response = HttpRequest.post(VIDEO_PLAY_URL)
.body(body).execute();
jsonObject = JSONUtil.parseObj(response.body());
System.err.println("解密后jsonObject:"+jsonObject);
}
if(!jsonObject.get("code").toString().equals("200")){
return map;
}
@ -134,12 +151,64 @@ public class YingshiyunService {
map.put("playUrl",playUrl);
map.put("accessToken",accessToken);
map.put("status",status);//设备在线状态-0=离线1=在线
map.put("statusDesc",statusDesc);//状态描述
System.err.println("playUrl:"+playUrl);
System.err.println("accessToken:"+accessToken);
System.err.println("status:"+status);
System.err.println("statusDesc:"+statusDesc);
return map;
}
/**
* 获取单个设备信息,包括在线状态和是否加密
* @param accessToken
* @param deviceSerial
* @return
*/
public Map<String,Object> getInfo(String accessToken,String deviceSerial)
{
Map<String,Object> map = new HashMap<>();//结果
String INFO_URL="https://open.ys7.com/api/lapp/device/info";//获取单个设备信息接口地址
String infoBody=StrUtil.format("accessToken={}&deviceSerial={}",accessToken,deviceSerial);
HttpResponse infoResponse=HttpRequest.post(INFO_URL)
.body(infoBody).execute();
if(!JSONUtil.parseObj(infoResponse.body()).get("code").toString().equals("200"))
{
return map;
}
JSONObject infoData=JSONUtil.parseObj(infoResponse.body()).getJSONObject("data");
Long status=infoData.getLong("status");//获取设备在线状态
String statusDesc= status==0 ? "离线" : "在线";//如果status是0则是离线否则是在线
int isEncrypt=infoData.getInt("isEncrypt");//设备是否加密0-不加密1-加密
map.put("status",status);
map.put("statusDesc",statusDesc);
map.put("isEncrypt",isEncrypt);
return map;
}
/**
* 设备解密
* @param accessToken
* @param deviceSerial
* @return
*/
public int decrypt(String accessToken,String deviceSerial)
{
//设备解密,1=成功
String VIDEO_DECODE_URL = "https://open.ys7.com/api/lapp/device/encrypt/off";
String decodeBody=StrUtil.format("accessToken={}&deviceSerial={}",accessToken ,deviceSerial);
HttpResponse decodeResponse=HttpRequest.post(VIDEO_DECODE_URL).body(decodeBody).execute();
JSONObject decodeJsonObject=JSONUtil.parseObj(decodeResponse.body());
System.err.println("decodeJsonObject:"+decodeJsonObject);
if(!decodeJsonObject.get("code").toString().equals("200"))
{
return 0;
}
return 1;
}

View File

@ -121,19 +121,55 @@ public class DeviceRealtimedataMeteorologyServiceImpl extends ServiceImpl<Device
if(Objects.isNull(meteorology)){
return rest;
}
devicePropertiesList.add(DeviceProperties.builder().name("空气温度").value(meteorology.getAirTemp()==null?"":meteorology.getAirTemp().toString()).unit("°C").build());
devicePropertiesList.add(DeviceProperties.builder().name("空气湿度").value(meteorology.getAirHumi()==null?"":meteorology.getAirHumi().toString()).unit("%").build());
devicePropertiesList.add(DeviceProperties.builder().name("风速").value(meteorology.getWindSpeed()==null?"":meteorology.getWindSpeed().toString()).unit("m/s").build());
devicePropertiesList.add(DeviceProperties.builder().name("风向").value(windDirMap(meteorology.getWindDir())).unit("").build());
devicePropertiesList.add(DeviceProperties.builder().name("大气压力").value(meteorology.getAirPre()==null?"":meteorology.getAirPre().toString()).unit("hPa").build());
devicePropertiesList.add(DeviceProperties.builder().name("光照度").value(meteorology.getGuangzhao()==null?"":meteorology.getGuangzhao().toString()).unit("lx").build());
devicePropertiesList.add(DeviceProperties.builder().name("光合有效辐射").value(meteorology.getFushe()==null?"":meteorology.getFushe().toString()).unit("Lux").build());
devicePropertiesList.add(DeviceProperties.builder().name("累积雨量").value(meteorology.getSumRain()==null?"":meteorology.getSumRain().toString()).unit("mm").build());
devicePropertiesList.add(DeviceProperties.builder().name("瞬时雨量").value(meteorology.getInsRain()==null?"":meteorology.getInsRain().toString()).unit("mm").build());
devicePropertiesList.add(DeviceProperties.builder().name("日雨量").value(meteorology.getDayRain()==null?"":meteorology.getDayRain().toString()).unit("mm").build());
devicePropertiesList.add(DeviceProperties.builder().name("蒸发量").value(meteorology.getZhengfa()==null?"":meteorology.getZhengfa().toString()).unit("t/h").build());
devicePropertiesList.add(DeviceProperties.builder().name("土壤温度").value(meteorology.getSoilTemp()==null?"":meteorology.getSoilTemp().toString()).unit("°C").build());
devicePropertiesList.add(DeviceProperties.builder().name("土壤湿度").value(meteorology.getSoilHumi()==null?"":meteorology.getSoilHumi().toString()).unit("%").build());
if(meteorology.getAirTemp()!=null)
{
devicePropertiesList.add(DeviceProperties.builder().name("空气温度").value(meteorology.getAirTemp().toString()).unit("°C").build());
}
if(meteorology.getAirHumi()!=null)
{
devicePropertiesList.add(DeviceProperties.builder().name("空气湿度").value(meteorology.getAirHumi().toString()).unit("%").build());
}
devicePropertiesList.add(DeviceProperties.builder().name("风速").value(meteorology.getWindSpeed().toString()).unit("m/s").build());
if(meteorology.getWindDir()!=null)
{
devicePropertiesList.add(DeviceProperties.builder().name("风向").value(windDirMap(meteorology.getWindDir())).unit("").build());
}
if(meteorology.getAirPre()!=null)
{
devicePropertiesList.add(DeviceProperties.builder().name("大气压力").value(meteorology.getAirPre().toString()).unit("hPa").build());
}
if(meteorology.getGuangzhao()!=null)
{
devicePropertiesList.add(DeviceProperties.builder().name("光照度").value(meteorology.getGuangzhao().toString()).unit("lx").build());
}
if(meteorology.getFushe()!=null)
{
devicePropertiesList.add(DeviceProperties.builder().name("光合有效辐射").value(meteorology.getFushe().toString()).unit("Lux").build());
}
if(meteorology.getSumRain()!=null)
{
devicePropertiesList.add(DeviceProperties.builder().name("累积雨量").value(meteorology.getSumRain().toString()).unit("mm").build());
}
if(meteorology.getInsRain()!=null)
{
devicePropertiesList.add(DeviceProperties.builder().name("瞬时雨量").value(meteorology.getInsRain().toString()).unit("mm").build());
}
if(meteorology.getDayRain()!=null)
{
devicePropertiesList.add(DeviceProperties.builder().name("日雨量").value(meteorology.getDayRain().toString()).unit("mm").build());
}
if(meteorology.getZhengfa()!=null)
{
devicePropertiesList.add(DeviceProperties.builder().name("蒸发量").value(meteorology.getZhengfa().toString()).unit("t/h").build());
}
if(meteorology.getSoilTemp()!=null)
{
devicePropertiesList.add(DeviceProperties.builder().name("土壤温度").value(meteorology.getSoilTemp().toString()).unit("°C").build());
}
if(meteorology.getSoilHumi()!=null)
{
devicePropertiesList.add(DeviceProperties.builder().name("土壤湿度").value(meteorology.getSoilHumi().toString()).unit("%").build());
}
Map<String,Object> info=new HashMap<>();
info.put("deviceEncoding", meteorology.getDeviceId());

View File

@ -96,6 +96,6 @@ private static final long serialVersionUID = 1L;
/** projectId */
@Excel(name = "projectId")
@ApiModelProperty("projectId")
private String projectId;
private Long projectId;
}

View File

@ -2,6 +2,7 @@ package com.fastbee.deviceInfo.domain;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
@ -132,5 +133,9 @@ public class DeviceInformationMonitor extends BaseEntity
@ApiModelProperty("projectId")
private Long projectId;
/**设备状态描述,离线/在线 */
@TableField(exist=false)
private String statusDesc;
}

View File

@ -1,13 +1,13 @@
package com.fastbee.deviceInfo.manager;
import com.fastbee.deviceData.domain.DeviceRealtimedataPhotovoltaic;
import com.fastbee.deviceData.domain.dto.DeviceProperties;
import com.fastbee.deviceInfo.domain.*;
import com.fastbee.deviceInfo.mapper.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
@Service
public class DeviceInformationManager {
@ -37,7 +37,7 @@ public class DeviceInformationManager {
public Map<String,Object> getAllDeviceCount(Long projectId) {
System.err.println("projectId:"+projectId);
DeviceInformationMeteorology informationMeteorology=new DeviceInformationMeteorology();
informationMeteorology.setProjectId(String.valueOf(projectId));
informationMeteorology.setProjectId(projectId);
DeviceInformationMiaoqing informationMiaoqing=new DeviceInformationMiaoqing();
informationMiaoqing.setProjectId(projectId);
DeviceInformationMoisture informationMoisture=new DeviceInformationMoisture();
@ -56,13 +56,41 @@ public class DeviceInformationManager {
List<DeviceInformationWorms> wormList = wormsMapper.selectDeviceInformationWormsList(informationWorms);
Map<String,Object> resp =new HashMap<>();
resp.put("meteorologieTotal",meteorologieList.size());
/*resp.put("meteorologieTotal",meteorologieList.size());
resp.put("miaoqingTotal",miaoqingList.size());
resp.put("moistureTotal",moistureList.size());
resp.put("monitorTotal",monitorList.size());
resp.put("targetpestTotal",targetpestList.size());
resp.put("wormTotal",wormList.size());
resp.put("photovoltaicTotal",miaoqingList.size());
resp.put("photovoltaicTotal",miaoqingList.size());*/
List<DeviceProperties> devicePropertiesList = new ArrayList<>();
if(meteorologieList.size()!=0)
{
devicePropertiesList.add(DeviceProperties.builder().name("meteorologieTotal").value(String.valueOf(meteorologieList.size())).unit("气象设备").build());
}
if(miaoqingList.size()!=0)
{
devicePropertiesList.add(DeviceProperties.builder().name("miaoqingTotal").value(String.valueOf(miaoqingList.size())).unit("苗情设备").build());
}
if(moistureList.size()!=0)
{
devicePropertiesList.add(DeviceProperties.builder().name("moistureTotal").value(String.valueOf(moistureList.size())).unit("墒情设备").build());
}
if(targetpestList.size()!=0)
{
devicePropertiesList.add(DeviceProperties.builder().name("targetpestTotal").value(String.valueOf(targetpestList.size())).unit("靶标害虫设备").build());
}
if(wormList.size()!=0)
{
devicePropertiesList.add(DeviceProperties.builder().name("wormTotal").value(String.valueOf(wormList.size())).unit("虫情设备").build());
devicePropertiesList.add(DeviceProperties.builder().name("photovoltaicTotal").value(String.valueOf(wormList.size())).unit("光伏设备").build());
}
if(monitorList.size()!=0)
{
devicePropertiesList.add(DeviceProperties.builder().name("monitorTotal").value(String.valueOf(monitorList.size())).unit("监控设备").build());
}
resp.put("props",devicePropertiesList);
return resp;
}

View File

@ -23,10 +23,11 @@
<result property="updateTime" column="update_time" />
<result property="updateBy" column="update_by" />
<result property="projectId" column="project_id" />
<result property="status" column="status" />
</resultMap>
<sql id="selectDeviceInformationMeteorologyVo">
select id, name, device_brand, device_type, device_encoding, type, longitude, latitude, installation_location, name_project, construction_year, docking_method, del_flag, create_time, create_by, update_time, update_by,project_id from iot_device_information_meteorology
select id, name, device_brand, device_type, device_encoding, type, longitude, latitude, installation_location, name_project, construction_year, docking_method, del_flag, create_time, create_by, update_time, update_by,project_id,status from iot_device_information_meteorology
</sql>
<select id="selectDeviceInformationMeteorologyList" parameterType="DeviceInformationMeteorology" resultMap="DeviceInformationMeteorologyResult">
@ -44,6 +45,7 @@
<if test="constructionYear != null "> and construction_year = #{constructionYear}</if>
<if test="dockingMethod != null and dockingMethod != ''"> and docking_method = #{dockingMethod}</if>
<if test="projectId != null and projectId != ''"> and project_id = #{projectId}</if>
<if test="status != null and status != ''"> and status = #{status}</if>
</where>
</select>
@ -72,6 +74,7 @@
<if test="updateTime != null">update_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="projectId != null">project_id,</if>
<if test="status != null">status,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="name != null">#{name},</if>
@ -91,6 +94,7 @@
<if test="updateTime != null">#{updateTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="projectId != null">#{projectId},</if>
<if test="status != null">#{status},</if>
</trim>
</insert>
@ -114,6 +118,7 @@
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="projectId != null">project_id = #{projectId},</if>
<if test="status != null">status = #{status},</if>
</trim>
where id = #{id}
</update>

View File

@ -28,10 +28,11 @@
<result property="updateBy" column="update_by" />
<result property="playUrl" column="play_url" />
<result property="projectId" column="project_id" />
<result property="status" column="status" />
</resultMap>
<sql id="selectDeviceInformationMonitorVo">
select id, name, device_encoding, type, longitude, latitude, installation_location, device_brand, device_type, name_project, construction_year, affiliation_township, management_leader, management_leader_telephone, management_unit, remarks_information, del_flag, create_time, create_by, update_time, update_by, play_url,project_id from iot_device_information_monitor
select id, name, device_encoding, type, longitude, latitude, installation_location, device_brand, device_type, name_project, construction_year, affiliation_township, management_leader, management_leader_telephone, management_unit, remarks_information, del_flag, create_time, create_by, update_time, update_by, play_url,project_id,status from iot_device_information_monitor
</sql>
<select id="selectDeviceInformationMonitorList" parameterType="DeviceInformationMonitor" resultMap="DeviceInformationMonitorResult">
@ -54,6 +55,7 @@
<if test="remarksInformation != null and remarksInformation != ''"> and remarks_information = #{remarksInformation}</if>
<if test="playUrl != null and playUrl != ''"> and play_url = #{playUrl}</if>
<if test="projectId != null and projectId != ''"> and project_id = #{projectId}</if>
<if test="status != null and status != ''"> and status = #{status}</if>
</where>
</select>
@ -87,6 +89,7 @@
<if test="updateBy != null">update_by,</if>
<if test="playUrl != null">play_url,</if>
<if test="projectId != null">project_id,</if>
<if test="status != null">status,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="name != null">#{name},</if>
@ -111,6 +114,7 @@
<if test="updateBy != null">#{updateBy},</if>
<if test="playUrl != null">#{playUrl},</if>
<if test="projectId != null">#{projectId},</if>
<if test="status != null">#{status},</if>
</trim>
</insert>
@ -139,6 +143,7 @@
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="playUrl != null">play_url = #{playUrl},</if>
<if test="projectId != null">project_id = #{projectId},</if>
<if test="status != null">status = #{status},</if>
</trim>
where id = #{id}
</update>