From faab39dd15640f43849110cc18de025d96decafe Mon Sep 17 00:00:00 2001 From: baishou <2710684311@qq.com> Date: Wed, 12 Jun 2019 17:04:46 +0800 Subject: [PATCH] 物联网接口服务接口代码优化 --- springboot/src/main/java/com/sincre/springboot/ApiModel/TuYaCommand.java | 43 +++++++++++++++++++++++++++++++++++++++++++ springboot/src/main/java/com/sincre/springboot/ApiModel/TuYaDevicesList.java | 3 ++- springboot/src/main/java/com/sincre/springboot/ApiPlatform/YinShiServiceConfig.java | 2 +- springboot/src/main/java/com/sincre/springboot/common/ServerResponse.java | 1 + springboot/src/main/java/com/sincre/springboot/controller/TuYaYunController.java | 182 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------- springboot/src/main/java/com/sincre/springboot/controller/YinShiController.java | 3 ++- springboot/src/main/java/com/sincre/springboot/utils/ApiHelper.java | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ springboot/src/main/java/com/sincre/springboot/utils/ResultUtils.java | 17 +++++++++++++---- 8 files changed, 283 insertions(+), 21 deletions(-) create mode 100644 springboot/src/main/java/com/sincre/springboot/ApiModel/TuYaCommand.java diff --git a/springboot/src/main/java/com/sincre/springboot/ApiModel/TuYaCommand.java b/springboot/src/main/java/com/sincre/springboot/ApiModel/TuYaCommand.java new file mode 100644 index 0000000..cc95773 --- /dev/null +++ b/springboot/src/main/java/com/sincre/springboot/ApiModel/TuYaCommand.java @@ -0,0 +1,43 @@ +package com.sincre.springboot.ApiModel; + +import java.util.List; + +/** + * 命令集 + */ +public class TuYaCommand { + + public List getCommands() { + return commands; + } + + public void setCommands(List commands) { + this.commands = commands; + } + + private List commands; + +} +class Command{ + private String code; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + private String value; + +} + diff --git a/springboot/src/main/java/com/sincre/springboot/ApiModel/TuYaDevicesList.java b/springboot/src/main/java/com/sincre/springboot/ApiModel/TuYaDevicesList.java index 1e90735..6eb7c98 100644 --- a/springboot/src/main/java/com/sincre/springboot/ApiModel/TuYaDevicesList.java +++ b/springboot/src/main/java/com/sincre/springboot/ApiModel/TuYaDevicesList.java @@ -1,6 +1,7 @@ package com.sincre.springboot.ApiModel; -import java.awt.*; + +import java.util.List; public class TuYaDevicesList { /** diff --git a/springboot/src/main/java/com/sincre/springboot/ApiPlatform/YinShiServiceConfig.java b/springboot/src/main/java/com/sincre/springboot/ApiPlatform/YinShiServiceConfig.java index 8fd1eac..213f6fc 100644 --- a/springboot/src/main/java/com/sincre/springboot/ApiPlatform/YinShiServiceConfig.java +++ b/springboot/src/main/java/com/sincre/springboot/ApiPlatform/YinShiServiceConfig.java @@ -14,7 +14,7 @@ public class YinShiServiceConfig { /** * 用于管理员获取accessToken */ - public static String AccessToken = "at.81rs7cox2ckxiw4v8t4wrt6k07ehcbw2-6ii49gj6ji-1j6mggg-xnrve0akm"; //测试阶段先写死 + public static String AccessToken = "at.ami8hxj50xa4lgrz07d237242w2zv0oi-4g2c500x7p-1wgkprt-fzjld4k67"; //测试阶段先写死,该接口到期时间是6月17号 diff --git a/springboot/src/main/java/com/sincre/springboot/common/ServerResponse.java b/springboot/src/main/java/com/sincre/springboot/common/ServerResponse.java index 40c6873..2cf674a 100644 --- a/springboot/src/main/java/com/sincre/springboot/common/ServerResponse.java +++ b/springboot/src/main/java/com/sincre/springboot/common/ServerResponse.java @@ -62,6 +62,7 @@ public class ServerResponse implements Serializable { return this.code == ResponseCode.SUCCESS.getCode(); } + @JsonInclude(JsonInclude.Include.NON_DEFAULT) public String getTotal() { return total; } diff --git a/springboot/src/main/java/com/sincre/springboot/controller/TuYaYunController.java b/springboot/src/main/java/com/sincre/springboot/controller/TuYaYunController.java index 841d47f..e5a4aa3 100644 --- a/springboot/src/main/java/com/sincre/springboot/controller/TuYaYunController.java +++ b/springboot/src/main/java/com/sincre/springboot/controller/TuYaYunController.java @@ -23,10 +23,33 @@ import java.util.Map; @Api(tags = "涂鸦云服务API调用") public class TuYaYunController { + @ApiOperation("根据设备ID来获取设备的信息") + @ApiImplicitParam(name="deviceId",value = "设备ID",required = true) + @GetMapping("getDeviceInfoByDeviceID") + public ServerResponse getDeviceInfoByDeviceID(String deviceId){ + + String apiUrl = String.format("/v1.0/devices/%s",deviceId); + Long t = System.currentTimeMillis(); + String access_Token = CacheHelper.getTuYaToken(); + String sign = TuYaCloudService.createSign(TuYaCloudService.ClientId+access_Token+t,TuYaCloudService.Secret); + Map map = new HashMap(); + map.put("client_id", TuYaCloudService.ClientId); + map.put("access_token",access_Token); + map.put("sign",sign); + map.put("sign_method",TuYaCloudService.Sign_method); + map.put("t",t.toString()); + String result = ApiHelper.doGet(TuYaCloudService.TuYaOpenUrl + apiUrl,map); + + TuYaResResult tuYaResResult = JSON.parseObject(result,TuYaResResult.class); + return ResultUtils.getInstance().returnResultTuYa(tuYaResResult); + } + + @ApiOperation("批量获取设备信息") + @ApiImplicitParam(name="deviceIds",value = "设备ID 列表,多个设备号用逗号隔开",required = true) @GetMapping("GetDevicesInfo") - public ServerResponse getTuYaDevicesInfo(){ + public ServerResponse getTuYaDevicesInfo(String deviceIds){ - String apiUrl = "/v1.0/devices?device_ids="; + String apiUrl = "/v1.0/devices?device_ids="+deviceIds; Long t = System.currentTimeMillis(); String access_Token = CacheHelper.getTuYaToken(); String sign = TuYaCloudService.createSign(TuYaCloudService.ClientId+access_Token+t,TuYaCloudService.Secret); @@ -38,21 +61,53 @@ public class TuYaYunController { map.put("t",t.toString()); String result = ApiHelper.doGet(TuYaCloudService.TuYaOpenUrl + apiUrl,map); -// TuYaResResult resResult = null; -// try{ -// ObjectMapper objectMapper = new ObjectMapper(); -// TypeReference> reference = new TypeReference>(){}; -// resResult = objectMapper.readValue(result,reference); -// } catch(Exception ex){ -// System.out.println(ex.getMessage()); -// } - System.out.println(result); + TuYaResResult tuYaResResult = JSON.parseObject(result,TuYaResResult.class); + return ResultUtils.getInstance().returnResultTuYa(tuYaResResult); + } + + @ApiOperation("获取设备状态信息") + @ApiImplicitParam(name="deviceId",value = "设备ID",required = true) + @GetMapping("getStatusByDeviceID") + public ServerResponse getStatusByDeviceID(String deviceId){ + + String apiUrl = String.format("/v1.0/devices/%s/status",deviceId); + Long t = System.currentTimeMillis(); + String access_Token = CacheHelper.getTuYaToken(); + String sign = TuYaCloudService.createSign(TuYaCloudService.ClientId+access_Token+t,TuYaCloudService.Secret); + Map map = new HashMap(); + map.put("client_id", TuYaCloudService.ClientId); + map.put("access_token",access_Token); + map.put("sign",sign); + map.put("sign_method",TuYaCloudService.Sign_method); + map.put("t",t.toString()); + String result = ApiHelper.doGet(TuYaCloudService.TuYaOpenUrl + apiUrl,map); TuYaResResult tuYaResResult = JSON.parseObject(result,TuYaResResult.class); return ResultUtils.getInstance().returnResultTuYa(tuYaResResult); } + @ApiOperation("批量获取设备状态") + @ApiImplicitParam(name="deviceIds",value = "设备ID 列表,多个设备号用逗号隔开",required = true) + @GetMapping("getTuYaStatusInfo") + public ServerResponse getTuYaStatusInfo(String deviceIds){ + + String apiUrl = "/v1.0/devices/status?device_ids="+deviceIds; + Long t = System.currentTimeMillis(); + String access_Token = CacheHelper.getTuYaToken(); + String sign = TuYaCloudService.createSign(TuYaCloudService.ClientId+access_Token+t,TuYaCloudService.Secret); + Map map = new HashMap(); + map.put("client_id", TuYaCloudService.ClientId); + map.put("access_token",access_Token); + map.put("sign",sign); + map.put("sign_method",TuYaCloudService.Sign_method); + map.put("t",t.toString()); + String result = ApiHelper.doGet(TuYaCloudService.TuYaOpenUrl + apiUrl,map); + + TuYaResResult tuYaResResult = JSON.parseObject(result,TuYaResResult.class); + return ResultUtils.getInstance().returnResultTuYa(tuYaResResult); + } + /** * 根据schema分页获取开发者App下的用户列表 * @param AppId 应用标识 @@ -62,6 +117,7 @@ public class TuYaYunController { */ @ApiOperation(value = "获取用户信息列表") @ApiImplicitParams({ + @ApiImplicitParam(name="AppId",value = "应用标识",required = true), @ApiImplicitParam(name="pageIndex", value = "分页起始页,从1开始",required = true), @ApiImplicitParam(name="pageSize", value = "分页大小,默认为10,最大为50") }) @@ -87,6 +143,8 @@ public class TuYaYunController { } + @ApiOperation("注册用户") + @ApiImplicitParam(name="AppId",value = "应用标识",required = true) @PostMapping("{AppId}/AddTuYaAPPUser") public ServerResponse addTuYaAPPUser(@PathVariable("AppId") String AppId, @RequestBody UserInfo userInfo){ @@ -121,6 +179,8 @@ public class TuYaYunController { * @param uid * @return */ + @ApiOperation("根据用户ID来获取用户账号下的所有设备") + @ApiImplicitParam(name="uid",value = "用户标识",required = true) @GetMapping("{uid}/GetDevicesByUid") public ServerResponse getDevicesByUid(@PathVariable("uid") String uid){ @@ -146,8 +206,10 @@ public class TuYaYunController { * 生成配网的Token * @return */ + @ApiOperation("生成配网的Token") + @ApiImplicitParam(name="uid",value = "用户标识",required = true) @GetMapping("AddDevicesToken") - public ServerResponse addDevicesToken(@RequestParam String UId){ + public ServerResponse addDevicesToken(@RequestParam String uid){ String apiUrl = String.format("/v1.0/devices/token"); Long t = System.currentTimeMillis(); @@ -163,7 +225,7 @@ public class TuYaYunController { ObjectMapper objectMapper = new ObjectMapper(); DeviceToken deviceToken = new DeviceToken(); - deviceToken.setUid(UId); + deviceToken.setUid(uid); deviceToken.setTimeZoneId("Asia/ZheJiang"); String jsonResult = ""; @@ -177,7 +239,8 @@ public class TuYaYunController { TuYaResResult tuYaResResult = JSON.parseObject(result,TuYaResResult.class); return ResultUtils.getInstance().returnResultTuYa(tuYaResResult); } - + @ApiOperation("获取配网token下所有设备列表") + @ApiImplicitParam(name="token",value = "配网的Token",required = true) @GetMapping("{token}/GetDevicesByToken") public ServerResponse getDevicesByToken(@PathVariable("token") String token){ @@ -198,4 +261,95 @@ public class TuYaYunController { TuYaResResult tuYaResResult = JSON.parseObject(result,TuYaResResult.class); return ResultUtils.getInstance().returnResultTuYa(tuYaResResult); } + + + @ApiOperation("根据category获取function列表(指令集)") + @ApiImplicitParam(name="category",value = "设备类型",required = true) + @GetMapping("getFunctionByType") + public ServerResponse getFunctionByType(String category){ + + String apiUrl = String.format("/v1.0/functions/%s",category); + Long t = System.currentTimeMillis(); + String access_Token = CacheHelper.getTuYaToken(); + String sign = TuYaCloudService.createSign(TuYaCloudService.ClientId+access_Token+t,TuYaCloudService.Secret); + Map map = new HashMap(); + map.put("client_id", TuYaCloudService.ClientId); + map.put("access_token",access_Token); + map.put("sign",sign); + map.put("sign_method",TuYaCloudService.Sign_method); + map.put("t",t.toString()); + String result = ApiHelper.doGet(TuYaCloudService.TuYaOpenUrl + apiUrl,map); + + TuYaResResult tuYaResResult = JSON.parseObject(result,TuYaResResult.class); + return ResultUtils.getInstance().returnResultTuYa(tuYaResResult); + } + + @ApiOperation("获取设备支持指令集") + @ApiImplicitParam(name="deviceId",value = "设备ID",required = true) + @GetMapping("getDeviceSupportFun") + public ServerResponse getDeviceSupportFun(String deviceId){ + + String apiUrl = String.format("/v1.0/devices/%s/functions",deviceId); + Long t = System.currentTimeMillis(); + String access_Token = CacheHelper.getTuYaToken(); + String sign = TuYaCloudService.createSign(TuYaCloudService.ClientId+access_Token+t,TuYaCloudService.Secret); + Map map = new HashMap(); + map.put("client_id", TuYaCloudService.ClientId); + map.put("access_token",access_Token); + map.put("sign",sign); + map.put("sign_method",TuYaCloudService.Sign_method); + map.put("t",t.toString()); + String result = ApiHelper.doGet(TuYaCloudService.TuYaOpenUrl + apiUrl,map); + + TuYaResResult tuYaResResult = JSON.parseObject(result,TuYaResResult.class); + return ResultUtils.getInstance().returnResultTuYa(tuYaResResult); + } + + @ApiOperation("下发设备控制命令") + @ApiImplicitParams({ + @ApiImplicitParam(name="deviceId",value = "设备ID",required = true) +// @ApiImplicitParam(name="tuYaCommands",value = "命令集",required = true) + }) + @PostMapping("sendDeviceCommandsFun") + public ServerResponse sendDeviceCommandsFun(String deviceId,@RequestBody TuYaCommand tuYaCommands){ + + String apiUrl = String.format("/v1.0/devices/%s/commands",deviceId); + Long t = System.currentTimeMillis(); + String access_Token = CacheHelper.getTuYaToken(); + String sign = TuYaCloudService.createSign(TuYaCloudService.ClientId+access_Token+t,TuYaCloudService.Secret); + Map map = new HashMap(); + map.put("client_id", TuYaCloudService.ClientId); + map.put("access_token",access_Token); + map.put("sign",sign); + map.put("sign_method",TuYaCloudService.Sign_method); + map.put("t",t.toString()); + + String body = JSON.toJSONString(tuYaCommands); + String result = ApiHelper.doPost(TuYaCloudService.TuYaOpenUrl + apiUrl,map,body); + + TuYaResResult tuYaResResult = JSON.parseObject(result,TuYaResResult.class); + return ResultUtils.getInstance().returnResultTuYa(tuYaResResult); + } + + @ApiOperation("根据设备ID移除设备") + @ApiImplicitParam(name="deviceId",value = "设备ID",required = true) + @DeleteMapping("removeDevice") + public ServerResponse removeDevice(String deviceId){ + + String apiUrl = String.format("/v1.0/devices/%s",deviceId); + Long t = System.currentTimeMillis(); + String access_Token = CacheHelper.getTuYaToken(); + String sign = TuYaCloudService.createSign(TuYaCloudService.ClientId+access_Token+t,TuYaCloudService.Secret); + + Map map = new HashMap(); + map.put("client_id", TuYaCloudService.ClientId); + map.put("access_token",access_Token); + map.put("sign",sign); + map.put("sign_method",TuYaCloudService.Sign_method); + map.put("t",t.toString()); + String result = ApiHelper.doDelete(TuYaCloudService.TuYaOpenUrl + apiUrl,map); + + TuYaResResult tuYaResResult = JSON.parseObject(result,TuYaResResult.class); + return ResultUtils.getInstance().returnResultTuYa(tuYaResResult); + } } diff --git a/springboot/src/main/java/com/sincre/springboot/controller/YinShiController.java b/springboot/src/main/java/com/sincre/springboot/controller/YinShiController.java index de5217b..2aacb3f 100644 --- a/springboot/src/main/java/com/sincre/springboot/controller/YinShiController.java +++ b/springboot/src/main/java/com/sincre/springboot/controller/YinShiController.java @@ -26,7 +26,7 @@ import java.util.Map; @RestController @RequestMapping("/YinShi") -@Api(value = "YinShiController", tags = "萤石对接接口") +@Api(value = "YinShiController", tags = "用户管理和用户组权限管理以及设备管理接口") public class YinShiController { @ApiOperation(value = "用于管理员获取accessToken") @@ -415,6 +415,7 @@ public class YinShiController { @GetMapping("getDeviceCapacity") public ServerResponse getDeviceCapacity(@RequestParam String deviceSerial) { + System.out.println(YinShiServiceConfig.AccessToken); String url = YinShiServiceConfig.HostUrl + "lapp/device/capacity"; Map map = new HashMap<>(); map.put("accessToken", YinShiServiceConfig.AccessToken); diff --git a/springboot/src/main/java/com/sincre/springboot/utils/ApiHelper.java b/springboot/src/main/java/com/sincre/springboot/utils/ApiHelper.java index 68ab223..1e28d5d 100644 --- a/springboot/src/main/java/com/sincre/springboot/utils/ApiHelper.java +++ b/springboot/src/main/java/com/sincre/springboot/utils/ApiHelper.java @@ -6,6 +6,7 @@ import org.apache.http.client.ClientProtocolException; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpDelete; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; @@ -72,6 +73,58 @@ public class ApiHelper { return result; } + + public static String doDelete(String url,Map headerParamMap) { + CloseableHttpClient httpClient = null; + CloseableHttpResponse response = null; + String result = ""; + try { + // 通过址默认配置创建一个httpClient实例 + httpClient = HttpClients.createDefault(); + // 创建HttpDelete远程连接实例 + HttpDelete httpDelete = new HttpDelete(url); + // 设置请求头信息, + for (Map.Entry entry : headerParamMap.entrySet()) { + httpDelete.setHeader(entry.getKey(),entry.getValue()); + } + + // 设置配置请求参数 + RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000)// 连接主机服务超时时间 + .setConnectionRequestTimeout(35000)// 请求超时时间 + .setSocketTimeout(60000)// 数据读取超时时间 + .build(); + // 为httpGet实例设置配置 + httpDelete.setConfig(requestConfig); + // 执行get请求得到返回对象 + response = httpClient.execute(httpDelete); + // 通过返回对象获取返回数据 + HttpEntity entity = response.getEntity(); + // 通过EntityUtils中的toString方法将结果转换为字符串 + result = EntityUtils.toString(entity); + } catch (ClientProtocolException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + // 关闭资源 + if (null != response) { + try { + response.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (null != httpClient) { + try { + httpClient.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return result; + } + /** * 表单格式的post请求 * diff --git a/springboot/src/main/java/com/sincre/springboot/utils/ResultUtils.java b/springboot/src/main/java/com/sincre/springboot/utils/ResultUtils.java index c5fb74b..0db99c9 100644 --- a/springboot/src/main/java/com/sincre/springboot/utils/ResultUtils.java +++ b/springboot/src/main/java/com/sincre/springboot/utils/ResultUtils.java @@ -1,6 +1,8 @@ package com.sincre.springboot.utils; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; import com.sincre.springboot.ApiModel.TuYaResResult; import com.sincre.springboot.ApiModel.YinShiResResult; import com.sincre.springboot.common.ResponseCode; @@ -40,11 +42,11 @@ public class ResultUtils { int code = yinShiResResult.getCode(); if (code == 200) { - String total = null; + int total = 0; if (yinShiResResult.getPage() != null) { - total = yinShiResResult.getPage().getTotal().toString(); + total = yinShiResResult.getPage().getTotal(); } - return ServerResponse.createBySuccess(total, ResponseCode.SUCCESS.getDesc(), yinShiResResult.getData()); + return ServerResponse.createBySuccess(String.valueOf(total), ResponseCode.SUCCESS.getDesc(), yinShiResResult.getData()); } else { if (code == 10002) {//accessToken过期或异常 CacheHelper.GetYinShiToken(); @@ -72,7 +74,14 @@ public class ResultUtils { boolean success = tuYaResResult.getSuccess(); if (success) { - + //data 返回的是数组 + if(JSON.isValidArray(tuYaResResult.getResult().toString())){ + int total; + JSONArray jsonArray = JSON.parseArray(tuYaResResult.getResult().toString()); + total = jsonArray.size(); + return ServerResponse.createBySuccess(String.valueOf(total), ResponseCode.SUCCESS.getDesc(), tuYaResResult.getResult()); + } + //data 返回的是对象 return ServerResponse.createBySuccess(ResponseCode.SUCCESS.getDesc(), tuYaResResult.getResult()); } -- libgit2 0.21.0