diff --git a/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/constant/test.java b/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/constant/test.java new file mode 100644 index 0000000..4ec8e50 --- /dev/null +++ b/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/constant/test.java @@ -0,0 +1,80 @@ +package com.fastbee.deviceData.api.renke.constant; + +import com.alibaba.fastjson.JSONObject; +import com.fastbee.common.annotation.Log; +import com.fastbee.common.config.RuoYiConfig; +import com.fastbee.common.core.controller.BaseController; +import com.fastbee.common.core.domain.AjaxResult; +import com.fastbee.common.core.page.TableDataInfo; +import com.fastbee.common.enums.BusinessType; +import com.fastbee.common.exception.ServiceException; +import com.fastbee.common.model.bto.DoorAlertBto; +import com.fastbee.common.utils.RotateImageUtils; +import com.fastbee.common.utils.file.FileUploadUtils; +import com.fastbee.common.utils.poi.ExcelUtil; +import com.fastbee.deviceData.api.renke.domin.*; +import com.fastbee.deviceData.api.renke.service.RenkeMetDeviceService; +import com.fastbee.deviceData.api.renke.service.RenkeWormSituationDeviceService; +import io.swagger.annotations.Api; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.imageio.ImageIO; +import javax.servlet.http.HttpServletResponse; +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.Date; +import java.util.List; + +import static com.fastbee.common.utils.StringUtils.isEmpty; + +/** + * 设备告警上传Controller + * + * @author Dunxi Zang + * @date 2024-06-19 + */ +@RestController +@RequestMapping("/iot/photos") +@Api(tags = "安防小板") +public class test extends BaseController { + @Autowired + private RenkeWormSituationDeviceService renkeWormSituationDeviceService; + @Autowired + private RenkeMetDeviceService renkeMetDeviceService; + + /** + * 查询设备告警上传列表 + */ + + @GetMapping("/test") + public Object list() { + RenkeWormSituationDeviceService service = new RenkeWormSituationDeviceService(); + String deviceAddr= "1017240042"; + String groupId = "1"; + String recordIds = "1"; + String token = "199491731313034631"; + String beginTime = "2024-10-30 10:00:00", + endTime = "2024-11-12 10:00:00"; + Integer pages = 1; + Integer limit = 1; + String nodeId = "1"; + String enable = "1"; + return renkeMetDeviceService.getWormDataList(deviceAddr,nodeId,beginTime,endTime,pages,limit,token); + } + @PostMapping("/testJosn") + public Object testJosn(@RequestBody UpdateNodeInfo json) { + + + String token = "91191731304831841"; + return renkeMetDeviceService.updateNodeInfo(json,token); + } + +} diff --git a/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/domin/GetWormHistoryData.java b/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/domin/GetWormHistoryData.java new file mode 100644 index 0000000..e6dea36 --- /dev/null +++ b/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/domin/GetWormHistoryData.java @@ -0,0 +1,6 @@ +package com.fastbee.deviceData.api.renke.domin; + +public class GetWormHistoryData { + public String deviceAddr; + +} diff --git a/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/domin/ModWormAutoMode.java b/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/domin/ModWormAutoMode.java new file mode 100644 index 0000000..ebdc423 --- /dev/null +++ b/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/domin/ModWormAutoMode.java @@ -0,0 +1,17 @@ +package com.fastbee.deviceData.api.renke.domin; + +import lombok.Data; + +@Data +public class ModWormAutoMode { + public String deviceAddr; + public String beginTime; + public String endtime; + public String beginTime2; + public String endtime2; + public Integer runHour; + public Integer dryingHum; + public Integer dryingHumHystersis; + public Integer delayAfterRain; + public Integer openingTimeOfTrapLamp; +} diff --git a/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/domin/UpdateDevice.java b/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/domin/UpdateDevice.java new file mode 100644 index 0000000..f6bbede --- /dev/null +++ b/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/domin/UpdateDevice.java @@ -0,0 +1,13 @@ +package com.fastbee.deviceData.api.renke.domin; + +import lombok.Data; + +@Data +public class UpdateDevice { + public String deviceAddr; + public String deviceName; + public Double lng; + public Double lat; + public String saveDateInterval; + public String offlineInterval; +} diff --git a/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/domin/UpdateNodeInfo.java b/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/domin/UpdateNodeInfo.java new file mode 100644 index 0000000..6cde790 --- /dev/null +++ b/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/domin/UpdateNodeInfo.java @@ -0,0 +1,30 @@ +package com.fastbee.deviceData.api.renke.domin; + +import lombok.Data; + +@Data +public class UpdateNodeInfo { + private String deviceAddr; + private Integer nodeId; + private Integer nodeType; + private Integer nodeMold; + private Integer digits; + private Integer enable; + private Number humLowerLimit; + private String humName; + private Number humOffset; + private Number humRatio; + private String humUnit; + private Number humUpperLimit; + private String nodeName; + private Integer priority; + private Integer switchAlarmType; + private String switchOffContent; + private String switchOnContent; + private Number temLowerLimit; + private String temName; + private Number temOffset; + private Number temRatio; + private String temUnit; + private Number temUpperLimit; +} diff --git a/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/domin/WormMode.java b/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/domin/WormMode.java new file mode 100644 index 0000000..fb0251e --- /dev/null +++ b/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/domin/WormMode.java @@ -0,0 +1,9 @@ +package com.fastbee.deviceData.api.renke.domin; + +import lombok.Data; + +@Data +public class WormMode { + public String deviceAddr; + public String mode; +} diff --git a/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/domin/WormOper.java b/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/domin/WormOper.java new file mode 100644 index 0000000..9bd9874 --- /dev/null +++ b/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/domin/WormOper.java @@ -0,0 +1,10 @@ +package com.fastbee.deviceData.api.renke.domin; + +import lombok.Data; + +@Data +public class WormOper { + public String deviceAddr; + public String module; + public String opt; +} diff --git a/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/service/RenkeDeviceDataService.java b/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/service/RenkeDeviceDataService.java index e7bfe75..9552613 100644 --- a/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/service/RenkeDeviceDataService.java +++ b/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/service/RenkeDeviceDataService.java @@ -42,31 +42,6 @@ public class RenkeDeviceDataService { System.err.println("设备实时数据:"+realtimeDataList); } - - - - - - - - - - - - - - - - - - - - - - - - - //获取token private String getAuth(){ //判断token是否过期 diff --git a/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/service/RenkeMetDeviceService.java b/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/service/RenkeMetDeviceService.java index 5242ee9..9b8bab6 100644 --- a/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/service/RenkeMetDeviceService.java +++ b/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/service/RenkeMetDeviceService.java @@ -1,10 +1,258 @@ package com.fastbee.deviceData.api.renke.service; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.fastbee.deviceData.api.renke.domin.UpdateDevice; +import com.fastbee.deviceData.api.renke.domin.UpdateNodeInfo; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import java.lang.reflect.Field; +import java.net.URLEncoder; +import java.util.HashMap; +import java.util.Map; + /** * 建大仁科气象设备服务 */ @Service public class RenkeMetDeviceService { + + /** + * 获取气象设备全部信息 + * @param deviceStr + * @param token + * @return + */ + public JSONObject getDeviceAllInfo(String deviceStr,String token){ + + HttpResponse response = HttpRequest.get("http://api.farm.0531yun.cn/api/v2.0/met/device/getDeviceAllInfo?deviceStr="+deviceStr) + .header("token", token) + .execute(); + String respBodyStr = response.body(); + if(StringUtils.isBlank(respBodyStr)) { + throw new RuntimeException("获取设备实时数据失败!"); + } + JSONObject jsonObject = JSONUtil.parseObj(respBodyStr); + return jsonObject; + } + /** + * 根据气象设备地址获取节点信息 + * @param deviceAddr + * @param token + * @return + */ + public JSONObject getAllInsectEquipmentInformation(String deviceAddr,String token){ + + //获取设备实时数据 + //请求参数 + HttpResponse response = HttpRequest.get("http://api.farm.0531yun.cn/api/v2.0/met/device/listTargetNodeInfo?deviceAddr="+deviceAddr) + .header("token", token) + .execute(); + String respBodyStr = response.body(); + if(StringUtils.isBlank(respBodyStr)) { + throw new RuntimeException("获取设备实时数据失败!"); + } + JSONObject jsonObject = JSONUtil.parseObj(respBodyStr); + return jsonObject; + } + /** + * 根据气象设备地址获取已启用的节点信息 + * @param deviceAddr + * @param token + * @return + */ + public JSONObject listTargetEnabledNode(String deviceAddr,String token){ + + //获取设备实时数据 + //请求参数 + HttpResponse response = HttpRequest.get("http://api.farm.0531yun.cn/api/v2.0/met/device/listTargetEnabledNode?deviceAddr="+deviceAddr) + .header("token", token) + .execute(); + String respBodyStr = response.body(); + if(StringUtils.isBlank(respBodyStr)) { + throw new RuntimeException("获取设备实时数据失败!"); + } + JSONObject jsonObject = JSONUtil.parseObj(respBodyStr); + return jsonObject; + } + /** + * 根据气象节点编号获取遥调信息 + * @param deviceAddr + * @param token + * @return + */ + public JSONObject listTargetEnabledNode(String deviceAddr,String nodeId,String token){ + // 请求基础URL + String baseUrl = "http://api.farm.0531yun.cn/api/v2.0/met/device/listTargetEnabledNode"; + + StringBuilder queryParams = new StringBuilder(); + if (deviceAddr != null && !deviceAddr.isEmpty()) { + queryParams.append("deviceAddr=").append(URLEncoder.encode(deviceAddr)); + } + if (nodeId != null && !nodeId.isEmpty()) { + if (queryParams.length() > 0) queryParams.append("&"); + queryParams.append("nodeId=").append(URLEncoder.encode(nodeId)); + } + String fullUrl = baseUrl + "?" + queryParams.toString(); + HttpResponse response = HttpRequest.get(fullUrl) + .header("token", token) + .execute(); + String respBodyStr = response.body(); + if(StringUtils.isBlank(respBodyStr)) { + throw new RuntimeException("获取虫情设备历史记录失败!"); + } + JSONObject jsonObject = JSONUtil.parseObj(respBodyStr); + return jsonObject; + } + /** + * 修改指定气象设备全部节点的可用状态 + * @param deviceAddr + * @param token + * @return + */ + public JSONObject updateAllOfNodesEnable(String deviceAddr,String enable,String token){ + // 请求基础URL + String baseUrl = "http://api.farm.0531yun.cn/api/v2.0/met/device/updateAllOfNodesEnable"; + + StringBuilder queryParams = new StringBuilder(); + if (deviceAddr != null && !deviceAddr.isEmpty()) { + queryParams.append("deviceAddr=").append(URLEncoder.encode(deviceAddr)); + } + if (enable != null && !enable.isEmpty()) { + if (queryParams.length() > 0) queryParams.append("&"); + queryParams.append("enable=").append(URLEncoder.encode(enable)); + } + String fullUrl = baseUrl + "?" + queryParams.toString(); + HttpResponse response = HttpRequest.get(fullUrl) + .header("token", token) + .execute(); + String respBodyStr = response.body(); + if(StringUtils.isBlank(respBodyStr)) { + throw new RuntimeException("获取虫情设备历史记录失败!"); + } + JSONObject jsonObject = JSONUtil.parseObj(respBodyStr); + return jsonObject; + } + + /** + * 修改气象设备信息 + * @param updateDevice + * @param token + * @return + */ + public JSONObject updateDevice(UpdateDevice updateDevice, String token){ + //获取设备实时数据 + //请求参数 + Map reqBody =getObjectProperties(updateDevice); + HttpResponse response = HttpRequest.post("http://api.farm.0531yun.cn/api/v2.0/met/device/updateDevice") + .header("token", token).body(JSONUtil.toJsonStr(reqBody)) + .execute(); + String respBodyStr = response.body(); + if(StringUtils.isBlank(respBodyStr)) { + throw new RuntimeException("修改气象设备信息失败!"); + } + JSONObject jsonObject = JSONUtil.parseObj(respBodyStr); + return jsonObject; + } + + /** + * 更新气象节点信息 + * @param updateNodeInfo + * @param token + * @return + */ + public JSONObject updateNodeInfo(UpdateNodeInfo updateNodeInfo, String token){ + //获取设备实时数据 + //请求参数 + Map reqBody =getObjectProperties(updateNodeInfo); + HttpResponse response = HttpRequest.post("http://api.farm.0531yun.cn/api/v2.0/met/device/updateNodeInfo") + .header("token", token).body(JSONUtil.toJsonStr(reqBody)) + .execute(); + String respBodyStr = response.body(); + if(StringUtils.isBlank(respBodyStr)) { + throw new RuntimeException("修改气象设备信息失败!"); + } + JSONObject jsonObject = JSONUtil.parseObj(respBodyStr); + return jsonObject; + } + /** + * 根据条件获取历史数据 + * @param token + * @return + */ + public JSONObject getWormDataList(String deviceAddr,String nodeId,String beginTime,String endTime,Integer pages,Integer limit,String token){ + // 请求基础URL + String baseUrl = "http://api.farm.0531yun.cn/api/v2.0/met/history/getHistoryDataList"; + + StringBuilder queryParams = new StringBuilder(); + if (deviceAddr != null && !deviceAddr.isEmpty()) { + queryParams.append("deviceAddr=").append(URLEncoder.encode(deviceAddr)); + } + if (beginTime != null && !beginTime.isEmpty()) { + if (queryParams.length() > 0) queryParams.append("&"); + queryParams.append("beginTime=").append(URLEncoder.encode(beginTime)); + } + if (endTime != null && !endTime.isEmpty()) { + if (queryParams.length() > 0) queryParams.append("&"); + queryParams.append("endTime=").append(URLEncoder.encode(endTime)); + } + if (pages != null) { + if (queryParams.length() > 0) queryParams.append("&"); + queryParams.append("pages=").append(pages); + } + if (limit != null) { + if (queryParams.length() > 0) queryParams.append("&"); + queryParams.append("limit=").append(limit); + } + String fullUrl = baseUrl + "?" + queryParams.toString(); + HttpResponse response = HttpRequest.get(fullUrl) + .header("token", token) + .execute(); + String respBodyStr = response.body(); + if(StringUtils.isBlank(respBodyStr)) { + throw new RuntimeException("获取虫情设备历史记录失败!"); + } + JSONObject jsonObject = JSONUtil.parseObj(respBodyStr); + return jsonObject; + } + /** + * 通过反射获取对象的所有属性和值,并存储到Map中 + * + * @param obj 目标对象 + * @return 包含属性和值的Map + */ + public static Map getObjectProperties(Object obj) { + Map propertiesMap = new HashMap<>(); + + // 获取对象的类类型 + Class clazz = obj.getClass(); + + // 获取类的所有字段(包括私有字段) + Field[] fields = clazz.getDeclaredFields(); + + // 遍历字段 + for (Field field : fields) { + // 设置字段为可访问(即使它是私有的) + field.setAccessible(true); + + try { + // 获取字段的名称 + String fieldName = field.getName(); + + // 获取字段的值(从目标对象中) + Object fieldValue = field.get(obj); + + // 将字段名称和值存入Map中 + propertiesMap.put(fieldName, fieldValue); + + } catch (IllegalAccessException e) { + // 理论上不应该发生,因为我们已经设置了setAccessible(true) + e.printStackTrace(); + } + } + return propertiesMap; + } } diff --git a/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/service/RenkeWormSituationDeviceService.java b/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/service/RenkeWormSituationDeviceService.java index 585b9db..681a236 100644 --- a/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/service/RenkeWormSituationDeviceService.java +++ b/fastbee-service/fastbee-device-service/src/main/java/com/fastbee/deviceData/api/renke/service/RenkeWormSituationDeviceService.java @@ -1,5 +1,19 @@ package com.fastbee.deviceData.api.renke.service; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import java.lang.reflect.Field; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; +import com.fastbee.deviceData.api.renke.domin.ModWormAutoMode; +import com.fastbee.deviceData.api.renke.domin.UpdateDevice; +import com.fastbee.deviceData.api.renke.domin.WormMode; +import com.fastbee.deviceData.api.renke.domin.WormOper; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; /** @@ -8,5 +22,376 @@ import org.springframework.stereotype.Service; @Service public class RenkeWormSituationDeviceService { + /** + * 批量获取设备详情 + * @param deviceAddr + * @param token + * @return + */ + public JSONObject getAllInsectEquipmentInformation(String deviceAddr,String token){ + + //获取设备实时数据 + //请求参数 + HttpResponse response = HttpRequest.get("http://api.farm.0531yun.cn/api/v2.0/worm/device/getBtchDeviceDO?deviceAddr="+deviceAddr) + .header("token", token) + .execute(); + String respBodyStr = response.body(); + if(StringUtils.isBlank(respBodyStr)) { + throw new RuntimeException("获取设备实时数据失败!"); + } + JSONObject jsonObject = JSONUtil.parseObj(respBodyStr); + return jsonObject; + } + /** + * 修改虫情设备信息 + * @param updateDevice + * @param token + * @return + */ + public JSONObject updateDevice(UpdateDevice updateDevice, String token){ + //获取设备实时数据 + //请求参数 + Map reqBody =getObjectProperties(updateDevice); + HttpResponse response = HttpRequest.post("http://api.farm.0531yun.cn/api/v2.0/worm/device/updateDevice") + .header("token", token).body(JSONUtil.toJsonStr(reqBody)) + .execute(); + String respBodyStr = response.body(); + if(StringUtils.isBlank(respBodyStr)) { + throw new RuntimeException("修改设备自动模式时间失败!"); + } + JSONObject jsonObject = JSONUtil.parseObj(respBodyStr); + return jsonObject; + } + + /** + * 获取设备自动模式时间 + * @param deviceAddr + * @param token + * @return + */ + public JSONObject getWormAutoMode(String deviceAddr,String token){ + HttpResponse response = HttpRequest.get("http://api.farm.0531yun.cn/api/v2.0/worm/device/getWormAutoMode?deviceAddr="+deviceAddr) + .header("token", token) + .execute(); + String respBodyStr = response.body(); + if(StringUtils.isBlank(respBodyStr)) { + throw new RuntimeException("获取设备实时数据失败!"); + } + JSONObject jsonObject = JSONUtil.parseObj(respBodyStr); + return jsonObject; + } + + /** + * 修改设备自动模式时间 + * @param modWormAutoMode + * @param token + * @return + */ + public JSONObject updateWormAutoMode(ModWormAutoMode modWormAutoMode,String token){ + //获取设备实时数据 + //请求参数 + Map reqBody =getObjectProperties(modWormAutoMode); + HttpResponse response = HttpRequest.post("http://api.farm.0531yun.cn/api/v2.0/worm/device/modWormAutoMode") + .header("token", token).body(JSONUtil.toJsonStr(reqBody)) + .execute(); + String respBodyStr = response.body(); + if(StringUtils.isBlank(respBodyStr)) { + throw new RuntimeException("修改设备自动模式时间失败!"); + } + JSONObject jsonObject = JSONUtil.parseObj(respBodyStr); + return jsonObject; + } + /** + * 手自动模式切换 + * @param wormMode + * @param token + * @return + */ + public JSONObject updateWormMode(WormMode wormMode, String token){ + //获取设备实时数据 + //请求参数 + Map reqBody =getObjectProperties(wormMode); + HttpResponse response = HttpRequest.post("http://api.farm.0531yun.cn/api/v2.0/worm/device/modWormAutoMode") + .header("token", token).body(JSONUtil.toJsonStr(reqBody)) + .execute(); + String respBodyStr = response.body(); + if(StringUtils.isBlank(respBodyStr)) { + throw new RuntimeException("虫情设备下发命令失败!"); + } + JSONObject jsonObject = JSONUtil.parseObj(respBodyStr); + return jsonObject; + } + /** + * 虫情设备下发命令 + * @param wormOper + * @param token + * @return + */ + public JSONObject updateWormOper(WormOper wormOper, String token){ + //获取设备实时数据 + //请求参数 + Map reqBody =getObjectProperties(wormOper); + HttpResponse response = HttpRequest.post("http://api.farm.0531yun.cn/api/v2.0/worm/device/deviceOper/wormOper") + .header("token", token).body(JSONUtil.toJsonStr(reqBody)) + .execute(); + String respBodyStr = response.body(); + if(StringUtils.isBlank(respBodyStr)) { + throw new RuntimeException("获取设备实时数据失败!"); + } + JSONObject jsonObject = JSONUtil.parseObj(respBodyStr); + return jsonObject; + } + /** + * 虫情设备历史记录 + * @param token + * @return + */ + public JSONObject getWormHistoryData(String deviceAddr,String beginTime,String endTime,Integer pages,Integer limit,String token){ + // 请求基础URL + String baseUrl = "http://api.farm.0531yun.cn/api/v2.0/worm/deviceData/getWormHistoryData"; + + StringBuilder queryParams = new StringBuilder(); + if (deviceAddr != null && !deviceAddr.isEmpty()) { + queryParams.append("deviceAddr=").append(URLEncoder.encode(deviceAddr)); + } + if (beginTime != null && !beginTime.isEmpty()) { + if (queryParams.length() > 0) queryParams.append("&"); + queryParams.append("beginTime=").append(URLEncoder.encode(beginTime)); + } + if (endTime != null && !endTime.isEmpty()) { + if (queryParams.length() > 0) queryParams.append("&"); + queryParams.append("endTime=").append(URLEncoder.encode(endTime)); + } + if (pages != null) { + if (queryParams.length() > 0) queryParams.append("&"); + queryParams.append("pages=").append(pages); + } + if (limit != null) { + if (queryParams.length() > 0) queryParams.append("&"); + queryParams.append("limit=").append(limit); + } + String fullUrl = baseUrl + "?" + queryParams.toString(); + HttpResponse response = HttpRequest.get(fullUrl) + .header("token", token) + .execute(); + String respBodyStr = response.body(); + if(StringUtils.isBlank(respBodyStr)) { + throw new RuntimeException("获取虫情设备历史记录失败!"); + } + JSONObject jsonObject = JSONUtil.parseObj(respBodyStr); + return jsonObject; + } + /** + * 虫情区域统计 + * @param token + * @return + */ + public JSONObject getWormStatisticsByGroup(String groupId,String beginTime,String endTime,String token){ + // 请求基础URL + String baseUrl = "http://api.farm.0531yun.cn/api/v2.0/worm/deviceData/getWormStatisticsByGroup"; + + StringBuilder queryParams = new StringBuilder(); + if (groupId != null && !groupId.isEmpty()) { + queryParams.append("deviceAddr=").append(URLEncoder.encode(groupId)); + } + if (beginTime != null && !beginTime.isEmpty()) { + if (queryParams.length() > 0) queryParams.append("&"); + queryParams.append("beginTime=").append(URLEncoder.encode(beginTime)); + } + if (endTime != null && !endTime.isEmpty()) { + if (queryParams.length() > 0) queryParams.append("&"); + queryParams.append("endTime=").append(URLEncoder.encode(endTime)); + } + + String fullUrl = baseUrl + "?" + queryParams.toString(); + HttpResponse response = HttpRequest.get(fullUrl) + .header("token", token) + .execute(); + String respBodyStr = response.body(); + if(StringUtils.isBlank(respBodyStr)) { + throw new RuntimeException("获取虫情区域统计失败!"); + } + JSONObject jsonObject = JSONUtil.parseObj(respBodyStr); + return jsonObject; + } + /** + * 虫情设备分析报表 + * @param token + * @return + */ + public JSONObject getWormDataList(String deviceAddr,String beginTime,String endTime,Integer pages,Integer limit,String token){ + // 请求基础URL + String baseUrl = "http://api.farm.0531yun.cn/api/v2.0/worm/deviceData/getWormDataList"; + + StringBuilder queryParams = new StringBuilder(); + if (deviceAddr != null && !deviceAddr.isEmpty()) { + queryParams.append("deviceAddr=").append(URLEncoder.encode(deviceAddr)); + } + if (beginTime != null && !beginTime.isEmpty()) { + if (queryParams.length() > 0) queryParams.append("&"); + queryParams.append("beginTime=").append(URLEncoder.encode(beginTime)); + } + if (endTime != null && !endTime.isEmpty()) { + if (queryParams.length() > 0) queryParams.append("&"); + queryParams.append("endTime=").append(URLEncoder.encode(endTime)); + } + if (pages != null) { + if (queryParams.length() > 0) queryParams.append("&"); + queryParams.append("pages=").append(pages); + } + if (limit != null) { + if (queryParams.length() > 0) queryParams.append("&"); + queryParams.append("limit=").append(limit); + } + String fullUrl = baseUrl + "?" + queryParams.toString(); + HttpResponse response = HttpRequest.get(fullUrl) + .header("token", token) + .execute(); + String respBodyStr = response.body(); + if(StringUtils.isBlank(respBodyStr)) { + throw new RuntimeException("获取虫情设备历史记录失败!"); + } + JSONObject jsonObject = JSONUtil.parseObj(respBodyStr); + return jsonObject; + } + + /** + * 虫情设备分析报表记录(最新一条记录) + * @param deviceAddr + * @param token + * @return + */ + public JSONObject getWormDataAndWormDataAIBy(String deviceAddr,String token){ + + //获取设备实时数据 + //请求参数 + HttpResponse response = HttpRequest.get("http://api.farm.0531yun.cn/api/v2.0/worm/deviceData/getWormDataAndWormDataAIBy?deviceAddr="+deviceAddr) + .header("token", token) + .execute(); + String respBodyStr = response.body(); + if(StringUtils.isBlank(respBodyStr)) { + throw new RuntimeException("获取虫情设备分析报表记录(最新一条记录)失败!"); + } + JSONObject jsonObject = JSONUtil.parseObj(respBodyStr); + return jsonObject; + } + /** + * 害虫自动识别 + * @param recordId + * @param token + * @return + */ + public JSONObject analysistWorm(String recordId,String token){ + + //获取设备实时数据 + //请求参数 + HttpResponse response = HttpRequest.get("http://api.farm.0531yun.cn/api/v2.0/worm/deviceData/analysistWorm?recordId="+recordId) + .header("token", token) + .execute(); + String respBodyStr = response.body(); + if(StringUtils.isBlank(respBodyStr)) { + throw new RuntimeException("获取虫情设备分析报表记录(最新一条记录)失败!"); + } + JSONObject jsonObject = JSONUtil.parseObj(respBodyStr); + return jsonObject; + } + /** + * 根据ID获取虫情设备分析报表记录 + * @param token + * @return + */ + public JSONObject getDeviceAnalysisReportRecordAccordingIdList(String deviceAddr,String recordIds,String token){ + // 请求基础URL + String baseUrl = "http://api.farm.0531yun.cn/api/v2.0/worm/deviceData/getDeviceAnalysisReportRecordAccordingIdList"; + + StringBuilder queryParams = new StringBuilder(); + if (deviceAddr != null && !deviceAddr.isEmpty()) { + queryParams.append("deviceAddr=").append(URLEncoder.encode(deviceAddr)); + } + + if (recordIds != null) { + if (queryParams.length() > 0) queryParams.append("&"); + queryParams.append("recordIds=").append(recordIds); + } + String fullUrl = baseUrl + "?" + queryParams.toString(); + HttpResponse response = HttpRequest.get(fullUrl) + .header("token", token) + .execute(); + String respBodyStr = response.body(); + if(StringUtils.isBlank(respBodyStr)) { + throw new RuntimeException("获取虫情设备历史记录失败!"); + } + JSONObject jsonObject = JSONUtil.parseObj(respBodyStr); + return jsonObject; + } + /** + * 虫情设备操作记录 + * @param token + * @return + */ + public JSONObject getWormOperationLog(String deviceAddr,String beginTime,String endTime,String token){ + // 请求基础URL + String baseUrl = "http://api.farm.0531yun.cn/api/v2.0/worm/deviceData/getWormOperationLog"; + + StringBuilder queryParams = new StringBuilder(); + if (deviceAddr != null && !deviceAddr.isEmpty()) { + queryParams.append("deviceAddr=").append(URLEncoder.encode(deviceAddr)); + } + if (beginTime != null && !beginTime.isEmpty()) { + if (queryParams.length() > 0) queryParams.append("&"); + queryParams.append("beginTime=").append(URLEncoder.encode(beginTime)); + } + if (endTime != null && !endTime.isEmpty()) { + if (queryParams.length() > 0) queryParams.append("&"); + queryParams.append("endTime=").append(URLEncoder.encode(endTime)); + } + String fullUrl = baseUrl + "?" + queryParams.toString(); + HttpResponse response = HttpRequest.get(fullUrl) + .header("token", token) + .execute(); + String respBodyStr = response.body(); + if(StringUtils.isBlank(respBodyStr)) { + throw new RuntimeException("获取虫情设备历史记录失败!"); + } + JSONObject jsonObject = JSONUtil.parseObj(respBodyStr); + return jsonObject; + } + /** + * 通过反射获取对象的所有属性和值,并存储到Map中 + * + * @param obj 目标对象 + * @return 包含属性和值的Map + */ + public static Map getObjectProperties(Object obj) { + Map propertiesMap = new HashMap<>(); + + // 获取对象的类类型 + Class clazz = obj.getClass(); + + // 获取类的所有字段(包括私有字段) + Field[] fields = clazz.getDeclaredFields(); + + // 遍历字段 + for (Field field : fields) { + // 设置字段为可访问(即使它是私有的) + field.setAccessible(true); + + try { + // 获取字段的名称 + String fieldName = field.getName(); + + // 获取字段的值(从目标对象中) + Object fieldValue = field.get(obj); + + // 将字段名称和值存入Map中 + propertiesMap.put(fieldName, fieldValue); + + } catch (IllegalAccessException e) { + // 理论上不应该发生,因为我们已经设置了setAccessible(true) + e.printStackTrace(); + } + } + return propertiesMap; + } } diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/timer/DeviceDateTask.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/timer/DeviceDateTask.java index 376d136..8986240 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/timer/DeviceDateTask.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/timer/DeviceDateTask.java @@ -110,7 +110,5 @@ public class DeviceDateTask { System.err.println("请求获取到token:"+tokenObject.get("token").toString()); return stringRedisTemplate.opsForValue().get("rkckth:user:token").toString(); } - - }