package cn.iocoder.yudao.module.iot.gateway.protocol.http.handler.upstream; import cn.hutool.core.lang.Assert; import cn.hutool.extra.spring.SpringUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.module.iot.core.biz.IotDeviceCommonApi; import cn.iocoder.yudao.module.iot.core.biz.dto.IotSubDeviceRegisterFullReqDTO; import cn.iocoder.yudao.module.iot.core.topic.auth.IotSubDeviceRegisterReqDTO; import cn.iocoder.yudao.module.iot.core.topic.auth.IotSubDeviceRegisterRespDTO; import io.vertx.ext.web.RoutingContext; import lombok.Data; import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; /** * IoT 网关 HTTP 协议的【子设备动态注册】处理器 *

* 用于子设备的动态注册,需要网关认证 * * @author 芋道源码 * @see 阿里云 - 动态注册子设备 */ public class IotHttpRegisterSubHandler extends IotHttpAbstractHandler { /** * 路径:/auth/register/sub-device/:productKey/:deviceName *

* productKey 和 deviceName 是网关设备的标识 */ public static final String PATH = "/auth/register/sub-device/:productKey/:deviceName"; private final IotDeviceCommonApi deviceApi; public IotHttpRegisterSubHandler() { this.deviceApi = SpringUtil.getBean(IotDeviceCommonApi.class); } @Override public CommonResult handle0(RoutingContext context) { // 1.1 解析通用参数 String productKey = context.pathParam("productKey"); String deviceName = context.pathParam("deviceName"); // 1.2 解析子设备列表 SubDeviceRegisterRequest request = deserializeRequest(context, SubDeviceRegisterRequest.class); Assert.notNull(request, "请求参数不能为空"); Assert.notEmpty(request.getParams(), "params 不能为空"); // 2. 调用子设备动态注册 IotSubDeviceRegisterFullReqDTO reqDTO = new IotSubDeviceRegisterFullReqDTO() .setGatewayProductKey(productKey) .setGatewayDeviceName(deviceName) .setSubDevices(request.getParams()); CommonResult> result = deviceApi.registerSubDevices(reqDTO); result.checkError(); // 3. 返回结果 return success(result.getData()); } @Data public static class SubDeviceRegisterRequest { private List params; } }