diff --git a/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/service/TuyaDeviceService.java b/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/service/TuyaDeviceService.java index 966604d..01f96de 100644 --- a/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/service/TuyaDeviceService.java +++ b/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/service/TuyaDeviceService.java @@ -1,5 +1,6 @@ package com.qiuguo.iot.third.service; +import cn.hutool.log.Log; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.qiuguo.iot.data.entity.user.UserHandlingDeviceEntity; @@ -14,6 +15,7 @@ import java.util.Map; import java.util.Objects; import java.util.function.Function; import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; @@ -27,6 +29,7 @@ import reactor.core.publisher.Mono; * @since 2023/9/19 15:13 */ @Service +@Slf4j public class TuyaDeviceService { @Autowired @@ -124,6 +127,12 @@ public class TuyaDeviceService { // // } // + public static void main(String[] args) { + int aa = 1000; + double a = 10 / (double) 1000; + System.out.println(a); + } + /** * 控制设备 */ @@ -144,6 +153,12 @@ public class TuyaDeviceService { tuyaResponse.setMessage("设备未开机"); return Mono.just(tuyaResponse); } + JSONArray deviceStatus = tuyaDeviceConnector.getDeviceStatus(query.getDeviceId()); + if (ObjectUtils.isEmpty(deviceStatus)) { + tuyaResponse.setMessage("设备信息异常"); + return Mono.just(tuyaResponse); + } + List javaList = deviceStatus.toJavaList(JSONObject.class); JSONObject commands = new JSONObject(); JSONObject jsonObject = new JSONObject(); String type = data.getType(); @@ -154,19 +169,37 @@ public class TuyaDeviceService { jsonObject.put("value", Integer.parseInt(query.getValue())); } else if (type.equalsIgnoreCase("Enum")) { jsonObject.put("value", data.getValue()); - } else { - jsonObject.put("value", data.getValue()); + } else if (type.equalsIgnoreCase("auto_add_integer")) { + JSONObject code = javaList.stream() + .filter(statu -> data.getCode().equalsIgnoreCase(statu.getString("code"))).findFirst() + .orElse(new JSONObject()); + double codeValue = code.getInteger("value"); + int max = data.getMax(); + double cut = max * 0.2; + double value = codeValue + cut; + int intValue = (int) value; + jsonObject.put("value", intValue >= max ? max - 1 : intValue); + } else if (type.equalsIgnoreCase("auto_reduce_integer")) { + JSONObject code = javaList.stream() + .filter(statu -> data.getCode().equalsIgnoreCase(statu.getString("code"))).findFirst() + .orElse(new JSONObject()); + double codeValue = code.getInteger("value"); + int min = data.getMin(); + double cut = data.getMax() * 0.2; + double value = codeValue - cut; + int intValue = (int) value; + jsonObject.put("value", intValue <= min ? min + 1 : intValue); } - commands.put("commands", Arrays.asList(jsonObject)); - JSONArray deviceStatus = tuyaDeviceConnector.getDeviceStatus(query.getDeviceId()); - if (!ObjectUtils.isEmpty(deviceStatus)) { - List javaList = deviceStatus.toJavaList(JSONObject.class); - if (javaList.contains(jsonObject)) { - tuyaResponse.setMessage("已在当前状态"); - tuyaResponse.setCode(200); - return Mono.just(tuyaResponse); - } + if (javaList.contains(jsonObject)) { + tuyaResponse.setMessage("已在当前状态"); + tuyaResponse.setCode(200); + return Mono.just(tuyaResponse); } + javaList.add(jsonObject); + List collect = javaList.stream().filter(jl -> !ObjectUtils.isEmpty(jl.get("value"))) + .filter(jl -> !jl.getString("value").startsWith("{")) + .filter(jl -> !jl.getString("value").startsWith("[")).collect(Collectors.toList()); + commands.put("commands", collect); Boolean result = tuyaDeviceConnector.controlDevice(query.getDeviceId(), commands); if (result) { tuyaResponse.setMessage("ok"); @@ -175,7 +208,8 @@ public class TuyaDeviceService { tuyaResponse.setMessage("请求失败"); } return Mono.just(tuyaResponse); - }).onErrorResume(ex->{ + }).onErrorResume(ex -> { + log.error("TuyaDeviceService is error:{}",ex); tuyaResponse.setMessage("设备不支持此操作"); return Mono.just(tuyaResponse); });