diff --git a/cn-universal-admin/src/main/java/cn/universal/admin/config/ConnectionConfig.java b/cn-universal-admin/src/main/java/cn/universal/admin/config/ConnectionConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..9e85a44cb4a52d88a7261de2167a56692ff75a44 --- /dev/null +++ b/cn-universal-admin/src/main/java/cn/universal/admin/config/ConnectionConfig.java @@ -0,0 +1,147 @@ +package cn.universal.admin.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +/** + * 连接配置管理 + * 复用现有配置,减少重复配置项 + */ +@Data +@Component +public class ConnectionConfig { + + // TCP配置 - 复用现有配置 + @Value("${tcp.protocol.sni.host.out:#productKey.tcp.nexiot.xyz}") + private String tcpSniHostTemplate; + + @Value("${tcp.protocol.sni.port.out:38883}") + private Integer tcpSniPort; + + @Value("${connection.tcp.connection-type:TLS SNI方式}") + private String tcpConnectionType; + + @Value("${connection.tcp.description:}") + private String tcpDescription; + + // MQTT配置 - 复用现有配置 + @Value("${mqtt.cfg.host.out:tcp://localhost:1883}") + private String mqttHostOut; + + @Value("${mqtt.cfg.host:tcp://localhost:1883}") + private String mqttHost; + + @Value("${mqtt.cfg.clientIdPrefix:univ_iot_test}") + private String mqttClientIdPrefix; + + @Value("${connection.mqtt.connection-type:内置MQTT Broker}") + private String mqttConnectionType; + + @Value("${connection.mqtt.description:}") + private String mqttDescription; + + // MQTT主题配置 - 直接在代码中定义默认值,避免Spring占位符解析问题 + @Value("${connection.mqtt.default-topics.thing-topics.property-up:}") + private String mqttThingPropertyUp; + + @Value("${connection.mqtt.default-topics.thing-topics.event-up:}") + private String mqttThingEventUp; + + @Value("${connection.mqtt.default-topics.thing-topics.command-down:}") + private String mqttThingCommandDown; + + @Value("${connection.mqtt.default-topics.passthrough-topics.data-up:}") + private String mqttPassthroughDataUp; + + @Value("${connection.mqtt.default-topics.passthrough-topics.command-down:}") + private String mqttPassthroughCommandDown; + + // 默认主题模板常量 + private static final String DEFAULT_THING_PROPERTY_UP = "$thing/up/property/{productKey}/{deviceId}"; + private static final String DEFAULT_THING_EVENT_UP = "$thing/up/event/{productKey}/{deviceId}"; + private static final String DEFAULT_THING_COMMAND_DOWN = "$thing/down/{productKey}/{deviceId}"; + private static final String DEFAULT_PASSTHROUGH_DATA_UP = "$thing/up/{productKey}/{deviceId}"; + private static final String DEFAULT_PASSTHROUGH_COMMAND_DOWN = "$thing/down/{productKey}/{deviceId}"; + + // UDP配置 + @Value("${connection.udp.connection-type:}") + private String udpConnectionType; + + @Value("${connection.udp.description:}") + private String udpDescription; + + @Value("${udp.cfg.port:1884}") + private Integer udpPort; + + /** + * 获取TCP主机地址 + */ + public String getTcpHost(String productKey) { + return tcpSniHostTemplate.replace("#productKey", productKey); + } + + /** + * 获取MQTT主机地址(优先使用外部配置) + */ + public String getMqttHost() { + return mqttHostOut != null && !mqttHostOut.isEmpty() ? mqttHostOut : mqttHost; + } + + /** + * 从主机地址中提取端口 + */ + public Integer extractPortFromHost(String host) { + if (host == null || host.isEmpty()) { + return null; + } + + if (host.contains(":")) { + String[] parts = host.split(":"); + if (parts.length >= 2) { + try { + return Integer.parseInt(parts[parts.length - 1]); + } catch (NumberFormatException e) { + // 忽略解析错误 + } + } + } + + return null; + } + + /** + * 获取MQTT物模型属性上报主题 + */ + public String getMqttThingPropertyUp() { + return mqttThingPropertyUp.isEmpty() ? DEFAULT_THING_PROPERTY_UP : mqttThingPropertyUp; + } + + /** + * 获取MQTT物模型事件上报主题 + */ + public String getMqttThingEventUp() { + return mqttThingEventUp.isEmpty() ? DEFAULT_THING_EVENT_UP : mqttThingEventUp; + } + + /** + * 获取MQTT物模型指令下发主题 + */ + public String getMqttThingCommandDown() { + return mqttThingCommandDown.isEmpty() ? DEFAULT_THING_COMMAND_DOWN : mqttThingCommandDown; + } + + /** + * 获取MQTT透传数据上报主题 + */ + public String getMqttPassthroughDataUp() { + return mqttPassthroughDataUp.isEmpty() ? DEFAULT_PASSTHROUGH_DATA_UP : mqttPassthroughDataUp; + } + + /** + * 获取MQTT透传指令下发主题 + */ + public String getMqttPassthroughCommandDown() { + return mqttPassthroughCommandDown.isEmpty() ? DEFAULT_PASSTHROUGH_COMMAND_DOWN : mqttPassthroughCommandDown; + } +} \ No newline at end of file diff --git a/cn-universal-admin/src/main/java/cn/universal/admin/config/SecurityConfig.java b/cn-universal-admin/src/main/java/cn/universal/admin/config/SecurityConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..80561347274e29ded2977f4313d2e1af75d263e9 --- /dev/null +++ b/cn-universal-admin/src/main/java/cn/universal/admin/config/SecurityConfig.java @@ -0,0 +1,27 @@ +package cn.universal.admin.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +/** + * 安全配置 + * 管理敏感字段的加密密钥 + */ +@Data +@Component +public class SecurityConfig { + + /** + * 产品密钥加密密钥 + * 建议在生产环境中使用环境变量或配置中心 + */ + @Value("${security.product-secret.key:cn-universal-product-secret-key-2024}") + private String productSecretKey; + + /** + * 是否启用敏感字段加密 + */ + @Value("${security.sensitive-field.enabled:true}") + private Boolean sensitiveFieldEnabled; +} diff --git a/cn-universal-admin/src/main/java/cn/universal/admin/platform/dto/ConnectionInfoDTO.java b/cn-universal-admin/src/main/java/cn/universal/admin/platform/dto/ConnectionInfoDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..a9cb2f343bf4400682f0ca233c4a32123766c450 --- /dev/null +++ b/cn-universal-admin/src/main/java/cn/universal/admin/platform/dto/ConnectionInfoDTO.java @@ -0,0 +1,114 @@ +package cn.universal.admin.platform.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** 连接信息数据传输对象 */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ConnectionInfoDTO { + + /** 内置连接信息 */ + private BuiltinConnection builtin; + + /** 网络组件连接信息 */ + private NetworkConnection network; + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class BuiltinConnection { + /** 连接方式 */ + private String connectionType; + + /** 连接地址 */ + private String host; + + /** 端口 */ + private Integer port; + + /** 用户名 */ + private String username; + + /** 密码(默认不显示,需要点击查看) */ + private String password; + + /** 配置说明 */ + private String description; + + /** MQTT主题信息(仅MQTT类型有) */ + private TopicInfo topics; + } + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class NetworkConnection { + /** 是否启用网络组件 */ + private Boolean enabled; + + /** 组件名称 */ + private String name; + + /** 组件类型 */ + private String type; + + /** 连接地址 */ + private String host; + + /** 端口 */ + private Integer port; + + /** 用户名 */ + private String username; + + /** 密码(默认不显示,需要点击查看) */ + private String password; + + /** 运行状态 */ + private Boolean state; + + /** 订阅主题信息 */ + private TopicInfo subscribeTopics; + + /** 错误信息(当enabled为false时) */ + private String message; + } + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class TopicInfo { + /** 物模型主题 */ + private ThingTopics thingTopics; + + /** 透传主题 */ + private PassthroughTopics passthroughTopics; + } + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class ThingTopics { + private String propertyUp; + private String eventUp; + private String commandDown; + } + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class PassthroughTopics { + private String dataUp; + private String commandDown; + } +} diff --git a/cn-universal-admin/src/main/java/cn/universal/admin/platform/service/ConnectionInfoService.java b/cn-universal-admin/src/main/java/cn/universal/admin/platform/service/ConnectionInfoService.java new file mode 100644 index 0000000000000000000000000000000000000000..79d931a5cf60fcc23e8b3fb70d5b9a622859f1ab --- /dev/null +++ b/cn-universal-admin/src/main/java/cn/universal/admin/platform/service/ConnectionInfoService.java @@ -0,0 +1,23 @@ +package cn.universal.admin.platform.service; + +import cn.universal.admin.platform.dto.ConnectionInfoDTO; + +/** + * 连接信息服务接口 + */ +public interface ConnectionInfoService { + + /** + * 获取产品的连接信息 + * @param productKey 产品Key + * @return 连接信息 + */ + ConnectionInfoDTO getConnectionInfo(String productKey); + + /** + * 获取产品的MQTT密码信息 + * @param productKey 产品Key + * @return 密码信息 + */ + ConnectionInfoDTO getMqttPasswordInfo(String productKey); +} diff --git a/cn-universal-admin/src/main/java/cn/universal/admin/platform/service/impl/ConnectionInfoServiceImpl.java b/cn-universal-admin/src/main/java/cn/universal/admin/platform/service/impl/ConnectionInfoServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..8674c142e7c3dd230ee4f37be7ff8646a180aaa8 --- /dev/null +++ b/cn-universal-admin/src/main/java/cn/universal/admin/platform/service/impl/ConnectionInfoServiceImpl.java @@ -0,0 +1,272 @@ +package cn.universal.admin.platform.service.impl; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import cn.universal.admin.config.ConnectionConfig; +import cn.universal.admin.platform.dto.ConnectionInfoDTO; +import cn.universal.admin.platform.service.ConnectionInfoService; +import cn.universal.persistence.entity.IoTProduct; +import cn.universal.persistence.entity.Network; +import cn.universal.persistence.mapper.IoTProductMapper; +import cn.universal.persistence.mapper.NetworkMapper; +import java.util.List; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** 连接信息服务实现 */ +@Slf4j +@Service +@RequiredArgsConstructor +public class ConnectionInfoServiceImpl implements ConnectionInfoService { + + private final IoTProductMapper productMapper; + private final NetworkMapper networkMapper; + private final ConnectionConfig connectionConfig; + + @Override + public ConnectionInfoDTO getConnectionInfo(String productKey) { + log.debug("获取产品连接信息: productKey={}", productKey); + + // 查询产品信息 + IoTProduct product = productMapper.getProductByProductKey(productKey); + if (product == null) { + throw new RuntimeException("产品不存在: " + productKey); + } + + // 构建内置连接信息 + ConnectionInfoDTO.BuiltinConnection builtin = buildBuiltinConnection(product); + + // 构建网络组件连接信息 + ConnectionInfoDTO.NetworkConnection network = buildNetworkConnection(product); + + return ConnectionInfoDTO.builder().builtin(builtin).network(network).build(); + } + + @Override + public ConnectionInfoDTO getMqttPasswordInfo(String productKey) { + log.debug("获取产品MQTT密码信息: productKey={}", productKey); + + // 查询产品信息 + IoTProduct product = productMapper.getProductByProductKey(productKey); + if (product == null) { + throw new RuntimeException("产品不存在: " + productKey); + } + + // 构建内置MQTT密码信息 + ConnectionInfoDTO.BuiltinConnection builtin = buildBuiltinMqttPassword(product); + + // 构建网络组件MQTT密码信息 + ConnectionInfoDTO.NetworkConnection network = buildNetworkMqttPassword(product); + + return ConnectionInfoDTO.builder().builtin(builtin).network(network).build(); + } + + /** 构建内置连接信息 */ + private ConnectionInfoDTO.BuiltinConnection buildBuiltinConnection(IoTProduct product) { + String platform = product.getThirdPlatform(); + + ConnectionInfoDTO.BuiltinConnection.BuiltinConnectionBuilder builder = + ConnectionInfoDTO.BuiltinConnection.builder(); + + switch (platform) { + case "tcp": + return builder + .connectionType(connectionConfig.getTcpConnectionType()) + .host(connectionConfig.getTcpHost(product.getProductKey())) + .port(connectionConfig.getTcpSniPort()) + .description(connectionConfig.getTcpDescription()) + .build(); + + case "mqtt": + ConnectionInfoDTO.BuiltinConnection builtinMqtt = + builder + .connectionType(connectionConfig.getMqttConnectionType()) + .host(connectionConfig.getMqttHost()) + .port(connectionConfig.extractPortFromHost(connectionConfig.getMqttHost())) + .username(product.getProductKey()) + .password("点击查看密码") + .description(connectionConfig.getMqttDescription()) + .topics(buildDefaultTopics(product.getProductKey())) + .build(); + return builtinMqtt; + + case "udp": + return builder + .connectionType(connectionConfig.getUdpConnectionType()) + .host(connectionConfig.getTcpHost(product.getProductKey())) + .port(connectionConfig.getUdpPort()) + .description(connectionConfig.getUdpDescription()) + .build(); + default: + return builder + .connectionType("请联系管理员") + .host("请联系管理员") + .port(0) + .description("暂无") + .build(); + } + } + + /** 构建网络组件连接信息 */ + private ConnectionInfoDTO.NetworkConnection buildNetworkConnection(IoTProduct product) { + if (StrUtil.isBlank(product.getNetworkUnionId())) { + return ConnectionInfoDTO.NetworkConnection.builder() + .enabled(false) + .message("未绑定网络组件") + .build(); + } + + // 查询网络组件 + List networks = networkMapper.selectByUnionId(product.getNetworkUnionId()); + if (networks.isEmpty()) { + return ConnectionInfoDTO.NetworkConnection.builder() + .enabled(false) + .message("绑定的网络组件不存在") + .build(); + } + + Network network = networks.get(0); + JSONObject config = JSONUtil.parseObj(network.getConfiguration()); + + ConnectionInfoDTO.NetworkConnection.NetworkConnectionBuilder builder = + ConnectionInfoDTO.NetworkConnection.builder() + .enabled(true) + .name(network.getName()) + .type(network.getType()) + .state(network.getState()) + .host(config.getStr("host")) + .port(config.getInt("port")) + .username(config.getStr("username")) + .password("点击查看密码"); + + // 处理MQTT主题信息 + if ("mqtt".equals(product.getThirdPlatform())) { + ConnectionInfoDTO.TopicInfo subscribeTopics = + buildSubscribeTopics(config, product.getProductKey()); + builder.subscribeTopics(subscribeTopics); + } + + return builder.build(); + } + + /** 构建内置MQTT密码信息 */ + private ConnectionInfoDTO.BuiltinConnection buildBuiltinMqttPassword(IoTProduct product) { + if (!"mqtt".equals(product.getThirdPlatform())) { + return null; + } + + return ConnectionInfoDTO.BuiltinConnection.builder() + .connectionType(connectionConfig.getMqttConnectionType()) + .host(connectionConfig.getMqttHost()) + .port(connectionConfig.extractPortFromHost(connectionConfig.getMqttHost())) + .username(product.getProductKey()) + .password(product.getProductSecret()) + .description(connectionConfig.getMqttDescription()) + .build(); + } + + /** 构建网络组件MQTT密码信息 */ + private ConnectionInfoDTO.NetworkConnection buildNetworkMqttPassword(IoTProduct product) { + if (StrUtil.isBlank(product.getNetworkUnionId())) { + return ConnectionInfoDTO.NetworkConnection.builder() + .enabled(false) + .message("未绑定网络组件") + .build(); + } + + List networks = networkMapper.selectByUnionId(product.getNetworkUnionId()); + if (networks.isEmpty()) { + return ConnectionInfoDTO.NetworkConnection.builder() + .enabled(false) + .message("绑定的网络组件不存在") + .build(); + } + + Network network = networks.get(0); + JSONObject config = JSONUtil.parseObj(network.getConfiguration()); + + return ConnectionInfoDTO.NetworkConnection.builder() + .enabled(true) + .name(network.getName()) + .type(network.getType()) + .host(config.getStr("host")) + .port(config.getInt("port")) + .username(config.getStr("username")) + .password(config.getStr("password")) + .build(); + } + + /** 构建默认主题信息 */ + private ConnectionInfoDTO.TopicInfo buildDefaultTopics(String productKey) { + ConnectionInfoDTO.ThingTopics thingTopics = + ConnectionInfoDTO.ThingTopics.builder() + .propertyUp(replaceProductKey(connectionConfig.getMqttThingPropertyUp(), productKey)) + .eventUp(replaceProductKey(connectionConfig.getMqttThingEventUp(), productKey)) + .commandDown(replaceProductKey(connectionConfig.getMqttThingCommandDown(), productKey)) + .build(); + + ConnectionInfoDTO.PassthroughTopics passthroughTopics = + ConnectionInfoDTO.PassthroughTopics.builder() + .dataUp(replaceProductKey(connectionConfig.getMqttPassthroughDataUp(), productKey)) + .commandDown( + replaceProductKey(connectionConfig.getMqttPassthroughCommandDown(), productKey)) + .build(); + + return ConnectionInfoDTO.TopicInfo.builder() + .thingTopics(thingTopics) + .passthroughTopics(passthroughTopics) + .build(); + } + + /** 构建订阅主题信息 */ + private ConnectionInfoDTO.TopicInfo buildSubscribeTopics(JSONObject config, String productKey) { + JSONObject subscribeTopics = config.getJSONObject("subscribeTopics"); + + if (subscribeTopics == null || subscribeTopics.isEmpty()) { + // 使用默认主题 + return buildDefaultTopics(productKey); + } + + ConnectionInfoDTO.ThingTopics thingTopics = null; + ConnectionInfoDTO.PassthroughTopics passthroughTopics = null; + + JSONObject thingTopicsConfig = subscribeTopics.getJSONObject("thingTopics"); + if (thingTopicsConfig != null) { + thingTopics = + ConnectionInfoDTO.ThingTopics.builder() + .propertyUp(thingTopicsConfig.getStr("propertyUp")) + .eventUp(thingTopicsConfig.getStr("eventUp")) + .commandDown(thingTopicsConfig.getStr("commandDown")) + .build(); + } + + JSONObject passthroughTopicsConfig = subscribeTopics.getJSONObject("passthroughTopics"); + if (passthroughTopicsConfig != null) { + passthroughTopics = + ConnectionInfoDTO.PassthroughTopics.builder() + .dataUp(passthroughTopicsConfig.getStr("dataUp")) + .commandDown(passthroughTopicsConfig.getStr("commandDown")) + .build(); + } + + return ConnectionInfoDTO.TopicInfo.builder() + .thingTopics(thingTopics) + .passthroughTopics(passthroughTopics) + .build(); + } + + /** 替换主题中的产品Key占位符 */ + private String replaceProductKey(String topic, String productKey) { + if (StrUtil.isBlank(topic)) { + return topic; + } + // 支持两种格式:{productKey} 和 ${productKey} + return topic + .replace("{productKey}", productKey) + .replace("${productKey}", productKey) + .replace("{deviceId}", "${deviceId}") + .replace("${deviceId}", "${deviceId}"); + } +} diff --git a/cn-universal-admin/src/main/java/cn/universal/admin/system/notice/NoticeChannelController.java b/cn-universal-admin/src/main/java/cn/universal/admin/system/notice/NoticeChannelController.java new file mode 100644 index 0000000000000000000000000000000000000000..e4c6ad166b3c827ec5316e5ed960d24f15cf964a --- /dev/null +++ b/cn-universal-admin/src/main/java/cn/universal/admin/system/notice/NoticeChannelController.java @@ -0,0 +1,143 @@ +package cn.universal.admin.system.notice; + +import cn.hutool.json.JSONObject; +import cn.universal.admin.common.utils.SecurityUtils; +import cn.universal.admin.system.web.BaseController; +import cn.universal.manager.notice.dto.NoticeChannelDTO; +import cn.universal.manager.notice.model.NoticeChannel; +import cn.universal.manager.notice.service.NoticeChannelService; +import cn.universal.manager.notice.util.JsonDesensitizationUtil; +import cn.universal.persistence.page.TableDataInfo; +import com.fasterxml.jackson.databind.ObjectMapper; +import java.util.List; +import java.util.Map; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/admin/v1/notice/channel") +public class NoticeChannelController extends BaseController { + + private final NoticeChannelService noticeChannelService; + private final ObjectMapper objectMapper; + + @Autowired + public NoticeChannelController( + NoticeChannelService noticeChannelService, ObjectMapper objectMapper) { + this.noticeChannelService = noticeChannelService; + this.objectMapper = objectMapper; + } + + @GetMapping("/list") + public TableDataInfo list( + @RequestParam(defaultValue = "1") Integer pageNum, + @RequestParam(defaultValue = "10") Integer pageSize, + @RequestParam(required = false) String name, + @RequestParam(required = false) String channelType) { + startPage(); + List list = noticeChannelService.search(name, channelType, null); + + List dtoList = + list.stream() + .map( + channel -> { + NoticeChannelDTO dto = new NoticeChannelDTO(); + dto.setId(channel.getId()); + dto.setName(channel.getName()); + dto.setChannelType(channel.getChannelType()); + dto.setStatus(channel.getStatus()); + dto.setRemark(channel.getRemark()); + dto.setCreator(channel.getCreator()); + dto.setCreateTime(channel.getCreateTime()); + dto.setUpdateTime(channel.getUpdateTime()); + + // 将config字符串转换为对象并进行脱敏处理 + if (channel.getConfig() != null && !channel.getConfig().isEmpty()) { + try { + JSONObject desensitizedConfig = + JsonDesensitizationUtil.desensitize(channel.getConfig()); + dto.setConfig(desensitizedConfig); + } catch (Exception e) { + dto.setConfig(null); + } + } + + return dto; + }) + .toList(); + + return getDataTable(dtoList); + } + + @GetMapping("/get") + public NoticeChannelDTO get(@RequestParam Long id) { + try { + NoticeChannel channel = noticeChannelService.getById(id); + if (channel == null) { + return null; + } + NoticeChannelDTO dto = new NoticeChannelDTO(); + dto.setId(channel.getId()); + dto.setName(channel.getName()); + dto.setChannelType(channel.getChannelType()); + dto.setStatus(channel.getStatus()); + dto.setRemark(channel.getRemark()); + dto.setCreator(channel.getCreator()); + dto.setCreateTime(channel.getCreateTime()); + dto.setUpdateTime(channel.getUpdateTime()); + + // 将config字符串转换为对象并进行脱敏处理 + if (channel.getConfig() != null && !channel.getConfig().isEmpty()) { + JSONObject desensitizedConfig = JsonDesensitizationUtil.desensitize(channel.getConfig()); + dto.setConfig(desensitizedConfig); + } + + return dto; + } catch (Exception e) { + return null; + } + } + + @PostMapping("/save") + public Map save(@RequestBody NoticeChannelDTO channelDTO) { + try { + NoticeChannel channel = new NoticeChannel(); + channel.setId(channelDTO.getId()); + channel.setName(channelDTO.getName()); + channel.setChannelType(channelDTO.getChannelType()); + channel.setStatus(channelDTO.getStatus()); + channel.setRemark(channelDTO.getRemark()); + channel.setCreator(SecurityUtils.getUnionId()); + channel.setCreateTime(channelDTO.getCreateTime()); + channel.setUpdateTime(channelDTO.getUpdateTime()); + // 将config对象转换为JSON字符串 + if (channelDTO.getConfig() != null) { + channel.setConfig(objectMapper.writeValueAsString(channelDTO.getConfig())); + } + + noticeChannelService.save(channel); + return Map.of("code", 0, "msg", "操作成功"); + } catch (Exception e) { + return Map.of("code", 1, "msg", "操作失败: " + e.getMessage()); + } + } + + @PostMapping("/delete") + public Map delete(@RequestBody List ids) { + try { + if (ids != null && !ids.isEmpty()) { + noticeChannelService.deleteBatch(ids); + return Map.of("code", 0, "msg", "删除成功"); + } else { + return Map.of("code", 1, "msg", "未提供有效的ID"); + } + } catch (Exception e) { + return Map.of("code", 1, "msg", "删除失败: " + e.getMessage()); + } + } +} diff --git a/cn-universal-admin/src/main/java/cn/universal/admin/system/notice/NoticeRecordController.java b/cn-universal-admin/src/main/java/cn/universal/admin/system/notice/NoticeRecordController.java new file mode 100644 index 0000000000000000000000000000000000000000..c6cae8b2105fe8d217f9400eff84ca0ea9334bcc --- /dev/null +++ b/cn-universal-admin/src/main/java/cn/universal/admin/system/notice/NoticeRecordController.java @@ -0,0 +1,35 @@ +package cn.universal.admin.system.notice; + +import cn.universal.admin.system.web.BaseController; +import cn.universal.manager.notice.model.NoticeSendRecord; +import cn.universal.manager.notice.service.NoticeRecordService; +import cn.universal.persistence.page.TableDataInfo; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +/** 通知记录 */ +@RestController +@RequestMapping("/admin/v1/notice/record") +public class NoticeRecordController extends BaseController { + + private final NoticeRecordService recordService; + + @Autowired + public NoticeRecordController(NoticeRecordService recordService) { + this.recordService = recordService; + } + + @GetMapping("/page") + public TableDataInfo page( + @RequestParam(required = false) String keyword, + @RequestParam(required = false) String type, + @RequestParam(required = false) String status) { + startPage(); + List list = recordService.search(keyword, type, status); + return getDataTable(list); + } +} diff --git a/cn-universal-admin/src/main/java/cn/universal/admin/system/notice/NoticeSendController.java b/cn-universal-admin/src/main/java/cn/universal/admin/system/notice/NoticeSendController.java new file mode 100644 index 0000000000000000000000000000000000000000..c6d6d0cf03ab579172e0ee500a1e8fe5e7084149 --- /dev/null +++ b/cn-universal-admin/src/main/java/cn/universal/admin/system/notice/NoticeSendController.java @@ -0,0 +1,44 @@ +package cn.universal.admin.system.notice; + +import cn.universal.manager.notice.model.NoticeSendRequest; +import cn.universal.manager.notice.service.NoticeService; +import java.util.Map; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** 通知发送 */ +@RestController +@RequestMapping("/admin/v1/notice") +public class NoticeSendController { + + private final NoticeService noticeService; + + @Autowired + public NoticeSendController(NoticeService noticeService) { + this.noticeService = noticeService; + } + + @PostMapping("/send") + public Map send(@RequestBody Map request) { + Long templateId = Long.valueOf(request.get("templateId").toString()); + String receivers = (String) request.get("receivers"); + Object params = request.get("params"); + + if (templateId == null) { + throw new IllegalArgumentException("模板ID不能为空"); + } + + NoticeSendRequest req = new NoticeSendRequest(); + req.setTemplateId(templateId); + req.setReceivers(receivers); + if (params instanceof Map) { + req.setParams((Map) params); + } + noticeService.send(req); + + return Map.of("code", 0, "msg", "发送成功"); + } +} diff --git a/cn-universal-admin/src/main/java/cn/universal/admin/system/notice/NoticeTemplateController.java b/cn-universal-admin/src/main/java/cn/universal/admin/system/notice/NoticeTemplateController.java new file mode 100644 index 0000000000000000000000000000000000000000..78c1fc1899bc29e1ec95aff8af78a1b8cecf30bb --- /dev/null +++ b/cn-universal-admin/src/main/java/cn/universal/admin/system/notice/NoticeTemplateController.java @@ -0,0 +1,165 @@ +package cn.universal.admin.system.notice; + +import cn.universal.admin.common.utils.SecurityUtils; +import cn.universal.admin.system.web.BaseController; +import cn.universal.manager.notice.dto.NoticeTemplateDTO; +import cn.universal.manager.notice.model.NoticeTemplate; +import cn.universal.manager.notice.service.NoticeTemplateService; +import cn.universal.persistence.page.TableDataInfo; +import cn.universal.persistence.query.AjaxResult; +import java.util.List; +import java.util.Map; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/admin/v1/notice/template") +public class NoticeTemplateController extends BaseController { + + private final NoticeTemplateService noticeTemplateService; + + @Autowired + public NoticeTemplateController(NoticeTemplateService noticeTemplateService) { + this.noticeTemplateService = noticeTemplateService; + } + + @GetMapping("/list") + public TableDataInfo list( + @RequestParam(defaultValue = "1") Integer pageNum, + @RequestParam(defaultValue = "10") Integer pageSize, + @RequestParam(required = false) String name, + @RequestParam(required = false) String channelType) { + startPage(); + List list = noticeTemplateService.search(name, channelType, null); + + List dtoList = + list.stream() + .map( + template -> { + NoticeTemplateDTO dto = new NoticeTemplateDTO(); + dto.setId(template.getId()); + dto.setName(template.getName()); + dto.setChannelType(template.getChannelType()); + dto.setChannelId(template.getChannelId()); + dto.setContent(template.getContent()); + dto.setReceivers(template.getReceivers()); + dto.setStatus(template.getStatus()); + dto.setRemark(template.getRemark()); + dto.setCreator(template.getCreator()); + dto.setCreateTime(template.getCreateTime()); + dto.setUpdateTime(template.getUpdateTime()); + + return dto; + }) + .toList(); + return getDataTable(dtoList); + } + + @PostMapping("/save") + public AjaxResult save(@RequestBody NoticeTemplateDTO templateDTO) { + try { + NoticeTemplate template = new NoticeTemplate(); + template.setId(templateDTO.getId()); + template.setName(templateDTO.getName()); + template.setChannelType(templateDTO.getChannelType()); + template.setChannelId(templateDTO.getChannelId()); + template.setContent(templateDTO.getContent()); + template.setReceivers(templateDTO.getReceivers()); + template.setStatus(templateDTO.getStatus()); + template.setRemark(templateDTO.getRemark()); + template.setCreator(SecurityUtils.getUnionId()); + template.setCreateTime(templateDTO.getCreateTime()); + template.setUpdateTime(templateDTO.getUpdateTime()); + + noticeTemplateService.save(template); + return AjaxResult.success("操作成功"); + } catch (Exception e) { + return AjaxResult.error("操作失败: " + e.getMessage()); + } + } + + @PostMapping("/delete") + public AjaxResult delete(@RequestBody List ids) { + try { + if (ids != null && !ids.isEmpty()) { + noticeTemplateService.deleteBatch(ids); + return AjaxResult.success("删除成功"); + } else { + return AjaxResult.success("未提供有效的ID"); + } + } catch (Exception e) { + return AjaxResult.success("删除失败: " + e.getMessage()); + } + } + + /** 批量启用通知模板 */ + @PostMapping("/enable") + public AjaxResult enable(@RequestBody List ids) { + try { + if (ids != null && !ids.isEmpty()) { + noticeTemplateService.enableBatch(ids); + return AjaxResult.success("启用成功"); + } else { + return AjaxResult.success("未提供有效的ID"); + } + } catch (Exception e) { + return AjaxResult.error("启用失败: " + e.getMessage()); + } + } + + /** 批量停用通知模板 */ + @PostMapping("/disable") + public AjaxResult disable(@RequestBody List ids) { + try { + if (ids != null && !ids.isEmpty()) { + noticeTemplateService.disableBatch(ids); + return AjaxResult.success("停用成功"); + } else { + return AjaxResult.success("未提供有效的ID"); + } + } catch (Exception e) { + return AjaxResult.error("停用失败: " + e.getMessage()); + } + } + + @GetMapping("/get") + public NoticeTemplateDTO get(@RequestParam Long id) { + try { + NoticeTemplate template = noticeTemplateService.getById(id); + if (template == null) { + return null; + } + + NoticeTemplateDTO dto = new NoticeTemplateDTO(); + dto.setId(template.getId()); + dto.setName(template.getName()); + dto.setChannelType(template.getChannelType()); + dto.setChannelId(template.getChannelId()); + dto.setContent(template.getContent()); + dto.setReceivers(template.getReceivers()); + dto.setStatus(template.getStatus()); + dto.setRemark(template.getRemark()); + dto.setCreator(template.getCreator()); + dto.setCreateTime(template.getCreateTime()); + dto.setUpdateTime(template.getUpdateTime()); + + return dto; + } catch (Exception e) { + return null; + } + } + + @PostMapping("/test") + public AjaxResult test(@RequestBody Map request) { + Long templateId = Long.valueOf(request.get("templateId").toString()); + String receivers = (String) request.get("receivers"); + Object params = request.get("params"); + noticeTemplateService.testTemplate(templateId, receivers, params); + return AjaxResult.success("成功"); + } +} diff --git a/cn-universal-admin/src/main/java/cn/universal/admin/system/web/RulegoChainController.java b/cn-universal-admin/src/main/java/cn/universal/admin/system/web/RulegoChainController.java new file mode 100644 index 0000000000000000000000000000000000000000..a0fefbb0059c4deedc168c54ecaf95e5fc69da2f --- /dev/null +++ b/cn-universal-admin/src/main/java/cn/universal/admin/system/web/RulegoChainController.java @@ -0,0 +1,145 @@ +/* + * + * Copyright (c) 2025, IoT-Universal. All Rights Reserved. + * + * @Description: 本文件由 Aleo 开发并拥有版权,未经授权严禁擅自商用、复制或传播。 + * @Author: Aleo + * @Email: wo8335224@gmail.com + * @Wechat: outlookFil + * + * + */ + +package cn.universal.admin.system.web; + +import cn.universal.admin.common.annotation.Log; +import cn.universal.admin.common.enums.BusinessType; +import cn.universal.admin.common.utils.SecurityUtils; +import cn.universal.persistence.entity.bo.RulegoChainBO; +import cn.universal.persistence.entity.vo.RulegoChainVO; +import cn.universal.persistence.page.TableDataInfo; +import cn.universal.persistence.query.AjaxResult; +import cn.universal.rule.rulego.service.RulegoChainService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +/** + * rulego规则链管理控制器 + * + * @author Aleo + * @since 2025/01/15 + */ +@RestController +@Tag(name = "rulego规则链管理", description = "rulego规则链管理") +@RequestMapping("/admin/v1/rulego") +public class RulegoChainController extends BaseController { + + @Resource private RulegoChainService rulegoChainService; + + @Operation(summary = "查询规则链列表") + @GetMapping("/chain/list") + public TableDataInfo pageList(RulegoChainBO bo) { + bo.setCreatorId(loginIoTUnionUser(SecurityUtils.getUnionId()).getUnionId()); + startPage(); + return getDataTable(rulegoChainService.queryRulegoChainList(bo)); + } + + @Operation(summary = "查询规则链详情") + @GetMapping("/chain/{id}") + public AjaxResult detail(@PathVariable @Parameter(description = "规则链ID") Long id) { + String creatorId = loginIoTUnionUser(SecurityUtils.getUnionId()).getUnionId(); + RulegoChainVO rulegoChain = rulegoChainService.queryRulegoChainById(id, creatorId); + return AjaxResult.success(rulegoChain); + } + + @Operation(summary = "根据rulegoId查询规则链详情") + @GetMapping("/chain/detail") + public AjaxResult detailByRulegoId( + @RequestParam @Parameter(description = "rulego规则链ID") String rulegoId) { + RulegoChainVO rulegoChain = rulegoChainService.queryRulegoChainByRulegoId(rulegoId); + return AjaxResult.success(rulegoChain); + } + + @Operation(summary = "新增规则链") + @PostMapping("/chain") + @Log(title = "新增rulego规则链", businessType = BusinessType.INSERT) + public AjaxResult addRulegoChain(@RequestBody RulegoChainBO bo) { + bo.setCreatorId(loginIoTUnionUser(SecurityUtils.getUnionId()).getUnionId()); + bo.setCreatorName(loginIoTUnionUser(SecurityUtils.getUnionId()).getUsername()); + Long chainId = rulegoChainService.saveRulegoChain(bo); + return AjaxResult.success(chainId); + } + + @Operation(summary = "更新规则链") + @PutMapping("/chain") + @Log(title = "更新rulego规则链", businessType = BusinessType.UPDATE) + public AjaxResult updateRulegoChain(@RequestBody RulegoChainBO bo) { + bo.setCreatorId(loginIoTUnionUser(SecurityUtils.getUnionId()).getUnionId()); + boolean result = rulegoChainService.updateRulegoChain(bo); + return result ? AjaxResult.success() : AjaxResult.error("更新失败"); + } + + @Operation(summary = "删除规则链") + @DeleteMapping("/chain/{id}") + @Log(title = "删除rulego规则链", businessType = BusinessType.DELETE) + public AjaxResult deleteRulegoChain( + @PathVariable @Parameter(description = "规则链ID") Long id) { + String creatorId = loginIoTUnionUser(SecurityUtils.getUnionId()).getUnionId(); + boolean result = rulegoChainService.deleteRulegoChain(id, creatorId); + return result ? AjaxResult.success() : AjaxResult.error("删除失败"); + } + + @Operation(summary = "部署规则链") + @PostMapping("/chain/{id}/deploy") + @Log(title = "部署rulego规则链", businessType = BusinessType.UPDATE) + public AjaxResult deployRulegoChain( + @PathVariable @Parameter(description = "规则链ID") Long id) { + String creatorId = loginIoTUnionUser(SecurityUtils.getUnionId()).getUnionId(); + boolean result = rulegoChainService.deployRulegoChain(id, creatorId); + return result ? AjaxResult.success() : AjaxResult.error("部署失败"); + } + + @Operation(summary = "停止规则链") + @PostMapping("/chain/{id}/stop") + @Log(title = "停止rulego规则链", businessType = BusinessType.UPDATE) + public AjaxResult stopRulegoChain(@PathVariable @Parameter(description = "规则链ID") Long id) { + String creatorId = loginIoTUnionUser(SecurityUtils.getUnionId()).getUnionId(); + boolean result = rulegoChainService.stopRulegoChain(id, creatorId); + return result ? AjaxResult.success() : AjaxResult.error("停止失败"); + } + + @Operation(summary = "同步规则链DSL") + @PostMapping("/chain/{id}/sync") + @Log(title = "同步rulego规则链DSL", businessType = BusinessType.UPDATE) + public AjaxResult syncRulegoChainDsl( + @PathVariable @Parameter(description = "规则链ID") Long id) { + String creatorId = loginIoTUnionUser(SecurityUtils.getUnionId()).getUnionId(); + RulegoChainVO rulegoChain = rulegoChainService.queryRulegoChainById(id, creatorId); + boolean result = rulegoChainService.syncRulegoChainDsl(rulegoChain.getRulegoId()); + return result ? AjaxResult.success() : AjaxResult.error("同步失败"); + } + + @Operation(summary = "获取设计器URL") + @GetMapping("/chain/{id}/designer") + public AjaxResult getDesignerUrl(@PathVariable @Parameter(description = "规则链ID") Long id) { + String creatorId = loginIoTUnionUser(SecurityUtils.getUnionId()).getUnionId(); + RulegoChainVO rulegoChain = rulegoChainService.queryRulegoChainById(id, creatorId); + String designerUrl = rulegoChainService.getDesignerUrl(rulegoChain.getRulegoId()); + AjaxResult result = new AjaxResult<>(); + result.setCode(0); + result.setMsg("success"); + result.setData(designerUrl); + return result; + } +} diff --git a/cn-universal-framework/cn-universal-common/src/main/java/cn/universal/common/constant/CameraCommand.java b/cn-universal-framework/cn-universal-common/src/main/java/cn/universal/common/constant/CameraCommand.java new file mode 100644 index 0000000000000000000000000000000000000000..68bd383359afff0b93c11e313f805181f157acf3 --- /dev/null +++ b/cn-universal-framework/cn-universal-common/src/main/java/cn/universal/common/constant/CameraCommand.java @@ -0,0 +1,60 @@ +/* + * + * Copyright (c) 2025, IoT-Universal. All Rights Reserved. + * + * @Description: 本文件由 Aleo 开发并拥有版权,未经授权严禁擅自商用、复制或传播。 + * @Author: Aleo + * @Email: wo8335224@gmail.com + * @Wechat: outlookFil + * + * + */ + +package cn.universal.common.constant; + +/** + * 摄像头操作命令枚举 + * 直接对应物模型函数名 + * + * @version 1.0 + * @since 2025/1/15 + */ +public enum CameraCommand { + + // 摄像头相关物模型函数 + CAMERA_LIVE_STREAM("cameraLiveStream"), + CAMERA_PLAYBACK("cameraPlayback"), + CAMERA_SNAPSHOT("cameraSnapshot"), + CAMERA_TURN("cameraTurn"), + CAMERA_FLIP_SET("cameraFlipSet"); + + private final String functionName; + + CameraCommand(String functionName) { + this.functionName = functionName; + } + + /** + * 获取物模型函数名 + * + * @return 物模型函数名 + */ + public String getFunctionName() { + return functionName; + } + + /** + * 根据物模型函数名获取对应的命令枚举 + * + * @param functionName 物模型函数名 + * @return 对应的命令枚举,如果未找到返回null + */ + public static CameraCommand fromFunctionName(String functionName) { + for (CameraCommand command : values()) { + if (command.functionName.equals(functionName)) { + return command; + } + } + return null; + } +} diff --git a/cn-universal-framework/cn-universal-common/src/main/java/cn/universal/common/event/processer/UdpDownProcessor.java b/cn-universal-framework/cn-universal-common/src/main/java/cn/universal/common/event/processer/UdpDownProcessor.java new file mode 100644 index 0000000000000000000000000000000000000000..740c881730acef6928a178e841e3294769daf05c --- /dev/null +++ b/cn-universal-framework/cn-universal-common/src/main/java/cn/universal/common/event/processer/UdpDownProcessor.java @@ -0,0 +1,20 @@ +package cn.universal.common.event.processer; + +import cn.universal.common.event.EventMessage; + +/** + * UDP下行指令处理器接口 + * + * @author Aleo + * @version 1.0 + * @since 2025/1/9 + */ +public interface UdpDownProcessor { + + /** + * 处理UDP下行指令事件 + * + * @param message 事件消息字符串 + */ + void handleUdpDownEvent(EventMessage message); +} diff --git a/cn-universal-framework/cn-universal-common/src/main/java/cn/universal/common/monitor/NetworkMonitorSingleton.java b/cn-universal-framework/cn-universal-common/src/main/java/cn/universal/common/monitor/NetworkMonitorSingleton.java new file mode 100644 index 0000000000000000000000000000000000000000..b041c9296041258b4e7c246a1f1631c97df55b7c --- /dev/null +++ b/cn-universal-framework/cn-universal-common/src/main/java/cn/universal/common/monitor/NetworkMonitorSingleton.java @@ -0,0 +1,68 @@ +/* + * + * Copyright (c) 2025, IoT-Universal. All Rights Reserved. + * + * @Description: 本文件由 Aleo 开发并拥有版权,未经授权严禁擅自商用、复制或传播。 + * @Author: Aleo + * @Email: wo8335224@gmail.com + * @Wechat: outlookFil + * + * + */ + +package cn.universal.common.monitor; + +import cn.hutool.core.util.StrUtil; +import cn.universal.common.utils.DingTalkUtil; +import java.util.HashMap; +import java.util.Map; +import lombok.extern.slf4j.Slf4j; + +/** 网络监测单例 */ +@Slf4j +public class NetworkMonitorSingleton { + + private NetworkMonitorSingleton() {} + + private static class SingleTonHolder { + + private static NetworkMonitorSingleton INSTANCE = new NetworkMonitorSingleton(); + } + + public static NetworkMonitorSingleton getInstance() { + return SingleTonHolder.INSTANCE; + } + + private static volatile Map networkMap = new HashMap<>(); + + public static void freshConnectionStatus(String serverURI, Boolean status) { + if (StrUtil.isBlank(serverURI)) { + return; + } + boolean lastStatusNormal = + !networkMap.containsKey(serverURI) || networkMap.get(serverURI).equals(Boolean.TRUE); + if (lastStatusNormal && Boolean.FALSE.equals(status)) { + DingTalkUtil.send("IoT Universal,[" + serverURI + "] 断开异常!"); + log.warn("[网络监控] 服务断开: serverURI={}, status={},请注意!", serverURI, status); + } + boolean lastStatusAbnormal = + !networkMap.containsKey(serverURI) || networkMap.get(serverURI).equals(Boolean.FALSE); + if (lastStatusAbnormal && Boolean.TRUE.equals(status)) { + DingTalkUtil.send("IoT Universal,指标[" + serverURI + "] 状态正常!!!"); + } + if (!networkMap.containsKey(serverURI)) { + networkMap.put(serverURI, status); + } + if (!networkMap.get(serverURI).equals(status)) { + networkMap.put(serverURI, status); + } + } + + public static void removeMosquittoServer(String serverId) { + NetworkMonitorSingleton.networkMap.remove(serverId); + } + + public static Map getConnectionStatus() { + return networkMap; + } +} diff --git a/cn-universal-framework/cn-universal-common/src/main/java/cn/universal/common/utils/DingTalkUtil.java b/cn-universal-framework/cn-universal-common/src/main/java/cn/universal/common/utils/DingTalkUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..c08eb87342f72d919d77a4db6157830d0ee66db3 --- /dev/null +++ b/cn-universal-framework/cn-universal-common/src/main/java/cn/universal/common/utils/DingTalkUtil.java @@ -0,0 +1,111 @@ +/* + * + * Copyright (c) 2025, IoT-Universal. All Rights Reserved. + * + * @Description: 本文件由 Aleo 开发并拥有版权,未经授权严禁擅自商用、复制或传播。 + * @Author: Aleo + * @Email: wo8335224@gmail.com + * @Wechat: outlookFil + * + * + */ + +package cn.universal.common.utils; + +import cn.hutool.core.codec.Base64; +import cn.hutool.core.util.StrUtil; +import cn.hutool.extra.spring.SpringUtil; +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class DingTalkUtil { + + // @Value("${notice.dingTalk.dingTalk-addr}") + private static final String token = + "https://oapi.dingtalk.com/robot/send?access_token=f731085dd9ef094114794a0f5ff2cc09e017d18acea205415cc03039af472661"; + // @Value("${notice.dingTalk.dingTalk-secret}") + private static final String secret = + "SEC34946b12a19f67f32f0e7a1a42b1ca110f6c2ddb224214ce474e594b025efd1e"; + // @Value("${notice.dingTalk.sign}") + private static final String mark = "platform Universal"; + private static Set prodProfileActive = + Stream.of("test","test2", "prod").collect(Collectors.toSet()); + + // 第三方调用失败钉钉通知 + public static void send(String msg) { + String actProfiles = SpringUtil.getActiveProfile(); + if (StrUtil.isBlank(actProfiles) || !prodProfileActive.contains(actProfiles)) { + log.warn("非正式环境,中止发送钉钉告警,msg={}", msg); + return; + } + try { + String res = ""; + Long timestamp = System.currentTimeMillis(); + String stringToSign = timestamp + "\n" + secret; + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256")); + byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8")); + String sign = URLEncoder.encode(Base64.encode(signData), "UTF-8"); + String url = token + "×tamp=" + timestamp + "&sign=" + sign; + JSONObject jsonObject = new JSONObject(); + JSONObject text = new JSONObject(); + JSONObject at = new JSONObject(); + msg = mark + ":" + actProfiles + ":" + msg; + jsonObject.set("msgtype", "text"); + text.set("content", msg); + jsonObject.set("text", text); + List phone = new ArrayList<>(); + at.set("atMobiles", phone); + jsonObject.set("at", at); + String response = HttpUtil.post(url, JSONUtil.toJsonStr(jsonObject)); + JSONObject result = JSONUtil.parseObj(response); + Integer errCode = result.getInt("errcode"); + if (errCode == 0) { + res = "成功"; + } else { + switch (errCode) { + case -1: + res = "系统繁忙"; + break; + case 88: + res = "鉴权异常"; + break; + case 404: + res = "请求的URI地址不存在"; + break; + case 34015: + res = "发送群会话消息失败"; + break; + case 34016: + res = "会话消息的内容超长"; + break; + case 40001: + res = "获取access_token时Secret错误,或者access_token无效"; + break; + case 40002: + res = "不合法的凭证类型"; + break; + default: + res = result.getStr("errmsg"); + break; + } + } + if (!"".equals(res) && !"成功".equals(res)) { + log.error("钉钉系统监测推送失败,原因{}", res); + } + } catch (Exception e) { + log.error("钉钉调用异常:", e); + } + } +} diff --git a/cn-universal-framework/cn-universal-notice/pom.xml b/cn-universal-framework/cn-universal-notice/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..f783acf3f2dabe6b2f24bd489ffa6b518c9f9641 --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/pom.xml @@ -0,0 +1,76 @@ + + + 4.0.0 + + cn-universal-framework + cn.universal.iot + 1.5-SNAPSHOT + + + cn-universal-notice + + + 21 + 21 + UTF-8 + + + + + com.aliyun + dysmsapi20170525 + 2.0.24 + + + jaxb-impl + com.sun.xml.bind + + + + + spring-boot-starter-web + + + slf4j-log4j12 + org.slf4j + + + + org.springframework.boot + ${spring-boot.version} + provided + + + cn-universal-core + cn.universal.iot + ${project.version} + + + cn.universal.iot + cn-universal-persistence + ${project.version} + compile + + + com.alibaba + fastjson + 2.0.57 + + + + com.tencentcloudapi + tencentcloud-sdk-java + 3.1.822 + + + + org.springframework.boot + spring-boot-starter-mail + ${spring-boot.version} + provided + + + + \ No newline at end of file diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/dto/NoticeChannelDTO.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/dto/NoticeChannelDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..8fea43e41cf2cae35e7fe5645a55a0c10c54e746 --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/dto/NoticeChannelDTO.java @@ -0,0 +1,97 @@ +package cn.universal.manager.notice.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.io.Serializable; +import java.util.Date; + +public class NoticeChannelDTO implements Serializable { + + private Long id; + private String name; + + @JsonProperty("channelType") + private String channelType; + + private Object config; + private String status; + private String remark; + private String creator; + + @JsonProperty("createTime") + private Date createTime; + + @JsonProperty("updateTime") + private Date updateTime; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getChannelType() { + return channelType; + } + + public void setChannelType(String channelType) { + this.channelType = channelType; + } + + public Object getConfig() { + return config; + } + + public void setConfig(Object config) { + this.config = config; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getCreator() { + return creator; + } + + public void setCreator(String creator) { + this.creator = creator; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/dto/NoticeConfigDTO.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/dto/NoticeConfigDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..7bc364902ee39abee521c3885a405243b799cdff --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/dto/NoticeConfigDTO.java @@ -0,0 +1,85 @@ +package cn.universal.manager.notice.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.io.Serializable; +import java.util.Date; + +public class NoticeConfigDTO implements Serializable { + + private Long id; + private String name; + private String type; + private Object config; + private String remark; + private String creator; + + @JsonProperty("createTime") + private Date createTime; + + @JsonProperty("updateTime") + private Date updateTime; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public Object getConfig() { + return config; + } + + public void setConfig(Object config) { + this.config = config; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getCreator() { + return creator; + } + + public void setCreator(String creator) { + this.creator = creator; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/dto/NoticeTemplateDTO.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/dto/NoticeTemplateDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..8623b5ab4f1e8993a17ae3f70602bda59ed76238 --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/dto/NoticeTemplateDTO.java @@ -0,0 +1,117 @@ +package cn.universal.manager.notice.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.io.Serializable; +import java.util.Date; + +public class NoticeTemplateDTO implements Serializable { + + private Long id; + private String name; + + @JsonProperty("channelType") + private String channelType; + + @JsonProperty("channelId") + private Long channelId; + + private String content; + private String receivers; + private String status; + private String remark; + private String creator; + + @JsonProperty("createTime") + private Date createTime; + + @JsonProperty("updateTime") + private Date updateTime; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getChannelType() { + return channelType; + } + + public void setChannelType(String channelType) { + this.channelType = channelType; + } + + public Long getChannelId() { + return channelId; + } + + public void setChannelId(Long channelId) { + this.channelId = channelId; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getReceivers() { + return receivers; + } + + public void setReceivers(String receivers) { + this.receivers = receivers; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getCreator() { + return creator; + } + + public void setCreator(String creator) { + this.creator = creator; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/mapper/NoticeChannelMapper.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/mapper/NoticeChannelMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..7abf19f4c04b2b986c53ca43ddd4dbce8fef1824 --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/mapper/NoticeChannelMapper.java @@ -0,0 +1,6 @@ +package cn.universal.manager.notice.mapper; + +import cn.universal.manager.notice.model.NoticeChannel; +import tk.mybatis.mapper.common.Mapper; + +public interface NoticeChannelMapper extends Mapper {} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/mapper/NoticeSendRecordMapper.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/mapper/NoticeSendRecordMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..686e7b858b1818fa186bcf5cc20c94718545cb28 --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/mapper/NoticeSendRecordMapper.java @@ -0,0 +1,6 @@ +package cn.universal.manager.notice.mapper; + +import cn.universal.manager.notice.model.NoticeSendRecord; +import cn.universal.persistence.common.BaseMapper; + +public interface NoticeSendRecordMapper extends BaseMapper {} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/mapper/NoticeTemplateMapper.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/mapper/NoticeTemplateMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..da143749eb6e2ce5cc7e8e611415a122d59cd1d9 --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/mapper/NoticeTemplateMapper.java @@ -0,0 +1,6 @@ +package cn.universal.manager.notice.mapper; + +import cn.universal.manager.notice.model.NoticeTemplate; +import tk.mybatis.mapper.common.Mapper; + +public interface NoticeTemplateMapper extends Mapper {} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/model/NoticeChannel.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/model/NoticeChannel.java new file mode 100644 index 0000000000000000000000000000000000000000..9fd010d40f56533a89ba36c25b58b0f956f3e2ef --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/model/NoticeChannel.java @@ -0,0 +1,102 @@ +package cn.universal.manager.notice.model; + +import jakarta.persistence.Column; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import java.io.Serializable; +import java.util.Date; + +@Table(name = "notice_channel") +public class NoticeChannel implements Serializable { + + @Id private Long id; + private String name; + + @Column(name = "channel_type") + private String channelType; + + @Column(columnDefinition = "TEXT") + private String config; + + private String status; + private String remark; + private String creator; + + @Column(name = "create_time") + private Date createTime; + + @Column(name = "update_time") + private Date updateTime; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getChannelType() { + return channelType; + } + + public void setChannelType(String channelType) { + this.channelType = channelType; + } + + public String getConfig() { + return config; + } + + public void setConfig(String config) { + this.config = config; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getCreator() { + return creator; + } + + public void setCreator(String creator) { + this.creator = creator; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/model/NoticeSendRecord.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/model/NoticeSendRecord.java new file mode 100644 index 0000000000000000000000000000000000000000..0078f9506983f584757e0a36b84ffed69e2bf904 --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/model/NoticeSendRecord.java @@ -0,0 +1,83 @@ +package cn.universal.manager.notice.model; + +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import java.io.Serializable; +import java.util.Date; + +@Table(name = "notice_send_record") +public class NoticeSendRecord implements Serializable { + + @Id private Long id; + private Long templateId; + private Long configId; + private String receivers; + private String params; + private String status; + private String result; + private Date sendTime; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getTemplateId() { + return templateId; + } + + public void setTemplateId(Long templateId) { + this.templateId = templateId; + } + + public Long getConfigId() { + return configId; + } + + public void setConfigId(Long configId) { + this.configId = configId; + } + + public String getReceivers() { + return receivers; + } + + public void setReceivers(String receivers) { + this.receivers = receivers; + } + + public String getParams() { + return params; + } + + public void setParams(String params) { + this.params = params; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getResult() { + return result; + } + + public void setResult(String result) { + this.result = result; + } + + public Date getSendTime() { + return sendTime; + } + + public void setSendTime(Date sendTime) { + this.sendTime = sendTime; + } +} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/model/NoticeSendRequest.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/model/NoticeSendRequest.java new file mode 100644 index 0000000000000000000000000000000000000000..855b48d227c46555c8ee40879289c0ab8820906d --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/model/NoticeSendRequest.java @@ -0,0 +1,34 @@ +package cn.universal.manager.notice.model; + +import java.util.Map; + +public class NoticeSendRequest { + + private Long templateId; + private Map params; + private String receivers; + + public Long getTemplateId() { + return templateId; + } + + public void setTemplateId(Long templateId) { + this.templateId = templateId; + } + + public Map getParams() { + return params; + } + + public void setParams(Map params) { + this.params = params; + } + + public String getReceivers() { + return receivers; + } + + public void setReceivers(String receivers) { + this.receivers = receivers; + } +} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/model/NoticeTemplate.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/model/NoticeTemplate.java new file mode 100644 index 0000000000000000000000000000000000000000..91202279d3a10034b775df0e0af937be59a1c8d0 --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/model/NoticeTemplate.java @@ -0,0 +1,120 @@ +package cn.universal.manager.notice.model; + +import jakarta.persistence.Column; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import java.io.Serializable; +import java.util.Date; + +@Table(name = "notice_template") +public class NoticeTemplate implements Serializable { + + @Id private Long id; + private String name; + + @Column(name = "channel_type") + private String channelType; + + @Column(name = "channel_id") + private Long channelId; + + private String content; + private String receivers; + private String status; + private String remark; + private String creator; + + @Column(name = "create_time") + private Date createTime; + + @Column(name = "update_time") + private Date updateTime; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getChannelType() { + return channelType; + } + + public void setChannelType(String channelType) { + this.channelType = channelType; + } + + public Long getChannelId() { + return channelId; + } + + public void setChannelId(Long channelId) { + this.channelId = channelId; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getReceivers() { + return receivers; + } + + public void setReceivers(String receivers) { + this.receivers = receivers; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getCreator() { + return creator; + } + + public void setCreator(String creator) { + this.creator = creator; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/NoticeChannelService.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/NoticeChannelService.java new file mode 100644 index 0000000000000000000000000000000000000000..2300bbb8ab9fbbaa7028b117bff63f43cdf03008 --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/NoticeChannelService.java @@ -0,0 +1,19 @@ +package cn.universal.manager.notice.service; + +import cn.universal.manager.notice.model.NoticeChannel; +import java.util.List; + +public interface NoticeChannelService { + + List list(); + + List search(String name, String channelType, String status); + + void save(NoticeChannel channel); + + void delete(Long id); + + void deleteBatch(List ids); + + NoticeChannel getById(Long id); +} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/NoticeRecordService.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/NoticeRecordService.java new file mode 100644 index 0000000000000000000000000000000000000000..9badc1bff1e17b223b76a407586ee22be7fd8235 --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/NoticeRecordService.java @@ -0,0 +1,13 @@ +package cn.universal.manager.notice.service; + +import cn.universal.manager.notice.model.NoticeSendRecord; +import java.util.List; + +public interface NoticeRecordService { + + void save(NoticeSendRecord record); + + List list(); + + List search(String keyword, String type, String status); +} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/NoticeService.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/NoticeService.java new file mode 100644 index 0000000000000000000000000000000000000000..ebb67e3b5c4314b195f2e60fbaf6beddb40e6e3c --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/NoticeService.java @@ -0,0 +1,13 @@ +package cn.universal.manager.notice.service; + +import cn.universal.manager.notice.model.NoticeSendRequest; +import cn.universal.manager.notice.service.channel.NoticeSendResult; + +public interface NoticeService { + + void send(NoticeSendRequest req); + + default NoticeSendResult sendR(NoticeSendRequest request) { + return null; + } +} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/NoticeTemplateService.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/NoticeTemplateService.java new file mode 100644 index 0000000000000000000000000000000000000000..9e6d5eea47b20be65fbb056dd4869679bdd8c080 --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/NoticeTemplateService.java @@ -0,0 +1,25 @@ +package cn.universal.manager.notice.service; + +import cn.universal.manager.notice.model.NoticeTemplate; +import java.util.List; + +public interface NoticeTemplateService { + + List list(); + + void save(NoticeTemplate template); + + void delete(Long id); + + NoticeTemplate getById(Long id); + + List search(String name, String channelType, String status); + + void deleteBatch(List ids); + + void testTemplate(Long templateId, String receivers, Object params); + + void enableBatch(List ids); + + void disableBatch(List ids); +} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/AbstractNoticeSendChannel.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/AbstractNoticeSendChannel.java new file mode 100644 index 0000000000000000000000000000000000000000..d2a24b395d3b2f941d826f2ddea2f088f1677124 --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/AbstractNoticeSendChannel.java @@ -0,0 +1,60 @@ +package cn.universal.manager.notice.service.channel; + +import cn.hutool.json.JSONUtil; +import cn.hutool.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** 抽象通知渠道基类 提供通用的配置解析和日志记录功能 */ +public abstract class AbstractNoticeSendChannel implements NoticeSendChannel { + + protected final Logger logger = LoggerFactory.getLogger(getClass()); + + /** 从配置中解析JSON对象 */ + protected JSONObject parseConfig(cn.universal.manager.notice.model.NoticeChannel config) { + if (config == null || config.getConfig() == null) { + return new JSONObject(); + } + try { + return JSONUtil.parseObj(config.getConfig()); + } catch (Exception e) { + logger.error("解析配置失败: {}", config.getConfig(), e); + return new JSONObject(); + } + } + + /** 记录发送日志 */ + protected void logSend( + String channelType, String content, String receivers, boolean success, String message) { + if (success) { + logger.info("[{}] 发送成功 - 接收者: {}, 内容: {}", channelType, receivers, content); + } else { + logger.error("[{}] 发送失败 - 接收者: {}, 内容: {}, 错误: {}", channelType, receivers, content, message); + } + } + + /** 验证配置是否完整 */ + protected boolean validateConfig(JSONObject config, String... requiredFields) { + for (String field : requiredFields) { + if (!config.containsKey(field) + || config.getStr(field) == null + || config.getStr(field).trim().isEmpty()) { + logger.error("配置缺少必需字段: {}", field); + return false; + } + } + return true; + } + + /** 构建并记录发送结果 */ + protected NoticeSendResult buildAndLogResult( + String channelType, String content, String receivers, boolean success, String errorMessage) { + logSend(channelType, content, receivers, success, errorMessage); + return NoticeSendResult.builder() + .success(success) + .receivers(receivers) + .content(content) + .errorMessage(errorMessage) + .build(); + } +} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/AudioAliNoticeSendChannel.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/AudioAliNoticeSendChannel.java new file mode 100644 index 0000000000000000000000000000000000000000..278558c79a25c89915630dc6b86422a99045243b --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/AudioAliNoticeSendChannel.java @@ -0,0 +1,55 @@ +package cn.universal.manager.notice.service.channel; + +import cn.hutool.json.JSONObject; +import java.util.Map; +import org.springframework.stereotype.Component; + +@Component +public class AudioAliNoticeSendChannel extends AbstractNoticeSendChannel { + + @Override + public boolean support(String type) { + return "audio_ali".equalsIgnoreCase(type); + } + + @Override + public NoticeSendResult send( + String content, + String receivers, + cn.universal.manager.notice.model.NoticeChannel config, + Map params) { + try { + JSONObject configObj = parseConfig(config); + if (!validateConfig(configObj, "accessKey", "secretKey", "signName", "templateCode")) { + String errMsg = "配置不完整"; + logSend("AudioAli", content, receivers, false, errMsg); + return NoticeSendResult.builder() + .success(false) + .receivers(receivers) + .content(content) + .errorMessage(errMsg) + .build(); + } + // TODO: 实现阿里云语音API调用 + logger.info( + "阿里云语音发送 - 接收者: {}, 内容: {}, 配置: {}", receivers, content, configObj.toString()); + logSend("AudioAli", content, receivers, true, "发送成功(模拟)"); + return NoticeSendResult.builder() + .success(true) + .receivers(receivers) + .content(content) + .errorMessage(null) + .build(); + } catch (Exception e) { + String errMsg = "发送异常: " + e.getMessage(); + logSend("AudioAli", content, receivers, false, errMsg); + logger.error("阿里云语音发送异常", e); + return NoticeSendResult.builder() + .success(false) + .receivers(receivers) + .content(content) + .errorMessage(errMsg) + .build(); + } + } +} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/AudioTencentNoticeSendChannel.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/AudioTencentNoticeSendChannel.java new file mode 100644 index 0000000000000000000000000000000000000000..41e42908f9914ac567c1e3d06ac43c57785e6bc3 --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/AudioTencentNoticeSendChannel.java @@ -0,0 +1,97 @@ +package cn.universal.manager.notice.service.channel; + +import cn.hutool.json.JSONObject; +import com.tencentcloudapi.common.Credential; +import com.tencentcloudapi.common.exception.TencentCloudSDKException; +import com.tencentcloudapi.tts.v20190823.TtsClient; +import com.tencentcloudapi.tts.v20190823.models.TextToVoiceRequest; +import com.tencentcloudapi.tts.v20190823.models.TextToVoiceResponse; +import java.util.Map; +import org.springframework.stereotype.Component; + +@Component +public class AudioTencentNoticeSendChannel extends AbstractNoticeSendChannel { + + @Override + public boolean support(String type) { + return "audio_tencent".equalsIgnoreCase(type); + } + + @Override + public NoticeSendResult send( + String content, + String receivers, + cn.universal.manager.notice.model.NoticeChannel config, + Map params) { + try { + JSONObject configObj = parseConfig(config); + if (!validateConfig( + configObj, "secretId", "secretKey", "signName", "templateCode", "receivers")) { + String errMsg = "配置不完整"; + logSend("AudioTencent", content, receivers, false, errMsg); + return NoticeSendResult.builder() + .success(false) + .receivers(receivers) + .content(content) + .errorMessage(errMsg) + .build(); + } + Credential cred = + new Credential(configObj.getStr("secretId"), configObj.getStr("secretKey")); + TtsClient client = new TtsClient(cred, "ap-guangzhou"); + String[] templateParams; + if (params != null && !params.isEmpty()) { + templateParams = params.values().stream().map(Object::toString).toArray(String[]::new); + } else { + templateParams = new String[] {content}; + } + TextToVoiceRequest request = new TextToVoiceRequest(); + request.setText(content); + request.setSessionId(String.valueOf(System.currentTimeMillis())); + request.setModelType(1L); // 默认模型 + request.setVolume(0.0f); // 默认音量 + request.setSpeed(0.0f); // 默认语速 + request.setProjectId(0L); // 默认项目ID + request.setSampleRate(16000L); // 采样率 + TextToVoiceResponse response = client.TextToVoice(request); + if (response.getAudio() != null) { + logSend("AudioTencent", content, receivers, true, "发送成功"); + return NoticeSendResult.builder() + .success(true) + .receivers(receivers) + .content(content) + .errorMessage(null) + .build(); + } else { + String errMsg = "腾讯云返回空响应"; + logSend("AudioTencent", content, receivers, false, errMsg); + return NoticeSendResult.builder() + .success(false) + .receivers(receivers) + .content(content) + .errorMessage(errMsg) + .build(); + } + } catch (TencentCloudSDKException e) { + String errMsg = "腾讯云SDK异常: " + e.getMessage(); + logSend("AudioTencent", content, receivers, false, errMsg); + logger.error("腾讯云语音发送异常", e); + return NoticeSendResult.builder() + .success(false) + .receivers(receivers) + .content(content) + .errorMessage(errMsg) + .build(); + } catch (Exception e) { + String errMsg = "发送异常: " + e.getMessage(); + logSend("AudioTencent", content, receivers, false, errMsg); + logger.error("腾讯云语音发送异常", e); + return NoticeSendResult.builder() + .success(false) + .receivers(receivers) + .content(content) + .errorMessage(errMsg) + .build(); + } + } +} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/DingTalkNoticeSendChannel.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/DingTalkNoticeSendChannel.java new file mode 100644 index 0000000000000000000000000000000000000000..107adef00a245a0da3db86f301d05bec25af5ce7 --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/DingTalkNoticeSendChannel.java @@ -0,0 +1,90 @@ +package cn.universal.manager.notice.service.channel; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import cn.hutool.json.JSONObject; +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.Map; +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; + +@Component +public class DingTalkNoticeSendChannel extends AbstractNoticeSendChannel { + + private final RestTemplate restTemplate = new RestTemplate(); + + @Override + public boolean support(String type) { + return "dingTalk".equalsIgnoreCase(type); + } + + @Override + public NoticeSendResult send( + String content, + String receivers, + cn.universal.manager.notice.model.NoticeChannel config, + Map params) { + try { + JSONObject configObj = parseConfig(config); + if (!validateConfig(configObj, "webhook")) { + String errMsg = "配置不完整"; + return buildAndLogResult("DingTalk", content, receivers, false, errMsg); + } + String webhook = configObj.getStr("webhook"); + String secret = configObj.getStr("secret"); + JSONObject message = new JSONObject(); + message.set("msgtype", "text"); + JSONObject text = new JSONObject(); + text.set("content", content); + message.set("text", text); + if (StrUtil.isNotBlank(receivers)) { + text.set("atMobiles", StrUtil.split(receivers, ',', true, true)); + message.set("at", text); + } + if (secret != null && !secret.trim().isEmpty()) { + long timestamp = System.currentTimeMillis(); + String stringToSign = timestamp + "\n" + secret; + String sign = calculateHmacSHA256(stringToSign, secret); + String signedUrl = webhook + "×tamp=" + timestamp + "&sign=" + sign; + webhook = signedUrl; + } + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + HttpEntity request = new HttpEntity<>(message.toString(), headers); + ResponseEntity response = restTemplate.postForEntity(webhook, request, String.class); + if (response.getStatusCode().is2xxSuccessful()) { + JSONObject responseBody = JSONUtil.parseObj(response.getBody()); + if (responseBody.getInt("errcode") == 0) { + return buildAndLogResult("DingTalk", content, receivers, true, null); + } else { + String errMsg = "钉钉返回错误: " + responseBody.getStr("errmsg"); + return buildAndLogResult("DingTalk", content, receivers, false, errMsg); + } + } else { + String errMsg = "HTTP请求失败: " + response.getStatusCode(); + return buildAndLogResult("DingTalk", content, receivers, false, errMsg); + } + } catch (Exception e) { + String errMsg = "发送异常: " + e.getMessage(); + logger.error("钉钉发送异常", e); + return buildAndLogResult("DingTalk", content, receivers, false, errMsg); + } + } + + /** 计算HMAC-SHA256签名 */ + private String calculateHmacSHA256(String data, String key) throws Exception { + Mac mac = Mac.getInstance("HmacSHA256"); + SecretKeySpec secretKeySpec = + new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA256"); + mac.init(secretKeySpec); + byte[] hash = mac.doFinal(data.getBytes(StandardCharsets.UTF_8)); + return Base64.getEncoder().encodeToString(hash); + } +} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/EmailNoticeSendChannel.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/EmailNoticeSendChannel.java new file mode 100644 index 0000000000000000000000000000000000000000..651d45a982fa3bd225df33c6a7e9ad6c74e494fa --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/EmailNoticeSendChannel.java @@ -0,0 +1,63 @@ +package cn.universal.manager.notice.service.channel; + +import cn.hutool.json.JSONObject; +import java.util.Map; +import java.util.Properties; +import org.springframework.mail.SimpleMailMessage; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.mail.javamail.JavaMailSenderImpl; +import org.springframework.stereotype.Component; + +@Component +public class EmailNoticeSendChannel extends AbstractNoticeSendChannel { + + @Override + public boolean support(String type) { + return "email".equalsIgnoreCase(type); + } + + @Override + public NoticeSendResult send( + String content, + String receivers, + cn.universal.manager.notice.model.NoticeChannel config, + Map params) { + try { + JSONObject configObj = parseConfig(config); + if (!validateConfig( + configObj, "smtpHost", "smtpPort", "username", "password", "fromEmail", "receivers")) { + String errMsg = "配置不完整"; + return buildAndLogResult("Email", content, receivers, false, errMsg); + } + JavaMailSender mailSender = createMailSender(configObj); + SimpleMailMessage message = new SimpleMailMessage(); + message.setFrom(configObj.getStr("fromEmail")); + message.setTo(receivers.split(",")); + message.setSubject("系统通知"); + message.setText(content); + mailSender.send(message); + return buildAndLogResult("Email", content, receivers, true, null); + } catch (Exception e) { + String errMsg = "发送异常: " + e.getMessage(); + logger.error("邮件发送异常", e); + return buildAndLogResult("Email", content, receivers, false, errMsg); + } + } + + /** 创建邮件发送器 */ + private JavaMailSender createMailSender(JSONObject config) { + JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); + mailSender.setHost(config.getStr("smtpHost")); + mailSender.setPort(config.getInt("smtpPort")); + mailSender.setUsername(config.getStr("username")); + mailSender.setPassword(config.getStr("password")); + + Properties props = mailSender.getJavaMailProperties(); + props.put("mail.transport.protocol", "smtp"); + props.put("mail.smtp.auth", "true"); + props.put("mail.smtp.starttls.enable", "true"); + props.put("mail.debug", "false"); + + return mailSender; + } +} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/FeishuNoticeSendChannel.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/FeishuNoticeSendChannel.java new file mode 100644 index 0000000000000000000000000000000000000000..ea4b299e98f374d390ca447b69d75d436a0e9835 --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/FeishuNoticeSendChannel.java @@ -0,0 +1,93 @@ +package cn.universal.manager.notice.service.channel; + +import cn.hutool.json.JSONUtil; +import cn.hutool.json.JSONObject; +import java.util.Map; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; + +@Component +public class FeishuNoticeSendChannel extends AbstractNoticeSendChannel { + + private final RestTemplate restTemplate = new RestTemplate(); + + @Override + public boolean support(String type) { + return "feishu".equalsIgnoreCase(type); + } + + @Override + public NoticeSendResult send( + String content, + String receivers, + cn.universal.manager.notice.model.NoticeChannel config, + Map params) { + try { + JSONObject configObj = parseConfig(config); + if (!validateConfig(configObj, "webhook")) { + String errMsg = "配置不完整"; + logSend("Feishu", content, receivers, false, errMsg); + return NoticeSendResult.builder() + .success(false) + .receivers(receivers) + .content(content) + .errorMessage(errMsg) + .build(); + } + String webhook = configObj.getStr("webhook"); + JSONObject message = new JSONObject(); + message.set("msg_type", "text"); + JSONObject text = new JSONObject(); + text.set("text", content); + message.set("content", text); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + HttpEntity request = new HttpEntity<>(message.toString(), headers); + ResponseEntity response = restTemplate.postForEntity(webhook, request, String.class); + if (response.getStatusCode().is2xxSuccessful()) { + JSONObject responseBody = JSONUtil.parseObj(response.getBody()); + if (responseBody.getInt("code") == 0) { + logSend("Feishu", content, receivers, true, "发送成功"); + return NoticeSendResult.builder() + .success(true) + .receivers(receivers) + .content(content) + .errorMessage(null) + .build(); + } else { + String errMsg = "飞书返回错误: " + responseBody.getStr("msg"); + logSend("Feishu", content, receivers, false, errMsg); + return NoticeSendResult.builder() + .success(false) + .receivers(receivers) + .content(content) + .errorMessage(errMsg) + .build(); + } + } else { + String errMsg = "HTTP请求失败: " + response.getStatusCode(); + logSend("Feishu", content, receivers, false, errMsg); + return NoticeSendResult.builder() + .success(false) + .receivers(receivers) + .content(content) + .errorMessage(errMsg) + .build(); + } + } catch (Exception e) { + String errMsg = "发送异常: " + e.getMessage(); + logSend("Feishu", content, receivers, false, errMsg); + logger.error("飞书发送异常", e); + return NoticeSendResult.builder() + .success(false) + .receivers(receivers) + .content(content) + .errorMessage(errMsg) + .build(); + } + } +} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/NoticeChannelFactory.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/NoticeChannelFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..d52bf759ac16539330cb991fed3d7a0ad0ffec0f --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/NoticeChannelFactory.java @@ -0,0 +1,55 @@ +package cn.universal.manager.notice.service.channel; + +import java.util.List; +import java.util.Optional; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** 通知渠道工厂类 用于管理和获取各种通知渠道 */ +@Component +public class NoticeChannelFactory { + + private final List channels; + + @Autowired + public NoticeChannelFactory(List channels) { + this.channels = channels; + } + + /** + * 根据渠道类型获取对应的通知渠道 + * + * @param type 渠道类型 + * @return 通知渠道实例 + */ + public Optional getChannel(String type) { + return channels.stream().filter(channel -> channel.support(type)).findFirst(); + } + + /** + * 检查是否支持指定的渠道类型 + * + * @param type 渠道类型 + * @return 是否支持 + */ + public boolean supports(String type) { + return channels.stream().anyMatch(channel -> channel.support(type)); + } + + /** + * 获取所有支持的渠道类型 + * + * @return 渠道类型列表 + */ + public List getSupportedTypes() { + return List.of( + "dingTalk", // 钉钉 + "email", // 邮箱 + "feishu", // 飞书 + "sms_ali", // 阿里云短信 + "sms_tencent", // 腾讯云短信 + "audio_ali", // 阿里云语音 + "audio_tencent" // 腾讯云语音 + ); + } +} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/NoticeSendChannel.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/NoticeSendChannel.java new file mode 100644 index 0000000000000000000000000000000000000000..ba52f2cc1eff1cbe4853d01661a75e23c127f941 --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/NoticeSendChannel.java @@ -0,0 +1,12 @@ +package cn.universal.manager.notice.service.channel; + +import cn.universal.manager.notice.model.NoticeChannel; +import java.util.Map; + +public interface NoticeSendChannel { + + boolean support(String type); + + NoticeSendResult send( + String content, String receivers, NoticeChannel config, Map params); +} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/NoticeSendResult.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/NoticeSendResult.java new file mode 100644 index 0000000000000000000000000000000000000000..62ffc3deaaad407144c872f5ecbc33203d405c44 --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/NoticeSendResult.java @@ -0,0 +1,86 @@ +package cn.universal.manager.notice.service.channel; + +public class NoticeSendResult { + + private boolean success; + private String receivers; + private String content; + private String errorMessage; + + public NoticeSendResult() {} + + public NoticeSendResult(boolean success, String receivers, String content, String errorMessage) { + this.success = success; + this.receivers = receivers; + this.content = content; + this.errorMessage = errorMessage; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public String getReceivers() { + return receivers; + } + + public void setReceivers(String receivers) { + this.receivers = receivers; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getErrorMessage() { + return errorMessage; + } + + public void setErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } + + public static Builder builder() { + return new Builder(); + } + + public static class Builder { + + private boolean success; + private String receivers; + private String content; + private String errorMessage; + + public Builder success(boolean success) { + this.success = success; + return this; + } + + public Builder receivers(String receivers) { + this.receivers = receivers; + return this; + } + + public Builder content(String content) { + this.content = content; + return this; + } + + public Builder errorMessage(String errorMessage) { + this.errorMessage = errorMessage; + return this; + } + + public NoticeSendResult build() { + return new NoticeSendResult(success, receivers, content, errorMessage); + } + } +} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/SmsAliNoticeSendChannel.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/SmsAliNoticeSendChannel.java new file mode 100644 index 0000000000000000000000000000000000000000..2f6274c0f4312eda4c7f87ee077a051c86b1ffbe --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/SmsAliNoticeSendChannel.java @@ -0,0 +1,87 @@ +package cn.universal.manager.notice.service.channel; + +import cn.hutool.json.JSONObject; +import com.aliyun.dysmsapi20170525.Client; +import com.aliyun.dysmsapi20170525.models.SendSmsRequest; +import com.aliyun.dysmsapi20170525.models.SendSmsResponse; +import com.aliyun.teaopenapi.models.Config; +import java.util.Map; +import org.springframework.stereotype.Component; + +@Component +public class SmsAliNoticeSendChannel extends AbstractNoticeSendChannel { + + @Override + public boolean support(String type) { + return "sms_ali".equalsIgnoreCase(type); + } + + @Override + public NoticeSendResult send( + String content, + String receivers, + cn.universal.manager.notice.model.NoticeChannel config, + Map params) { + try { + JSONObject configObj = parseConfig(config); + if (!validateConfig( + configObj, "accessKey", "secretKey", "signName", "templateCode", "receivers")) { + String errMsg = "配置不完整"; + logSend("SmsAli", content, receivers, false, errMsg); + return NoticeSendResult.builder() + .success(false) + .receivers(receivers) + .content(content) + .errorMessage(errMsg) + .build(); + } + Config aliConfig = + new Config() + .setAccessKeyId(configObj.getStr("accessKey")) + .setAccessKeySecret(configObj.getStr("secretKey")) + .setEndpoint("dysmsapi.aliyuncs.com"); + Client client = new Client(aliConfig); + JSONObject templateParam = new JSONObject(); + if (params != null) { + params.forEach(templateParam::set); + } else { + templateParam.set("message", content); + } + SendSmsRequest request = + new SendSmsRequest() + .setPhoneNumbers(receivers) + .setSignName(configObj.getStr("signName")) + .setTemplateCode(configObj.getStr("templateCode")) + .setTemplateParam(templateParam.toString()); + SendSmsResponse response = client.sendSms(request); + if ("OK".equals(response.getBody().getCode())) { + logSend("SmsAli", content, receivers, true, "发送成功"); + return NoticeSendResult.builder() + .success(true) + .receivers(receivers) + .content(content) + .errorMessage(null) + .build(); + } else { + String errMsg = "阿里云返回错误: " + response.getBody().getMessage(); + logSend("SmsAli", content, receivers, false, errMsg); + return NoticeSendResult.builder() + .success(false) + .receivers(receivers) + .content(content) + .errorMessage(errMsg) + .build(); + } + } catch (Exception e) { + String errMsg = "发送异常: " + e.getMessage(); + logSend("SmsAli", content, receivers, false, errMsg); + logger.error("阿里云短信发送异常", e); + return NoticeSendResult.builder() + .success(false) + .receivers(receivers) + .content(content) + .errorMessage(errMsg) + .build(); + } + } +} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/SmsTencentNoticeSendChannel.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/SmsTencentNoticeSendChannel.java new file mode 100644 index 0000000000000000000000000000000000000000..b69652119fa8bf15937fd156cbeac86382567ad9 --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/SmsTencentNoticeSendChannel.java @@ -0,0 +1,107 @@ +package cn.universal.manager.notice.service.channel; + +import cn.hutool.json.JSONObject; +import com.tencentcloudapi.common.Credential; +import com.tencentcloudapi.common.exception.TencentCloudSDKException; +import com.tencentcloudapi.sms.v20210111.SmsClient; +import com.tencentcloudapi.sms.v20210111.models.SendSmsRequest; +import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse; +import java.util.Map; +import org.springframework.stereotype.Component; + +@Component +public class SmsTencentNoticeSendChannel extends AbstractNoticeSendChannel { + + @Override + public boolean support(String type) { + return "sms_tencent".equalsIgnoreCase(type); + } + + @Override + public NoticeSendResult send( + String content, + String receivers, + cn.universal.manager.notice.model.NoticeChannel config, + Map params) { + try { + JSONObject configObj = parseConfig(config); + if (!validateConfig( + configObj, "secretId", "secretKey", "signName", "templateCode", "receivers")) { + String errMsg = "配置不完整"; + logSend("SmsTencent", content, receivers, false, errMsg); + return NoticeSendResult.builder() + .success(false) + .receivers(receivers) + .content(content) + .errorMessage(errMsg) + .build(); + } + Credential cred = + new Credential(configObj.getStr("secretId"), configObj.getStr("secretKey")); + SmsClient client = new SmsClient(cred, "ap-guangzhou"); + String[] templateParams; + if (params != null && !params.isEmpty()) { + templateParams = params.values().stream().map(Object::toString).toArray(String[]::new); + } else { + templateParams = new String[] {content}; + } + SendSmsRequest request = new SendSmsRequest(); + request.setSmsSdkAppId("1400000000"); // 需要配置实际的SDK AppId + request.setSignName(configObj.getStr("signName")); + request.setTemplateId(configObj.getStr("templateCode")); + request.setTemplateParamSet(templateParams); + request.setPhoneNumberSet(new String[] {receivers}); + SendSmsResponse response = client.SendSms(request); + if (response.getSendStatusSet() != null && response.getSendStatusSet().length > 0) { + String status = response.getSendStatusSet()[0].getCode(); + if ("Ok".equals(status)) { + logSend("SmsTencent", content, receivers, true, "发送成功"); + return NoticeSendResult.builder() + .success(true) + .receivers(receivers) + .content(content) + .errorMessage(null) + .build(); + } else { + String errMsg = "腾讯云返回错误: " + response.getSendStatusSet()[0].getMessage(); + logSend("SmsTencent", content, receivers, false, errMsg); + return NoticeSendResult.builder() + .success(false) + .receivers(receivers) + .content(content) + .errorMessage(errMsg) + .build(); + } + } else { + String errMsg = "腾讯云返回空响应"; + logSend("SmsTencent", content, receivers, false, errMsg); + return NoticeSendResult.builder() + .success(false) + .receivers(receivers) + .content(content) + .errorMessage(errMsg) + .build(); + } + } catch (TencentCloudSDKException e) { + String errMsg = "腾讯云SDK异常: " + e.getMessage(); + logSend("SmsTencent", content, receivers, false, errMsg); + logger.error("腾讯云短信发送异常", e); + return NoticeSendResult.builder() + .success(false) + .receivers(receivers) + .content(content) + .errorMessage(errMsg) + .build(); + } catch (Exception e) { + String errMsg = "发送异常: " + e.getMessage(); + logSend("SmsTencent", content, receivers, false, errMsg); + logger.error("腾讯云短信发送异常", e); + return NoticeSendResult.builder() + .success(false) + .receivers(receivers) + .content(content) + .errorMessage(errMsg) + .build(); + } + } +} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/WeComNoticeSendChannel.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/WeComNoticeSendChannel.java new file mode 100644 index 0000000000000000000000000000000000000000..00264b8dfd8fb7d04796e9360bd7d95d3b024f53 --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/WeComNoticeSendChannel.java @@ -0,0 +1,28 @@ +package cn.universal.manager.notice.service.channel; + +import cn.universal.manager.notice.model.NoticeChannel; +import java.util.Map; +import org.springframework.stereotype.Component; + +@Component +public class WeComNoticeSendChannel implements NoticeSendChannel { + + @Override + public boolean support(String type) { + return "wecom".equalsIgnoreCase(type); + } + + @Override + public NoticeSendResult send( + String content, String receivers, NoticeChannel config, Map params) { + // 解析config.getConfig()为webhook等 + // TODO: 发送企业微信消息 + System.out.println("[WeCom] receivers=" + receivers + ", content=" + content); + return NoticeSendResult.builder() + .success(true) + .receivers(receivers) + .content(content) + .errorMessage(null) + .build(); + } +} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/WebhookNoticeSendChannel.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/WebhookNoticeSendChannel.java new file mode 100644 index 0000000000000000000000000000000000000000..fd8ed8e4692c8b4fb247239e7a6eca97d30fd06f --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/channel/WebhookNoticeSendChannel.java @@ -0,0 +1,103 @@ +package cn.universal.manager.notice.service.channel; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.Header; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONUtil; +import cn.hutool.json.JSONObject; +import cn.universal.manager.notice.model.NoticeChannel; +import java.util.Map; +import org.springframework.stereotype.Component; + +@Component +public class WebhookNoticeSendChannel extends AbstractNoticeSendChannel { + + @Override + public boolean support(String type) { + return "webhook".equalsIgnoreCase(type); + } + + @Override + public NoticeSendResult send( + String content, String receivers, NoticeChannel config, Map params) { + if (StrUtil.isBlank(content)) { + logSend("Webhook", content, receivers, false, "发送内容为空"); + return NoticeSendResult.builder() + .success(false) + .receivers(receivers) + .content(content) + .errorMessage("发送内容为空") + .build(); + } + JSONObject configObj = parseConfig(config); + String webhookUrl = configObj.getStr("webhook"); + String authTokenKey = configObj.getStr("AuthTokenKey"); + String tokenValue = configObj.getStr("TokenValue"); + if (StrUtil.isBlank(webhookUrl)) { + String errMsg = "Webhook地址未配置"; + logSend("Webhook", content, receivers, false, errMsg); + return NoticeSendResult.builder() + .success(false) + .receivers(receivers) + .content(content) + .errorMessage(errMsg) + .build(); + } + try { + HttpRequest httpRequest = HttpUtil.createPost(webhookUrl); + httpRequest.timeout(5000); // 默认5秒超时 + httpRequest.header(Header.CONTENT_TYPE, "application/json"); + // 自定义header + if (StrUtil.isNotBlank(tokenValue)) { + httpRequest.header( + StrUtil.isBlank(authTokenKey) ? Header.AUTHORIZATION.getValue() : authTokenKey, + tokenValue); + } + // 发送内容 + httpRequest.body(content); + HttpResponse response = httpRequest.execute(); + String result = response.body(); + int status = response.getStatus(); + logger.warn( + "[Webhook推送] url={}, status={}, body={}, result={}", webhookUrl, status, content, result); + if (status >= 200 && status < 300) { + logSend("Webhook", content, receivers, true, "发送成功"); + return NoticeSendResult.builder() + .success(true) + .receivers(receivers) + .content(content) + .errorMessage(null) + .build(); + } else { + String errMsg = "Webhook响应码:" + status + ", response=" + result; + logSend("Webhook", content, receivers, false, errMsg); + return NoticeSendResult.builder() + .success(false) + .receivers(receivers) + .content(content) + .errorMessage(errMsg) + .build(); + } + } catch (Exception e) { + String errMsg = "Webhook发送异常: " + e.getMessage(); + logSend("Webhook", content, receivers, false, errMsg); + return NoticeSendResult.builder() + .success(false) + .receivers(receivers) + .content(content) + .errorMessage(errMsg) + .build(); + } + } + + private boolean isJson(String str) { + try { + JSONUtil.parse(str); + return true; + } catch (Exception e) { + return false; + } + } +} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/impl/NoticeChannelServiceImpl.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/impl/NoticeChannelServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..cc51b1fb61ddd05f1c86e8c312818edd3ae8e39d --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/impl/NoticeChannelServiceImpl.java @@ -0,0 +1,74 @@ +package cn.universal.manager.notice.service.impl; + +import cn.universal.manager.notice.mapper.NoticeChannelMapper; +import cn.universal.manager.notice.model.NoticeChannel; +import cn.universal.manager.notice.service.NoticeChannelService; +import java.util.Date; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import tk.mybatis.mapper.entity.Example; + +@Service +public class NoticeChannelServiceImpl implements NoticeChannelService { + + @Autowired private NoticeChannelMapper noticeChannelMapper; + + @Override + public List list() { + return noticeChannelMapper.selectAll(); + } + + @Override + public List search(String name, String channelType, String status) { + Example example = new Example(NoticeChannel.class); + Example.Criteria criteria = example.createCriteria(); + + if (name != null && !name.trim().isEmpty()) { + criteria.andLike("name", "%" + name + "%"); + } + + if (channelType != null && !channelType.trim().isEmpty()) { + criteria.andEqualTo("channelType", channelType); + } + + if (status != null && !status.trim().isEmpty()) { + criteria.andEqualTo("status", status); + } + + example.orderBy("createTime").desc(); + return noticeChannelMapper.selectByExample(example); + } + + @Override + public void save(NoticeChannel channel) { + Date now = new Date(); + if (channel.getId() == null) { + // 新增 + channel.setCreateTime(now); + channel.setUpdateTime(now); + noticeChannelMapper.insert(channel); + } else { + // 更新 + channel.setUpdateTime(now); + noticeChannelMapper.updateByPrimaryKeySelective(channel); + } + } + + @Override + public void delete(Long id) { + noticeChannelMapper.deleteByPrimaryKey(id); + } + + @Override + public void deleteBatch(List ids) { + Example example = new Example(NoticeChannel.class); + example.createCriteria().andIn("id", ids); + noticeChannelMapper.deleteByExample(example); + } + + @Override + public NoticeChannel getById(Long id) { + return noticeChannelMapper.selectByPrimaryKey(id); + } +} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/impl/NoticeRecordServiceImpl.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/impl/NoticeRecordServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..25f50f329f75e20305a83baf6bb20daccb434514 --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/impl/NoticeRecordServiceImpl.java @@ -0,0 +1,46 @@ +package cn.universal.manager.notice.service.impl; + +import cn.hutool.core.util.StrUtil; +import cn.universal.manager.notice.mapper.NoticeSendRecordMapper; +import cn.universal.manager.notice.model.NoticeSendRecord; +import cn.universal.manager.notice.service.NoticeRecordService; +import java.util.List; +import org.springframework.stereotype.Service; +import tk.mybatis.mapper.entity.Example; + +@Service +public class NoticeRecordServiceImpl implements NoticeRecordService { + + private final NoticeSendRecordMapper recordMapper; + + public NoticeRecordServiceImpl(NoticeSendRecordMapper recordMapper) { + this.recordMapper = recordMapper; + } + + @Override + public void save(NoticeSendRecord record) { + record.setSendTime(new java.util.Date()); + recordMapper.insertSelective(record); + } + + @Override + public List list() { + return recordMapper.selectAll(); + } + + @Override + public List search(String keyword, String type, String status) { + Example example = new Example(NoticeSendRecord.class); + Example.Criteria c = example.createCriteria(); + if (StrUtil.isNotEmpty(keyword)) { + c.andLike("receivers", "%" + keyword + "%"); + } + if (StrUtil.isNotEmpty(type)) { + c.andEqualTo("status", type); + } + if (StrUtil.isNotEmpty(status)) { + c.andEqualTo("status", status); + } + return recordMapper.selectByExample(example); + } +} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/impl/NoticeServiceImpl.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/impl/NoticeServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..21727f09e3f7e327cf7874618e7022caff34796e --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/impl/NoticeServiceImpl.java @@ -0,0 +1,169 @@ +package cn.universal.manager.notice.service.impl; + +import cn.universal.manager.notice.model.NoticeChannel; +import cn.universal.manager.notice.model.NoticeSendRecord; +import cn.universal.manager.notice.model.NoticeSendRequest; +import cn.universal.manager.notice.model.NoticeTemplate; +import cn.universal.manager.notice.service.NoticeChannelService; +import cn.universal.manager.notice.service.NoticeRecordService; +import cn.universal.manager.notice.service.NoticeService; +import cn.universal.manager.notice.service.NoticeTemplateService; +import cn.universal.manager.notice.service.channel.NoticeSendChannel; +import cn.universal.manager.notice.service.channel.NoticeSendResult; +import cn.universal.manager.notice.util.TemplateUtil; +import java.util.Arrays; +import java.util.Date; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +@Service +@Slf4j +public class NoticeServiceImpl implements NoticeService { + + private final NoticeTemplateService templateService; + private final NoticeRecordService recordService; + private final NoticeChannelService noticeChannelService; + private final List channelList; + + public NoticeServiceImpl( + NoticeTemplateService templateService, + NoticeRecordService recordService, + NoticeChannelService noticeChannelService, + List channelList) { + this.templateService = templateService; + this.recordService = recordService; + this.noticeChannelService = noticeChannelService; + this.channelList = channelList; + } + + private String mergeReceivers( + String templateReceivers, String requestReceivers, Map params) { + String tpl = TemplateUtil.replaceParams(templateReceivers, params); + String req = TemplateUtil.replaceParams(requestReceivers, params); + if (!StringUtils.hasText(tpl)) { + return req; + } + if (!StringUtils.hasText(req)) { + return tpl; + } + Set set = new LinkedHashSet<>(); + set.addAll(Arrays.asList(tpl.split(","))); + set.addAll(Arrays.asList(req.split(","))); + return String.join(",", set); + } + + private static class SendContext { + + NoticeTemplate template; + NoticeChannel channelConfig; + NoticeSendChannel channel; + String content; + String mergedReceivers; + } + + private SendContext validateAndPrepare(NoticeSendRequest request) { + if (request == null || request.getTemplateId() == null) { + throw new IllegalArgumentException("模板ID不能为空"); + } + NoticeTemplate template = templateService.getById(request.getTemplateId()); + if (template == null) { + throw new IllegalArgumentException("通知模板不存在"); + } + if (!StringUtils.hasText(template.getContent())) { + throw new IllegalArgumentException("模板内容不能为空"); + } + NoticeChannel channelConfig = noticeChannelService.getById(template.getChannelId()); + if (channelConfig == null) { + throw new IllegalArgumentException("渠道配置不存在"); + } + NoticeSendChannel channel = + channelList.stream() + .filter(c -> c.support(channelConfig.getChannelType())) + .findFirst() + .orElseThrow( + () -> new IllegalArgumentException("不支持的通知类型:" + channelConfig.getChannelType())); + String content = TemplateUtil.replaceParams(template.getContent(), request.getParams()); + String mergedReceivers = + mergeReceivers(template.getReceivers(), request.getReceivers(), request.getParams()); + if (!StringUtils.hasText(mergedReceivers)) { + // throw new IllegalArgumentException("收件人为空"); + log.debug("推送消息渠道={},收件人为空,部分不需要收件人", request.getTemplateId()); + } + SendContext ctx = new SendContext(); + ctx.template = template; + ctx.channelConfig = channelConfig; + ctx.channel = channel; + ctx.content = content; + ctx.mergedReceivers = mergedReceivers; + return ctx; + } + + private NoticeSendRecord buildRecord(SendContext ctx, NoticeSendRequest request) { + NoticeSendRecord record = new NoticeSendRecord(); + record.setTemplateId(ctx.template.getId()); + record.setConfigId(ctx.channelConfig.getId()); + record.setReceivers(ctx.mergedReceivers); + record.setParams(request.getParams() != null ? request.getParams().toString() : null); + record.setSendTime(new Date()); + return record; + } + + @Override + public void send(NoticeSendRequest request) { + SendContext ctx; + try { + ctx = validateAndPrepare(request); + } catch (Exception e) { + throw new RuntimeException(e.getMessage(), e); + } + NoticeSendRecord record = buildRecord(ctx, request); + try { + NoticeSendResult result = + ctx.channel.send( + ctx.content, ctx.mergedReceivers, ctx.channelConfig, request.getParams()); + record.setStatus(result.isSuccess() ? "SUCCESS" : "FAIL"); + record.setResult(result.getErrorMessage() == null ? "OK" : result.getErrorMessage()); + if (!result.isSuccess()) { + throw new RuntimeException("消息推送失败: " + result.getErrorMessage()); + } + } finally { + recordService.save(record); + } + } + + @Override + public NoticeSendResult sendR(NoticeSendRequest request) { + SendContext ctx; + try { + ctx = validateAndPrepare(request); + } catch (Exception e) { + return NoticeSendResult.builder().success(false).errorMessage(e.getMessage()).build(); + } + NoticeSendRecord record = buildRecord(ctx, request); + NoticeSendResult result; + try { + result = + ctx.channel.send( + ctx.content, ctx.mergedReceivers, ctx.channelConfig, request.getParams()); + record.setStatus(result.isSuccess() ? "SUCCESS" : "FAIL"); + record.setResult(result.getErrorMessage() == null ? "OK" : result.getErrorMessage()); + } catch (Exception e) { + record.setStatus("FAIL"); + record.setResult(e.getMessage()); + log.error("推送消息失败", e); + result = + NoticeSendResult.builder() + .success(false) + .errorMessage("消息推送失败:" + e.getMessage()) + .build(); + } finally { + recordService.save(record); + } + return result; + } +} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/impl/NoticeTemplateServiceImpl.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/impl/NoticeTemplateServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..a2874243d8d12fc255f1f1369cea12a96e83b8e9 --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/service/impl/NoticeTemplateServiceImpl.java @@ -0,0 +1,155 @@ +package cn.universal.manager.notice.service.impl; + +import cn.hutool.core.util.StrUtil; +import cn.universal.manager.notice.mapper.NoticeTemplateMapper; +import cn.universal.manager.notice.model.NoticeChannel; +import cn.universal.manager.notice.model.NoticeTemplate; +import cn.universal.manager.notice.service.NoticeChannelService; +import cn.universal.manager.notice.service.NoticeTemplateService; +import cn.universal.manager.notice.service.channel.NoticeChannelFactory; +import cn.universal.manager.notice.service.channel.NoticeSendChannel; +import cn.universal.manager.notice.util.TemplateUtil; +import java.util.Date; +import java.util.List; +import java.util.Map; +import org.springframework.stereotype.Service; +import tk.mybatis.mapper.entity.Example; + +@Service +public class NoticeTemplateServiceImpl implements NoticeTemplateService { + + private final NoticeTemplateMapper templateMapper; + private final NoticeChannelService noticeChannelService; + private final NoticeChannelFactory channelFactory; + + public NoticeTemplateServiceImpl( + NoticeTemplateMapper templateMapper, + NoticeChannelService noticeChannelService, + NoticeChannelFactory channelFactory) { + this.templateMapper = templateMapper; + this.noticeChannelService = noticeChannelService; + this.channelFactory = channelFactory; + } + + @Override + public List list() { + return templateMapper.selectAll(); + } + + @Override + public void save(NoticeTemplate template) { + Date now = new Date(); + if (template.getId() == null) { + // 新增 + template.setCreateTime(now); + template.setUpdateTime(now); + templateMapper.insertSelective(template); + } else { + // 更新 + template.setUpdateTime(now); + templateMapper.updateByPrimaryKeySelective(template); + } + } + + @Override + public void delete(Long id) { + templateMapper.deleteByPrimaryKey(id); + } + + @Override + public NoticeTemplate getById(Long id) { + return templateMapper.selectByPrimaryKey(id); + } + + @Override + public List search(String name, String channelType, String status) { + Example example = new Example(NoticeTemplate.class); + Example.Criteria c = example.createCriteria(); + if (StrUtil.isNotEmpty(name)) { + c.andLike("name", "%" + name + "%"); + } + if (StrUtil.isNotEmpty(channelType)) { + c.andEqualTo("channelType", channelType); + } + if (StrUtil.isNotEmpty(status)) { + c.andEqualTo("status", status); + } + example.orderBy("createTime").desc(); + return templateMapper.selectByExample(example); + } + + @Override + public void deleteBatch(List ids) { + Example example = new Example(NoticeTemplate.class); + example.createCriteria().andIn("id", ids); + templateMapper.deleteByExample(example); + } + + @Override + public void enableBatch(List ids) { + if (ids == null || ids.isEmpty()) { + return; + } + Example example = new Example(NoticeTemplate.class); + example.createCriteria().andIn("id", ids); + NoticeTemplate update = new NoticeTemplate(); + update.setStatus("1"); // 启用 + templateMapper.updateByExampleSelective(update, example); + } + + @Override + public void disableBatch(List ids) { + if (ids == null || ids.isEmpty()) { + return; + } + Example example = new Example(NoticeTemplate.class); + example.createCriteria().andIn("id", ids); + NoticeTemplate update = new NoticeTemplate(); + update.setStatus("0"); // 停用 + templateMapper.updateByExampleSelective(update, example); + } + + @Override + public void testTemplate(Long templateId, String receivers, Object params) { + // 1. 获取模板 + NoticeTemplate template = getById(templateId); + if (template == null) { + throw new IllegalArgumentException("模板不存在"); + } + + // 2. 获取渠道配置 + NoticeChannel channelConfig = noticeChannelService.getById(template.getChannelId()); + if (channelConfig == null) { + throw new IllegalArgumentException("渠道配置不存在"); + } + + // 3. 替换参数 + Map paramMap = null; + if (params instanceof Map) { + paramMap = (Map) params; + } else { + paramMap = TemplateUtil.parseJson(TemplateUtil.toJson(params)); + } + + String content = TemplateUtil.replaceParams(template.getContent(), paramMap); + + // 4. 获取对应的通知渠道 + NoticeSendChannel channel = + channelFactory + .getChannel(template.getChannelType()) + .orElseThrow( + () -> new IllegalArgumentException("不支持的渠道类型: " + template.getChannelType())); + + // 5. 发送测试消息 + try { + channel.send(content, receivers, channelConfig, paramMap); + System.out.println( + "✅ 测试发送成功 - 模板: " + template.getName() + ", 渠道: " + template.getChannelType()); + } catch (Exception e) { + System.err.println( + "❌ 测试发送失败 - 模板: " + template.getName() + ", 渠道: " + template.getChannelType()); + System.err.println("错误信息: " + e.getMessage()); + throw new RuntimeException("测试发送失败", e); + } + } +} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/util/JsonDesensitizationUtil.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/util/JsonDesensitizationUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..4592e8cbef1ea6f64d902179e9a1d0ae6d96b907 --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/util/JsonDesensitizationUtil.java @@ -0,0 +1,104 @@ +package cn.universal.manager.notice.util; + +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import java.util.Iterator; +import java.util.Map; + +/** JSON脱敏工具类 用于检测和脱敏包含Secret关键字的字段 */ +public class JsonDesensitizationUtil { + + private static final String SECRET_KEYWORD = "secret"; + private static final String MASK_VALUE = "******"; + + /** + * 对JSON对象进行脱敏处理 + * + * @param jsonString JSON字符串 + * @return 脱敏后的JSON对象 + */ + public static JSONObject desensitize(String jsonString) { + if (jsonString == null || jsonString.trim().isEmpty()) { + return null; + } + + try { + JSONObject jsonObject = JSONUtil.parseObj(jsonString); + return desensitizeJsonObject(jsonObject); + } catch (Exception e) { + return null; + } + } + + /** + * 对JSONObject进行脱敏处理 + * + * @param jsonObject JSON对象 + * @return 脱敏后的JSON对象 + */ + public static JSONObject desensitizeJsonObject(JSONObject jsonObject) { + if (jsonObject == null) { + return null; + } + + JSONObject result = new JSONObject(); + Iterator> iterator = jsonObject.entrySet().iterator(); + + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + String key = entry.getKey(); + Object value = entry.getValue(); + + // 检查key是否包含Secret关键字(忽略大小写) + if (containsSecretKeyword(key)) { + // 脱敏处理 + result.put(key, MASK_VALUE); + } else if (value instanceof JSONObject) { + // 递归处理嵌套的JSONObject + result.put(key, desensitizeJsonObject((JSONObject) value)); + } else { + // 直接复制其他值 + result.put(key, value); + } + } + + return result; + } + + /** + * 检查字符串是否包含Secret关键字(忽略大小写) + * + * @param text 要检查的字符串 + * @return 是否包含Secret关键字 + */ + private static boolean containsSecretKeyword(String text) { + if (text == null) { + return false; + } + return text.toLowerCase().contains(SECRET_KEYWORD); + } + + /** + * 将Object转换为JSONObject并进行脱敏处理 + * + * @param obj 要处理的对象 + * @return 脱敏后的JSONObject + */ + public static JSONObject desensitizeObject(Object obj) { + if (obj == null) { + return null; + } + + try { + if (obj instanceof JSONObject) { + return desensitizeJsonObject((JSONObject) obj); + } else { + // 先转换为JSON字符串,再解析为JSONObject + String jsonString = JSONUtil.toJsonStr(obj); + return desensitize(jsonString); + } + } catch (Exception e) { + return null; + } + } +} diff --git a/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/util/TemplateUtil.java b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/util/TemplateUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..c70adf3b6ca5414398f80e62e2cad63c0700adac --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/main/java/cn/universal/manager/notice/util/TemplateUtil.java @@ -0,0 +1,53 @@ +package cn.universal.manager.notice.util; + +import com.fasterxml.jackson.databind.ObjectMapper; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class TemplateUtil { + + // 支持 #xxx 和 #{xxx} 两种格式(全部用普通字符串,不用字符串模板) + private static final Pattern PARAM_PATTERN = + Pattern.compile("#([a-zA-Z0-9_]+)|#\\{([a-zA-Z0-9_]+)\\}"); + private static final ObjectMapper objectMapper = new ObjectMapper(); + + /** 替换模板中的参数,兼容 #xxx 和 #{xxx} 两种格式 */ + public static String replaceParams(String template, Map params) { + if (template == null || params == null) { + return template; + } + Matcher matcher = PARAM_PATTERN.matcher(template); + StringBuffer result = new StringBuffer(); + while (matcher.find()) { + String paramName = matcher.group(1) != null ? matcher.group(1) : matcher.group(2); + Object value = params.get(paramName); + String replacement = value != null ? value.toString() : ""; + matcher.appendReplacement(result, Matcher.quoteReplacement(replacement)); + } + matcher.appendTail(result); + return result.toString(); + } + + /** 解析JSON字符串为Map */ + @SuppressWarnings("unchecked") + public static Map parseJson(String json) { + try { + if (json == null || json.trim().isEmpty()) { + return Map.of(); + } + return objectMapper.readValue(json, Map.class); + } catch (Exception e) { + return Map.of(); + } + } + + /** 将对象转换为JSON字符串 */ + public static String toJson(Object obj) { + try { + return objectMapper.writeValueAsString(obj); + } catch (Exception e) { + return "{}"; + } + } +} diff --git a/cn-universal-framework/cn-universal-notice/src/test/java/cn/universal/manager/notice/NoticeTest.java b/cn-universal-framework/cn-universal-notice/src/test/java/cn/universal/manager/notice/NoticeTest.java new file mode 100644 index 0000000000000000000000000000000000000000..67317b4e0622f521cc62a34351ca867e693ba0c0 --- /dev/null +++ b/cn-universal-framework/cn-universal-notice/src/test/java/cn/universal/manager/notice/NoticeTest.java @@ -0,0 +1,109 @@ +// package cn.universal.manager.notice; +// +// import cn.universal.manager.notice.model.NoticeSendChannel; +// import cn.universal.manager.notice.model.NoticeTemplate; +// import cn.universal.manager.notice.service.NoticeChannelService; +// import cn.universal.manager.notice.service.NoticeTemplateService; +// import cn.universal.manager.notice.util.TemplateUtil; +// import org.junit.jupiter.api.Test; +// import org.springframework.beans.factory.annotation.Autowired; +// import org.springframework.boot.test.context.SpringBootTest; +// +// import java.util.HashMap; +// import java.util.List; +// import java.util.Map; +// +// @SpringBootTest +// public class NoticeTest { +// +// @Autowired +// private NoticeChannelService noticeChannelService; +// +// @Autowired +// private NoticeTemplateService noticeTemplateService; +// +// @Test +// public void testChannelCRUD() { +// // 测试渠道CRUD操作 +// NoticeSendChannel channel = new NoticeSendChannel(); +// channel.setName("测试钉钉机器人"); +// channel.setChannelType("dingTalk"); +// channel.setConfig("{\"webhook\":\"https://test.com\",\"secret\":\"test\"}"); +// channel.setStatus("1"); +// channel.setRemark("测试渠道"); +// channel.setCreator("test"); +// +// // 保存 +// noticeChannelService.save(channel); +// System.out.println("保存渠道成功,ID: " + channel.getId()); +// +// // 查询 +// NoticeSendChannel saved = noticeChannelService.getById(channel.getId()); +// System.out.println("查询渠道: " + saved.getName()); +// +// // 搜索 +// List list = noticeChannelService.search("测试", "dingTalk", "1"); +// System.out.println("搜索到 " + list.size() + " 个渠道"); +// +// // 删除 +// noticeChannelService.delete(channel.getId()); +// System.out.println("删除渠道成功"); +// } +// +// @Test +// public void testTemplateCRUD() { +// // 测试模板CRUD操作 +// NoticeTemplate template = new NoticeTemplate(); +// template.setName("测试告警模板"); +// template.setChannelType("dingTalk"); +// template.setChannelId(1L); +// template.setContent("设备${deviceName}发生${alertLevel}级别告警:${alertMessage}"); +// template.setReceivers("[\"test_group\"]"); +// template.setStatus("1"); +// template.setRemark("测试模板"); +// template.setCreator("test"); +// +// // 保存 +// noticeTemplateService.save(template); +// System.out.println("保存模板成功,ID: " + template.getId()); +// +// // 查询 +// NoticeTemplate saved = noticeTemplateService.getById(template.getId()); +// System.out.println("查询模板: " + saved.getName()); +// +// // 搜索 +// List list = noticeTemplateService.search("测试", "dingTalk", "1"); +// System.out.println("搜索到 " + list.size() + " 个模板"); +// +// // 删除 +// noticeTemplateService.delete(template.getId()); +// System.out.println("删除模板成功"); +// } +// +// @Test +// public void testTemplateUtil() { +// // 测试模板工具类 +// String template = "设备${deviceName}发生${alertLevel}级别告警:${alertMessage},时间:${alertTime}"; +// +// Map params = new HashMap<>(); +// params.put("deviceName", "温度传感器001"); +// params.put("alertLevel", "严重"); +// params.put("alertMessage", "温度过高报警"); +// params.put("alertTime", "2024-01-15 14:30:25"); +// +// String result = TemplateUtil.replaceParams(template, params); +// System.out.println("模板替换结果: " + result); +// } +// +// @Test +// public void testTemplateTest() { +// // 测试模板测试功能 +// Map params = new HashMap<>(); +// params.put("deviceName", "温度传感器001"); +// params.put("alertLevel", "严重"); +// params.put("alertMessage", "温度过高报警"); +// params.put("alertTime", "2024-01-15 14:30:25"); +// +// noticeTemplateService.testTemplate(1L, "test_group", params); +// } +// } diff --git a/cn-universal-framework/cn-universal-oss/src/main/java/cn/universal/ossm/oss/service/impl/QiniuCloudStorageServiceImpl.java b/cn-universal-framework/cn-universal-oss/src/main/java/cn/universal/ossm/oss/service/impl/QiniuCloudStorageServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..25d943791a748909928ea17d4684ad2a495c2810 --- /dev/null +++ b/cn-universal-framework/cn-universal-oss/src/main/java/cn/universal/ossm/oss/service/impl/QiniuCloudStorageServiceImpl.java @@ -0,0 +1,133 @@ +/* + * + * Copyright (c) 2025, IoT-Universal. All Rights Reserved. + * + * @Description: 七牛云存储实现 + * + */ + +package cn.universal.ossm.oss.service.impl; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import cn.universal.common.exception.IoTException; +import cn.universal.ossm.oss.entity.UploadResult; +import cn.universal.ossm.oss.properties.CloudStorageProperties; +import cn.universal.ossm.oss.service.ICloudStorageService; +import com.qiniu.storage.Configuration; +import com.qiniu.storage.Region; +import com.qiniu.storage.UploadManager; +import com.qiniu.storage.model.DefaultPutRet; +import com.qiniu.util.Auth; +import com.qiniu.util.StringMap; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import org.springframework.stereotype.Service; + +@Service +public class QiniuCloudStorageServiceImpl implements ICloudStorageService { + + @Resource private CloudStorageProperties properties; + + private UploadManager uploadManager; + + @PostConstruct + public void init() { + CloudStorageProperties.QiniuProperties cfg = properties.getQiniu(); + Region region = Region.autoRegion(); + Configuration configuration = new Configuration(region); + this.uploadManager = new UploadManager(configuration); + } + + @Override + public void createBucket() {} + + @Override + public String getServiceType() { + return "qiniu"; + } + + @Override + public String getPath(String prefix, String suffix) { + StringBuilder path = new StringBuilder(); + if (StrUtil.isNotBlank(prefix)) { + path.append(prefix); + } + path.append(System.currentTimeMillis()); + if (StrUtil.isNotBlank(suffix)) { + path.append(suffix); + } + return path.toString(); + } + + private String getUpToken() { + CloudStorageProperties.QiniuProperties cfg = properties.getQiniu(); + Auth auth = Auth.create(cfg.getAccessKey(), cfg.getSecretKey()); + StringMap putPolicy = new StringMap(); + return auth.uploadToken(cfg.getBucketName(), null, 3600, putPolicy); + } + + private String buildUrl(String key) { + CloudStorageProperties.QiniuProperties cfg = properties.getQiniu(); + String domain = cfg.getDomain(); + if (Boolean.TRUE.equals(cfg.getIsHttps())) { + domain = domain.replaceFirst("^http://", "https://"); + } + if (!domain.startsWith("http")) { + domain = (Boolean.TRUE.equals(cfg.getIsHttps()) ? "https://" : "http://") + domain; + } + return domain + "/" + key; + } + + @Override + public UploadResult upload(byte[] data, String path, String contentType) { + try { + String token = getUpToken(); + String key = path; + com.qiniu.http.Response response = + uploadManager.put(new ByteArrayInputStream(data), key, token, null, contentType); + if (!response.isOK()) { + throw new IoTException("七牛上传失败:" + response.toString()); + } + DefaultPutRet putRet = JSONUtil.toBean(response.bodyString(), DefaultPutRet.class); + String url = buildUrl(putRet.key); + return new UploadResult().setUrl(url).setFilename(putRet.key); + } catch (Exception e) { + throw new IoTException("七牛上传异常", e); + } + } + + @Override + public void delete(String path) { + // 可按需实现:调用 BucketManager 删除 + } + + @Override + public UploadResult uploadSuffix(byte[] data, String suffix, String contentType) { + String path = getPath(properties.getQiniu().getPrefix(), suffix); + return upload(data, path, contentType); + } + + @Override + public UploadResult upload(InputStream inputStream, String path, String contentType) { + try { + byte[] bytes = inputStream.readAllBytes(); + return upload(bytes, path, contentType); + } catch (Exception e) { + throw new IoTException("七牛上传异常", e); + } + } + + @Override + public UploadResult uploadSuffix(InputStream inputStream, String suffix, String contentType) { + String path = getPath(properties.getQiniu().getPrefix(), suffix); + return upload(inputStream, path, contentType); + } + + @Override + public String getEndpointLink() { + return properties.getQiniu().getDomain(); + } +} diff --git a/cn-universal-infrastructure/cn-universal-security/src/main/java/cn/universal/security/DefaultSecurityConfig.java b/cn-universal-infrastructure/cn-universal-security/src/main/java/cn/universal/security/DefaultSecurityConfig.java index 3ecb01bf3e082de0a5c14062a4da2588deb2d4dd..8d5d7023b375a6f642b6765dadc85b98f41db7d5 100644 --- a/cn-universal-infrastructure/cn-universal-security/src/main/java/cn/universal/security/DefaultSecurityConfig.java +++ b/cn-universal-infrastructure/cn-universal-security/src/main/java/cn/universal/security/DefaultSecurityConfig.java @@ -167,8 +167,11 @@ public class DefaultSecurityConfig { .permitAll() .requestMatchers("/emqx/**") .permitAll() + .requestMatchers("/ct/aiot/**") + .permitAll() // 测试接口 .requestMatchers("/test/**") + .permitAll() .requestMatchers("/monitor/**") .permitAll() @@ -227,6 +230,8 @@ public class DefaultSecurityConfig { // 测试和监控点 .requestMatchers("/test/**", "/monitor/**") .permitAll() + .requestMatchers("/ct/aiot/**") + .permitAll() // 前端相关 .requestMatchers( "/js/**", diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/base/CommonRequest.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/base/CommonRequest.java index 99233920d1c717b0246c233ac2e3c07d6c33d87f..37249d42dbd0e1a4fb00232840c8831bb0fa880f 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/base/CommonRequest.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/base/CommonRequest.java @@ -30,22 +30,17 @@ import lombok.extern.slf4j.Slf4j; @Slf4j public class CommonRequest { - /** - * http请求超时时间 - */ + /** http请求超时时间 */ private static final Integer HTTP_TIME_OUT = 1200; - /** - * URL状态信息 - */ + /** URL状态信息 */ public static class UrlStatus { private int failureCount = 0; private long lastFailureTime = 0; private long nextAllowTime = 0; - public UrlStatus() { - } + public UrlStatus() {} public int getFailureCount() { return failureCount; @@ -75,25 +70,19 @@ public class CommonRequest { private static String CACHE_NOTICE = "DNotice:"; // 存储URL状态信息,30分钟后过期 - private static Cache urlStatusCache = Caffeine.newBuilder() - .expireAfterWrite(30, TimeUnit.MINUTES).maximumSize(256).build(); + private static Cache urlStatusCache = + Caffeine.newBuilder().expireAfterWrite(30, TimeUnit.MINUTES).maximumSize(256).build(); - /** - * 分级阈值配置 - */ + /** 分级阈值配置 */ private static final int LEVEL_1_THRESHOLD = 3; // 轻微故障阈值 private static final int LEVEL_2_THRESHOLD = 6; // 中等故障阈值 private static final int LEVEL_3_THRESHOLD = 10; // 严重故障阈值 - /** - * 基础延迟时间(秒) - */ + /** 基础延迟时间(秒) */ private static final int BASE_DELAY_SECONDS = 30; - /** - * 最大延迟时间(分钟) - */ + /** 最大延迟时间(分钟) */ private static final int MAX_DELAY_MINUTES = 10; private static ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor(); @@ -115,8 +104,7 @@ public class CommonRequest { if (isUrlBlocked(url)) { UrlStatus status = urlStatusCache.getIfPresent(url); long remainingSeconds = (status.getNextAllowTime() - System.currentTimeMillis()) / 1000; - log.warn("当前地址[{}]因连续失败{}次,暂时限制访问,还需等待{}秒", url, - status.getFailureCount(), remainingSeconds); + log.warn("当前地址[{}]因连续失败{}次,暂时限制访问,还需等待{}秒", url, status.getFailureCount(), remainingSeconds); return null; } @@ -124,7 +112,7 @@ public class CommonRequest { HttpRequest request = HttpUtil.createPost(url); request.timeout(HTTP_TIME_OUT); String timestamp = String.valueOf(System.currentTimeMillis()); - String signature = String.valueOf((timestamp + url).hashCode()); + String signature = MD5.create().digestHex16((timestamp + body)); request.header("X-Timestamp", timestamp); request.header("X-Signature", signature); request.header(Header.CONTENT_TYPE, "application/json"); @@ -146,9 +134,7 @@ public class CommonRequest { return null; } - /** - * 检查URL是否被阻止 - */ + /** 检查URL是否被阻止 */ private static boolean isUrlBlocked(String url) { UrlStatus status = urlStatusCache.getIfPresent(url); if (status == null) { @@ -159,9 +145,7 @@ public class CommonRequest { return currentTime < status.getNextAllowTime(); } - /** - * 处理请求成功 - */ + /** 处理请求成功 */ private static void handleSuccess(String url) { UrlStatus status = urlStatusCache.getIfPresent(url); if (status != null) { @@ -172,9 +156,7 @@ public class CommonRequest { } } - /** - * 处理请求失败 - 智能退避策略 - */ + /** 处理请求失败 - 智能退避策略 */ private static void handleFailure(String url) { UrlStatus status = urlStatusCache.getIfPresent(url); if (status == null) { @@ -190,8 +172,12 @@ public class CommonRequest { status.setNextAllowTime(System.currentTimeMillis() + delayMillis); String delayInfo = formatDelayInfo(delayMillis); - log.warn("URL[{}]第{}次失败,采用{}策略,下次可访问时间:{}", url, failureCount, - getStrategyLevel(failureCount), delayInfo); + log.warn( + "URL[{}]第{}次失败,采用{}策略,下次可访问时间:{}", + url, + failureCount, + getStrategyLevel(failureCount), + delayInfo); // 严重故障时发送通知 if (failureCount >= LEVEL_3_THRESHOLD) { @@ -199,9 +185,7 @@ public class CommonRequest { } } - /** - * 计算延迟时间 - 指数退避算法 - */ + /** 计算延迟时间 - 指数退避算法 */ private static long calculateDelay(int failureCount) { if (failureCount <= 1) { return 0; // 首次失败不延迟 @@ -226,9 +210,7 @@ public class CommonRequest { return delaySeconds * 1000; // 转换为毫秒 } - /** - * 获取策略级别描述 - */ + /** 获取策略级别描述 */ private static String getStrategyLevel(int failureCount) { if (failureCount <= LEVEL_1_THRESHOLD) { return "轻微故障-线性退避"; @@ -239,9 +221,7 @@ public class CommonRequest { } } - /** - * 格式化延迟信息 - */ + /** 格式化延迟信息 */ private static String formatDelayInfo(long delayMillis) { long seconds = delayMillis / 1000; if (seconds < 60) { @@ -257,16 +237,15 @@ public class CommonRequest { } } - /** - * 发送失败通知 - */ + /** 发送失败通知 */ private static void sendFailureNotification(String url, int failureCount) { String noticeKey = CACHE_NOTICE + url; UrlStatus noticeStatus = urlStatusCache.getIfPresent(noticeKey); // 每小时最多发送一次通知 - if (noticeStatus == null || (System.currentTimeMillis() - noticeStatus.getLastFailureTime()) - > TimeUnit.HOURS.toMillis(1)) { + if (noticeStatus == null + || (System.currentTimeMillis() - noticeStatus.getLastFailureTime()) + > TimeUnit.HOURS.toMillis(1)) { log.error("严重故障警告:URL[{}]连续失败{}次,已进入长时间限制状态", url, failureCount); @@ -276,6 +255,7 @@ public class CommonRequest { urlStatusCache.put(noticeKey, newNoticeStatus); // TODO: 集成钉钉/企微等通知 + // DingTalkUtil.send("严重故障:地址 " + url + " 连续失败 " + failureCount + " 次"); } } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/base/IoTDownAdapter.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/base/IoTDownAdapter.java index f7b70c19af460923d2d72ba26a66b2903bc1f806..0f9ea8d1b6e78959f656c10f682ad04d33b85232 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/base/IoTDownAdapter.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/base/IoTDownAdapter.java @@ -178,7 +178,7 @@ public abstract class IoTDownAdapter { .createTime(System.currentTimeMillis() / 1000) .deviceName(downRequest.getData().getStr("deviceName", downRequest.getDeviceId())) .state(DeviceStatus.offline.getCode()) - .iotId(IdUtil.simpleUUID()) + .iotId(downRequest.getProductKey()+downRequest.getDeviceId()) .application(downRequest.getApplicationId()) .creatorId(downRequest.getAppUnionId()) .productName(downRequest.getIoTProduct().getName()) diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTCertificate.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTCertificate.java index 89172b5bddeb93e958dd3aa76beca2fac0d8e14d..eacbbff14db18f3a44376e2401ab7c8c3a51a488 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTCertificate.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTCertificate.java @@ -17,8 +17,7 @@ import lombok.NoArgsConstructor; @Builder public class IoTCertificate implements Serializable { - @Id - private Long id; + @Id private Long id; @Column(name = "ssl_key") private String sslKey; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDashboardStatistics.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDashboardStatistics.java index 6623cef040a72bd5d1e441df5fba459f41de0cd0..fe0e70125349c0557ab9fe16505452147b6820f9 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDashboardStatistics.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDashboardStatistics.java @@ -32,51 +32,35 @@ public class IoTDashboardStatistics implements Serializable { @KeySql(useGeneratedKeys = true) private Long id; - /** - * 统计日期 - */ + /** 统计日期 */ @Column(name = "stat_date") private LocalDate statDate; - /** - * 产品Key,NULL表示全产品 - */ + /** 产品Key,NULL表示全产品 */ @Column(name = "product_key") private String productKey; - /** - * 推送渠道,NULL表示全渠道 - */ + /** 推送渠道,NULL表示全渠道 */ @Column(name = "channel") private String channel; - /** - * 指标类型 - */ + /** 指标类型 */ @Column(name = "metric_type") private String metricType; - /** - * 指标值 - */ + /** 指标值 */ @Column(name = "metric_value") private Long metricValue; - /** - * 创建时间 - */ + /** 创建时间 */ @Column(name = "create_time") private LocalDateTime createTime; - /** - * 更新时间 - */ + /** 更新时间 */ @Column(name = "update_time") private LocalDateTime updateTime; - /** - * 指标类型枚举 - */ + /** 指标类型枚举 */ public enum MetricType { DEVICE_TOTAL("device_total", "设备总数"), DEVICE_ONLINE("device_online", "在线设备数"), diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDevice.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDevice.java index 7d8cdd8e9ea26dcff3cc9632ddcab014a5845eec..35601d8a3014674abd87574857154230b1e90b27 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDevice.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDevice.java @@ -33,90 +33,63 @@ import lombok.NoArgsConstructor; public class IoTDevice implements Serializable { private static final long serialVersionUID = 1L; - @Id - private Long id; + @Id private Long id; - /** - * 对外设备唯一标识符 - */ + /** 对外设备唯一标识符 */ @Column(name = "iot_id") private String iotId; - /** - * 设备自身序号 - */ + /** 设备自身序号 */ @Excel(name = "设备序列号") @Column(name = "device_id") private String deviceId; - /** - * 实例名称 - */ + /** 实例名称 */ // @Excel(name = "实例名称") @Column(name = "instance") private String instance; - /** - * 归属应用 - */ + /** 归属应用 */ @Column(name = "application") private String application; - /** - * 激活时间 - */ + /** 激活时间 */ @Column(name = "registry_time") private Integer registryTime; - /** - * 最后上线时间 - */ + /** 最后上线时间 */ @Column(name = "online_time") private Long onlineTime; - /** - * 第三方设备ID唯一标识符 - */ + /** 第三方设备ID唯一标识符 */ @Column(name = "ext_device_id") private String extDeviceId; - /** - * 别名 - */ + /** 别名 */ @Column(name = "nick_name") private String nickName; - /** - * 设备名称 - */ + /** 设备名称 */ @Column(name = "product_name") private String productName; private Long features; - /** - * 网关产品ProductKey - */ + /** 网关产品ProductKey */ @Excel(name = "网关产品ProductKey") @Column(name = "gw_product_key") private String gwProductKey; - /** - * 设备密钥 - */ + /** 设备密钥 */ @Excel(name = "设备密钥") @Column(name = "device_secret") private String deviceSecret; - /** - * 产品key - */ + /** 产品key */ @Column(name = "product_key") private String productKey; - /** - * 设备实例名称 - */ + /** 设备实例名称 */ @Excel(name = "设备名称") @Column(name = "device_name") private String deviceName; @@ -127,68 +100,46 @@ public class IoTDevice implements Serializable { @Column(name = "creator_name") private String creatorName; - /** - * 0-离线,1-在线 - */ + /** 0-离线,1-在线 */ @Excel(name = "在线状态") private Boolean state; - /** - * 说明 - */ + /** 说明 */ @Excel(name = "备注") private String detail; @Column(name = "create_time") private Long createTime; - /** - * 派生元数据,有的设备的属性,功能,事件可能会动态的添加 - */ + /** 派生元数据,有的设备的属性,功能,事件可能会动态的添加 */ @Column(name = "derive_metadata") private String deriveMetadata; - /** - * 其他配置 - */ + /** 其他配置 */ @Column(name = "configuration") private String configuration; - /** - * 区域ID - */ + /** 区域ID */ private String areasId; - /** - * 坐标 - */ + /** 坐标 */ // @Excel(name = "设备坐标") private String coordinate; - @Transient - private String deviceNode; + @Transient private String deviceNode; - /** - * 纬度 - */ + /** 纬度 */ @Excel(name = "纬度") private transient String latitude; - /** - * 经度 - */ + /** 经度 */ @Excel(name = "经度") private transient String longitude; - /** - * 请求参数 - */ - @Builder.Default - private Map params = new HashMap<>(); + /** 请求参数 */ + @Builder.Default private Map params = new HashMap<>(); - /** - * 接收额外参数 - */ + /** 接收额外参数 */ @Excel(name = "其他配置") @Builder.Default private Map otherParams = new HashMap<>(); diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceEvents.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceEvents.java index 6237d5cb153cfdc6957c711604cafcaad61d2010..40bb95d2f0dc6d92c13ade11f827f99ea3633eb4 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceEvents.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceEvents.java @@ -20,34 +20,22 @@ import lombok.Data; @Builder public class IoTDeviceEvents implements Serializable { - /** - * 事件标识 - */ + /** 事件标识 */ private String id; - /** - * 事件名称 - */ + /** 事件名称 */ private String name; - /** - * 事件级别 - */ + /** 事件级别 */ private String level; - /** - * 描述 - */ + /** 描述 */ private String description; - /** - * 事件总数 - */ + /** 事件总数 */ private String qty; - /** - * 最新事件上报时间 - */ + /** 最新事件上报时间 */ private String time; // 是否设置存储策略 diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceFenceRel.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceFenceRel.java index ad26a75b07b47bf39ad44f6de6d930c57c37f3ef..e7035176a5a286ca086db8fa859117d4f6cd22ba 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceFenceRel.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceFenceRel.java @@ -33,31 +33,20 @@ import lombok.NoArgsConstructor; @Builder public class IoTDeviceFenceRel implements Serializable { - @Id - private Long id; + @Id private Long id; - /** - * 围栏id - */ + /** 围栏id */ private Long fenceId; - /** - * 设备唯一标识符 - */ + /** 设备唯一标识符 */ private String iotId; - /** - * 设备序列号 - */ + /** 设备序列号 */ private String deviceId; - /** - * 创建人 - */ + /** 创建人 */ private String creatorId; - /** - * 创建时间 - */ + /** 创建时间 */ private Date createDate; } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceFunction.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceFunction.java index eb2e9c6d0dc89cbcbac4a108e450c644c77d21eb..89362d9ea899f97e5690f83bca4f09f8800d4f48 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceFunction.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceFunction.java @@ -20,33 +20,21 @@ import lombok.Data; @Builder public class IoTDeviceFunction implements Serializable { - /** - * 功能标识 - */ + /** 功能标识 */ private String id; - /** - * 功能名称 - */ + /** 功能名称 */ private String name; - /** - * 是否是配置 - */ + /** 是否是配置 */ private boolean config; - /** - * 描述 - */ + /** 描述 */ private String description; - /** - * 功能来源 - */ + /** 功能来源 */ private String source; - /** - * 输入 - */ + /** 输入 */ private String inputs; } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceFunctionTask.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceFunctionTask.java index 48905f03600a35459072cda994d922449404d890..5bd1a94c56a8237659dbbde3c828ba15f4bfcd9b 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceFunctionTask.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceFunctionTask.java @@ -55,8 +55,6 @@ public class IoTDeviceFunctionTask implements Serializable { private String command; private String commandData; - /** - * 状态 0.待执行;1.已执行;2.正在执行 - */ + /** 状态 0.待执行;1.已执行;2.正在执行 */ private Integer status; } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceGeoFence.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceGeoFence.java index 4666bc22858f40974cfa42df3574669261a92023..2cb0b8bf04bf11aa0b2c521405ac38dcd1473c93 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceGeoFence.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceGeoFence.java @@ -42,86 +42,53 @@ public class IoTDeviceGeoFence implements Serializable { @KeySql(genId = SQenGenId.class) private Long id; - /** - * 围栏名称 - */ + /** 围栏名称 */ private String name; - /** - * 围栏状态 0.启用 1.停用 - */ + /** 围栏状态 0.启用 1.停用 */ private Integer status; - /** - * 触发模式 in.进入 out.离开 all.进入&离开 - */ + /** 触发模式 in.进入 out.离开 all.进入&离开 */ private String touchWay; - /** - * 范围 - */ + /** 范围 */ private String fence; - /** - * 类型 circle.圆 polygon.多边形 - */ + /** 类型 circle.圆 polygon.多边形 */ private String type; - /** - * 圆形中心点 - */ + /** 圆形中心点 */ private String point; - /** - * 半径 - */ + /** 半径 */ private BigDecimal radius; - /** - * 创建人 - */ + /** 创建人 */ private String creatorId; - /** - * 周触发(天) - */ + /** 周触发(天) */ private String weekTime; - /** - * 天触发开始时间(时) - */ + /** 天触发开始时间(时) */ private String beginTime; - /** - * 天触发结束时间(时) - */ + /** 天触发结束时间(时) */ private String endTime; - /** - * 归属第三方应用 - */ + /** 归属第三方应用 */ private String creatorUser; - @Transient - private List queryUserList; + @Transient private List queryUserList; - /** - * 创建时间 - */ + /** 创建时间 */ private Date createDate; - /** - * 更新时间 - */ + /** 更新时间 */ private Date updateDate; - /** - * 不触发时间 - */ + /** 不触发时间 */ private String noTriggerTime; - /** - * 延迟时间 分钟 - */ + /** 延迟时间 分钟 */ private Integer delayTime; } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceGroup.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceGroup.java index 100530fdbcf1abe4c7ca5d77eed7e63c72b99886..0ac91d3efd4b8599e66afbbb6cacd663000e4a9f 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceGroup.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceGroup.java @@ -32,76 +32,52 @@ public class IoTDeviceGroup implements Serializable { private static final long serialVersionUID = 1L; - /** - * 分组ID,非自增 - */ + /** 分组ID,非自增 */ @Id @KeySql(genId = SQenGenId.class) private Long id; - /** - * 分组名称 - */ + /** 分组名称 */ @Column(name = "group_name") private String groupName; - /** - * 分组标识 - */ + /** 分组标识 */ @Column(name = "group_code") private String groupCode; - /** - * 群组描述 - */ + /** 群组描述 */ @Column(name = "group_describe") private String groupDescribe; - /** - * 父id - */ + /** 父id */ @Column(name = "parent_id") private Long parentId; - /** - * 是否有子分组 - */ + /** 是否有子分组 */ @Column(name = "has_child") private Integer hasChild; - /** - * 分组级别 - */ + /** 分组级别 */ @Column(name = "group_level") private Integer groupLevel; - /** - * 激活设备数 - */ + /** 激活设备数 */ @Column(name = "relat_dev_count") private Integer relatDevCount; - /** - * 关联设备树 - */ + /** 关联设备树 */ @Column(name = "active_dev_count") private Integer activeDevCount; - /** - * 创建人 - */ + /** 创建人 */ @Column(name = "creator_id") private String creatorId; - /** - * 实例编号 - */ + /** 实例编号 */ @Column(name = "instance") private String instance; - /** - * 标签 - */ + /** 标签 */ @Column(name = "tag") private String tag; } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceLog.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceLog.java index 14b9ecf065f23498d2d5de67171dcd9758858a3c..ebd3b67863c999ac098a0904bf860641310fec03 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceLog.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceLog.java @@ -16,6 +16,7 @@ import jakarta.persistence.Column; import jakarta.persistence.Id; import jakarta.persistence.Table; import java.io.Serializable; +import java.time.LocalDateTime; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -28,83 +29,47 @@ import lombok.NoArgsConstructor; @Builder public class IoTDeviceLog implements Serializable { - @Id - private Long id; + @Id private Long id; - /** - * 唯一编码 - */ - @Column(name = "iot_id") + /** 唯一编码 */ + @Column(name = "iot_id", length = 128) private String iotId; - /** - * 设备自身序号 - */ + /** 设备自身序号 */ @Column(name = "device_id") private String deviceId; - /** - * 第三方设备ID唯一标识符 - */ - // @Transient - @Column(name = "ext_device_id") - private String extDeviceId; - /** - * 产品ID - */ + /** 产品ID */ @Column(name = "product_key") private String productKey; - /** - * 设备名称 - */ + /** 设备名称 */ @Column(name = "device_name") private String deviceName; - /** - * 消息类型 - */ + /** 消息类型 */ @Column(name = "message_type") private String messageType; - /** - * 指令ID - */ + /** 指令ID */ @Column(name = "command_id") private String commandId; - /** - * 指令ID - */ + /** 指令ID */ @Column(name = "command_status") private Integer commandStatus; - /** - * 创建人 - */ - @Column(name = "create_id") - private String createId; - /** - * 事件名称 - */ + /** 事件名称 */ private String event; - /** - * 实例名称 - */ - private String instance; - /** - * 创建时间 - */ + /** 创建时间 */ @Column(name = "create_time") - private Long createTime; + private LocalDateTime createTime; - /** - * 内容 - */ + /** 内容 */ private String content; private String point; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceLogMetadata.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceLogMetadata.java index a4d44407a55cb01cae92b96b4ab208c9dcd56bc2..7fe4ea875d7a93c13e10407d46aec0f2ad0ca575 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceLogMetadata.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceLogMetadata.java @@ -16,6 +16,7 @@ import jakarta.persistence.Column; import jakarta.persistence.Id; import jakarta.persistence.Table; import java.io.Serializable; +import java.time.LocalDateTime; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -28,38 +29,30 @@ import lombok.NoArgsConstructor; @Builder public class IoTDeviceLogMetadata implements Serializable { - @Id - private Long id; + @Id private Long id; @Column(name = "iot_id") private String iotId; - /** - * 产品唯一标识 - */ + /** 产品唯一标识 */ @Column(name = "product_key") private String productKey; - /** - * 设备名称 - */ - @Column(name = "device_name") + /** 设备名称 */ + @Column(name = "device_name", length = 64) private String deviceName; - @Column(name = "device_id") + @Column(name = "device_id", length = 64) private String deviceId; - /** - * 消息类型 - */ + /** 消息类型 */ @Column(name = "message_type") private String messageType; + @Column(length = 32) private String event; - /** - * 属性 - */ + /** 属性 */ private String property; private String ext1; @@ -68,15 +61,11 @@ public class IoTDeviceLogMetadata implements Serializable { private String ext3; - /** - * 发生时间 - */ + /** 发生时间 */ @Column(name = "create_time") - private Integer createTime; + private LocalDateTime createTime; - /** - * 其他 - */ + /** 其他 */ private String content; private static final long serialVersionUID = 1L; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceProperties.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceProperties.java index ab1fb34b96b142acca787b2f26592490e14f3351..efa9ef2a02c3e9de7c1f81d8c912a723112f1fe8 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceProperties.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceProperties.java @@ -22,43 +22,27 @@ public class IoTDeviceProperties implements Serializable { private static final long serialVersionUID = 1L; - /** - * 属性标识 - */ + /** 属性标识 */ private String id; - /** - * 属性名称 - */ + /** 属性名称 */ private String name; - /** - * 数据类型 - */ + /** 数据类型 */ private String type; - /** - * 属性值来源 - */ + /** 属性值来源 */ private String source; - /** - * 单位 - */ + /** 单位 */ private String unit; - /** - * 枚举键值 - */ + /** 枚举键值 */ private String elements; - /** - * 描述 - */ + /** 描述 */ private String description; - /** - * 读写 - */ + /** 读写 */ private String mode; } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceProtocol.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceProtocol.java index 9e3de7b69ce49574d45129203685cc83a586030f..ed6c7a0cbcec3770c30bc43b9d128617d20ff46d 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceProtocol.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceProtocol.java @@ -36,8 +36,7 @@ public class IoTDeviceProtocol implements Serializable { private String name; private String description; private Byte state; - @Id - private String id; + @Id private String id; private String type; private String configuration; private String example; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceRuleLog.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceRuleLog.java index 299b6707211c56b2405f5aede0f39df356826856..e8402cf97f5224211575efa4f4e93da057dbb141 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceRuleLog.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceRuleLog.java @@ -29,36 +29,25 @@ import lombok.NoArgsConstructor; @Builder public class IoTDeviceRuleLog implements Serializable { - @Id - private Long id; + @Id private Long id; - /** - * 业务ID - */ + /** 业务ID */ @Column(name = "c_id") private String cId; - /** - * 业务名称 - */ + /** 业务名称 */ @Column(name = "c_name") private String cName; - /** - * 执行状态 - */ + /** 执行状态 */ @Column(name = "c_status") private Byte cStatus; - /** - * 1-场景联动,2-数据流转 - */ + /** 1-场景联动,2-数据流转 */ @Column(name = "c_type") private Byte cType; - /** - * 条件 - */ + /** 条件 */ private String conditions; @Column(name = "create_time") diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceShadow.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceShadow.java index df8c12cb0ed4c3ad6aaa829434bc63364b329c17..d815aa16cf21fc1b65bd363a30cae5d676d40a5a 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceShadow.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceShadow.java @@ -29,60 +29,41 @@ import lombok.NoArgsConstructor; @Builder public class IoTDeviceShadow implements Serializable { - @Id - private Long id; + @Id private Long id; - /** - * 本平台设备唯一标识符 - */ + /** 本平台设备唯一标识符 */ @Column(name = "iot_id") private String iotId; - /** - * 产品KEY - */ + /** 产品KEY */ @Column(name = "product_key") private String productKey; - /** - * 设备自身序号 - */ + /** 设备自身序号 */ @Column(name = "device_id") private String deviceId; - /** - * 第三方平台设备ID唯一标识符 - */ + /** 第三方平台设备ID唯一标识符 */ @Column(name = "ext_device_id") private String extDeviceId; - /** - * 注册时间 - */ + /** 注册时间 */ @Column(name = "active_time") private Date activeTime; - /** - * 激活时间 - */ + /** 激活时间 */ @Column(name = "online_time") private Date onlineTime; - /** - * 最后通信时间 - */ + /** 最后通信时间 */ @Column(name = "last_time") private Date lastTime; - /** - * 更新时间 - */ + /** 更新时间 */ @Column(name = "update_date") private Date updateDate; - /** - * 影子数据 - */ + /** 影子数据 */ private String metadata; @Column(name = "`instance`") diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceSubscribe.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceSubscribe.java index fa8af2dbaf8adca33c31093986a48f1a18aca0bb..fbf72bea459c7ff6e162f2257dba1faea8df5901 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceSubscribe.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceSubscribe.java @@ -30,70 +30,47 @@ import lombok.NoArgsConstructor; @Builder public class IoTDeviceSubscribe implements Serializable { - @Id - private Long id; + @Id private Long id; - /** - * 消息类别:属性(PROPERTIES),指令(REPLY),事件(EVENT),上下线(EVENT:online,offline),所有 - */ + /** 消息类别:属性(PROPERTIES),指令(REPLY),事件(EVENT),上下线(EVENT:online,offline),所有 */ @Column(name = "msg_type") private String msgType; - /** - * 订阅级别:设备级,产品级 - */ + /** 订阅级别:设备级,产品级 */ @Column(name = "sub_type") private String subType; - /** - * 设备deviceId - */ + /** 设备deviceId */ @Column(name = "device_id") private String deviceId; - /** - * 产品ID或者设备唯一标识 - */ + /** 产品ID或者设备唯一标识 */ @Column(name = "product_key") private String productKey; - /** - * 产品ID或者设备唯一标识 - */ + /** 产品ID或者设备唯一标识 */ @Column(name = "iot_id") private String iotId; - /** - * 订阅地址 - */ + /** 订阅地址 */ private String url; - /** - * 主题 - */ + /** 主题 */ private String topic; - /** - * 创建时间 - */ + /** 创建时间 */ @Column(name = "create_date") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createDate; - /** - * 创建人 - */ + /** 创建人 */ private String creater; - /** - * 实例编号(应用标识) - */ + /** 实例编号(应用标识) */ @Column(name = "`instance`") private String instance; - /** - * 是否启用 - */ + /** 是否启用 */ private Boolean enabled; private static final long serialVersionUID = 1L; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceTags.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceTags.java index 81ab187648b91641c1643a55d5d901200460452c..25af2acbc994b38cbb9f5e4759e05db159787733 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceTags.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTDeviceTags.java @@ -28,18 +28,13 @@ import lombok.NoArgsConstructor; @Builder public class IoTDeviceTags implements Serializable { - @Id - private Long id; + @Id private Long id; - /** - * 设备deviceId - */ + /** 设备deviceId */ @Column(name = "device_id") private String deviceId; - /** - * 产品ID或者设备唯一标识 - */ + /** 产品ID或者设备唯一标识 */ @Column(name = "product_key") private String productKey; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTProduct.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTProduct.java index 110ae838b2b881adccf6b3b86a32bab72b0e5a17..08cf09d4a27db4ce44a6002e1eabeceb652fa9c6 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTProduct.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTProduct.java @@ -12,6 +12,7 @@ package cn.universal.persistence.entity; +import cn.universal.persistence.annotation.SensitiveField; import jakarta.persistence.Column; import jakarta.persistence.Id; import jakarta.persistence.Table; @@ -31,155 +32,103 @@ public class IoTProduct implements Serializable { private static final long serialVersionUID = 1L; - /** - * 主键ID - */ - @Id - private Long id; + /** 主键ID */ + @Id private Long id; - /** - * 产品编号 - */ + /** 产品编号 */ @Column(name = "product_id") private String productId; - /** - * 产品标签 - */ + /** 产品标签 */ @Column(name = "tags") private String tags; - /** - * 产品KEY - */ + /** 产品KEY */ @Column(name = "product_key") private String productKey; - /** - * 产品密钥(1型1密) - */ + /** 产品密钥(1型1密) */ @Column(name = "product_secret") + @SensitiveField(showPrefix = 3, showSuffix = 3) private String productSecret; - /** - * 第三方平台:lvzhou,ctwing,onenet,alibaba,baidu - */ + /** 第三方平台:lvzhou,ctwing,onenet,alibaba,baidu */ @Column(name = "third_platform") private String thirdPlatform; - /** - * 第三方平台配置信息 - */ + /** 第三方平台配置信息 */ @Column(name = "third_configuration") private String thirdConfiguration; - /** - * 厂商编号 - */ + /** 厂商编号 */ @Column(name = "company_no") private String companyNo; - /** - * 分类ID - */ + /** 分类ID */ @Column(name = "classified_id") private String classifiedId; - /** - * 网络组件:关联network表 - */ + /** 网络组件:关联network表 */ @Column(name = "network_union_id") private String networkUnionId; - /** - * 设备类型: 网关,设备 - */ + /** 设备类型: 网关,设备 */ @Column(name = "device_node") private String deviceNode; - /** - * 所属项目 - */ + /** 所属项目 */ @Column(name = "gw_product_key") private String gwProductKey; - /** - * 分类名称 - */ + /** 分类名称 */ @Column(name = "classified_name") private String classifiedName; - /** - * 消息协议: - */ + /** 消息协议: */ @Column(name = "message_protocol") private String messageProtocol; - /** - * 名称 - */ + /** 名称 */ private String name; - /** - * 创建者id - */ + /** 创建者id */ @Column(name = "creator_id") private String creatorId; - /** - * 产品状态 - */ + /** 产品状态 */ private Byte state; - /** - * 说明 - */ + /** 说明 */ @Column(name = "`describe`") private String describe; - /** - * 数据存储策略 - */ + /** 数据存储策略 */ @Column(name = "store_policy") private String storePolicy; - /** - * 传输协议: MQTT,COAP,UDP - */ + /** 传输协议: MQTT,COAP,UDP */ @Column(name = "transport_protocol") private String transportProtocol; - /** - * 图片地址 - */ + /** 图片地址 */ @Column(name = "photo_url") private String photoUrl; - /** - * 创建时间 - */ + /** 创建时间 */ @Column(name = "create_time") private Long createTime; - /** - * 协议配置 - */ + /** 协议配置 */ private String configuration; - /** - * 数据存储策略配置 - */ + /** 数据存储策略配置 */ @Column(name = "store_policy_configuration") private String storePolicyConfiguration; - /** - * 物模型 - */ + /** 物模型 */ private String metadata; - /** - * 第三方平台产品下发信息 - */ + /** 第三方平台产品下发信息 */ private String thirdDownRequest; @Column(name = "update_time") diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTProductSort.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTProductSort.java index fc73ce5ce3f79ea3045db3e74325f384967256a1..efc0fccb735e56901611caddb0bcfd23eafc911f 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTProductSort.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTProductSort.java @@ -28,57 +28,39 @@ public class IoTProductSort implements Serializable { private static final long serialVersionUID = 1L; - /** - * id - */ + /** id */ private String id; - /** - * 父id - */ + /** 父id */ @Excel(name = "父id") private String parentId; - /** - * 是否有子节点 - */ + /** 是否有子节点 */ @Excel(name = "是否有子节点") private Integer hasChild; - /** - * 标识 - */ + /** 标识 */ @Excel(name = "标识") private String identification; - /** - * 分类名称 - */ + /** 分类名称 */ @Excel(name = "分类名称") private String classifiedName; - /** - * 说明 - */ + /** 说明 */ @Excel(name = "说明") private String description; - /** - * 创建时间 - */ + /** 创建时间 */ @Excel(name = "创建时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; - /** - * 创建者 - */ + /** 创建者 */ @Excel(name = "创建者") private String createBy; - /** - * 子分类 - */ + /** 子分类 */ private List children = new ArrayList(); public List getChildren() { diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTUser.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTUser.java index ddbf64215f3ef5f479f1403547522cf78fb17c7e..d57c0ac743c4729c60801d7559903871d44675c7 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTUser.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTUser.java @@ -40,109 +40,76 @@ import lombok.NoArgsConstructor; public class IoTUser implements Serializable { private static final long serialVersionUID = 1L; - @Id - private Long id; + @Id private Long id; - /** - * 归属组织机构 - */ + /** 归属组织机构 */ @Column(name = "org_id") @Excel(name = "归属组织机构") private Long orgId; - /** - * 用户名 - */ + /** 用户名 */ @Excel(name = "用户名") private String username; - /** - * 密码 - */ + /** 密码 */ @JsonIgnore @Excel(name = "密码") private String password; - /** - * 别名 - */ + /** 别名 */ @Excel(name = "别名") private String alias; - /** - * 用户唯一标识 - */ + /** 用户唯一标识 */ @Excel(name = "用户唯一标识") @Column(name = "union_id") private String unionId; - /** - * 邮箱 - */ + /** 邮箱 */ @Excel(name = "邮箱") private String email; - /** - * 密码加盐 - */ + /** 密码加盐 */ @Excel(name = "密码加盐") private String salt; - /** - * 手机号 - */ + /** 手机号 */ @Excel(name = "手机号") private String mobile; - /** - * 账号状态(0正常,1停用) - */ + /** 账号状态(0正常,1停用) */ @Excel(name = "账号状态(0正常,1停用") private String status; - /** - * 头像 - */ + /** 头像 */ @Excel(name = "头像") private String avatar; - /** - * 上级用户唯一id - */ + /** 上级用户唯一id */ @Excel(name = "上级用户唯一id") private String parentUnionId; - /** - * 账号身份 0.超级管理员 1.普通用户 2.子用户 - */ + /** 账号身份 0.超级管理员 1.普通用户 2.子用户 */ @Excel(name = "账号身份 0.超级管理员 1.普通用户 2.子用户") private Integer identity; - /** - * 登录IP - */ + /** 登录IP */ @Column(name = "login_ip") @Excel(name = "登录IP") private String loginIp; - /** - * 登录时间 - */ + /** 登录时间 */ @Column(name = "login_date") @Excel(name = "登录时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date loginDate; - /** - * 创建者 - */ + /** 创建者 */ @Column(name = "create_by") @Excel(name = "创建者") private String createBy; - /** - * 创建时间 - */ + /** 创建时间 */ @Column(name = "create_date") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Excel(name = "创建时间") @@ -157,22 +124,16 @@ public class IoTUser implements Serializable { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date updateDate; - /** - * 备注 - */ + /** 备注 */ @Excel(name = "备注") private String remark; - /** - * 接入数 - */ + /** 接入数 */ @Column(name = "license") @Excel(name = "接入数") private Integer license; - /** - * 接入数 - */ + /** 接入数 */ @Column(name = "license_total_amount") @Excel(name = "接入数总额度") private Integer licenseTotalAmount; @@ -183,16 +144,11 @@ public class IoTUser implements Serializable { @Excel(name = "注册来源") private String registerFrom; - /** - * 0-正常,1-删除 - */ + /** 0-正常,1-删除 */ private Integer deleted; - /** - * 请求参数 - */ - @Builder.Default - private Map params = new HashMap<>(); + /** 请求参数 */ + @Builder.Default private Map params = new HashMap<>(); public IoTUser(Long userId) { this.id = userId; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTUserApplication.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTUserApplication.java index 93370b8d145f2d1de399a0a64a9cabe7094549a6..9c888631fb14518b81fb32e34f1d179fa9e30f75 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTUserApplication.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/IoTUserApplication.java @@ -40,57 +40,41 @@ public class IoTUserApplication implements Serializable { @Excel(name = "用户唯一标识") private String unionId; - /** - * 调用凭证APPID - */ + /** 调用凭证APPID */ @Column(name = "app_id") @Excel(name = "调用凭证APPID") private String appId; - /** - * MQ上行主题,英文逗号分隔 - */ + /** MQ上行主题,英文逗号分隔 */ @Column(name = "up_topic") @Excel(name = "MQ上行主题") private String upTopic; - /** - * MQ下行主题,英文逗号分隔 - */ + /** MQ下行主题,英文逗号分隔 */ @Column(name = "down_topic") @Excel(name = "MQ下行主题") private String downTopic; - /** - * 调用密钥 - */ + /** 调用密钥 */ @Column(name = "app_secret") @Excel(name = "调用密钥") private String appSecret; - /** - * 授权结束时间 - */ + /** 授权结束时间 */ @Column(name = "valid_end_date") @Excel(name = "授权结束时间") private Date validEndDate; - /** - * 授权范围 - */ + /** 授权范围 */ @Excel(name = "授权范围") private String scope; - /** - * 0-正常,1-停用 - */ + /** 0-正常,1-停用 */ @Column(name = "app_status") @Excel(name = "应用状态 0-正常,1-停用") private Integer appStatus; - /** - * 0-正常,1-删除 - */ + /** 0-正常,1-删除 */ @Excel(name = "是否删除 0正常 1删除") private Integer deleted; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/Network.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/Network.java index f353716984a4dbcf04e21082a05b87069781e830..16b34accaee87dfbf8d28afbf28461b5af444599 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/Network.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/Network.java @@ -29,17 +29,12 @@ import lombok.NoArgsConstructor; @Builder public class Network implements Serializable { - @Id - private Integer id; + @Id private Integer id; - /** - * TCP_CLIENT,MQTT_CLIENT,HTTP_CLIENT,WEB_SOCKET_CLIENT - */ + /** TCP_CLIENT,MQTT_CLIENT,HTTP_CLIENT,WEB_SOCKET_CLIENT */ private String type; - /** - * 唯一标识 - */ + /** 唯一标识 */ @Column(name = "product_key") private String productKey; @@ -48,27 +43,19 @@ public class Network implements Serializable { private String name; - /** - * 详细描述 - */ + /** 详细描述 */ private String description; @Column(name = "create_date") private Date createDate; - /** - * enable,disable - */ + /** enable,disable */ private Boolean state; - /** - * 配置内容 - */ + /** 配置内容 */ private String configuration; - /** - * 创建用户 - */ + /** 创建用户 */ @Column(name = "create_user") private String createUser; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/OAuth2ClientDetails.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/OAuth2ClientDetails.java index 596ae864626cba28503dfbfb65443342bcd6c9d2..09e6a01df3a61d790177f3886492af4f800f9d27 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/OAuth2ClientDetails.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/OAuth2ClientDetails.java @@ -32,22 +32,16 @@ import lombok.experimental.Accessors; @Accessors(chain = true) public class OAuth2ClientDetails implements Serializable { - /** - * 客户端标识 - */ + /** 客户端标识 */ @Id @Column(name = "client_id") private String clientId; - /** - * 资源标识 - */ + /** 资源标识 */ @Column(name = "resource_ids") private String resourceIds; - /** - * 客户端秘钥 - */ + /** 客户端秘钥 */ @Column(name = "client_secret") private String clientSecret; @@ -60,50 +54,34 @@ public class OAuth2ClientDetails implements Serializable { @Column(name = "Authorized_grant_types") private String AuthorizedGrantTypes; - /** - * 授权成功后回调URL - */ + /** 授权成功后回调URL */ @Column(name = "web_server_redirect_uri") private String webServerRedirectUri; private String Authorities; - /** - * 访问令牌的有效时间 - */ + /** 访问令牌的有效时间 */ @Column(name = "access_token_validity") private Integer accessTokenValidity; - /** - * 刷新令牌的有效时间 - */ + /** 刷新令牌的有效时间 */ @Column(name = "refresh_token_validity") private Integer refreshTokenValidity; - /** - * 额外的信息,备用 - */ + /** 额外的信息,备用 */ @Column(name = "additional_information") private String additionalInformation; - /** - * 自动批准标识:0代表不显示授权页面 1显示授权页面 - */ + /** 自动批准标识:0代表不显示授权页面 1显示授权页面 */ private String autoapprove; - /** - * 用户名 - */ + /** 用户名 */ private String username; - /** - * 密码 - */ + /** 密码 */ private String password; - /** - * 唯一标识 - */ + /** 唯一标识 */ @Column(name = "iot_union_id") private String iotUnionId; @@ -182,7 +160,7 @@ public class OAuth2ClientDetails implements Serializable { * client_credentials:客户端模式 * * @return Authorized_grant_types - 授权类型 Authorization_code:授权码模式 refresh_token:刷新token - * password:密码模式 implicit:隐私授权模式 client_credentials:客户端模式 + * password:密码模式 implicit:隐私授权模式 client_credentials:客户端模式 */ public String getAuthorizedGrantTypes() { return AuthorizedGrantTypes; @@ -193,7 +171,7 @@ public class OAuth2ClientDetails implements Serializable { * client_credentials:客户端模式 * * @param AuthorizedGrantTypes 授权类型 Authorization_code:授权码模式 refresh_token:刷新token password:密码模式 - * implicit:隐私授权模式 client_credentials:客户端模式 + * implicit:隐私授权模式 client_credentials:客户端模式 */ public void setAuthorizedGrantTypes(String AuthorizedGrantTypes) { this.AuthorizedGrantTypes = AuthorizedGrantTypes; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/RuleModel.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/RuleModel.java index dcbc4289ca3c9d03a46eec5d29e15354aed1d746..1404a3d86b61143015a9d9e9792c83e251d5e786 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/RuleModel.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/RuleModel.java @@ -39,75 +39,55 @@ public class RuleModel implements Serializable { private static final long serialVersionUID = 1L; - /** - * 主键ID - */ + /** 主键ID */ @Id @KeySql(genId = SQenGenId.class) @Schema(description = "主键ID") private Long id; - /** - * 规则名称 - */ + /** 规则名称 */ @Schema(description = "规则名称") @Column(name = "rule_name") private String ruleName; - /** - * 数据级别 - */ + /** 数据级别 */ @Schema(description = "数据级别") @Column(name = "data_level") private String dataLevel; - /** - * 描述 - */ + /** 描述 */ @Schema(description = "描述") @Column(name = "description") private String description; - /** - * 状态 - */ + /** 状态 */ @Schema(description = "状态") @Column(name = "status") private String status; ; - /** - * 产品KEY - */ + /** 产品KEY */ @Schema(description = "产品KEY") @Column(name = "product_key") private String productKey; - /** - * 规则配置 - */ + /** 规则配置 */ @Schema(description = "规则配置") @Column(name = "config") private String config; - /** - * 创建人 - */ + /** 创建人 */ @Schema(description = "创建人") @Column(name = "creator_id") private String creatorId; - /** - * 创建时间 - */ + /** 创建时间 */ @Schema(description = "创建时间") @Column(name = "create_time") private Date createTime; - /** - * 创建时间 - */ + /** 创建时间 */ @Schema(description = "创建时间") @Column(name = "update_time") private Date updateTime; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/RuleModelInstance.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/RuleModelInstance.java index 53f400085b393713f1b1723c584d28039acb9905..dc452b5aded0c9aeb74c070a905491df9bcb3027 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/RuleModelInstance.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/RuleModelInstance.java @@ -37,28 +37,20 @@ public class RuleModelInstance implements Serializable { private static final long serialVersionUID = 1L; - /** - * 主键ID - */ + /** 主键ID */ @Id @KeySql(genId = SQenGenId.class) private Long id; - /** - * 模型id - */ + /** 模型id */ @Column(name = "model_id") private Long modelId; - /** - * 关联类型 - */ + /** 关联类型 */ @Column(name = "relation_type") private String relationType; - /** - * 关联id - */ + /** 关联id */ @Column(name = "relation_id") private String relationId; } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/RulegoChain.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/RulegoChain.java index 6a133aaff0884c7b9eb5b12787c25afbf30307a4..e548313a080ee6edc53d0c690c04cdf61594e596 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/RulegoChain.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/RulegoChain.java @@ -40,87 +40,63 @@ public class RulegoChain implements Serializable { private static final long serialVersionUID = 1L; - /** - * 主键ID - */ + /** 主键ID */ @Id @KeySql(genId = SQenGenId.class) @Schema(description = "主键ID") private Long id; - /** - * rulego规则链ID - */ + /** rulego规则链ID */ @Schema(description = "rulego规则链ID") @Column(name = "rulego_id") private String rulegoId; - /** - * 规则链名称 - */ + /** 规则链名称 */ @Schema(description = "规则链名称") @Column(name = "chain_name") private String chainName; - /** - * 规则链描述 - */ + /** 规则链描述 */ @Schema(description = "规则链描述") @Column(name = "description") private String description; - /** - * 创建人unionId - */ + /** 创建人unionId */ @Schema(description = "创建人unionId") @Column(name = "creator_id") private String creatorId; - /** - * 创建人姓名 - */ + /** 创建人姓名 */ @Schema(description = "创建人姓名") @Column(name = "creator_name") private String creatorName; - /** - * 状态:draft-草稿,deployed-已部署,stopped-已停止 - */ + /** 状态:draft-草稿,deployed-已部署,stopped-已停止 */ @Schema(description = "状态") @Column(name = "status") private String status; - /** - * 规则链DSL内容(JSON格式) - */ + /** 规则链DSL内容(JSON格式) */ @Schema(description = "规则链DSL内容") @Column(name = "dsl_content") private String dslContent; - /** - * 最后同步时间 - */ + /** 最后同步时间 */ @Schema(description = "最后同步时间") @Column(name = "last_sync_time") private Date lastSyncTime; - /** - * 创建时间 - */ + /** 创建时间 */ @Schema(description = "创建时间") @Column(name = "create_time") private Date createTime; - /** - * 更新时间 - */ + /** 更新时间 */ @Schema(description = "更新时间") @Column(name = "update_time") private Date updateTime; - /** - * 是否删除:0-未删除,1-已删除 - */ + /** 是否删除:0-未删除,1-已删除 */ @Schema(description = "是否删除") @Column(name = "deleted") private Integer deleted; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/RulegoChainLog.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/RulegoChainLog.java index 0a6816eb8cf8d592cd4b9b1039fa4775bfac183e..36ee2f54547446e7f9079b108eb26bd4c2b0bc90 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/RulegoChainLog.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/RulegoChainLog.java @@ -40,73 +40,53 @@ public class RulegoChainLog implements Serializable { private static final long serialVersionUID = 1L; - /** - * 主键ID - */ + /** 主键ID */ @Id @KeySql(genId = SQenGenId.class) @Schema(description = "主键ID") private Long id; - /** - * rulego规则链ID - */ + /** rulego规则链ID */ @Schema(description = "rulego规则链ID") @Column(name = "rulego_id") private String rulegoId; - /** - * 规则链名称 - */ + /** 规则链名称 */ @Schema(description = "规则链名称") @Column(name = "chain_name") private String chainName; - /** - * 执行ID - */ + /** 执行ID */ @Schema(description = "执行ID") @Column(name = "execution_id") private String executionId; - /** - * 输入数据 - */ + /** 输入数据 */ @Schema(description = "输入数据") @Column(name = "input_data") private String inputData; - /** - * 输出数据 - */ + /** 输出数据 */ @Schema(description = "输出数据") @Column(name = "output_data") private String outputData; - /** - * 执行状态:success-成功,failed-失败 - */ + /** 执行状态:success-成功,failed-失败 */ @Schema(description = "执行状态") @Column(name = "execution_status") private String executionStatus; - /** - * 错误信息 - */ + /** 错误信息 */ @Schema(description = "错误信息") @Column(name = "error_message") private String errorMessage; - /** - * 执行耗时(毫秒) - */ + /** 执行耗时(毫秒) */ @Schema(description = "执行耗时") @Column(name = "execution_time") private Long executionTime; - /** - * 创建时间 - */ + /** 创建时间 */ @Schema(description = "创建时间") @Column(name = "create_time") private Date createTime; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/SceneLinkage.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/SceneLinkage.java index 2dd166276d254f62f0a788ca1206de88ce87f23a..9eebfb7356a47bcdcee40a1a94217cda6963d2a8 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/SceneLinkage.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/SceneLinkage.java @@ -36,54 +36,39 @@ public class SceneLinkage extends BaseEntity { private static final long serialVersionUID = 1L; - @Id - private Long id; + @Id private Long id; - /** - * 场景名称 - */ + /** 场景名称 */ @Excel(name = "场景名称") @Column(name = "scene_name") private String sceneName; - /** - * 触发条件 all.全部 one.任意一个 - */ + /** 触发条件 all.全部 one.任意一个 */ @Excel(name = "触发条件 all.全部 one.任意一个") @Column(name = "touch") private String touch; - /** - * 触发条件 - */ + /** 触发条件 */ @Excel(name = "触发条件") @Column(name = "trigger_condition") private String triggerCondition; - /** - * 执行动作 - */ + /** 执行动作 */ @Excel(name = "执行动作") @Column(name = "exec_action") private String execAction; - /** - * 沉默周期 - */ + /** 沉默周期 */ @Excel(name = "沉默周期") @Column(name = "sleep_cycle") private Integer sleepCycle; - /** - * 0启用 1停用 - */ + /** 0启用 1停用 */ @Excel(name = "0启用 1停用") @Column(name = "status") private Integer status; - /** - * 设备id - */ + /** 设备id */ @Excel(name = "设备id") @Column(name = "dev_id") private String devId; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/SupportMapAreas.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/SupportMapAreas.java index c5e6c6d1f72c80d595e05d03757105a504837caa..da705e08f1fae9100083a506b92ba975ea39861c 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/SupportMapAreas.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/SupportMapAreas.java @@ -28,36 +28,23 @@ import lombok.NoArgsConstructor; public class SupportMapAreas implements Serializable { private static final long serialVersionUID = 1L; - @Id - private String id; + @Id private String id; - /** - * 父id - */ + /** 父id */ private String pid; - /** - * 地址 - */ + /** 地址 */ private String name; - /** - * 详细地址 - */ + /** 详细地址 */ private String fullName; - /** - * 深度 - */ + /** 深度 */ private String deep; - /** - * 核心点坐标 - */ + /** 核心点坐标 */ private String location; - /** - * 范围坐标 - */ + /** 范围坐标 */ private String polygon; } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/SysLogininfor.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/SysLogininfor.java index b6bbaccd5d96b412949d0122fc292dc583afb5e4..8e77e94c2132552de63467c98c1e231acb863c95 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/SysLogininfor.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/SysLogininfor.java @@ -25,9 +25,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; -/** - * 系统访问记录表 sys_logininfor @Author ruoyi - */ +/** 系统访问记录表 sys_logininfor @Author ruoyi */ @Data @NoArgsConstructor @Accessors(chain = true) @@ -35,65 +33,44 @@ public class SysLogininfor implements Serializable { private static final long serialVersionUID = 1L; - /** - * ID - */ + /** ID */ @Excel(name = "序号", cellType = ColumnType.NUMERIC) @Id private Long infoId; - /** - * 用户账号 - */ + /** 用户账号 */ @Excel(name = "用户账号") private String userName; - /** - * 登录状态 0成功 1失败 - */ + /** 登录状态 0成功 1失败 */ @Excel(name = "登录状态", readConverterExp = "0=成功,1=失败") private String status; - /** - * 登录IP地址 - */ + /** 登录IP地址 */ @Excel(name = "登录地址") private String ipaddr; - /** - * 登录地点 - */ + /** 登录地点 */ @Excel(name = "登录地点") private String loginLocation; - /** - * 浏览器类型 - */ + /** 浏览器类型 */ @Excel(name = "浏览器") private String browser; - /** - * 操作系统 - */ + /** 操作系统 */ @Excel(name = "操作系统") private String os; - /** - * 提示消息 - */ + /** 提示消息 */ @Excel(name = "提示消息") private String msg; - /** - * 访问时间 - */ + /** 访问时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Excel(name = "访问时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") private Date loginTime; - /** - * 请求参数 - */ - @Transient - private Map params = new HashMap<>(); + /** 请求参数 */ + @Transient private Map params = new HashMap<>(); } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/SysOperLog.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/SysOperLog.java index 4b625717e5d93b9fdd3ca18c95e39be7d49ddaf7..08866c95adc329e4b5f155931536ac0b2f9c3d1d 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/SysOperLog.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/SysOperLog.java @@ -25,9 +25,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; -/** - * 操作日志记录表 oper_log @Author ruoyi - */ +/** 操作日志记录表 oper_log @Author ruoyi */ @Data @NoArgsConstructor @Accessors(chain = true) @@ -35,113 +33,75 @@ public class SysOperLog implements Serializable { private static final long serialVersionUID = 1L; - /** - * 日志主键 - */ + /** 日志主键 */ @Excel(name = "操作序号", cellType = ColumnType.NUMERIC) @Id private Long operId; - /** - * 操作模块 - */ + /** 操作模块 */ @Excel(name = "操作模块") private String title; - /** - * 业务类型(0其它 1新增 2修改 3删除) - */ + /** 业务类型(0其它 1新增 2修改 3删除) */ @Excel(name = "业务类型", readConverterExp = "0=其它,1=新增,2=修改,3=删除,4=授权,5=导出,6=导入,7=强退,8=生成代码,9=清空数据") private Integer businessType; - /** - * 业务类型数组 - */ - @Transient - private Integer[] businessTypes; + /** 业务类型数组 */ + @Transient private Integer[] businessTypes; - /** - * 请求方法 - */ + /** 请求方法 */ @Excel(name = "请求方法") private String method; - /** - * 请求方式 - */ + /** 请求方式 */ @Excel(name = "请求方式") private String requestMethod; - /** - * 操作类别(0其它 1后台用户 2手机端用户) - */ + /** 操作类别(0其它 1后台用户 2手机端用户) */ @Excel(name = "操作类别", readConverterExp = "0=其它,1=后台用户,2=手机端用户") private Integer operatorType; - /** - * 操作人员 - */ + /** 操作人员 */ @Excel(name = "操作人员") private String operName; - /** - * 部门名称 - */ + /** 部门名称 */ @Excel(name = "部门名称") private String deptName; - /** - * 请求url - */ + /** 请求url */ @Excel(name = "请求地址") private String operUrl; - /** - * 操作地址 - */ + /** 操作地址 */ @Excel(name = "操作地址") private String operIp; - /** - * 操作地点 - */ + /** 操作地点 */ @Excel(name = "操作地点") private String operLocation; - /** - * 请求参数 - */ + /** 请求参数 */ @Excel(name = "请求参数") private String operParam; - /** - * 返回参数 - */ + /** 返回参数 */ @Excel(name = "返回参数") private String jsonResult; - /** - * 操作状态(0正常 1异常) - */ + /** 操作状态(0正常 1异常) */ @Excel(name = "状态", readConverterExp = "0=正常,1=异常") private Integer status; - /** - * 错误消息 - */ + /** 错误消息 */ @Excel(name = "错误消息") private String errorMsg; - /** - * 操作时间 - */ + /** 操作时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Excel(name = "操作时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") private Date operTime; - /** - * 请求参数 - */ - @Transient - private Map params = new HashMap<>(); + /** 请求参数 */ + @Transient private Map params = new HashMap<>(); } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/SysConfig.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/SysConfig.java index 65627872f5b9d378732e8aa2d86d6cf9b560ecc0..dc1f49be60079c9e6264fda625e13b28a16acee4 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/SysConfig.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/SysConfig.java @@ -25,9 +25,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; -/** - * 参数配置表 sys_config @Author ruoyi - */ +/** 参数配置表 sys_config @Author ruoyi */ @Data @NoArgsConstructor @Accessors(chain = true) @@ -38,70 +36,47 @@ public class SysConfig { private static final long serialVersionUID = 1L; - /** - * 参数主键 - */ - @Id - private Long configId; + /** 参数主键 */ + @Id private Long configId; - /** - * 参数名称 - */ + /** 参数名称 */ @Column(name = "config_name") private String configName; - /** - * 参数键名 - */ + /** 参数键名 */ @Column(name = "config_key") private String configKey; - /** - * 参数键值 - */ + /** 参数键值 */ @Column(name = "config_value") private String configValue; - /** - * 系统内置(Y是 N否) - */ + /** 系统内置(Y是 N否) */ @Column(name = "config_type") private String configType; - /** - * 创建者 - */ + /** 创建者 */ @Column(name = "create_by") private String createBy; - /** - * 创建时间 - */ + /** 创建时间 */ @Column(name = "create_time") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; - /** - * 更新者 - */ + /** 更新者 */ @Column(name = "update_by") private String updateBy; - /** - * 更新时间 - */ + /** 更新时间 */ @Column(name = "update_time") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date updateTime; - /** - * 备注 - */ + /** 备注 */ private String remark; - /** - * 请求参数 - */ + /** 请求参数 */ // @TableField(exist = false) private Map params = new HashMap<>(); } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/SysDictData.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/SysDictData.java index 91401955b8bbe0ce8cf3d1b1cdad70b281376cb1..bc73ff4f1d4c7bf31921b219fc35f53226088576 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/SysDictData.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/SysDictData.java @@ -29,9 +29,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; -/** - * 字典数据表 sys_dict_data @Author ruoyi - */ +/** 字典数据表 sys_dict_data @Author ruoyi */ @Data @NoArgsConstructor @Accessors(chain = true) @@ -42,111 +40,80 @@ public class SysDictData implements Serializable { private static final long serialVersionUID = 1L; - /** - * 字典编码 - */ + /** 字典编码 */ // @Excel(name = "字典编码", cellType = Excel.ColumnType.NUMERIC) - @Id - private Long dictCode; + @Id private Long dictCode; - /** - * 字典排序 - */ + /** 字典排序 */ // @Excel(name = "字典排序", cellType = Excel.ColumnType.NUMERIC) @Column(name = "dict_sort") private Long dictSort; - /** - * 字典标签 - */ + /** 字典标签 */ // @Excel(name = "字典标签") @NotBlank(message = "字典标签不能为空") @Size(min = 0, max = 100, message = "字典标签长度不能超过100个字符") @Column(name = "dict_label") private String dictLabel; - /** - * 字典键值 - */ + /** 字典键值 */ // @Excel(name = "字典键值") @NotBlank(message = "字典键值不能为空") @Column(name = "dict_value") @Size(min = 0, max = 100, message = "字典键值长度不能超过100个字符") private String dictValue; - /** - * 字典类型 - */ + /** 字典类型 */ // @Excel(name = "字典类型") @NotBlank(message = "字典类型不能为空") @Column(name = "dict_type") @Size(min = 0, max = 100, message = "字典类型长度不能超过100个字符") private String dictType; - /** - * 样式属性(其他样式扩展) - */ + /** 样式属性(其他样式扩展) */ @Size(min = 0, max = 100, message = "样式属性长度不能超过100个字符") @Column(name = "css_class") private String cssClass; - /** - * 表格字典样式 - */ + /** 表格字典样式 */ @Column(name = "list_class") private String listClass; - /** - * 是否默认(Y是 N否) - */ + /** 是否默认(Y是 N否) */ // @Excel(name = "是否默认", readConverterExp = "Y=是,N=否") @Column(name = "is_default") private String isDefault; - /** - * 状态(0正常 1停用) - */ + /** 状态(0正常 1停用) */ // @Excel(name = "状态", readConverterExp = "0=正常,1=停用") private String status; - /** - * 创建者 - */ + /** 创建者 */ // @TableField(fill = FieldFill.INSERT) @Column(name = "create_by") private String createBy; - /** - * 创建时间 - */ + /** 创建时间 */ // @TableField(fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Column(name = "create_time") private Date createTime; - /** - * 更新者 - */ + /** 更新者 */ // @TableField(fill = FieldFill.INSERT_UPDATE) @Column(name = "update_by") private String updateBy; - /** - * 更新时间 - */ + /** 更新时间 */ // @TableField(fill = FieldFill.INSERT_UPDATE) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Column(name = "update_time") private Date updateTime; - /** - * 备注 - */ + /** 备注 */ private String remark; - /** - * 请求参数 - */ + /** 请求参数 */ // @TableField(exist = false) private Map params = new HashMap<>(); diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/SysDictType.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/SysDictType.java index 1b84dc750562ed203d517132940f038dccc1ca1b..d0bbe4fc163270be0736b27e5530308480a2ac15 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/SysDictType.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/SysDictType.java @@ -26,9 +26,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; -/** - * 字典类型表 sys_dict_type @Author ruoyi - */ +/** 字典类型表 sys_dict_type @Author ruoyi */ @Data @NoArgsConstructor @Accessors(chain = true) @@ -37,76 +35,55 @@ public class SysDictType implements Serializable { private static final long serialVersionUID = 1L; - /** - * 字典主键 - */ + /** 字典主键 */ // @Excel(name = "字典主键", cellType = Excel.ColumnType.NUMERIC) // @TableId(value = "dict_id", type = IdType.AUTO) - @Id - private Long dictId; + @Id private Long dictId; - /** - * 字典名称 - */ + /** 字典名称 */ // @Excel(name = "字典名称") @NotBlank(message = "字典名称不能为空") @Size(min = 0, max = 100, message = "字典类型名称长度不能超过100个字符") @Column(name = "dict_name") private String dictName; - /** - * 字典类型 - */ + /** 字典类型 */ // @Excel(name = "字典类型") @NotBlank(message = "字典类型不能为空") @Size(min = 0, max = 100, message = "字典类型类型长度不能超过100个字符") @Column(name = "dict_type") private String dictType; - /** - * 状态(0正常 1停用) - */ + /** 状态(0正常 1停用) */ // @Excel(name = "状态", readConverterExp = "0=正常,1=停用") private String status; - /** - * 创建者 - */ + /** 创建者 */ // @TableField(fill = FieldFill.INSERT) @Column(name = "create_by") private String createBy; - /** - * 创建时间 - */ + /** 创建时间 */ // @TableField(fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Column(name = "create_time") private Date createTime; - /** - * 更新者 - */ + /** 更新者 */ // @TableField(fill = FieldFill.INSERT_UPDATE) @Column(name = "update_by") private String updateBy; - /** - * 更新时间 - */ + /** 更新时间 */ // @TableField(fill = FieldFill.INSERT_UPDATE) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Column(name = "update_time") private Date updateTime; - /** - * 备注 - */ + /** 备注 */ private String remark; - /** - * 请求参数 - */ + /** 请求参数 */ // @TableField(exist = false) private Map params = new HashMap<>(); } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/SysMenu.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/SysMenu.java index 89a02395d8c50b4de299b4886635336cb63a0ee2..917bec14eee56523bc975527523076dc6cc388d1 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/SysMenu.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/SysMenu.java @@ -28,9 +28,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; -/** - * 菜单权限表 sys_menu @Author ruoyi - */ +/** 菜单权限表 sys_menu @Author ruoyi */ @Data @NoArgsConstructor @AllArgsConstructor @@ -41,15 +39,10 @@ public class SysMenu implements Serializable { private static final long serialVersionUID = 1L; - /** - * 菜单ID - */ - @Id - private Long menuId; + /** 菜单ID */ + @Id private Long menuId; - /** - * 菜单名称 - */ + /** 菜单名称 */ @Column(name = "menu_name") private String menuName; @@ -57,106 +50,68 @@ public class SysMenu implements Serializable { // @Column(name = "parent_name") // private String parentName; - /** - * 父菜单ID - */ + /** 父菜单ID */ @Column(name = "parent_id") private Long parentId; - /** - * 显示顺序 - */ + /** 显示顺序 */ @Column(name = "order_num") private String orderNum; - /** - * 路由地址 - */ + /** 路由地址 */ private String path; - /** - * 组件路径 - */ + /** 组件路径 */ private String component; - /** - * 是否为外链(0是 1否) - */ + /** 是否为外链(0是 1否) */ @Column(name = "is_frame") private String isFrame; - /** - * 是否缓存(0缓存 1不缓存) - */ + /** 是否缓存(0缓存 1不缓存) */ @Column(name = "is_cache") private String isCache; - /** - * 类型(M目录 C菜单 F按钮) - */ + /** 类型(M目录 C菜单 F按钮) */ @Column(name = "menu_type") private String menuType; - /** - * 显示状态(0显示 1隐藏) - */ + /** 显示状态(0显示 1隐藏) */ private String visible; - /** - * 菜单状态(0显示 1隐藏) - */ + /** 菜单状态(0显示 1隐藏) */ private String status; - /** - * 权限字符串 - */ + /** 权限字符串 */ private String perms; - /** - * 菜单图标 - */ + /** 菜单图标 */ private String icon; - /** - * 创建者 - */ + /** 创建者 */ @Column(name = "create_by") private String createBy; - /** - * 创建时间 - */ + /** 创建时间 */ @Column(name = "create_time") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; - /** - * 更新者 - */ + /** 更新者 */ @Column(name = "update_by") private String updateBy; - /** - * 更新时间 - */ + /** 更新时间 */ @Column(name = "update_time") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date updateTime; - /** - * 备注 - */ + /** 备注 */ private String remark; - /** - * 请求参数 - */ - @Builder.Default - private Map params = new HashMap<>(); - - /** - * 子菜单 - */ - @Builder.Default - private List children = new ArrayList(); + /** 请求参数 */ + @Builder.Default private Map params = new HashMap<>(); + + /** 子菜单 */ + @Builder.Default private List children = new ArrayList(); } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/SysRole.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/SysRole.java index 86cc2b0eecfc32e6d59c79019931a3f184f162e1..43d8874613f9f56fee764d923c035cd5377382f1 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/SysRole.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/SysRole.java @@ -27,9 +27,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; -/** - * 角色表 sys_role @Author ruoyi - */ +/** 角色表 sys_role @Author ruoyi */ @Data @NoArgsConstructor @Accessors(chain = true) @@ -40,104 +38,68 @@ public class SysRole implements Serializable { private static final long serialVersionUID = 1L; - /** - * 角色ID - */ - @Id - private Long roleId; + /** 角色ID */ + @Id private Long roleId; - /** - * 角色名称 - */ + /** 角色名称 */ @Excel(name = "角色名称") @Column(name = "role_name") private String roleName; - /** - * 角色权限 - */ + /** 角色权限 */ @Column(name = "role_key") private String roleKey; - /** - * 角色排序 - */ + /** 角色排序 */ @Column(name = "role_sort") private String roleSort; - /** - * 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限) - */ + /** 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限) */ @Column(name = "data_scope") private String dataScope; - /** - * 菜单树选择项是否关联显示( 0:父子不互相关联显示 1:父子互相关联显示) - */ + /** 菜单树选择项是否关联显示( 0:父子不互相关联显示 1:父子互相关联显示) */ @Column(name = "menu_check_strictly") private Boolean menuCheckStrictly; - /** - * 部门树选择项是否关联显示(0:父子不互相关联显示 1:父子互相关联显示 ) - */ + /** 部门树选择项是否关联显示(0:父子不互相关联显示 1:父子互相关联显示 ) */ @Column(name = "dept_check_strictly") private Boolean deptCheckStrictly; - /** - * 角色状态(0正常 1停用) - */ + /** 角色状态(0正常 1停用) */ private String status; - /** - * 创建者 - */ + /** 创建者 */ @Column(name = "create_by") private String createBy; - /** - * 创建时间 - */ + /** 创建时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Column(name = "create_time") private Date createTime; - /** - * 更新者 - */ + /** 更新者 */ @Column(name = "update_by") private String updateBy; - /** - * 更新时间 - */ + /** 更新时间 */ @Column(name = "update_time") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date updateTime; - /** - * 备注 - */ + /** 备注 */ private String remark; - /** - * 请求参数 - */ - @Builder.Default - private Map params = new HashMap<>(); + /** 请求参数 */ + @Builder.Default private Map params = new HashMap<>(); - /** - * 用户是否存在此角色标识 默认不存在 - */ + /** 用户是否存在此角色标识 默认不存在 */ private boolean flag = false; - /** - * 菜单组 - */ + /** 菜单组 */ private Long[] menuIds; - /** - * 部门组(数据权限) - */ + /** 部门组(数据权限) */ // private Long[] deptIds; public SysRole(Long roleId) { diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/SysRoleMenu.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/SysRoleMenu.java index 40e61b4966cd552ef6641556f45b80c0fcc43675..542ef88250906ae01d722e12d49557d0e3ca32ca 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/SysRoleMenu.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/SysRoleMenu.java @@ -21,9 +21,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; -/** - * 角色和菜单关联 sys_role_menu @Author ruoyi - */ +/** 角色和菜单关联 sys_role_menu @Author ruoyi */ @Data @NoArgsConstructor @Accessors(chain = true) @@ -33,16 +31,11 @@ import lombok.experimental.Accessors; public class SysRoleMenu implements Serializable { private static final long serialVersionUID = 1L; - @Id - private Long uuid; + @Id private Long uuid; - /** - * 角色ID - */ + /** 角色ID */ private Long roleId; - /** - * 菜单ID - */ + /** 菜单ID */ private Long menuId; } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/SysUserRole.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/SysUserRole.java index 2431248d051cabc6ebaa5403b45ac5ca3b96c8d8..6510e6de61590c6615d0baf11411faab76b85493 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/SysUserRole.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/SysUserRole.java @@ -21,9 +21,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; -/** - * 用户和角色关联 sys_user_role @Author ruoyi - */ +/** 用户和角色关联 sys_user_role @Author ruoyi */ @Data @NoArgsConstructor @AllArgsConstructor @@ -33,16 +31,11 @@ import lombok.experimental.Accessors; public class SysUserRole implements Serializable { private static final long serialVersionUID = 1L; - @Id - private Long uuid; + @Id private Long uuid; - /** - * 用户ID - */ + /** 用户ID */ private String unionId; - /** - * 角色ID - */ + /** 角色ID */ private Long roleId; } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/TreeSelect.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/TreeSelect.java index cb435d669f7c99fa20619fb2177c92c696cadbc5..2844ac7b820870acac1a43ce8f2488053f8e840f 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/TreeSelect.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/TreeSelect.java @@ -20,9 +20,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; -/** - * Treeselect树结构实体类 @Author ruoyi - */ +/** Treeselect树结构实体类 @Author ruoyi */ @Data @NoArgsConstructor @Accessors(chain = true) @@ -30,19 +28,13 @@ public class TreeSelect implements Serializable { private static final long serialVersionUID = 1L; - /** - * 节点ID - */ + /** 节点ID */ private Long id; - /** - * 节点名称 - */ + /** 节点名称 */ private String label; - /** - * 子节点 - */ + /** 子节点 */ @JsonInclude(JsonInclude.Include.NON_EMPTY) private List children; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/vo/MetaVo.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/vo/MetaVo.java index d54eea040071b9683ac97605349662ae6f867bcd..6374a5a5b40c3c6347b1cd87b1a0146f45823ee0 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/vo/MetaVo.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/vo/MetaVo.java @@ -17,32 +17,22 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; -/** - * 路由显示信息 @Author ruoyi - */ +/** 路由显示信息 @Author ruoyi */ @Data @NoArgsConstructor @Accessors(chain = true) public class MetaVo { - /** - * 设置该路由在侧边栏和面包屑中展示的名字 - */ + /** 设置该路由在侧边栏和面包屑中展示的名字 */ private String title; - /** - * 设置该路由的图标,对应路径src/assets/icons/svg - */ + /** 设置该路由的图标,对应路径src/assets/icons/svg */ private String icon; - /** - * 设置为true,则不会被 缓存 - */ + /** 设置为true,则不会被 缓存 */ private boolean noCache; - /** - * 内链地址(http(s)://开头) - */ + /** 内链地址(http(s)://开头) */ private String link; public MetaVo(String title, String icon) { diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/vo/RouterVo.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/vo/RouterVo.java index cef4d42c8662c48c7a3613cdcb45909043ed6b51..3b868c5dccc1cc6e6cbd7be6139ca065c1988b20 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/vo/RouterVo.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/vo/RouterVo.java @@ -18,52 +18,34 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; -/** - * 路由配置信息 @Author ruoyi - */ +/** 路由配置信息 @Author ruoyi */ @Data @NoArgsConstructor @Accessors(chain = true) @JsonInclude(JsonInclude.Include.NON_EMPTY) public class RouterVo { - /** - * 路由名字 - */ + /** 路由名字 */ private String name; - /** - * 路由地址 - */ + /** 路由地址 */ private String path; - /** - * 是否隐藏路由,当设置 true 的时候该路由不会再侧边栏出现 - */ + /** 是否隐藏路由,当设置 true 的时候该路由不会再侧边栏出现 */ private boolean hidden; - /** - * 重定向地址,当设置 noRedirect 的时候该路由在面包屑导航中不可被点击 - */ + /** 重定向地址,当设置 noRedirect 的时候该路由在面包屑导航中不可被点击 */ private String redirect; - /** - * 组件地址 - */ + /** 组件地址 */ private String component; - /** - * 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面 - */ + /** 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面 */ private Boolean alwaysShow; - /** - * 其他元素 - */ + /** 其他元素 */ private MetaVo meta; - /** - * 子路由 - */ + /** 子路由 */ private List children; } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/vo/SysDictDataVo.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/vo/SysDictDataVo.java index 9e06abdebcbee09c11c5e57b3a7684bae3a63b9d..ec791f6136aff0d51c9b23c3acdfc06fb6ae1980 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/vo/SysDictDataVo.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/vo/SysDictDataVo.java @@ -21,9 +21,7 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -/** - * 字典数据表 sys_dict_data @Author ruoyi - */ +/** 字典数据表 sys_dict_data @Author ruoyi */ @Data @NoArgsConstructor @AllArgsConstructor @@ -31,89 +29,55 @@ public class SysDictDataVo implements Serializable { private static final long serialVersionUID = 1L; - /** - * 字典编码 - */ + /** 字典编码 */ private Long dictCode; - /** - * 字典排序 - */ + /** 字典排序 */ private Long dictSort; - /** - * 字典标签 - */ + /** 字典标签 */ private String dictLabel; - /** - * 字典键值 - */ + /** 字典键值 */ private String dictValue; - /** - * 字典类型 - */ + /** 字典类型 */ private String dictType; - /** - * 样式属性(其他样式扩展) - */ + /** 样式属性(其他样式扩展) */ private String cssClass; - /** - * 表格字典样式 - */ + /** 表格字典样式 */ private String listClass; - /** - * 是否默认(Y是 N否) - */ + /** 是否默认(Y是 N否) */ private String isDefault; - /** - * 状态(0正常 1停用) - */ + /** 状态(0正常 1停用) */ private String status; - /** - * 创建者 - */ + /** 创建者 */ private String createBy; - /** - * 创建时间 - */ + /** 创建时间 */ private Date createTime; - /** - * 更新者 - */ + /** 更新者 */ private String updateBy; - /** - * 更新时间 - */ + /** 更新时间 */ private Date updateTime; - /** - * 开始时间 - */ + /** 开始时间 */ private String startTime; - /** - * 结束时间 - */ + /** 结束时间 */ private String endTime; - /** - * 备注 - */ + /** 备注 */ private String remark; - /** - * 请求参数 - */ + /** 请求参数 */ // @TableField(exist = false) private Map params = new HashMap<>(); diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/vo/SysDictDataVos.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/vo/SysDictDataVos.java index 3dee0888249b6350506a55226a2d0a6f921615bb..e1c71f14ce1f8beb6d24777a5db0ae2b7de0f7c8 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/vo/SysDictDataVos.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/admin/vo/SysDictDataVos.java @@ -19,9 +19,7 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -/** - * 字典类型group分组 @Author ruoyi - */ +/** 字典类型group分组 @Author ruoyi */ @Data @NoArgsConstructor @AllArgsConstructor diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTDeviceBO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTDeviceBO.java index cd8520f641502dc9b23df506f570ac14c19eea9e..bce1aafaccae32b23638ef3d51d0dd7840af3a88 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTDeviceBO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTDeviceBO.java @@ -30,116 +30,76 @@ public class IoTDeviceBO implements Serializable { private static final long serialVersionUID = 1L; private Long id; - /** - * 对外设备唯一标识符 - */ + /** 对外设备唯一标识符 */ private String iotId; - /** - * Lora密钥 - */ + /** Lora密钥 */ private String secretKey; - /** - * 归属应用 - */ + /** 归属应用 */ private String application; - /** - * 激活时间 - */ + /** 激活时间 */ private Integer registryTime; - /** - * 最后上线时间 - */ + /** 最后上线时间 */ private Long onlineTime; - /** - * 设备自身序号 - */ + /** 设备自身序号 */ private String deviceId; - /** - * 第三方设备ID唯一标识符 - */ + /** 第三方设备ID唯一标识符 */ private String extDeviceId; - /** - * 别名 - */ + /** 别名 */ private String nickName; - /** - * 设备名称 - */ + /** 设备名称 */ private String productName; private Long features; - /** - * 网关产品ProductKey - */ + /** 网关产品ProductKey */ private String gwProductKey; - /** - * 设备密钥 - */ + private String gwDeviceId; + + /** 设备密钥 */ private String deviceSecret; - /** - * 产品key - */ + /** 产品key */ private String productKey; - /** - * 设备实例名称 - */ + /** 设备实例名称 */ private String deviceName; private String creatorId; private String creatorName; - /** - * 0-离线,1-在线 - */ + /** 0-离线,1-在线 */ private Boolean state; - /** - * 说明 - */ + /** 说明 */ private String detail; private Long createTime; - /** - * 派生元数据,有的设备的属性,功能,事件可能会动态的添加 - */ + /** 派生元数据,有的设备的属性,功能,事件可能会动态的添加 */ private String deriveMetadata; - /** - * 其他配置 - */ + /** 其他配置 */ private String configuration; - /** - * 设备坐标 - */ + /** 设备坐标 */ private String coordinate; - /** - * 区域ID - */ + /** 区域ID */ private String areasId; - /** - * 纬度 - */ + /** 纬度 */ private String latitude; - /** - * 经度 - */ + /** 经度 */ private String longitude; private String fenceId; @@ -148,24 +108,16 @@ public class IoTDeviceBO implements Serializable { // private String parentUnionId; - /** - * 请求参数 - */ - @Builder.Default - private Map params = new HashMap<>(); + /** 请求参数 */ + @Builder.Default private Map params = new HashMap<>(); private Boolean hasProtocol; - /** - * 接收额外参数 - */ - @Builder.Default - private Map otherParams = new HashMap<>(); + /** 接收额外参数 */ + @Builder.Default private Map otherParams = new HashMap<>(); private List devGroupName; - /** - * 所属父设备名称 - */ - private String parentName; + /** 所属父设备信息 */ + private String gwDeviceInfo; } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTDeviceFunctionTaskBO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTDeviceFunctionTaskBO.java index 3c7787954fba737e5fd780823811a9f96ae533af..e7510f602ceb8a1d8e73f705089715b8b2ce6201 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTDeviceFunctionTaskBO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTDeviceFunctionTaskBO.java @@ -48,9 +48,6 @@ public class IoTDeviceFunctionTaskBO { private Boolean chooseAll; private List extParam; - /** - * 请求参数 - */ - @Transient - private Map params = new HashMap<>(); + /** 请求参数 */ + @Transient private Map params = new HashMap<>(); } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTDeviceGroupBO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTDeviceGroupBO.java index 4183edf698d0bb20804ef31c930e053b074f4340..06d4db05ba2bb7efb229b065a2ef85981633c859 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTDeviceGroupBO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTDeviceGroupBO.java @@ -17,9 +17,7 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -/** - * - */ +/** */ @Data @AllArgsConstructor @NoArgsConstructor @@ -28,34 +26,22 @@ public class IoTDeviceGroupBO { private static final long serialVersionUID = 1L; - /** - * 分组ID,非自增 - */ + /** 分组ID,非自增 */ private Long id; - /** - * 设备id - */ + /** 设备id */ private String[] devIds; - /** - * 分组名称 - */ + /** 分组名称 */ private String groupName; - /** - * 分组标识 - */ + /** 分组标识 */ private String groupCode; - /** - * 群组描述 - */ + /** 群组描述 */ private String groupDescribe; - /** - * 父id - */ + /** 父id */ private Long parentId; // //账号父id // private String parentUnionId; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTDeviceLogBO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTDeviceLogBO.java index 9d4258c102bf09055a626cf8e319d77dbe19e465..b486bbae1bdcc808c1c74553a876d9807a9b18fe 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTDeviceLogBO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTDeviceLogBO.java @@ -29,84 +29,51 @@ public class IoTDeviceLogBO extends BaseEntity { private static final long serialVersionUID = 1L; - /** - * 日志ID,非自增 - */ + /** 日志ID,非自增 */ private Long id; - /** - * 设备编码 - */ + /** 设备编码 */ private String iotId; - /** - * 设备序列号 - */ + /** 设备序列号 */ private String deviceId; - /** - * 第三方设备ID唯一标识符 - */ - @Transient - private String extDeviceId; + /** 第三方设备ID唯一标识符 */ + @Transient private String extDeviceId; - /** - * 产品ID - */ + /** 产品ID */ private String productKey; - /** - * 设备名称 - */ + /** 设备名称 */ private String deviceName; - /** - * 消息类型 - */ + /** 消息类型 */ private String messageType; - /** - * 公司名称 - */ + /** 公司名称 */ private String companyNo; - /** - * 协议名称 - */ + /** 协议名称 */ private String protocol; - /** - * 节点类型 - */ + /** 节点类型 */ private String deviceNode; - /** - * 设备分类编号 - */ + /** 设备分类编号 */ private String classifiedId; - /** - * 组织ID - */ + /** 组织ID */ private String orgId; - /** - * 事件名称 - */ + /** 事件名称 */ private String event; - /** - * 创建人 - */ + /** 创建人 */ private String createId; - /** - * 经纬度 - */ + /** 经纬度 */ private String point; - /** - * 内容 - */ + /** 内容 */ private String content; } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTDeviceProtocolBO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTDeviceProtocolBO.java index 383e70e7c338d3b13c0e3b2e4c35733bc0e7fa28..f63b48f0e356e72a3df13444a54fc7b9648b7188 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTDeviceProtocolBO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTDeviceProtocolBO.java @@ -31,8 +31,7 @@ public class IoTDeviceProtocolBO implements Serializable { private String name; private String description; private Byte state; - @Id - private String id; + @Id private String id; private String type; private String configuration; private String fileName; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTGwDeviceBO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTGwDeviceBO.java index 45183107ef57d4028240d59e94d41440eedbc4ab..82a1c8fe602af8636a8284cb8e0cd40d3677ed76 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTGwDeviceBO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTGwDeviceBO.java @@ -17,15 +17,11 @@ import lombok.Data; @Data public class IoTGwDeviceBO { - /** - * 当前要添加的设备 - */ + /** 当前要添加的设备 */ private String productKey; private String creatorId; - /** - * 对应网关产品Key - */ + /** 对应网关产品Key */ private String gwProductKey; } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTProductBO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTProductBO.java index c49610ab9ef8b00b8ab7d28730a312ea9bd3d2b6..95dac893dfad803c7b63cd0623cdd4c2716799f1 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTProductBO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTProductBO.java @@ -32,154 +32,101 @@ public class IoTProductBO implements Serializable { private static final long serialVersionUID = 1L; - /** - * 主键ID - */ - @Id - private Long id; - - /** - * 产品编号 - */ + /** 主键ID */ + @Id private Long id; + + /** 产品编号 */ @Column(name = "product_id") private String productId; - /** - * 产品KEY - */ + /** 产品KEY */ @Column(name = "product_key") private String productKey; - /** - * 产品密钥(1型1密) - */ + /** 产品密钥(1型1密) */ @Column(name = "product_secret") private String productSecret; - /** - * 第三方平台:lvzhou,ctwing,onenet,alibaba,baidu - */ + /** 第三方平台:lvzhou,ctwing,onenet,alibaba,baidu */ @Column(name = "third_platform") private String thirdPlatform; - /** - * 第三方平台配置信息 - */ + /** 第三方平台配置信息 */ @Column(name = "third_configuration") private String thirdConfiguration; - /** - * 厂商编号 - */ + /** 厂商编号 */ @Column(name = "company_no") private String companyNo; - /** - * 分类ID - */ + /** 分类ID */ @Column(name = "classified_id") private String classifiedId; - /** - * 网络组件:关联network表 - */ + /** 网络组件:关联network表 */ @Column(name = "network_union_id") private String networkUnionId; - /** - * 设备类型: 网关,设备 - */ + /** 设备类型: 网关,设备 */ @Column(name = "device_node") private String deviceNode; - /** - * 所属项目 - */ + /** 所属项目 */ @Column(name = "gw_product_key") private String gwProductKey; - /** - * 分类名称 - */ + /** 分类名称 */ @Column(name = "classified_name") private String classifiedName; - /** - * 消息协议: - */ + /** 消息协议: */ @Column(name = "message_protocol") private String messageProtocol; - /** - * 名称 - */ + /** 名称 */ private String name; - /** - * 创建者id - */ + /** 创建者id */ @Column(name = "creator_id") private String creatorId; - /** - * 产品状态 - */ + /** 产品状态 */ private Byte state; - /** - * 说明 - */ + /** 说明 */ @Column(name = "`describe`") private String describe; - /** - * 数据存储策略 - */ + /** 数据存储策略 */ @Column(name = "store_policy") private String storePolicy; - /** - * 传输协议: MQTT,COAP,UDP - */ + /** 传输协议: MQTT,COAP,UDP */ @Column(name = "transport_protocol") private String transportProtocol; - /** - * 图片地址 - */ + /** 图片地址 */ @Column(name = "photo_url") private String photoUrl; - /** - * 创建时间 - */ + /** 创建时间 */ @Column(name = "create_time") private Long createTime; - /** - * 协议配置 - */ + /** 协议配置 */ private String configuration; - /** - * 数据存储策略配置 - */ + /** 数据存储策略配置 */ @Column(name = "store_policy_configuration") private String storePolicyConfiguration; - /** - * 物模型 - */ + /** 物模型 */ private String metadata; - /** - * 电信产品电量模式 - */ + /** 电信产品电量模式 */ private int powerModel; - /** - * 电信Edrx时间 - */ + /** 电信Edrx时间 */ private String lwm2mEdrxTime; private String path; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTProductImportBO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTProductImportBO.java index 9b45e8643dd5eb24b2f8427ae2b47aad8251299d..a88a574fddc05af7134594b90d3d9bde6d6fc012 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTProductImportBO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTProductImportBO.java @@ -28,187 +28,131 @@ public class IoTProductImportBO implements Serializable { private static final long serialVersionUID = 1L; - /** - * 产品编号 - */ + /** 产品编号 */ @Column(name = "product_id") @Excel(name = "产品编号") private String productId; - /** - * 产品KEY - */ + /** 产品KEY */ @Column(name = "product_key") @Excel(name = "产品KEY") private String productKey; - /** - * 产品密钥(1型1密) - */ + /** 产品密钥(1型1密) */ @Column(name = "product_secret") private String productSecret; - /** - * 第三方平台:lvzhou,ctwing,onenet,alibaba,baidu - */ + /** 第三方平台:lvzhou,ctwing,onenet,alibaba,baidu */ @Column(name = "third_platform") @Excel(name = "第三方平台:lvzhou,ctwing,onenet,alibaba,baidu") private String thirdPlatform; - /** - * 第三方平台配置信息 - */ + /** 第三方平台配置信息 */ @Column(name = "third_configuration") @Excel(name = "第三方平台配置信息") private String thirdConfiguration; - /** - * 厂商编号 - */ + /** 厂商编号 */ @Column(name = "company_no") @Excel(name = "厂商编号") private String companyNo; - /** - * 分类ID - */ + /** 分类ID */ @Column(name = "classified_id") @Excel(name = "分类ID") private String classifiedId; - /** - * 网络组件:关联network表 - */ + /** 网络组件:关联network表 */ @Column(name = "network_union_id") // @Excel(name = "网络组件:关联network表") private String networkUnionId; - /** - * 设备类型: 网关,设备 - */ + /** 设备类型: 网关,设备 */ @Column(name = "device_node") @Excel(name = "设备类型: 网关,设备") private String deviceNode; - /** - * 网关ProductKey - */ + /** 网关ProductKey */ @Column(name = "gw_product_key") private String gwProductKey; - /** - * 分类名称 - */ + /** 分类名称 */ @Column(name = "classified_name") // @Excel(name = "分类名称") private String classifiedName; - /** - * 消息协议: - */ + /** 消息协议: */ @Column(name = "message_protocol") // @Excel(name = "消息协议") private String messageProtocol; - /** - * 名称 - */ + /** 名称 */ @Excel(name = "名称") private String name; - /** - * 创建者id - */ + /** 创建者id */ @Column(name = "creator_id") private String creatorId; - /** - * 产品状态 - */ + /** 产品状态 */ @Excel(name = "产品状态") private Byte state; - /** - * 说明 - */ + /** 说明 */ @Column(name = "`describe`") // @Excel(name = "说明") private String describe; - /** - * 数据存储策略 - */ + /** 数据存储策略 */ @Column(name = "store_policy") @Excel(name = "存储策略") private String storePolicy; - /** - * 传输协议: MQTT,COAP,UDP - */ + /** 传输协议: MQTT,COAP,UDP */ @Column(name = "transport_protocol") @Excel(name = "传输协议: MQTT,COAP,UDP") private String transportProtocol; - /** - * 图片地址 - */ + /** 图片地址 */ @Column(name = "photo_url") @Excel(name = "图片地址") private String photoUrl; - /** - * 创建时间 - */ + /** 创建时间 */ @Column(name = "create_time") // @Excel(name = "创建时间") private Long createTime; - /** - * 协议配置 - */ + /** 协议配置 */ @Excel(name = "协议配置") private String configuration; - /** - * 数据存储策略配置 - */ + /** 数据存储策略配置 */ @Column(name = "store_policy_configuration") @Excel(name = "数据存储策略配置") private String storePolicyConfiguration; - /** - * 物模型 - */ + /** 物模型 */ @Excel(name = "物模型") private String metadata; - /** - * 第三方平台产品下发信息 - */ + /** 第三方平台产品下发信息 */ @Excel(name = "第三方平台产品下发信息") private String thirdDownRequest; - /** - * 协议状态 - */ + /** 协议状态 */ @Excel(name = "协议状态 0停用 1启用") private Byte protocolState; - /** - * 协议类型 - */ + /** 协议类型 */ @Excel(name = "协议类型") private String protocolType; - /** - * 协议配置 - */ + /** 协议配置 */ @Excel(name = "编解码协议配置") private String protocolConfiguration; - /** - * 协议编解码示例 - */ + /** 协议编解码示例 */ @Excel(name = "协议编解码示例") private String protocolExample; } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTProductSortBO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTProductSortBO.java index 8617f239ded1da94a12ef8cb27e48cf28bcd047f..3a785e80ea57424e34b98ca84abb9f92ce5a1572 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTProductSortBO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTProductSortBO.java @@ -28,31 +28,21 @@ public class IoTProductSortBO implements Serializable { private static final long serialVersionUID = 1L; - /** - * 分类ID(新增时为空) - */ + /** 分类ID(新增时为空) */ private String id; - /** - * 父分类ID - */ + /** 父分类ID */ @NotNull(message = "父分类ID不能为空") private String parentId; - /** - * 分类名称 - */ + /** 分类名称 */ @NotBlank(message = "分类名称不能为空") private String classifiedName; - /** - * 标识 - */ + /** 标识 */ private String identification; - /** - * 说明 - */ + /** 说明 */ private String description; /** diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTUserBO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTUserBO.java index 926dc630766ac40d7a84344598715f9c3fb7031c..970c2bca9bfbad243d0f393d76ec0583e305fe00 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTUserBO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/IoTUserBO.java @@ -32,94 +32,61 @@ import lombok.NoArgsConstructor; public class IoTUserBO implements Serializable { private static final long serialVersionUID = 1L; - @Id - private Long id; + @Id private Long id; - /** - * 归属组织机构 - */ + /** 归属组织机构 */ @Column(name = "org_id") private Long orgId; - /** - * 用户名 - */ + /** 用户名 */ private String username; - /** - * 密码 - */ + /** 密码 */ private String password; - /** - * 别名 - */ + /** 别名 */ private String alias; - /** - * 用户唯一标识 - */ + /** 用户唯一标识 */ @Column(name = "union_id") private String unionId; - /** - * 邮箱 - */ + /** 邮箱 */ private String email; - /** - * 密码加盐 - */ + /** 密码加盐 */ private String salt; - /** - * 手机号 - */ + /** 手机号 */ private String mobile; - /** - * 账号状态(0正常,1停用) - */ + /** 账号状态(0正常,1停用) */ private Integer status; - /** - * 上级用户唯一id - */ + /** 上级用户唯一id */ @Excel(name = "上级用户唯一id") private String parentUnionId; - /** - * 账号身份 0.超级管理员 1.普通用户 2.子用户 - */ + /** 账号身份 0.超级管理员 1.普通用户 2.子用户 */ @Excel(name = "账号身份 0.超级管理员 1.普通用户 2.子用户") private Integer identity; - /** - * 头像 - */ + /** 头像 */ private String avatar; - /** - * 登录IP - */ + /** 登录IP */ @Column(name = "login_ip") private String loginIp; - /** - * 登录时间 - */ + /** 登录时间 */ @Column(name = "login_date") private Date loginDate; - /** - * 创建者 - */ + /** 创建者 */ @Column(name = "create_by") private String createBy; - /** - * 创建时间 - */ + /** 创建时间 */ @Column(name = "create_date") private Date createDate; @@ -129,36 +96,24 @@ public class IoTUserBO implements Serializable { @Column(name = "update_date") private Date updateDate; - /** - * 备注 - */ + /** 备注 */ private String remark; - /** - * 0-正常,1-删除 - */ + /** 0-正常,1-删除 */ private Integer deleted; - /** - * 设备接入额度剩余 - */ + /** 设备接入额度剩余 */ private Integer license; - /** - * 设备接入总数额度 - */ + /** 设备接入总数额度 */ private Integer licenseTotalAmount; private Set roles; - /** - * 角色组 - */ + /** 角色组 */ private Long[] roleIds; - /** - * 角色ID - */ + /** 角色ID */ private Long roleId; private String cfg; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/NetworkBO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/NetworkBO.java index db9b1693adf38759a6981f8e2e4f2bd94f4ea715..b2c2067dfc86f7fb7f6cbba1b7bb5c29dda09f94 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/NetworkBO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/NetworkBO.java @@ -27,33 +27,33 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) public class NetworkBO extends Network { - /** - * 网络类型名称 - */ + /** 绑定mqtt产品数量 */ + private int bindMqttServerProductCount; + + /** 绑定的mqtt产品信息 */ + private List bindMqttServerProducts; + + /** 绑定tcp产品数量 */ + private IoTProductBO bindTcpServerProducts; + + /** 绑定的tcp产品信息 */ + private int bindTcpServerProductCount; + + /** 网络类型名称 */ private String typeName; - /** - * 是否正在运行 - */ + /** 是否正在运行 */ private boolean running; - /** - * 状态名称 - */ + /** 状态名称 */ private String stateName; - /** - * 创建时间格式化 - */ + /** 创建时间格式化 */ private String createDateStr; - /** - * 网络类型列表(多个类型) - */ + /** 网络类型列表(多个类型) */ private List types; - /** - * 启用/停用状态名称 - */ + /** 启用/停用状态名称 */ private String enableName; } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/RuleModelBO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/RuleModelBO.java index 1c19fbf3d932e8dca13d17cf786b4a8e9bc885b3..04ae8e2409970c956c76b7989945466131c6d9bc 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/RuleModelBO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/RuleModelBO.java @@ -57,31 +57,21 @@ public class RuleModelBO { private static final long serialVersionUID = 1L; - /** - * 分类ID(新增时为空) - */ + /** 分类ID(新增时为空) */ private String id; - /** - * 父分类ID - */ + /** 父分类ID */ @NotNull(message = "父分类ID不能为空") private String parentId; - /** - * 分类名称 - */ + /** 分类名称 */ @NotBlank(message = "分类名称不能为空") private String classifiedName; - /** - * 标识 - */ + /** 标识 */ private String identification; - /** - * 说明 - */ + /** 说明 */ private String description; /** diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/RulegoChainBO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/RulegoChainBO.java index 2658c06643790620d11bf73c93bf103d6abb9a36..13572021250f1d971bedcc9f1fe20224b313827e 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/RulegoChainBO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/RulegoChainBO.java @@ -14,6 +14,7 @@ package cn.universal.persistence.entity.bo; import io.swagger.v3.oas.annotations.media.Schema; import java.io.Serializable; +import java.util.Date; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/SceneLinkageBO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/SceneLinkageBO.java index c13c182ce825d3415d69596de6ecb09acb7cf2ed..0b087bbafc459e4b466468acd72b61fa2eefa56c 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/SceneLinkageBO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/SceneLinkageBO.java @@ -33,57 +33,40 @@ public class SceneLinkageBO extends BaseEntity { private static final long serialVersionUID = 1L; - /** - * $column.columnComment - */ - @Id - private Long id; + /** $column.columnComment */ + @Id private Long id; - /** - * 场景名称 - */ + /** 场景名称 */ @Excel(name = "场景名称") @Column(name = "scene_name") private String sceneName; - /** - * 触发条件 all.全部 one.任意一个 - */ + /** 触发条件 all.全部 one.任意一个 */ @Excel(name = "触发条件 all.全部 one.任意一个") @Column(name = "touch") private String touch; - /** - * 触发条件 - */ + /** 触发条件 */ @Excel(name = "触发条件") @Column(name = "trigger_condition") private List triggerCondition; - /** - * 执行动作 - */ + /** 执行动作 */ @Excel(name = "执行动作") @Column(name = "exec_action") private List execAction; - /** - * 沉默周期 - */ + /** 沉默周期 */ @Excel(name = "沉默周期") @Column(name = "sleep_cycle") private Long sleepCycle; - /** - * 0启用 1停用 - */ + /** 0启用 1停用 */ @Excel(name = "0启用 1停用") @Column(name = "status") private Integer status; - /** - * 设备id - */ + /** 设备id */ @Excel(name = "设备id") @Column(name = "dev_id") private String devId; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/UPPushBO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/UPPushBO.java index 04b1e9ee6681d30ad2294855f5b960177417da44..a00183054efabd5ceb237975b46fb45eae1ce208 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/UPPushBO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/bo/UPPushBO.java @@ -34,9 +34,7 @@ public class UPPushBO implements Serializable { // 重试配置 private RetryConfig retry; - /** - * HTTP 推送配置 - */ + /** HTTP 推送配置 */ @Data @Builder public static class HttpPushConfig implements Serializable { @@ -49,9 +47,7 @@ public class UPPushBO implements Serializable { private boolean support; } - /** - * MQTT 推送配置 - */ + /** MQTT 推送配置 */ @Data @Builder public static class MqttPushConfig implements Serializable { @@ -65,9 +61,7 @@ public class UPPushBO implements Serializable { private String username; } - /** - * Kafka 推送配置 - */ + /** Kafka 推送配置 */ @Data @Builder public static class KafkaPushConfig implements Serializable { @@ -77,9 +71,7 @@ public class UPPushBO implements Serializable { private boolean support; } - /** - * RocketMQ 推送配置 - */ + /** RocketMQ 推送配置 */ @Data @Builder public static class RocketMQPushConfig implements Serializable { @@ -89,63 +81,43 @@ public class UPPushBO implements Serializable { private boolean support; } - /** - * 统计配置 - */ + /** 统计配置 */ @Data @Builder public static class StatisticsConfig implements Serializable { private static final long serialVersionUID = 1L; - /** - * 是否启用统计 - */ + /** 是否启用统计 */ private boolean enable = true; - /** - * 统计数据保留时间(天) - */ + /** 统计数据保留时间(天) */ private Integer retentionDays = 30; - /** - * 异步统计 - */ + /** 异步统计 */ private boolean async = true; } - /** - * 重试配置 - */ + /** 重试配置 */ @Data @Builder public static class RetryConfig implements Serializable { private static final long serialVersionUID = 1L; - /** - * 是否启用重试 - */ + /** 是否启用重试 */ private boolean enable = true; - /** - * 最大重试次数 - */ + /** 最大重试次数 */ private Integer maxCount = 3; - /** - * 重试间隔(分钟) - */ + /** 重试间隔(分钟) */ private Integer intervalMinutes = 5; - /** - * 重试队列保留时间(天) - */ + /** 重试队列保留时间(天) */ private Integer queueRetentionDays = 1; - /** - * 失败记录保留时间(天) - */ + /** 失败记录保留时间(天) */ private Integer failedRetentionDays = 7; } } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/InterPhoneInstanceVO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/InterPhoneInstanceVO.java index 29ad9d4a97f78d45cb771c16ba04138363ee7d62..ade17d2793afe17f883b469fa0a9ca896c9c2f38 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/InterPhoneInstanceVO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/InterPhoneInstanceVO.java @@ -32,51 +32,32 @@ public class InterPhoneInstanceVO { private static final long serialVersionUID = 1L; - /** - * 设备自身序号 - */ + /** 设备自身序号 */ private String deviceId; - /** - * 设备实例名称 - */ + /** 设备实例名称 */ private String deviceName; - /** - * 0-离线,1-在线 - */ + /** 0-离线,1-在线 */ private Integer state; - /** - * 设备创建时间 - */ + /** 设备创建时间 */ private Long createTime; - /** - * 设备上线时间 - */ + /** 设备上线时间 */ private Long onlineTime; - /** - * 经度 - */ + /** 经度 */ private BigDecimal longitude; - /** - * 纬度 - */ + /** 纬度 */ private BigDecimal latitude; - /** - * 经纬度 - */ + /** 经纬度 */ private String coordinate; - /** - * 设备属性值 - */ - @Builder.Default - private Map metadata = new HashMap<>(); + /** 设备属性值 */ + @Builder.Default private Map metadata = new HashMap<>(); public void setCoordinate(String coordinate) { this.coordinate = coordinate; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceCompanyVO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceCompanyVO.java index 1e53dc5cc0912191f7025da710bce25576ea687e..b41ceb7dc174798b2f0802f692447f03b47bfed8 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceCompanyVO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceCompanyVO.java @@ -27,15 +27,11 @@ public class IoTDeviceCompanyVO { private static final long serialVersionUID = 1L; - /** - * 厂家编号 - */ + /** 厂家编号 */ @Schema(description = "厂家编号") private String companyNo; - /** - * 厂家名称 - */ + /** 厂家名称 */ @Schema(description = "厂家名称") private String companyName; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceFunctionHistoryVO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceFunctionHistoryVO.java index c966a524ee6ec551b82c91f2d16877f7e9d83962..0cd54d5f21f467e57394e92885b5e58bd676bf41 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceFunctionHistoryVO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceFunctionHistoryVO.java @@ -27,8 +27,7 @@ import lombok.Data; public class IoTDeviceFunctionHistoryVO implements Serializable { private static final long serialVersionUID = 1L; - @Id - private Long id; + @Id private Long id; private String iotId; private String productKey; private String deviceId; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceFunctionTaskVO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceFunctionTaskVO.java index 4dbd64c7fe1eda34b5b6c4e50ac8b23dcca7468a..456dcd0e2c39a240052acb00d76f9d5897720666 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceFunctionTaskVO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceFunctionTaskVO.java @@ -26,8 +26,7 @@ import lombok.Data; public class IoTDeviceFunctionTaskVO implements Serializable { private static final long serialVersionUID = 1L; - @Id - private Long id; + @Id private Long id; private String taskName; private String productKey; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceGeoFenceVO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceGeoFenceVO.java index 1798afe1dd4bee684dc771395d089fc45d436ff2..c0b40e4f7974abded7765d9230cefbfd145a6e62 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceGeoFenceVO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceGeoFenceVO.java @@ -40,85 +40,53 @@ public class IoTDeviceGeoFenceVO implements Serializable { @KeySql(genId = SQenGenId.class) private Long id; - /** - * 围栏名称 - */ + /** 围栏名称 */ private String name; - /** - * 围栏状态 0.启用 1.停用 - */ + /** 围栏状态 0.启用 1.停用 */ private Integer status; - /** - * 触发模式 in.进入 out.离开 all.进入&离开 - */ + /** 触发模式 in.进入 out.离开 all.进入&离开 */ private String touchWay; - /** - * 范围 - */ + /** 范围 */ private String fence; - /** - * 类型 circle.圆 polygon.多边形 - */ + /** 类型 circle.圆 polygon.多边形 */ private String type; - /** - * 圆形中心点 - */ + /** 圆形中心点 */ private String point; - /** - * 半径 - */ + /** 半径 */ private BigDecimal radius; - /** - * 创建人 - */ + /** 创建人 */ private String creatorId; - /** - * 周触发(天) - */ + /** 周触发(天) */ private String weekTime; - /** - * 天触发开始时间(时) - */ + /** 天触发开始时间(时) */ private String beginTime; - /** - * 天触发结束时间(时) - */ + /** 天触发结束时间(时) */ private String endTime; - /** - * 归属第三方应用 - */ + /** 归属第三方应用 */ private String creatorUser; - /** - * 创建时间 - */ + /** 创建时间 */ private Date createDate; - /** - * 更新时间 - */ + /** 更新时间 */ private Date updateDate; private int deviceNum; - /** - * 不触发时间 - */ + /** 不触发时间 */ private String noTriggerTime; - /** - * 延迟时间 分钟 - */ + /** 延迟时间 分钟 */ private Integer delayTime; } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceGroupVO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceGroupVO.java index 84cfb9bfc7c17d9c6d43956b32da8a0d54272079..edac2038403f56f6e7aa738db9223963e5ce2dae 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceGroupVO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceGroupVO.java @@ -27,48 +27,30 @@ public class IoTDeviceGroupVO implements Serializable { private static final long serialVersionUID = 1L; - /** - * 分组ID,非自增 - */ + /** 分组ID,非自增 */ private Long id; - /** - * 分组名称 - */ + /** 分组名称 */ private String groupName; - /** - * 分组标识 - */ + /** 分组标识 */ private String groupCode; - /** - * 群组描述 - */ + /** 群组描述 */ private String groupDescribe; - /** - * 父id - */ + /** 父id */ private Long parentId; - /** - * 是否有子分组 - */ + /** 是否有子分组 */ private Integer hasChild; - /** - * 分组级别 - */ + /** 分组级别 */ private Integer groupLevel; - /** - * 设备列表 - */ + /** 设备列表 */ private List instanceVOS; - /** - * 分组子集 - */ + /** 分组子集 */ private List children; } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceLogMetadataVO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceLogMetadataVO.java index 45e0bfe1f32d9b9233ecadb9213916f675ff8d31..5c0d8cc64001e0c4db2deda3adf8388fa41607c7 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceLogMetadataVO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceLogMetadataVO.java @@ -14,6 +14,7 @@ package cn.universal.persistence.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.time.LocalDateTime; @Data @Schema(description = "设备属性视图对象") @@ -26,29 +27,19 @@ public class IoTDeviceLogMetadataVO { /** 日志ID,非自增 */ // private Long id; - /** - * 设备编码 - */ + /** 设备编码 */ private String iotId; - /** - * 设备序列号 - */ + /** 设备序列号 */ private String deviceId; - /** - * 产品ID - */ + /** 产品ID */ private String productKey; - /** - * 设备名称 - */ + /** 设备名称 */ private String deviceName; - /** - * 消息类型 - */ + /** 消息类型 */ private String messageType; private String event; @@ -57,5 +48,5 @@ public class IoTDeviceLogMetadataVO { private String ext1; private String ext2; private String ext3; - private Integer createTime; + private LocalDateTime createTime; } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceLogVO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceLogVO.java index 813f3c1922dff501853b2b1fa54901de6a7d345f..13362745388fb1841efb741ba80c8dd85ee186b5 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceLogVO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceLogVO.java @@ -13,8 +13,8 @@ package cn.universal.persistence.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.persistence.Transient; import lombok.Data; +import java.time.LocalDateTime; @Data @Schema(description = "设备日志视图对象") @@ -24,94 +24,39 @@ public class IoTDeviceLogVO { /*-----------------日志信息---------------------*/ - /** - * 日志ID,非自增 - */ + /** 日志ID,非自增 */ private Long id; - /** - * 设备编码 - */ + /** 设备编码 */ private String iotId; - /** - * 设备序列号 - */ + /** 设备序列号 */ private String deviceId; - /** - * 第三方设备ID唯一标识符 - */ - @Transient - private String extDeviceId; - - /** - * 产品ID - */ + /** 产品ID */ private String productKey; - /** - * 设备名称 - */ + /** 设备名称 */ private String deviceName; - /** - * 消息类型 - */ + /** 消息类型 */ private String messageType; - /** - * 公司名称 - */ - private String companyNo; - - /** - * 协议名称 - */ - private String protocol; - - /** - * 节点类型 - */ - private String deviceNode; - - /** - * 设备分类编号 - */ - private String classifiedId; - - /** - * 组织ID - */ - private String orgId; - - /** - * 事件名称 - */ - private String event; + /** 指令ID */ + private String commandId; - /** - * 创建人 - */ - private String createId; + /** 指令状态 */ + private Integer commandStatus; - /** - * 实例名称 - */ - private String instance; + /** 事件名称 */ + private String event; - /** - * 经纬度 - */ + /** 经纬度 */ private String point; - /** - * 内容 - */ + /** 内容 */ private String content; - /** - * 创建时间 - */ - private Long createTime; + /** 创建时间 */ + private LocalDateTime createTime; } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceModelVO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceModelVO.java index cf617b44fe60c36caeb7ce95cef5ab98cca6a0f4..06d4fb66f37bbaf1ee1d4114d67022954371fc37 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceModelVO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceModelVO.java @@ -30,43 +30,31 @@ public class IoTDeviceModelVO { private static final long serialVersionUID = 1L; - /** - * 设备型号 - */ + /** 设备型号 */ @Excel(name = "设备型号") @Schema(description = "设备型号") private String deviceModel; - /** - * 型号名称 - */ + /** 型号名称 */ @Excel(name = "型号名称") @Schema(description = "型号名称") private String deviceModelName; - /** - * 设备图标 - */ + /** 设备图标 */ @Schema(description = "设备图标") private String icon; - /** - * 网络协议 - */ + /** 网络协议 */ @Excel(name = "网络协议") @Schema(description = "网络协议") private String protocol; - /** - * 产品编号 - */ + /** 产品编号 */ @Excel(name = "产品编号") @Schema(description = "产品编号") private String productKey; - /** - * 页面配置 - */ + /** 页面配置 */ @Excel(name = "页面配置") @Schema(description = "页面配置") private Map pageCtrl; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceTypeVO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceTypeVO.java index 54fe2d27161df67328d40da4fae2d7a56c3ab479..dbc65f28db8ff67d03802f360b703d640aa681e2 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceTypeVO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceTypeVO.java @@ -27,15 +27,11 @@ public class IoTDeviceTypeVO { private static final long serialVersionUID = 1L; - /** - * 设备类型 - */ + /** 设备类型 */ @Schema(description = "设备类型") private String deviceType; - /** - * 设备类型名称 - */ + /** 设备类型名称 */ @Schema(description = "设备类型名称") private String deviceTypeName; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceVO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceVO.java index 5a4039e7db1cf569bbe6a0e4848d80932e7b7d73..62de65df7815c908e619c8b0f48d1639d856385a 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceVO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTDeviceVO.java @@ -25,41 +25,27 @@ public class IoTDeviceVO { private static final long serialVersionUID = 1L; - /** - * 对外设备唯一标识符 - */ + /** 对外设备唯一标识符 */ private String iotId; private String gwProductKey; - /** - * 设备自身序号 - */ + /** 设备自身序号 */ private String deviceId; - /** - * 派生元数据,有的设备的属性,功能,事件可能会动态的添加 - */ + /** 派生元数据,有的设备的属性,功能,事件可能会动态的添加 */ private String metadata; - /** - * 产品key - */ + /** 产品key */ private String productKey; - /** - * 设备名称 - */ + /** 设备名称 */ private String productName; - /** - * 设备实例名称 - */ + /** 设备实例名称 */ private String deviceName; - /** - * 别名 - */ + /** 别名 */ private String nickName; private String latlng; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTProductExportVO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTProductExportVO.java index e29513cbf79144820ab256a0a5978556259bf1b7..500257a1a04ba453090d492363c8b11cbbd187eb 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTProductExportVO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTProductExportVO.java @@ -29,194 +29,135 @@ public class IoTProductExportVO implements Serializable { private static final long serialVersionUID = 1L; - /** - * 主键ID - */ - @Id - private Long id; - - /** - * 产品编号 - */ + /** 主键ID */ + @Id private Long id; + + /** 产品编号 */ @Column(name = "product_id") @Excel(name = "产品编号") private String productId; - /** - * 产品KEY - */ + /** 产品KEY */ @Column(name = "product_key") @Excel(name = "产品KEY") private String productKey; - /** - * 产品密钥(1型1密) - */ + /** 产品密钥(1型1密) */ @Column(name = "product_secret") private String productSecret; - /** - * 第三方平台:lvzhou,ctwing,onenet,alibaba,baidu - */ + /** 第三方平台:lvzhou,ctwing,onenet,alibaba,baidu */ @Column(name = "third_platform") @Excel(name = "第三方平台:lvzhou,ctwing,onenet,alibaba,baidu") private String thirdPlatform; - /** - * 第三方平台配置信息 - */ + /** 第三方平台配置信息 */ @Column(name = "third_configuration") @Excel(name = "第三方平台配置信息") private String thirdConfiguration; - /** - * 厂商编号 - */ + /** 厂商编号 */ @Column(name = "company_no") @Excel(name = "厂商编号") private String companyNo; - /** - * 分类ID - */ + /** 分类ID */ @Column(name = "classified_id") // @Excel(name = "分类ID") private String classifiedId; - /** - * 网络组件:关联network表 - */ + /** 网络组件:关联network表 */ @Column(name = "network_union_id") // @Excel(name = "网络组件:关联network表") private String networkUnionId; - /** - * 设备类型: 网关,设备 - */ + /** 设备类型: 网关,设备 */ @Column(name = "device_node") @Excel(name = "设备类型: 网关,设备") private String deviceNode; - /** - * 所属项目 - */ + /** 所属项目 */ @Column(name = "gw_product_key") private String gwProductKey; - /** - * 分类名称 - */ + /** 分类名称 */ @Column(name = "classified_name") // @Excel(name = "分类名称") private String classifiedName; - /** - * 消息协议: - */ + /** 消息协议: */ @Column(name = "message_protocol") // @Excel(name = "消息协议") private String messageProtocol; - /** - * 名称 - */ + /** 名称 */ @Excel(name = "名称") private String name; - /** - * 创建者id - */ + /** 创建者id */ @Column(name = "creator_id") private String creatorId; - /** - * 产品状态 - */ + /** 产品状态 */ @Excel(name = "产品状态") private Byte state; - /** - * 说明 - */ + /** 说明 */ @Column(name = "`describe`") // @Excel(name = "说明") private String describe; - /** - * 数据存储策略 - */ + /** 数据存储策略 */ @Column(name = "store_policy") @Excel(name = "存储策略") private String storePolicy; - /** - * 传输协议: MQTT,COAP,UDP - */ + /** 传输协议: MQTT,COAP,UDP */ @Column(name = "transport_protocol") @Excel(name = "传输协议: MQTT,COAP,UDP") private String transportProtocol; - /** - * 图片地址 - */ + /** 图片地址 */ @Column(name = "photo_url") @Excel(name = "图片地址") private String photoUrl; - /** - * 协议配置 - */ + /** 协议配置 */ @Column(name = "configuration") @Excel(name = "产品配置") private String configuration; - /** - * 创建时间 - */ + /** 创建时间 */ @Column(name = "create_time") @Excel(name = "创建时间") private Long createTime; - /** - * 数据存储策略配置 - */ + /** 数据存储策略配置 */ @Column(name = "store_policy_configuration") @Excel(name = "数据存储策略配置") private String storePolicyConfiguration; - /** - * 物模型 - */ + /** 物模型 */ @Excel(name = "物模型") private String metadata; - /** - * 第三方平台产品下发信息 - */ + /** 第三方平台产品下发信息 */ @Excel(name = "第三方平台产品下发信息") private String thirdDownRequest; - /** - * 协议状态 - */ + /** 协议状态 */ @Excel(name = "协议状态 0停用 1启用") private Byte protocolState; - /** - * 协议类型 - */ + /** 协议类型 */ @Excel(name = "协议类型") private String protocolType; - /** - * 协议配置 - */ + /** 协议配置 */ @Excel(name = "编解码协议配置") private String protocolConfiguration; - /** - * 协议编解码示例 - */ + /** 协议编解码示例 */ @Excel(name = "协议编解码示例") private String example; } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTProductSortVO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTProductSortVO.java index 241555cdcba41897f904b2b46649c48a6430e34d..20e9256a5fbb28a4b4af4006ae8a93affac4ca39 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTProductSortVO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTProductSortVO.java @@ -28,57 +28,39 @@ public class IoTProductSortVO implements Serializable { private static final long serialVersionUID = 1L; - /** - * id - */ + /** id */ private String id; - /** - * 父id - */ + /** 父id */ @Excel(name = "父id") private String parentId; - /** - * 是否有子节点 - */ + /** 是否有子节点 */ @Excel(name = "是否有子节点") private Integer hasChild; - /** - * 标识 - */ + /** 标识 */ @Excel(name = "标识") private String identification; - /** - * 分类名称 - */ + /** 分类名称 */ @Excel(name = "分类名称") private String label; - /** - * 说明 - */ + /** 说明 */ @Excel(name = "说明") private String description; - /** - * 创建时间 - */ + /** 创建时间 */ @Excel(name = "创建时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; - /** - * 创建者 - */ + /** 创建者 */ @Excel(name = "创建者") private String createBy; - /** - * 子分类 - */ + /** 子分类 */ private List children = new ArrayList(); public List getChildren() { diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTProtocolVO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTProtocolVO.java index 317ebbc4f1726112da9ad1542ef4ff7743c4debd..1257ba2f46c333e3e1fd849e8db4399168fff858 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTProtocolVO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTProtocolVO.java @@ -31,8 +31,7 @@ public class IoTProtocolVO implements Serializable { private String name; private String description; private Byte state; - @Id - private String id; + @Id private String id; private String type; private String configuration; private String example; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTUserApplicationVO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTUserApplicationVO.java index 9c51852d81a1e5b5822b74aefd9940ff97fb3c49..21d44d90e176c0b7aea67e2a4b9064c150609aee 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTUserApplicationVO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTUserApplicationVO.java @@ -40,57 +40,41 @@ public class IoTUserApplicationVO implements Serializable { @Excel(name = "用户唯一标识") private String unionId; - /** - * 调用凭证APPID - */ + /** 调用凭证APPID */ @Column(name = "app_id") @Excel(name = "调用凭证APPID") private String appId; - /** - * MQ上行主题,英文逗号分隔 - */ + /** MQ上行主题,英文逗号分隔 */ @Column(name = "up_topic") @Excel(name = "MQ上行主题") private String upTopic; - /** - * MQ下行主题,英文逗号分隔 - */ + /** MQ下行主题,英文逗号分隔 */ @Column(name = "down_topic") @Excel(name = "MQ下行主题") private String downTopic; - /** - * 调用密钥 - */ + /** 调用密钥 */ @Column(name = "app_secret") @Excel(name = "调用密钥") private String appSecret; - /** - * 授权结束时间 - */ + /** 授权结束时间 */ @Column(name = "valid_end_date") @Excel(name = "授权结束时间") private Date validEndDate; - /** - * 授权范围 - */ + /** 授权范围 */ @Excel(name = "授权范围") private String scope; - /** - * 0-正常,1-停用 - */ + /** 0-正常,1-停用 */ @Column(name = "app_status") @Excel(name = "应用状态 0-正常,1-停用") private Integer appStatus; - /** - * 0-正常,1-删除 - */ + /** 0-正常,1-删除 */ @Excel(name = "是否删除 0正常 1删除") private Integer deleted; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTUserVO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTUserVO.java index 5c8063e52e09022fd6e59c99786d13baa5ea2f75..e0a2c07525ccf003f015ccaf89a4662ea0a66e20 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTUserVO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/IoTUserVO.java @@ -35,93 +35,59 @@ import lombok.NoArgsConstructor; public class IoTUserVO implements Serializable { private static final long serialVersionUID = 1L; - @Id - private Long id; + @Id private Long id; - /** - * 归属组织机构 - */ + /** 归属组织机构 */ @Column(name = "org_id") private Long orgId; - /** - * 用户名 - */ + /** 用户名 */ private String username; - /** - * 密码 - */ - @JsonIgnore - private String password; + /** 密码 */ + @JsonIgnore private String password; - /** - * 别名 - */ + /** 别名 */ private String alias; - /** - * 用户唯一标识 - */ + /** 用户唯一标识 */ @Column(name = "union_id") private String unionId; - /** - * 邮箱 - */ + /** 邮箱 */ private String email; - /** - * 密码加盐 - */ + /** 密码加盐 */ private String salt; - /** - * 手机号 - */ + /** 手机号 */ private String mobile; - /** - * 账号状态(0正常,1停用) - */ + /** 账号状态(0正常,1停用) */ private String status; - /** - * 头像 - */ + /** 头像 */ private String avatar; - /** - * 上级用户唯一id - */ + /** 上级用户唯一id */ private String parentUnionId; - /** - * 账号身份 0.超级管理员 1.普通用户 2.子用户 - */ + /** 账号身份 0.超级管理员 1.普通用户 2.子用户 */ private Integer identity; - /** - * 登录IP - */ + /** 登录IP */ @Column(name = "login_ip") private String loginIp; - /** - * 登录时间 - */ + /** 登录时间 */ @Column(name = "login_date") private Date loginDate; - /** - * 创建者 - */ + /** 创建者 */ @Column(name = "create_by") private String createBy; - /** - * 创建时间 - */ + /** 创建时间 */ @Column(name = "create_date") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createDate; @@ -133,35 +99,24 @@ public class IoTUserVO implements Serializable { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date updateDate; - /** - * 备注 - */ + /** 备注 */ private String remark; - /** - * 0-正常,1-删除 - */ + /** 0-正常,1-删除 */ private Integer deleted; private List roleIds; - /** - * 接入数 - */ + /** 接入数 */ @Column(name = "license") private Integer license; - /** - * 接入数 - */ + /** 接入数 */ @Column(name = "license_total_amount") private Integer licenseTotalAmount; - /** - * 请求参数 - */ - @Builder.Default - private Map params = new HashMap<>(); + /** 请求参数 */ + @Builder.Default private Map params = new HashMap<>(); public IoTUserVO(Long userId) { this.id = userId; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/NetworkVO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/NetworkVO.java index 81b2b32ad45d2cc08d143381206d1003ee60ac0e..b01ad6b1b82f6e1b2e64e13bad729335f4eadb39 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/NetworkVO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/NetworkVO.java @@ -26,33 +26,21 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) public class NetworkVO extends Network { - /** - * 网络类型名称 - */ + /** 网络类型名称 */ private String typeName; - /** - * 状态名称 - */ + /** 状态名称 */ private String stateName; - /** - * 创建时间格式化 - */ + /** 创建时间格式化 */ private String createDateStr; - /** - * 配置对象(解析后的JSON) - */ + /** 配置对象(解析后的JSON) */ private Object configObject; - /** - * 启用/停用状态名称 - */ + /** 启用/停用状态名称 */ private String enableName; - /** - * 是否正在运行 - */ + /** 是否正在运行 */ private boolean running; } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/RuleModelVO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/RuleModelVO.java index 3877579de94fe03760128d8aafe84104471b7b54..0daf2d47daf5ec07b194249fef9de19cde08efa2 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/RuleModelVO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/RuleModelVO.java @@ -44,9 +44,7 @@ public class RuleModelVO implements Serializable { @Schema(description = "规则名称") private String ruleName; - /** - * 数据级别 - */ + /** 数据级别 */ @Schema(description = "数据级别") private String dataLevel; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/RulegoChainVO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/RulegoChainVO.java index 64346fa9c74d99dc06f55dab3e5c12e4318ca740..0baecdf93d652c6c8d04243fa1c7eebd603f9a46 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/RulegoChainVO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/RulegoChainVO.java @@ -12,8 +12,10 @@ package cn.universal.persistence.entity.vo; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import java.io.Serializable; +import java.util.Date; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/WxMiniUserInfoVO.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/WxMiniUserInfoVO.java index b6b3cf9f8a5956f4eba56f7663771be4c0dce4a3..1fa777e7768f681b5a23073f1a7078b26bebf3d1 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/WxMiniUserInfoVO.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/entity/vo/WxMiniUserInfoVO.java @@ -33,41 +33,29 @@ public class WxMiniUserInfoVO implements Serializable { private static final long serialVersionUID = 1L; - /** - * $column.columnComment - */ + /** $column.columnComment */ private Long uuid; // 用户是否订阅该公众号标识,值为0时,代表此用户没有关注该公众号。 private Integer subscribe; - /** - * 用户微信openid - */ + /** 用户微信openid */ @Column(name = "open_id") private String openId; - /** - * 开放平台id - */ + /** 开放平台id */ @Column(name = "union_id") private String unionId; - /** - * 微信名 - */ + /** 微信名 */ @Column(name = "nick_name") private String nickName; - /** - * 公众号id - */ + /** 公众号id */ @Column(name = "app_id") private String appId; - /** - * 微信头像 - */ + /** 微信头像 */ @Column(name = "head_img_url") private String headImgUrl; @@ -77,9 +65,7 @@ public class WxMiniUserInfoVO implements Serializable { @Column(name = "update_time") private Date updateTime; - /** - * 手机 - */ + /** 手机 */ @Column(name = "phone") private String phone; } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/mapper/IoTDeviceMapper.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/mapper/IoTDeviceMapper.java index a1c0c6acc821b4a09343efca3b7678787e3c0582..3b463cea0402cd4aa5e76227638885796ecb2195 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/mapper/IoTDeviceMapper.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/mapper/IoTDeviceMapper.java @@ -22,7 +22,6 @@ import cn.universal.persistence.entity.bo.IoTDeviceHistoryBO; import cn.universal.persistence.entity.bo.IoTGwDeviceBO; import cn.universal.persistence.entity.bo.NetworkBO; import cn.universal.persistence.entity.vo.GatewayDeviceVo; -import cn.universal.persistence.entity.vo.InterPhoneInstanceVO; import cn.universal.persistence.entity.vo.IoTDeviceCompanyVO; import cn.universal.persistence.entity.vo.IoTDeviceCountVO; import cn.universal.persistence.entity.vo.IoTDeviceModelVO; @@ -67,43 +66,29 @@ public interface IoTDeviceMapper extends BaseMapper { List apiDeviceList(IoTAPIQuery apiQuery); - /** - * 查询设备 - * - * @param id 设备主键 - * @return 设备 - */ + /** 查询设备 */ public IoTDevice selectDevInstanceById(String id); - /** - * 查询设备列表 - * - * @param ioTDevice 设备 - * @return 设备集合 - */ + /** 查询设备列表 */ public List selectDevInstanceList( @Param("ioTDevice") IoTDevice ioTDevice, @Param("unionId") String unionId); + /** 按第三方平台过滤的设备列表(新接口专用) */ + List selectDevInstanceListByPlatform( + @Param("ioTDevice") IoTDevice ioTDevice, + @Param("thirdPlatform") String thirdPlatform, + @Param("unionId") String unionId); + public List selectDevInstanceUnList( @Param("ioTDevice") IoTDevice ioTDevice, @Param("unionId") String unionId); List selectDevInstanceForExport( @Param("ioTDevice") IoTDevice ioTDevice, @Param("unionId") String unionId); - /** - * 新增设备 - * - * @param ioTDevice 设备 - * @return 结果 - */ + /** 新增设备 */ public int insertDevInstance(IoTDevice ioTDevice); - /** - * 修改设备 - * - * @param ioTDevice 设备 - * @return 结果 - */ + /** 修改设备 */ public int updateDevInstance(IoTDevice ioTDevice); int bindApp(@Param("id") String[] id, @Param("appUniqueId") String appUniqueId); @@ -114,20 +99,10 @@ public interface IoTDeviceMapper extends BaseMapper { /** 设备应用解绑 */ int apiUnBindApp(@Param("iotId") String iotId); - /** - * 删除设备 - * - * @param id 设备主键 - * @return 结果 - */ + /** 删除设备 */ public int deleteDevInstanceById(String id); - /** - * 批量删除设备 - * - * @param ids 需要删除的数据主键集合 - * @return 结果 - */ + /** 批量删除设备 */ public int deleteDevInstanceByIds(String[] ids); /** 根据分组id获取设备集合 */ @@ -141,6 +116,9 @@ public interface IoTDeviceMapper extends BaseMapper { IoTDevice getOneByDeviceId(@Param("query") IoTDeviceQuery query); + IoTDevice selectIoTDevice( + @Param("productKey") String productKey, @Param("deviceId") String deviceId); + IoTDevice getOneByIotId(@Param("query") IoTDeviceQuery query); /** 根据产品key查型号配置 */ @@ -184,7 +162,6 @@ public interface IoTDeviceMapper extends BaseMapper { List queryMileSightList(@Param("bo") NetworkBO bo); - List getGatewayDeviceList(@Param("bo") IoTGwDeviceBO bo); List selectDevInstanceListWithTags( diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/mapper/IoTDeviceShadowMapper.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/mapper/IoTDeviceShadowMapper.java index 38644f0d2fcd69a12205063ddf5214ed2fe176f9..2e2473b223fc1361664d82a16bd4d3599fe21794 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/mapper/IoTDeviceShadowMapper.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/mapper/IoTDeviceShadowMapper.java @@ -16,10 +16,33 @@ import cn.universal.persistence.common.BaseMapper; import cn.universal.persistence.entity.IoTDeviceShadow; import org.apache.ibatis.annotations.Param; +import java.util.List; + public interface IoTDeviceShadowMapper extends BaseMapper { IoTDeviceShadow getDeviceShadow(String iotId); String getShadowMetadata( @Param("productKey") String productKey, @Param("deviceId") String deviceId); + + /** + * 批量查询设备影子 + * @param iotIds 设备ID列表 + * @return 设备影子列表 + */ + List selectByIotIds(@Param("iotIds") List iotIds); + + /** + * 批量插入设备影子 + * @param shadows 设备影子列表 + * @return 插入数量 + */ + int batchInsert(@Param("shadows") List shadows); + + /** + * 批量更新设备影子 + * @param shadows 设备影子列表 + * @return 更新数量 + */ + int batchUpdate(@Param("shadows") List shadows); } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/mapper/IoTProductMapper.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/mapper/IoTProductMapper.java index 6e14243e3c1753646c2aeb818d7187f3d8838a68..4091ee00b9699f313099492121cb1a27f3850576 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/mapper/IoTProductMapper.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/mapper/IoTProductMapper.java @@ -141,4 +141,10 @@ public interface IoTProductMapper extends BaseMapper { /** 根据network_union_id查找productKey */ String findProductKeyByNetworkUnionId(String networkUnionId); + + /** 查询mqtt绑定使用networkUnionId的产品列表* */ + List selectMqttProductsUseNetwork(String networkUnionId); + + /** 查询tcp绑定使用networkUnionId的产品* */ + IoTProductBO selectTcpProductsUseNetwork(String productKey); } diff --git a/cn-universal-persistence/src/main/java/cn/universal/persistence/mapper/NetworkMapper.java b/cn-universal-persistence/src/main/java/cn/universal/persistence/mapper/NetworkMapper.java index 7a5d47b7caa2915f2f870f6c1fc49fddb3afc8cd..33f0ea6406ce7e7dae2e37f3180e681fa5378f05 100644 --- a/cn-universal-persistence/src/main/java/cn/universal/persistence/mapper/NetworkMapper.java +++ b/cn-universal-persistence/src/main/java/cn/universal/persistence/mapper/NetworkMapper.java @@ -141,4 +141,12 @@ public interface NetworkMapper extends BaseMapper { */ int selectTcpNetworkByPortCount( @Param("port") Integer port, @Param("excludeId") Integer excludeId); + + /** + * 根据唯一标识查询网络组件 + * + * @param unionId 唯一标识 + * @return 网络组件列表 + */ + List selectByUnionId(@Param("unionId") String unionId); } diff --git a/cn-universal-persistence/src/main/resources/mybatis/IoTDeviceLogMapper.xml b/cn-universal-persistence/src/main/resources/mybatis/IoTDeviceLogMapper.xml index c1a0ada4c263314c496a541145256847a9cecd14..b421ee08092120f015982ff780f9d7bfdbdb7fec 100644 --- a/cn-universal-persistence/src/main/resources/mybatis/IoTDeviceLogMapper.xml +++ b/cn-universal-persistence/src/main/resources/mybatis/IoTDeviceLogMapper.xml @@ -9,17 +9,14 @@ - - - - + @@ -33,9 +30,6 @@ and device_id = #{deviceId} - - and ext_device_id = #{extDeviceId} - and product_key = #{productKey} @@ -88,9 +82,6 @@ and device_id = #{deviceId} - - and ext_device_id = #{extDeviceId} - and product_key = #{productKey} @@ -100,12 +91,6 @@ and message_type = #{messageType} - - and company_no like concat('%',#{companyNo},'%') - - - and protocol = #{protocol} - and JSON_EXTRACT(content,concat('$.','event')) = #{params.event} diff --git a/cn-universal-persistence/src/main/resources/mybatis/IoTDeviceLogMetadataMapper.xml b/cn-universal-persistence/src/main/resources/mybatis/IoTDeviceLogMetadataMapper.xml index 2b6fe0a108c4bb317aaece6686f651063e93c37f..d765a1242db7cae2688b03268958a96534de9955 100644 --- a/cn-universal-persistence/src/main/resources/mybatis/IoTDeviceLogMetadataMapper.xml +++ b/cn-universal-persistence/src/main/resources/mybatis/IoTDeviceLogMetadataMapper.xml @@ -17,7 +17,7 @@ - + diff --git a/cn-universal-persistence/src/main/resources/mybatis/IoTDeviceLogMetadataShardMapper.xml b/cn-universal-persistence/src/main/resources/mybatis/IoTDeviceLogMetadataShardMapper.xml index 47244f8c474c2ea5c4dd0eb0a2b03950d7f13bd7..5851302ea2b8190db1e1af771b80ba5128bf0e8d 100644 --- a/cn-universal-persistence/src/main/resources/mybatis/IoTDeviceLogMetadataShardMapper.xml +++ b/cn-universal-persistence/src/main/resources/mybatis/IoTDeviceLogMetadataShardMapper.xml @@ -17,7 +17,7 @@ - + diff --git a/cn-universal-persistence/src/main/resources/mybatis/IoTDeviceLogShardMapper.xml b/cn-universal-persistence/src/main/resources/mybatis/IoTDeviceLogShardMapper.xml index 93aff4a1c4bd50ea7562635c9d924478cf152c46..b9c28b48037b9f2e0e0727e3eb61b863c84ebfa5 100644 --- a/cn-universal-persistence/src/main/resources/mybatis/IoTDeviceLogShardMapper.xml +++ b/cn-universal-persistence/src/main/resources/mybatis/IoTDeviceLogShardMapper.xml @@ -9,21 +9,14 @@ - - - - - - - - + + + + + + + + + + + + + insert into iot_device_shadow ( + iot_id, product_key, device_id, ext_device_id, + active_time, online_time, last_time, update_date, + metadata, `instance` + ) values + + ( + #{shadow.iotId}, #{shadow.productKey}, #{shadow.deviceId}, #{shadow.extDeviceId}, + #{shadow.activeTime}, #{shadow.onlineTime}, #{shadow.lastTime}, #{shadow.updateDate}, + #{shadow.metadata}, #{shadow.instance} + ) + + + + + + + update iot_device_shadow + set + product_key = #{shadow.productKey}, + device_id = #{shadow.deviceId}, + ext_device_id = #{shadow.extDeviceId}, + online_time = #{shadow.onlineTime}, + last_time = #{shadow.lastTime}, + update_date = #{shadow.updateDate}, + metadata = #{shadow.metadata}, + `instance` = #{shadow.instance} + where iot_id = #{shadow.iotId} + + \ No newline at end of file diff --git a/cn-universal-persistence/src/main/resources/mybatis/IoTProductMapper.xml b/cn-universal-persistence/src/main/resources/mybatis/IoTProductMapper.xml index f51ea34d8cbbe9197f8a732440a332a0a4a51f12..1912edd1497d2428841175c87eb6af8a61b16db0 100644 --- a/cn-universal-persistence/src/main/resources/mybatis/IoTProductMapper.xml +++ b/cn-universal-persistence/src/main/resources/mybatis/IoTProductMapper.xml @@ -242,57 +242,45 @@ a.transport_protocol, a.photo_url, a.create_time, - a.state + a.state, + COALESCE(d.dev_num, 0) as dev_num FROM iot_product a + LEFT JOIN ( + SELECT + di.product_key, + COUNT(di.id) as dev_num + FROM iot_device di + + + di.creator_id = #{creatorId} + + + GROUP BY di.product_key + ) d ON a.product_key = d.product_key - 1=1 - and a.product_id = #{productId} - and a.product_key like concat('%', - #{productKey}, '%') - - and a.third_platform like - concat('%', - #{thirdPlatform}, '%') - - and a.network_union_id = - #{networkUnionId} - - and a.device_node = #{deviceNode} - and a.gw_product_key = - #{gwProductKey} - - and a.classified_id = #{classifiedId} - - and a.classified_name like - concat('%', #{classifiedName}, '%') - - and a.company_no like - concat('%', #{companyNo}, '%') - - and a.message_protocol = - #{messageProtocol} - - and (a.`name` like concat('%', #{name}, '%') or - a.product_key LIKE - concat( '%', #{name}, '%' )) - - and a.creator_id = #{creatorId} - and a.`describe` = #{describe} - and a.store_policy = #{storePolicy} - and a.transport_protocol - like - concat('%', #{transportProtocol}, '%') - - and a.`state` = #{state} + a.product_id = #{productId} + AND a.product_key LIKE CONCAT('%', #{productKey}, '%') + AND a.third_platform LIKE CONCAT('%', #{thirdPlatform}, '%') + AND a.network_union_id = #{networkUnionId} + AND a.device_node = #{deviceNode} + AND a.gw_product_key = #{gwProductKey} + AND a.classified_id = #{classifiedId} + AND a.classified_name LIKE CONCAT('%', #{classifiedName}, '%') + AND a.company_no LIKE CONCAT('%', #{companyNo}, '%') + AND a.message_protocol = #{messageProtocol} + AND (a.`name` LIKE CONCAT('%', #{name}, '%') OR a.product_key LIKE CONCAT('%', #{name}, '%')) + AND a.creator_id = #{creatorId} + AND a.`describe` = #{describe} + AND a.store_policy = #{storePolicy} + AND a.transport_protocol LIKE CONCAT('%', #{transportProtocol}, '%') + AND a.`state` = #{state} - and - - find_in_set(#{tag},a.tags) + AND + FIND_IN_SET(#{tag}, a.tags) - GROUP BY a.id ORDER BY a.id DESC @@ -567,7 +555,7 @@ from iot_product where device_node = 'GATEWAY_SUB_DEVICE' and state = 0 - and configuration like concat('%', #{productKey}, '%') + and gw_product_key = #{productKey} + + \ No newline at end of file diff --git a/cn-universal-persistence/src/main/resources/mybatis/RulegoChainLogMapper.xml b/cn-universal-persistence/src/main/resources/mybatis/RulegoChainLogMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..e0cdf2d89af82c839a9eff34ce50832cef5e3fe9 --- /dev/null +++ b/cn-universal-persistence/src/main/resources/mybatis/RulegoChainLogMapper.xml @@ -0,0 +1,21 @@ + + + + + + + + + diff --git a/cn-universal-persistence/src/main/resources/mybatis/RulegoChainMapper.xml b/cn-universal-persistence/src/main/resources/mybatis/RulegoChainMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..cac96e3a088eb87bb0b990e5b06d349981e85387 --- /dev/null +++ b/cn-universal-persistence/src/main/resources/mybatis/RulegoChainMapper.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + UPDATE rulego_chain + SET dsl_content = #{dslContent}, + last_sync_time = NOW(), + update_time = NOW() + WHERE rulego_id = #{rulegoId} + AND deleted = 0 + + + diff --git a/cn-universal-persistence/src/main/resources/mybatis/admin/NetworkMapper.xml b/cn-universal-persistence/src/main/resources/mybatis/admin/NetworkMapper.xml index 980fe156d8986438980bded901b5cf58feda6c7e..7121698dd71a1b73bdf39d05e02f802956ef8753 100644 --- a/cn-universal-persistence/src/main/resources/mybatis/admin/NetworkMapper.xml +++ b/cn-universal-persistence/src/main/resources/mybatis/admin/NetworkMapper.xml @@ -241,4 +241,10 @@ + + + \ No newline at end of file diff --git a/cn-universal-persistence/src/main/resources/mybatis/admin/NoticeChannelMapper.xml b/cn-universal-persistence/src/main/resources/mybatis/admin/NoticeChannelMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..b9e9b4fe42ce518b3f24651d5eff3e4cc0785c64 --- /dev/null +++ b/cn-universal-persistence/src/main/resources/mybatis/admin/NoticeChannelMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/cn-universal-persistence/src/main/resources/mybatis/admin/NoticeTemplateMapper.xml b/cn-universal-persistence/src/main/resources/mybatis/admin/NoticeTemplateMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..f441a508be58071091c42d544dcba2db569da513 --- /dev/null +++ b/cn-universal-persistence/src/main/resources/mybatis/admin/NoticeTemplateMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/cn-universal-persistence/src/main/resources/mybatis/admin/SysMenuMapper.xml b/cn-universal-persistence/src/main/resources/mybatis/admin/SysMenuMapper.xml index a5714199ee7934388a83c086d19dbe7b11b5b3a0..6e164cee16f65c1827f66b5b5fcdd887cfcd66c1 100644 --- a/cn-universal-persistence/src/main/resources/mybatis/admin/SysMenuMapper.xml +++ b/cn-universal-persistence/src/main/resources/mybatis/admin/SysMenuMapper.xml @@ -72,9 +72,6 @@ and status =#{status} - - - and parent_id =#{parentId} diff --git a/cn-universal-persistence/src/main/resources/sql/db.sql b/cn-universal-persistence/src/main/resources/sql/db.sql deleted file mode 100644 index 26a9fb8a27db11f5daac97c2ac50f66b8815854e..0000000000000000000000000000000000000000 --- a/cn-universal-persistence/src/main/resources/sql/db.sql +++ /dev/null @@ -1,4310 +0,0 @@ -/* - Navicat Premium Dump SQL - - Source Server : 194 - Source Server Type : MySQL - Source Server Version : 80406 (8.4.6) - Source Host : 192.168.31.194:3307 - Source Schema : univ - - Target Server Type : MySQL - Target Server Version : 80406 (8.4.6) - File Encoding : 65001 - - Date: 28/08/2025 10:51:25 -*/ - -SET NAMES utf8mb4; -SET FOREIGN_KEY_CHECKS = 0; - --- ---------------------------- --- Table structure for code_protocol --- ---------------------------- -DROP TABLE IF EXISTS `code_protocol`; -CREATE TABLE `code_protocol` ( - `code_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '唯一key', - `provider_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '协议类型 jar,jscript,magic', - `class_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '协议类型为jar时,编解码类名', - `location` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '编解码网络地址或者内容', - PRIMARY KEY (`code_key`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of code_protocol --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for device_message_routes --- ---------------------------- -DROP TABLE IF EXISTS `device_message_routes`; -CREATE TABLE `device_message_routes` ( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '产品Key', - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '设备ID', - `message_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '消息类型:data/status/command', - `flow_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '流程ID', - `priority` int DEFAULT '0' COMMENT '优先级', - `enabled` tinyint DEFAULT '1' COMMENT '是否启用', - `creator_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建者ID', - `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - UNIQUE KEY `uk_route` (`product_key`,`device_id`,`message_type`,`flow_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='设备消息路由表'; - --- ---------------------------- --- Records of device_message_routes --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for gen_table --- ---------------------------- -DROP TABLE IF EXISTS `gen_table`; -CREATE TABLE `gen_table` ( - `table_id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', - `table_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '表名称', - `table_comment` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '表描述', - `sub_table_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '关联子表的表名', - `sub_table_fk_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '子表关联的外键名', - `class_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '实体类名称', - `tpl_category` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT 'crud' COMMENT '使用的模板(crud单表操作 tree树表操作)', - `package_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '生成包路径', - `module_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '生成模块名', - `business_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '生成业务名', - `function_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '生成功能名', - `function_author` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '生成功能作者', - `gen_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '生成代码方式(0zip压缩包 1自定义路径)', - `gen_path` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '/' COMMENT '生成路径(不填默认项目路径)', - `options` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '其它生成选项', - `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '创建者', - `create_time` datetime DEFAULT NULL COMMENT '创建时间', - `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '更新者', - `update_time` datetime DEFAULT NULL COMMENT '更新时间', - `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '备注', - PRIMARY KEY (`table_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='代码生成业务表'; - --- ---------------------------- --- Records of gen_table --- ---------------------------- -BEGIN; -INSERT INTO `gen_table` (`table_id`, `table_name`, `table_comment`, `sub_table_name`, `sub_table_fk_name`, `class_name`, `tpl_category`, `package_name`, `module_name`, `business_name`, `function_name`, `function_author`, `gen_type`, `gen_path`, `options`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (4, 'sys_dict_type', '字典类型表', NULL, NULL, 'SysDictType', 'crud', 'cn.universal.', 'system', 'type', '字典类型', 'iot', '0', '/', NULL, 'iot', '2021-12-23 16:20:55', '', NULL, NULL); -INSERT INTO `gen_table` (`table_id`, `table_name`, `table_comment`, `sub_table_name`, `sub_table_fk_name`, `class_name`, `tpl_category`, `package_name`, `module_name`, `business_name`, `function_name`, `function_author`, `gen_type`, `gen_path`, `options`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (5, 'iot_user_application', '用户应用信息表', NULL, NULL, 'IotUserApplication', 'crud', 'cn.universal.', '用户应用信息', 'application', '用户应用信息', 'iot', '0', '/', '{\"parentMenuId\":\"1\"}', 'iot', '2021-12-30 09:57:00', '', '2021-12-30 09:58:11', NULL); -INSERT INTO `gen_table` (`table_id`, `table_name`, `table_comment`, `sub_table_name`, `sub_table_fk_name`, `class_name`, `tpl_category`, `package_name`, `module_name`, `business_name`, `function_name`, `function_author`, `gen_type`, `gen_path`, `options`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (6, 'dev_group', '设备分组表', NULL, NULL, 'DevGroup', 'crud', 'cn.universal.', NULL, 'group', '设备分组', 'iot', '0', '/', NULL, 'iot', '2021-12-30 14:08:05', '', NULL, NULL); -INSERT INTO `gen_table` (`table_id`, `table_name`, `table_comment`, `sub_table_name`, `sub_table_fk_name`, `class_name`, `tpl_category`, `package_name`, `module_name`, `business_name`, `function_name`, `function_author`, `gen_type`, `gen_path`, `options`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (7, 'dev_log', '', NULL, NULL, 'DevLog', 'crud', 'cn.universal.', NULL, 'log', NULL, 'iot', '0', '/', NULL, 'iot', '2022-01-17 10:34:37', '', NULL, NULL); -INSERT INTO `gen_table` (`table_id`, `table_name`, `table_comment`, `sub_table_name`, `sub_table_fk_name`, `class_name`, `tpl_category`, `package_name`, `module_name`, `business_name`, `function_name`, `function_author`, `gen_type`, `gen_path`, `options`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (8, 'scene_linkage', '场景联动', NULL, NULL, 'SceneLinkage', 'crud', 'cn.universal.', 'linkage', 'linkage', '场景联动', 'iot', '0', '/', '{\"parentMenuId\":\"1081\"}', 'iot', '2022-03-01 10:10:40', '', '2022-03-01 10:15:20', NULL); -COMMIT; - --- ---------------------------- --- Table structure for gen_table_column --- ---------------------------- -DROP TABLE IF EXISTS `gen_table_column`; -CREATE TABLE `gen_table_column` ( - `column_id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', - `table_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '归属表编号', - `column_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '列名称', - `column_comment` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '列描述', - `column_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '列类型', - `java_type` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'JAVA类型', - `java_field` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'JAVA字段名', - `is_pk` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '是否主键(1是)', - `is_increment` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '是否自增(1是)', - `is_required` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '是否必填(1是)', - `is_insert` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '是否为插入字段(1是)', - `is_edit` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '是否编辑字段(1是)', - `is_list` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '是否列表字段(1是)', - `is_query` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '是否查询字段(1是)', - `query_type` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT 'EQ' COMMENT '查询方式(等于、不等于、大于、小于、范围)', - `html_type` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件)', - `dict_type` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '字典类型', - `sort` int DEFAULT NULL COMMENT '排序', - `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '创建者', - `create_time` datetime DEFAULT NULL COMMENT '创建时间', - `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '更新者', - `update_time` datetime DEFAULT NULL COMMENT '更新时间', - PRIMARY KEY (`column_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=97 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='代码生成业务表字段'; - --- ---------------------------- --- Records of gen_table_column --- ---------------------------- -BEGIN; -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (32, '4', 'dict_id', '字典主键', 'bigint(20)', 'Long', 'dictId', '1', '1', NULL, '1', NULL, NULL, NULL, 'EQ', 'input', '', 1, 'iot', '2021-12-23 16:20:55', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (33, '4', 'dict_name', '字典名称', 'varchar(100)', 'String', 'dictName', '0', '0', NULL, '1', '1', '1', '1', 'LIKE', 'input', '', 2, 'iot', '2021-12-23 16:20:55', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (34, '4', 'dict_type', '字典类型', 'varchar(100)', 'String', 'dictType', '0', '0', NULL, '1', '1', '1', '1', 'EQ', 'select', '', 3, 'iot', '2021-12-23 16:20:55', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (35, '4', 'status', '状态(0正常 1停用)', 'char(1)', 'String', 'status', '0', '0', NULL, '1', '1', '1', '1', 'EQ', 'radio', '', 4, 'iot', '2021-12-23 16:20:55', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (36, '4', 'create_by', '创建者', 'varchar(64)', 'String', 'createBy', '0', '0', NULL, '1', NULL, NULL, NULL, 'EQ', 'input', '', 5, 'iot', '2021-12-23 16:20:55', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (37, '4', 'create_time', '创建时间', 'datetime', 'Date', 'createTime', '0', '0', NULL, '1', NULL, NULL, NULL, 'EQ', 'datetime', '', 6, 'iot', '2021-12-23 16:20:55', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (38, '4', 'update_by', '更新者', 'varchar(64)', 'String', 'updateBy', '0', '0', NULL, '1', '1', NULL, NULL, 'EQ', 'input', '', 7, 'iot', '2021-12-23 16:20:55', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (39, '4', 'update_time', '更新时间', 'datetime', 'Date', 'updateTime', '0', '0', NULL, '1', '1', NULL, NULL, 'EQ', 'datetime', '', 8, 'iot', '2021-12-23 16:20:55', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (40, '4', 'remark', '备注', 'varchar(500)', 'String', 'remark', '0', '0', NULL, '1', '1', '1', NULL, 'EQ', 'textarea', '', 9, 'iot', '2021-12-23 16:20:55', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (41, '5', 'uuid', NULL, 'bigint(20)', 'Long', 'uuid', '1', '1', '0', '1', '0', '0', '0', 'EQ', 'input', '', 1, 'iot', '2021-12-30 09:57:00', '', '2021-12-30 09:58:11'); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (42, '5', 'union_id', NULL, 'varchar(64)', 'String', 'unionId', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 2, 'iot', '2021-12-30 09:57:00', '', '2021-12-30 09:58:11'); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (43, '5', 'app_name', '应用名称', 'varchar(64)', 'String', 'appName', '0', '0', '0', '1', '1', '1', '1', 'LIKE', 'input', '', 3, 'iot', '2021-12-30 09:57:00', '', '2021-12-30 09:58:11'); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (44, '5', 'app_unique_id', '应用标识', 'varchar(128)', 'String', 'appUniqueId', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 4, 'iot', '2021-12-30 09:57:00', '', '2021-12-30 09:58:11'); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (45, '5', 'app_id', '调用凭证APPID,必须16位', 'varchar(16)', 'String', 'appId', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 5, 'iot', '2021-12-30 09:57:00', '', '2021-12-30 09:58:11'); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (46, '5', 'up_topic', 'MQ上行主题,英文逗号分隔', 'varchar(64)', 'String', 'upTopic', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 6, 'iot', '2021-12-30 09:57:00', '', '2021-12-30 09:58:11'); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (47, '5', 'down_topic', 'MQ下行主题,英文逗号分隔', 'varchar(64)', 'String', 'downTopic', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 7, 'iot', '2021-12-30 09:57:00', '', '2021-12-30 09:58:11'); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (48, '5', 'notify_url', '回调地址', 'varchar(255)', 'String', 'notifyUrl', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 8, 'iot', '2021-12-30 09:57:00', '', '2021-12-30 09:58:11'); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (49, '5', 'app_secret', '调用密钥,必须32位', 'varchar(32)', 'String', 'appSecret', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 9, 'iot', '2021-12-30 09:57:00', '', '2021-12-30 09:58:11'); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (50, '5', 'valid_end_date', '授权结束时间', 'datetime', 'Date', 'validEndDate', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'datetime', '', 10, 'iot', '2021-12-30 09:57:00', '', '2021-12-30 09:58:11'); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (51, '5', 'scope', '授权范围', 'varchar(128)', 'String', 'scope', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 11, 'iot', '2021-12-30 09:57:00', '', '2021-12-30 09:58:11'); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (52, '5', 'app_status', '0-正常,1-停用', 'tinyint(1) unsigned', 'Integer', 'appStatus', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'radio', '', 12, 'iot', '2021-12-30 09:57:00', '', '2021-12-30 09:58:11'); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (53, '5', 'instance', '实例名称', 'varchar(64)', 'String', 'instance', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 13, 'iot', '2021-12-30 09:57:00', '', '2021-12-30 09:58:11'); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (54, '5', 'remark', '描述', 'varchar(128)', 'String', 'remark', '0', '0', '0', '1', '1', '1', '0', 'EQ', 'input', '', 14, 'iot', '2021-12-30 09:57:00', '', '2021-12-30 09:58:11'); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (55, '5', 'create_date', '创建时间', 'datetime', 'Date', 'createDate', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'datetime', '', 15, 'iot', '2021-12-30 09:57:00', '', '2021-12-30 09:58:11'); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (56, '5', 'deleted', '0-正常,1-删除', 'tinyint(1) unsigned', 'Integer', 'deleted', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 16, 'iot', '2021-12-30 09:57:00', '', '2021-12-30 09:58:11'); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (57, '6', 'id', '分组ID,非自增', 'bigint(20)', 'Long', 'id', '1', '0', NULL, '1', NULL, NULL, NULL, 'EQ', 'input', '', 1, 'iot', '2021-12-30 14:08:05', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (58, '6', 'group_name', '分组名称', 'varchar(128)', 'String', 'groupName', '0', '0', '1', '1', '1', '1', '1', 'LIKE', 'input', '', 2, 'iot', '2021-12-30 14:08:05', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (59, '6', 'group_code', '分组标识', 'varchar(128)', 'String', 'groupCode', '0', '0', NULL, '1', '1', '1', '1', 'EQ', 'input', '', 3, 'iot', '2021-12-30 14:08:05', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (60, '6', 'describe', '群组描述', 'varchar(255)', 'String', 'describe', '0', '0', NULL, '1', '1', '1', '1', 'EQ', 'input', '', 4, 'iot', '2021-12-30 14:08:05', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (61, '6', 'parent_id', '父id', 'bigint(20)', 'Long', 'parentId', '0', '0', NULL, '1', '1', '1', '1', 'EQ', 'input', '', 5, 'iot', '2021-12-30 14:08:05', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (62, '6', 'relat_dev_count', '激活设备数', 'int(10) unsigned zerofill', 'Integer', 'relatDevCount', '0', '0', NULL, '1', '1', '1', '1', 'EQ', 'input', '', 6, 'iot', '2021-12-30 14:08:05', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (63, '6', 'active_dev_count', '关联设备树', 'int(10) unsigned zerofill', 'Integer', 'activeDevCount', '0', '0', NULL, '1', '1', '1', '1', 'EQ', 'input', '', 7, 'iot', '2021-12-30 14:08:05', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (64, '6', 'creator_id', '创建人', 'varchar(255)', 'String', 'creatorId', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 8, 'iot', '2021-12-30 14:08:05', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (65, '6', 'instance', '实例编号', 'varchar(64)', 'String', 'instance', '0', '0', NULL, '1', '1', '1', '1', 'EQ', 'input', '', 9, 'iot', '2021-12-30 14:08:05', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (66, '6', 'tag', '标签', 'varchar(128)', 'String', 'tag', '0', '0', NULL, '1', '1', '1', '1', 'EQ', 'input', '', 10, 'iot', '2021-12-30 14:08:05', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (67, '7', 'id', NULL, 'bigint(20) unsigned', 'Long', 'id', '1', '1', NULL, '1', NULL, NULL, NULL, 'EQ', 'input', '', 1, 'iot', '2022-01-17 10:34:37', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (68, '7', 'iot_id', '唯一编码', 'varchar(32)', 'String', 'iotId', '0', '0', NULL, '1', '1', '1', '1', 'EQ', 'input', '', 2, 'iot', '2022-01-17 10:34:37', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (69, '7', 'device_id', '设备自身序号', 'varchar(32)', 'String', 'deviceId', '0', '0', NULL, '1', '1', '1', '1', 'EQ', 'input', '', 3, 'iot', '2022-01-17 10:34:37', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (70, '7', 'ext_device_id', '第三方设备ID唯一标识符', 'varchar(32)', 'String', 'extDeviceId', '0', '0', NULL, '1', '1', '1', '1', 'EQ', 'input', '', 4, 'iot', '2022-01-17 10:34:37', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (71, '7', 'product_key', '产品ID', 'varchar(64)', 'String', 'productKey', '0', '0', NULL, '1', '1', '1', '1', 'EQ', 'input', '', 5, 'iot', '2022-01-17 10:34:37', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (72, '7', 'device_name', '设备名称', 'varchar(32)', 'String', 'deviceName', '0', '0', NULL, '1', '1', '1', '1', 'LIKE', 'input', '', 6, 'iot', '2022-01-17 10:34:37', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (73, '7', 'message_type', '消息类型', 'varchar(20)', 'String', 'messageType', '0', '0', NULL, '1', '1', '1', '1', 'EQ', 'select', '', 7, 'iot', '2022-01-17 10:34:37', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (74, '7', 'company_no', NULL, 'varchar(20)', 'String', 'companyNo', '0', '0', NULL, '1', '1', '1', '1', 'EQ', 'input', '', 8, 'iot', '2022-01-17 10:34:37', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (75, '7', 'protocol', '协议', 'varchar(20)', 'String', 'protocol', '0', '0', NULL, '1', '1', '1', '1', 'EQ', 'input', '', 9, 'iot', '2022-01-17 10:34:37', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (76, '7', 'device_node', '节点类型', 'varchar(32)', 'String', 'deviceNode', '0', '0', NULL, '1', '1', '1', '1', 'EQ', 'input', '', 10, 'iot', '2022-01-17 10:34:37', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (77, '7', 'classified_id', NULL, 'varchar(128)', 'String', 'classifiedId', '0', '0', NULL, '1', '1', '1', '1', 'EQ', 'input', '', 11, 'iot', '2022-01-17 10:34:37', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (78, '7', 'org_id', NULL, 'varchar(20)', 'String', 'orgId', '0', '0', NULL, '1', '1', '1', '1', 'EQ', 'input', '', 12, 'iot', '2022-01-17 10:34:38', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (79, '7', 'event', '事件名称', 'varchar(30)', 'String', 'event', '0', '0', NULL, '1', '1', '1', '1', 'EQ', 'input', '', 13, 'iot', '2022-01-17 10:34:38', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (80, '7', 'create_id', NULL, 'varchar(20)', 'String', 'createId', '0', '0', NULL, '1', '1', '1', '1', 'EQ', 'input', '', 14, 'iot', '2022-01-17 10:34:38', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (81, '7', 'instance', '实例名称', 'varchar(64)', 'String', 'instance', '0', '0', NULL, '1', '1', '1', '1', 'EQ', 'input', '', 15, 'iot', '2022-01-17 10:34:38', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (82, '7', 'point', '经纬度', 'varchar(128)', 'String', 'point', '0', '0', NULL, '1', '1', '1', '1', 'EQ', 'input', '', 16, 'iot', '2022-01-17 10:34:38', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (83, '7', 'content', '内容', 'text', 'String', 'content', '0', '0', NULL, '1', '1', '1', '1', 'EQ', 'editor', '', 17, 'iot', '2022-01-17 10:34:38', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (84, '7', 'create_time', '创建时间', 'int(10) unsigned zerofill', 'Integer', 'createTime', '0', '0', NULL, '1', NULL, NULL, NULL, 'EQ', 'input', '', 18, 'iot', '2022-01-17 10:34:38', '', NULL); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (85, '8', 'id', NULL, 'bigint(20)', 'Long', 'id', '1', '1', '0', '1', '0', '0', '0', 'EQ', 'input', '', 1, 'iot', '2022-03-01 10:10:40', '', '2022-03-01 10:15:20'); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (86, '8', 'scene_name', '场景名称', 'varchar(50)', 'String', 'sceneName', '0', '0', '0', '1', '1', '1', '1', 'LIKE', 'input', '', 2, 'iot', '2022-03-01 10:10:40', '', '2022-03-01 10:15:20'); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (87, '8', 'touch', '触发条件 all.全部 one.任意一个', 'varchar(10)', 'String', 'touch', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 3, 'iot', '2022-03-01 10:10:40', '', '2022-03-01 10:15:20'); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (88, '8', 'trigger_condition', '触发条件', 'text', 'String', 'triggerCondition', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'textarea', '', 4, 'iot', '2022-03-01 10:10:40', '', '2022-03-01 10:15:20'); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (89, '8', 'exec_action', '执行动作', 'text', 'String', 'execAction', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'textarea', '', 5, 'iot', '2022-03-01 10:10:40', '', '2022-03-01 10:15:20'); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (90, '8', 'sleep_cycle', '沉默周期', 'int(11)', 'Long', 'sleepCycle', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 6, 'iot', '2022-03-01 10:10:40', '', '2022-03-01 10:15:20'); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (91, '8', 'create_by', NULL, 'varchar(64)', 'String', 'createBy', '0', '0', '0', '1', '0', '0', '0', 'EQ', 'input', '', 7, 'iot', '2022-03-01 10:10:40', '', '2022-03-01 10:15:20'); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (92, '8', 'create_time', NULL, 'datetime', 'Date', 'createTime', '0', '0', '0', '1', '0', '0', '0', 'EQ', 'datetime', '', 8, 'iot', '2022-03-01 10:10:40', '', '2022-03-01 10:15:20'); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (93, '8', 'update_by', NULL, 'varchar(64)', 'String', 'updateBy', '0', '0', '0', '1', '1', '0', '0', 'EQ', 'input', '', 9, 'iot', '2022-03-01 10:10:40', '', '2022-03-01 10:15:20'); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (94, '8', 'update_time', NULL, 'datetime', 'Date', 'updateTime', '0', '0', '0', '1', '1', '0', '0', 'EQ', 'datetime', '', 10, 'iot', '2022-03-01 10:10:40', '', '2022-03-01 10:15:20'); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (95, '8', 'status', '0启用 1停用', 'tinyint(4)', 'Integer', 'status', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'radio', 'sys_normal_disable', 11, 'iot', '2022-03-01 10:10:40', '', '2022-03-01 10:15:20'); -INSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (96, '8', 'dev_id', '设备id', 'varchar(64)', 'String', 'devId', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 12, 'iot', '2022-03-01 10:10:40', '', '2022-03-01 10:15:20'); -COMMIT; - --- ---------------------------- --- Table structure for iot_certificate --- ---------------------------- -DROP TABLE IF EXISTS `iot_certificate`; -CREATE TABLE `iot_certificate` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', - `ssl_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '证书唯一标识(sslKey)', - `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '证书名称', - `cert_content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '证书内容(PEM,Base64或加密)', - `key_content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '私钥内容(PEM,Base64或加密)', - `cert_password` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '证书密码(如有)', - `key_password` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '私钥密码(如有)', - `cert_info` json DEFAULT NULL COMMENT '证书信息', - `expire_time` datetime DEFAULT NULL COMMENT '到期时间', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注', - `create_time` datetime DEFAULT CURRENT_TIMESTAMP, - `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `create_user` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '创建者用户ID', - PRIMARY KEY (`id`) USING BTREE, - UNIQUE KEY `uniq_ssl_key` (`ssl_key`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='物联网产品证书表(内容存数据库)'; - --- ---------------------------- --- Records of iot_certificate --- ---------------------------- -BEGIN; -INSERT INTO `iot_certificate` (`id`, `ssl_key`, `name`, `cert_content`, `key_content`, `cert_password`, `key_password`, `cert_info`, `expire_time`, `remark`, `create_time`, `update_time`, `create_user`) VALUES (3, 'default-tcp', '平台默认12', '-----BEGIN CERTIFICATE-----\nMIIE+zCCA+OgAwIBAgISBsJEJJpCf6bk1ReiwF+n9c2uMA0GCSqGSIb3DQEBCwUA\nMDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD\nEwNSMTEwHhcNMjUwNjI4MjAwODUzWhcNMjUwOTI2MjAwODUyWjAVMRMwEQYDVQQD\nDAoqLmFsZW8ueGluMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsSoj\njURNeVCxNUM1kEkkEeC5x5ueL6u0oXce00xf0uyjMj4PX/Yxr1t/OODisWM9H4VG\nmAsFXzhbqVR2+R6woWDT4JyJqRul24UCvVo/NnjYkB5YJp+k22DScLzBBFTbGxKM\nekHtBfb8Zp8b9n3haSYH9B/ZNSxpei1SAyjtAtWNYZjL4hob4vWcXqllQ3wpUHY6\naLjnatlFgByyDD90BEtrRDwM9WwCSeCHs6vFx1Z1SNHwiGrPHaLRKTqfFBz0EnmI\nIEcFDbHS1Iu0VzYU1RUsaPh6BpebKQv10BQNisKLZbgmLjVGf7iDqZoSZ8anEnqC\ntq5sxxNRNU2yUD0BfQIDAQABo4ICJTCCAiEwDgYDVR0PAQH/BAQDAgWgMB0GA1Ud\nJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQW\nBBS1vsLHaBMI1ecgKZPegSeg3Jw3NTAfBgNVHSMEGDAWgBTFz0ak6vTDwHpslcQt\nsF6SLybjuTAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAKGF2h0dHA6Ly9yMTEu\naS5sZW5jci5vcmcvMCEGA1UdEQQaMBiCCiouYWxlby54aW6CCiouZmlsLmFzaWEw\nEwYDVR0gBAwwCjAIBgZngQwBAgEwLgYDVR0fBCcwJTAjoCGgH4YdaHR0cDovL3Ix\nMS5jLmxlbmNyLm9yZy80Ny5jcmwwggEDBgorBgEEAdZ5AgQCBIH0BIHxAO8AdgDt\nPEvW6AbCpKIAV9vLJOI4Ad9RL+3EhsVwDyDdtz4/4AAAAZe4Xck7AAAEAwBHMEUC\nIQCRU9ghZEoJYsEhSOojDkl3Yh9+KRJv0BAUsObE0g6bOQIgLeQxtRhmkyzxjR8P\nshuMH72YDn8FHB3i9Tl2jDhgTRAAdQAaBP9J0FQdQK/2oMO/8djEZy9O7O4jQGiY\naxdALtyJfQAAAZe4XdHcAAAEAwBGMEQCIGDW96cDRAfAGkJbnnmu4LIFkbDcGucI\nI9l8fsr/C8tpAiBOrKazQ1wRLqQU2F61VEqaCFOxMBHkF4AS8GqpFem57DANBgkq\nhkiG9w0BAQsFAAOCAQEAfDKM0PX1cR2cscaIYi7OQ1LjbMISbOccGhuMoFp57bNA\nSPfaPH76A3ka2KFkpNhky8ZYNXa4GhFxqJgl1kO0+j08x4ir+18P1/W/MGP7zvEa\nrMi0HePTeA7rHOsFFbRSPP0sjrBjbWuqRgaUj5ezLi6b2un8UGW6293nBFbO591V\nyB1sT2H+fP11EDG4yWRCXPO4TPb3JLxk12nENt07Gc/7urFgYprkyXQlLgY6LSKs\nU44baCv8JShbfPzEwrXbJnC4F14hqWtnrb7ysfl6lxyYcGXQnCYv0J3gmh6omVp6\nCa5mbe+0fhw8FkY83d6ufyZ5ZRfJgEs5eHFupUa7mw==\n-----END CERTIFICATE-----\n\n-----BEGIN CERTIFICATE-----\nMIIFBjCCAu6gAwIBAgIRAIp9PhPWLzDvI4a9KQdrNPgwDQYJKoZIhvcNAQELBQAw\nTzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh\ncmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw\nWhcNMjcwMzEyMjM1OTU5WjAzMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg\nRW5jcnlwdDEMMAoGA1UEAxMDUjExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB\nCgKCAQEAuoe8XBsAOcvKCs3UZxD5ATylTqVhyybKUvsVAbe5KPUoHu0nsyQYOWcJ\nDAjs4DqwO3cOvfPlOVRBDE6uQdaZdN5R2+97/1i9qLcT9t4x1fJyyXJqC4N0lZxG\nAGQUmfOx2SLZzaiSqhwmej/+71gFewiVgdtxD4774zEJuwm+UE1fj5F2PVqdnoPy\n6cRms+EGZkNIGIBloDcYmpuEMpexsr3E+BUAnSeI++JjF5ZsmydnS8TbKF5pwnnw\nSVzgJFDhxLyhBax7QG0AtMJBP6dYuC/FXJuluwme8f7rsIU5/agK70XEeOtlKsLP\nXzze41xNG/cLJyuqC0J3U095ah2H2QIDAQABo4H4MIH1MA4GA1UdDwEB/wQEAwIB\nhjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwEgYDVR0TAQH/BAgwBgEB\n/wIBADAdBgNVHQ4EFgQUxc9GpOr0w8B6bJXELbBeki8m47kwHwYDVR0jBBgwFoAU\nebRZ5nu25eQBc4AIiMgaWPbpm24wMgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzAC\nhhZodHRwOi8veDEuaS5sZW5jci5vcmcvMBMGA1UdIAQMMAowCAYGZ4EMAQIBMCcG\nA1UdHwQgMB4wHKAaoBiGFmh0dHA6Ly94MS5jLmxlbmNyLm9yZy8wDQYJKoZIhvcN\nAQELBQADggIBAE7iiV0KAxyQOND1H/lxXPjDj7I3iHpvsCUf7b632IYGjukJhM1y\nv4Hz/MrPU0jtvfZpQtSlET41yBOykh0FX+ou1Nj4ScOt9ZmWnO8m2OG0JAtIIE38\n01S0qcYhyOE2G/93ZCkXufBL713qzXnQv5C/viOykNpKqUgxdKlEC+Hi9i2DcaR1\ne9KUwQUZRhy5j/PEdEglKg3l9dtD4tuTm7kZtB8v32oOjzHTYw+7KdzdZiw/sBtn\nUfhBPORNuay4pJxmY/WrhSMdzFO2q3Gu3MUBcdo27goYKjL9CTF8j/Zz55yctUoV\naneCWs/ajUX+HypkBTA+c8LGDLnWO2NKq0YD/pnARkAnYGPfUDoHR9gVSp/qRx+Z\nWghiDLZsMwhN1zjtSC0uBWiugF3vTNzYIEFfaPG7Ws3jDrAMMYebQ95JQ+HIBD/R\nPBuHRTBpqKlyDnkSHDHYPiNX3adPoPAcgdF3H2/W0rmoswMWgTlLn1Wu0mrks7/q\npdWfS6PJ1jty80r2VKsM/Dj3YIDfbjXKdaFU5C+8bhfJGqU3taKauuz0wHVGT3eo\n6FlWkWYtbt4pgdamlwVeZEW+LM7qZEJEsMNPrfC03APKmZsJgpWCDWOKZvkZcvjV\nuYkQ4omYCTX5ohy+knMjdOmdH9c7SpqEWBDC86fiNex+O0XOMEZSa8DA\n-----END CERTIFICATE-----\n', '-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAsSojjURNeVCxNUM1kEkkEeC5x5ueL6u0oXce00xf0uyjMj4P\nX/Yxr1t/OODisWM9H4VGmAsFXzhbqVR2+R6woWDT4JyJqRul24UCvVo/NnjYkB5Y\nJp+k22DScLzBBFTbGxKMekHtBfb8Zp8b9n3haSYH9B/ZNSxpei1SAyjtAtWNYZjL\n4hob4vWcXqllQ3wpUHY6aLjnatlFgByyDD90BEtrRDwM9WwCSeCHs6vFx1Z1SNHw\niGrPHaLRKTqfFBz0EnmIIEcFDbHS1Iu0VzYU1RUsaPh6BpebKQv10BQNisKLZbgm\nLjVGf7iDqZoSZ8anEnqCtq5sxxNRNU2yUD0BfQIDAQABAoIBAAuGkIgJoW8ARnsO\n1jP+vM498WV7P1wIvr2svHsQx6t28iSxYA+FOn/BmIH93WRJbr9MzMYqR2KbDcQz\nHBytDV7TqA0U2f7VWeGxYkzTy3N9gqdDlhwIfEblDQ5rtTSVLv5F+Lt2a6yyQALk\nHINZdqSVe7nQfZwa5CTK6yrh9Xi0NJT9VMQNW20bi+rfeLcSVls5o+RtpNSF0f6K\n1rHP3M4JctarKV1luI09Gt8SZmjJNWgERwEukJ2LPj1h/egi8EByeM8Za3vSruO0\npelo23hBAzA54i5j9yJhY/dQq/OPQR40iCnX8lqCNufn5UxkLpXpW/iz7kbM27Qc\nO523FJECgYEA6zJw6D+ZR7UEb181WwFx7LaTUnJFpCBqtNquMExp3Z7/+WXFh4D3\nR0g4Y9ex2RtMDTvKzpxuBFJ2Ioe1Cbe1o0aJJ0RchHXqYzmTV4z3ysToCi+EQMdo\nPhFzlMkiMrGBL2NdN7WRMfcVS/j/Crorh//u2IDmqs1KfvTiWVdgGLECgYEAwNWr\n3ocw7WjpTbdiAwKYkut0m/5iQUtX8VG/B+Mi695U+/JeCqcSiZ+Kn0SSEMl2/5Y9\nshak5VOIFMg+8zTBE8JnVsXBm5fDlyaNxLTm2S4QYFmaWMNd4sINSu8PKPnqpB5l\nfz5MEyU6BYqZm1FPd9S6rQX8k75SynAY/ASf6I0CgYAGIEM2mWl5p6pc6ELwguIf\nw0WlERrlQn7lBQkicusS/bA3I8J4XBCUx7nIR/b267IYaiVHKmXnMOqozZYWkbVm\nclDiN/Kc9KFNQlOnJSHTIzvUABbWxRre+v9isbZ1UZBG1rS33b/RaFkiqHKkKeM2\nYKEs/HaFnmFBW0mGADOdkQKBgCwnQKk9T0itAu6WlMyXpZPOce7d+mV0+Pf6fcEy\nkuZrDA58WmgaBTaZ30XEj6VkW+j937aNVMhlrf0ENNW/OI5rrvnBYilcQJ61ZzSp\nL0p/L6TAH4U/hpnLUPvdbR02zDEz/I18GDMyDO0D5VQY9Bc+EFhZzJGPvKk5rZ7W\n+D5pAoGBAKZESi2LFqtF/WyYXCGpml2tdJl/mY2d97mJSFNbzRY7nJ7Mpma8f6Zt\n45PTSoX9hKEZTQTrvyX6wtxBbVHhBKs9+tKvbBFPkAIzGbFstHMivqBzdc3MOPAH\nRlh/ucR9SiaoM6YOtPSTA75TUZZp/CAlygtgsA25P7g2cM7nKbg4\n-----END RSA PRIVATE KEY-----\n', '', '', '{\"issuer\": \"CN=R11,O=Let\'s Encrypt,C=US\", \"subject\": \"CN=*.aleo.xin\", \"version\": 3, \"keyUsage\": \"[true, false, true, false, false, false, false, false, false]\", \"notAfter\": 1758917332000, \"notBefore\": 1751141333000, \"chainLength\": 2, \"serialNumber\": \"6c244249a427fa6e4d517a2c05fa7f5cdae\", \"extendedKeyUsage\": [\"1.3.6.1.5.5.7.3.1\", \"1.3.6.1.5.5.7.3.2\"], \"publicKeyAlgorithm\": \"RSA\", \"signatureAlgorithm\": \"SHA256withRSA\", \"subjectAlternativeNames\": [\"*.aleo.xin\", \"*.fil.asia\"]}', '2025-09-27 04:08:52', '不要在乎太多', '2025-07-24 18:47:35', '2025-07-28 13:49:37', 'test'); -INSERT INTO `iot_certificate` (`id`, `ssl_key`, `name`, `cert_content`, `key_content`, `cert_password`, `key_password`, `cert_info`, `expire_time`, `remark`, `create_time`, `update_time`, `create_user`) VALUES (4, '6882199a5074ee4ca05cd440', '美利坚合众国', '-----BEGIN CERTIFICATE-----\nMIIGOjCCBSKgAwIBAgIQDlcl4pOUpFSPwiO5YEHwvjANBgkqhkiG9w0BAQsFADBg\nMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\nd3cuZGlnaWNlcnQuY29tMR8wHQYDVQQDExZSYXBpZFNTTCBUTFMgUlNBIENBIEcx\nMB4XDTI1MDcyMDAwMDAwMFoXDTI2MDcxOTIzNTk1OVowHDEaMBgGA1UEAxMRc29j\nY2VybGlmZS5jb20uY24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDH\njLjefUk1EjNeNhMPmHZwZ6OYtAqQI8r7eevNDHC3wTnJYC6RUMHjG+h9QIgCp4cl\nS9DaDZBsPIfVu57KrRWxwKTbZIuoBk9P6xVCJ9112H7rhIAygQOxm8q2FIzH4fE6\nYOhOuTZlmIwCp9QM9DKE+qib2j0VkjpyuPzB244VPxvnvVkxjTHt0LeVxkTWQuOu\niYpVvPa9QHRkg82NpjitLxN7zGCIcUDIeix2O5KTSEAwu+GLYOP9zTByPDHdOOgb\nwQlrH3+oHVnPEvHn0aKyylV6xTfHYHmqsn7Q7NUXZ//RAGqfg1cssjg8lnSb/UcO\nXD86UxELey0Mferdjx0BAgMBAAGjggMyMIIDLjAfBgNVHSMEGDAWgBQM22yCSQ9K\nZwq4FO56xEhSiOtWODAdBgNVHQ4EFgQUmuGKGcJBNKz6vrJEr7WqBo76lqAwMwYD\nVR0RBCwwKoIRc29jY2VybGlmZS5jb20uY26CFXd3dy5zb2NjZXJsaWZlLmNvbS5j\nbjA+BgNVHSAENzA1MDMGBmeBDAECATApMCcGCCsGAQUFBwIBFhtodHRwOi8vd3d3\nLmRpZ2ljZXJ0LmNvbS9DUFMwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsG\nAQUFBwMBBggrBgEFBQcDAjA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY2RwLnJh\ncGlkc3NsLmNvbS9SYXBpZFNTTFRMU1JTQUNBRzEuY3JsMHYGCCsGAQUFBwEBBGow\naDAmBggrBgEFBQcwAYYaaHR0cDovL3N0YXR1cy5yYXBpZHNzbC5jb20wPgYIKwYB\nBQUHMAKGMmh0dHA6Ly9jYWNlcnRzLnJhcGlkc3NsLmNvbS9SYXBpZFNTTFRMU1JT\nQUNBRzEuY3J0MAwGA1UdEwEB/wQCMAAwggF/BgorBgEEAdZ5AgQCBIIBbwSCAWsB\naQB3ANdtfRDRp/V3wsfpX9cAv/mCyTNaZeHQswFzF8DIxWl3AAABmCYur30AAAQD\nAEgwRgIhAMDoK0FT2UdrJJcSwMPW2Bz7yz/BntIWow+6gT431EupAiEA49Lik0B4\nwaHXlrxbn1O7L1xE8gZEu/sDI/HiG1oik6MAdgDCMX5XRRmjRe5/ON6ykEHrx8Ih\nWiK/f9W1rXaa2Q5SzQAAAZgmLq+wAAAEAwBHMEUCIQDCrbQCn25x7UXEmc0tCNWH\nmHzei5+96lc2+WwKuiRq8AIgMwkih6aNjsWxHrqKZkXTxxgRGGO5rwuNqnPXB79X\n5egAdgCUTkOH+uzB74HzGSQmqBhlAcfTXzgCAT9yZ31VNy4Z2AAAAZgmLq/CAAAE\nAwBHMEUCIQC4V+nzV1zGRGTdI34tlng7BBtRbAAXMsoVkvkMhUi2zAIgcao+J9mx\nONb8q1fhORf56VL2FHGMtdmA2GM1ioJsY3QwDQYJKoZIhvcNAQELBQADggEBAJ49\nv69wIe81vz/fQXXOkZcUy53Vr6tJJ/BVBAGshEfJOfPG7WbVU6MgXg89txYnS6oL\nemPZefrV2Yj27sYtFZqqfP+zVL0v14uykuAYE2HOs17AfMbN1C3L3cBPxRK0MMOy\newz7W509c+nujCgre22H95p8/6GKGOu035LS541W1q7pFJr+Ut2ghid5GTabMcps\nfjcdrqK+eYIlsIhmFMSly9iH7+aeDLC9L0mggvvH1Vysn3EaWODUv8Ksx9SSUiXS\n9nlu/BTTuYGrAiX25LvWxS4s+eSgCswMdhTy9EtVo5A+ydfuuhoPO/qc3qZvrqJ3\nkIZmNUDZ2g9d/+G1uq4=\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIEszCCA5ugAwIBAgIQCyWUIs7ZgSoVoE6ZUooO+jANBgkqhkiG9w0BAQsFADBh\nMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\nd3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH\nMjAeFw0xNzExMDIxMjI0MzNaFw0yNzExMDIxMjI0MzNaMGAxCzAJBgNVBAYTAlVT\nMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\nb20xHzAdBgNVBAMTFlJhcGlkU1NMIFRMUyBSU0EgQ0EgRzEwggEiMA0GCSqGSIb3\nDQEBAQUAA4IBDwAwggEKAoIBAQC/uVklRBI1FuJdUEkFCuDL/I3aJQiaZ6aibRHj\nap/ap9zy1aYNrphe7YcaNwMoPsZvXDR+hNJOo9gbgOYVTPq8gXc84I75YKOHiVA4\nNrJJQZ6p2sJQyqx60HkEIjzIN+1LQLfXTlpuznToOa1hyTD0yyitFyOYwURM+/CI\n8FNFMpBhw22hpeAQkOOLmsqT5QZJYeik7qlvn8gfD+XdDnk3kkuuu0eG+vuyrSGr\n5uX5LRhFWlv1zFQDch/EKmd163m6z/ycx/qLa9zyvILc7cQpb+k7TLra9WE17YPS\nn9ANjG+ECo9PDW3N9lwhKQCNvw1gGoguyCQu7HE7BnW8eSSFAgMBAAGjggFmMIIB\nYjAdBgNVHQ4EFgQUDNtsgkkPSmcKuBTuesRIUojrVjgwHwYDVR0jBBgwFoAUTiJU\nIBiV5uNu5g/6+rkS7QYXjzkwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsG\nAQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAGAQH/AgEAMDQGCCsGAQUFBwEB\nBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEIGA1Ud\nHwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEds\nb2JhbFJvb3RHMi5jcmwwYwYDVR0gBFwwWjA3BglghkgBhv1sAQEwKjAoBggrBgEF\nBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzALBglghkgBhv1sAQIw\nCAYGZ4EMAQIBMAgGBmeBDAECAjANBgkqhkiG9w0BAQsFAAOCAQEAGUSlOb4K3Wtm\nSlbmE50UYBHXM0SKXPqHMzk6XQUpCheF/4qU8aOhajsyRQFDV1ih/uPIg7YHRtFi\nCTq4G+zb43X1T77nJgSOI9pq/TqCwtukZ7u9VLL3JAq3Wdy2moKLvvC8tVmRzkAe\n0xQCkRKIjbBG80MSyDX/R4uYgj6ZiNT/Zg6GI6RofgqgpDdssLc0XIRQEotxIZcK\nzP3pGJ9FCbMHmMLLyuBd+uCWvVcF2ogYAawufChS/PT61D9rqzPRS5I2uqa3tmIT\n44JhJgWhBnFMb7AGQkvNq9KNS9dd3GWc17H/dXa1enoxzWjE0hBdFjxPhUb0W3wi\n8o34/m8Fxw==\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIEfjCCA2agAwIBAgIQD+Ayq4RNAzEGxQyOE8iwaDANBgkqhkiG9w0BAQsFADBh\nMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\nd3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\nQTAeFw0yNDAxMTgwMDAwMDBaFw0zMTExMDkyMzU5NTlaMGExCzAJBgNVBAYTAlVT\nMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\nb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG\n9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI\n2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx\n1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ\nq2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz\ntCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ\nvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo4IBMDCC\nASwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUTiJUIBiV5uNu5g/6+rkS7QYX\njzkwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDgYDVR0PAQH/BAQD\nAgGGMHQGCCsGAQUFBwEBBGgwZjAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZGln\naWNlcnQuY24wPwYIKwYBBQUHMAKGM2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNu\nL0RpZ2lDZXJ0R2xvYmFsUm9vdENBLmNydDBABgNVHR8EOTA3MDWgM6Axhi9odHRw\nOi8vY3JsLmRpZ2ljZXJ0LmNuL0RpZ2lDZXJ0R2xvYmFsUm9vdENBLmNybDARBgNV\nHSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQELBQADggEBAHRBl3jN7+XHBUK0dZnu\nhMdoNwD1nCROU3BTIh1TNzRI0bQ0m5+C/dCRzzlqoSAFHUlOi+OiDltWkXTzmQn6\nZ8bH5PFBy5sYpc/8cNPoSzhyqcpvvEZvv/Ivc0Up+dzma7vBDJC9WrMRUUlSFSQp\nkdXSmphDNkXJsgARmxzc18IN6LYMRiOWlY7RE2F900pPW60BvJHHNCX0bbSRj/Ql\nbmVq8wuftBD++D+RS8K++ujpMjFBROyWfBX+woQDGsMazkmgulQdnZrdj476elOL\naxRvrSgEorju1kJM7M65z2RUZrfzQYW/1rs8mRUXin6iEtad/Rv1ZI1WGYmWPyBm\npbo=\n-----END CERTIFICATE-----\n', '-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEAx4y43n1JNRIzXjYTD5h2cGejmLQKkCPK+3nrzQxwt8E5yWAu\nkVDB4xvofUCIAqeHJUvQ2g2QbDyH1bueyq0VscCk22SLqAZPT+sVQifdddh+64SA\nMoEDsZvKthSMx+HxOmDoTrk2ZZiMAqfUDPQyhPqom9o9FZI6crj8wduOFT8b571Z\nMY0x7dC3lcZE1kLjromKVbz2vUB0ZIPNjaY4rS8Te8xgiHFAyHosdjuSk0hAMLvh\ni2Dj/c0wcjwx3TjoG8EJax9/qB1ZzxLx59GisspVesU3x2B5qrJ+0OzVF2f/0QBq\nn4NXLLI4PJZ0m/1HDlw/OlMRC3stDH3q3Y8dAQIDAQABAoIBAALU4Gh7aSJGAMrl\nsNWmd9aTYrSMQd+DobUs6MRqWIaDyQzhntxXg8TNlNOc91q1Fo6xxncnPNHx9iOs\nuG2PHeQ9kLYY28vcBdyWgDqSo73kGLSOI9HAcTVTbPTL+MDUvmF+1gg/ikIDTRTn\nKkDImn3qEghSHrTgNBDQ+kWXvR3YI4onZlj7/KBoQPiUFU07bAauYXtzPhrBKX8R\nx/LzAAy/vftzX56tirv+uoHDWd1FF4oXgtnI9wJHfnbVww4MOMvJnHHblSKOlQ8k\ns+ORVfzzUbRdHEC5KfZ+m6mEc/NX0+UF1si8lG516uSFoE25nEvJ1TOr1jWEASfm\n/nxrw2UCgYEA6G8p5t7CAli3eNQe38Gq5Y8dd1eAn1b3KXK2ylT7Sw/kz4L3hZnn\nyoCqRXu8J1Apu6uAvNtPDtYcoIGaV5sucE2v2vUReYla/DjUYbL8sHiRa/RtqFcP\nOw7wP4hH3SIJ19+/IOSk4EEOgV36qHTkYA3EdJrVXnwYGYuKCfODiF0CgYEA28gK\nG288Gq0fXMfxZYRFD6vUJDejp3Bl/aZkojsJDER42UKiJ/SsLAM4vlXOn9Jjit7E\nUbYip3WmMxs5pZDm/FLqwbuR9KD2sUsoU0RIO77krI3d73nWarTfZduWLlB3EpSL\nRMEIEZPTBVsWLnhNUwYeQaePWT5hjmNxN+naTPUCgYEA43j3XxSedkFwvXWLCZy1\nrZfUVJl0LXykwxGbRoTIsftKCLO5niyzJgGpofqodykCzsHXafyPcIum1IZCEH60\ngf/lnLm+cl00iCbt4veSSPqWBzrdnqQlKb1C7kpnWkkXrQcyO/TITxgcJAtfZkGP\nx1lx7FQjgSadR1LCs154WZkCgYAgx+pyAxpU5EOMRCpGOP9QAhIHQOFBBSvBNINI\nC0QjN0dLKHwlN4JCokxhX00NW4ULXoSrp13t2kdq0gG8Jyu8sOVg9ggkE6oX8ZzX\nJpUbjDJxZkuW/3Yyvj2f5Ku2xrur4soO/Dem34SXBOn/DmSCIKR8qHBiIELOyRhG\n/bNYzQKBgQCeQJBjMlID54OOvqN59+Ai4IJJZOFgxaCHh8p5SA4tgJwMTXo1U0NL\nrw2XMlcBC8B6R03siX8CHcRfSxfdhDXm36PTF/5ID7spdh31REOuRsEApsuYwyOt\n8a176FagV8IYNhTNYioLrvYfB3NgRjnJiAeJarFRSA1LPZdjSjTtag==\n-----END RSA PRIVATE KEY-----\n', '112233', '112233', '{\"issuer\": \"CN=RapidSSL TLS RSA CA G1,OU=www.digicert.com,O=DigiCert Inc,C=US\", \"subject\": \"CN=soccerlife.com.cn\", \"version\": 3, \"keyUsage\": \"[true, false, true, false, false, false, false, false, false]\", \"notAfter\": 1784505599000, \"notBefore\": 1752969600000, \"chainLength\": 3, \"serialNumber\": \"e5725e29394a4548fc223b96041f0be\", \"extendedKeyUsage\": [\"1.3.6.1.5.5.7.3.1\", \"1.3.6.1.5.5.7.3.2\"], \"publicKeyAlgorithm\": \"RSA\", \"signatureAlgorithm\": \"SHA256withRSA\", \"subjectAlternativeNames\": [\"soccerlife.com.cn\", \"www.soccerlife.com.cn\"]}', '2026-07-20 07:59:59', '证书', '2025-07-24 19:31:38', '2025-07-28 13:49:37', 'test'); -INSERT INTO `iot_certificate` (`id`, `ssl_key`, `name`, `cert_content`, `key_content`, `cert_password`, `key_password`, `cert_info`, `expire_time`, `remark`, `create_time`, `update_time`, `create_user`) VALUES (5, '68878a3f38fc3fc98f6ec1c2', '192886.xyz', '-----BEGIN CERTIFICATE-----\nMIIFCTCCA/GgAwIBAgISBh5YBq0fDvHG+QfuSUObDmDqMA0GCSqGSIb3DQEBCwUA\nMDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD\nEwNSMTEwHhcNMjUwNzI4MTEzMzM1WhcNMjUxMDI2MTEzMzM0WjAXMRUwEwYDVQQD\nDAwqLjE5Mjg4Ni54eXowggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCe\nZYpCQA2t+TuKC2rvi0m7OAp97zEy5MLS6/6ZRnho9YdpLw5p1Qo0hfXChQcRaGTR\nmQlhmubv0CEhA1UXqQcam+IbQ0nk6bJ3Fz5VFU2pdfvzOLDXQ9hxOLVcrqKbylE+\n2dkQItXtwT/RDJqwon22jeZtQeBn5+SzzwBWPQQlWRDRMC5QRTfg09BD94ZJdvL7\nkLbWHK72KtROkz3G84yvHnUBxaIX1rp5aC18NqN+J1W81cho8fbmWancM5LT0B9P\nduqEFnWLZg5heT59kcafW0upmk/ifV2LV407p7J0JhlyU8swtBVqUHAdPcm8wyHV\nEStCQyajwxmyehbCDBCrAgMBAAGjggIxMIICLTAOBgNVHQ8BAf8EBAMCBaAwHQYD\nVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0O\nBBYEFOYlP9rNteROmWK4ZVeOIriD7lDXMB8GA1UdIwQYMBaAFMXPRqTq9MPAemyV\nxC2wXpIvJuO5MDMGCCsGAQUFBwEBBCcwJTAjBggrBgEFBQcwAoYXaHR0cDovL3Ix\nMS5pLmxlbmNyLm9yZy8wKQYDVR0RBCIwIIIMKi4xOTI4ODYueHl6ghAqLmlvdC4x\nOTI4ODYueHl6MBMGA1UdIAQMMAowCAYGZ4EMAQIBMC8GA1UdHwQoMCYwJKAioCCG\nHmh0dHA6Ly9yMTEuYy5sZW5jci5vcmcvMTA3LmNybDCCAQYGCisGAQQB1nkCBAIE\ngfcEgfQA8gB3AKRCxQZJYGFUjw/U6pz7ei0mRU2HqX8v30VZ9idPOoRUAAABmFEE\nyrgAAAQDAEgwRgIhAImSDGmzwAF4JrEohgn9zujI/nyREjtxLTQ1jcEnBhWeAiEA\nyyml64Vh1Y9mTlGsj6v2sYFuiXNnUbzb/cE1KU0kI8YAdwDM+w9qhXEJZf6Vm1PO\n6bJ8IumFXA2XjbapflTA/kwNsAAAAZhRBMrUAAAEAwBIMEYCIQCOrCQeHoCnUUE2\nQV/3KzaQs/ig9FqGR/nTjC3agBRzfQIhAILx1LyEQ8jeJ3AP6ZLwnr31LBv2qJ4D\n8c8y2Gz/F1WmMA0GCSqGSIb3DQEBCwUAA4IBAQB//Iv2AevaA97+Glo2WtkeRjdk\n7AWuWsyR2tgQjV4XFD/SfKMH8aHpKYymhJCJV1MjUZXWWfetNQIxnEX7d3rmd8TR\nBMwI2ZMta0m9lwmaWipbkDZn18xwI/aD6vnE8uAr0pyBXipAgNJGY15QG4JYOOAT\npxCHP9j73n1jn8x7wRMrEmvxUdpkvFNwCrlJkyUtvYT3q/F1nWEVh/DhwyPuTdjd\nqOQc1CHGt9FV7jWtVE/dS8qpgAttBBc8bdP0W0u5CJNoB2aN+HsRVvx+6EdtFGIN\nLjnx2fpyCW6XXameewoP8QCdydfVIqkwsghpPSUp2oqil5vqanUnqtrNh97f\n-----END CERTIFICATE-----\n\n-----BEGIN CERTIFICATE-----\nMIIFBjCCAu6gAwIBAgIRAIp9PhPWLzDvI4a9KQdrNPgwDQYJKoZIhvcNAQELBQAw\nTzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh\ncmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw\nWhcNMjcwMzEyMjM1OTU5WjAzMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg\nRW5jcnlwdDEMMAoGA1UEAxMDUjExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB\nCgKCAQEAuoe8XBsAOcvKCs3UZxD5ATylTqVhyybKUvsVAbe5KPUoHu0nsyQYOWcJ\nDAjs4DqwO3cOvfPlOVRBDE6uQdaZdN5R2+97/1i9qLcT9t4x1fJyyXJqC4N0lZxG\nAGQUmfOx2SLZzaiSqhwmej/+71gFewiVgdtxD4774zEJuwm+UE1fj5F2PVqdnoPy\n6cRms+EGZkNIGIBloDcYmpuEMpexsr3E+BUAnSeI++JjF5ZsmydnS8TbKF5pwnnw\nSVzgJFDhxLyhBax7QG0AtMJBP6dYuC/FXJuluwme8f7rsIU5/agK70XEeOtlKsLP\nXzze41xNG/cLJyuqC0J3U095ah2H2QIDAQABo4H4MIH1MA4GA1UdDwEB/wQEAwIB\nhjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwEgYDVR0TAQH/BAgwBgEB\n/wIBADAdBgNVHQ4EFgQUxc9GpOr0w8B6bJXELbBeki8m47kwHwYDVR0jBBgwFoAU\nebRZ5nu25eQBc4AIiMgaWPbpm24wMgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzAC\nhhZodHRwOi8veDEuaS5sZW5jci5vcmcvMBMGA1UdIAQMMAowCAYGZ4EMAQIBMCcG\nA1UdHwQgMB4wHKAaoBiGFmh0dHA6Ly94MS5jLmxlbmNyLm9yZy8wDQYJKoZIhvcN\nAQELBQADggIBAE7iiV0KAxyQOND1H/lxXPjDj7I3iHpvsCUf7b632IYGjukJhM1y\nv4Hz/MrPU0jtvfZpQtSlET41yBOykh0FX+ou1Nj4ScOt9ZmWnO8m2OG0JAtIIE38\n01S0qcYhyOE2G/93ZCkXufBL713qzXnQv5C/viOykNpKqUgxdKlEC+Hi9i2DcaR1\ne9KUwQUZRhy5j/PEdEglKg3l9dtD4tuTm7kZtB8v32oOjzHTYw+7KdzdZiw/sBtn\nUfhBPORNuay4pJxmY/WrhSMdzFO2q3Gu3MUBcdo27goYKjL9CTF8j/Zz55yctUoV\naneCWs/ajUX+HypkBTA+c8LGDLnWO2NKq0YD/pnARkAnYGPfUDoHR9gVSp/qRx+Z\nWghiDLZsMwhN1zjtSC0uBWiugF3vTNzYIEFfaPG7Ws3jDrAMMYebQ95JQ+HIBD/R\nPBuHRTBpqKlyDnkSHDHYPiNX3adPoPAcgdF3H2/W0rmoswMWgTlLn1Wu0mrks7/q\npdWfS6PJ1jty80r2VKsM/Dj3YIDfbjXKdaFU5C+8bhfJGqU3taKauuz0wHVGT3eo\n6FlWkWYtbt4pgdamlwVeZEW+LM7qZEJEsMNPrfC03APKmZsJgpWCDWOKZvkZcvjV\nuYkQ4omYCTX5ohy+knMjdOmdH9c7SpqEWBDC86fiNex+O0XOMEZSa8DA\n-----END CERTIFICATE-----\n', '-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAnmWKQkANrfk7igtq74tJuzgKfe8xMuTC0uv+mUZ4aPWHaS8O\nadUKNIX1woUHEWhk0ZkJYZrm79AhIQNVF6kHGpviG0NJ5Omydxc+VRVNqXX78ziw\n10PYcTi1XK6im8pRPtnZECLV7cE/0QyasKJ9to3mbUHgZ+fks88AVj0EJVkQ0TAu\nUEU34NPQQ/eGSXby+5C21hyu9irUTpM9xvOMrx51AcWiF9a6eWgtfDajfidVvNXI\naPH25lmp3DOS09AfT3bqhBZ1i2YOYXk+fZHGn1tLqZpP4n1di1eNO6eydCYZclPL\nMLQValBwHT3JvMMh1RErQkMmo8MZsnoWwgwQqwIDAQABAoIBAEfhkp3ADbUuzps1\n1UCB+GLS6sf9vVj4QYWQfUi3lzsieWH9bdAPUwNE66Nr1SpMMrx/c6dssXKRBAfE\nSGBlX4juxuxSW/1bJJcw4COieEz38u+MgYwfCOFQt9UolziV1srr97p/5I9xzHEl\nBCo2g1BOEwzwAVOGA96piOCZ7gC4NMdBMm8OWqjOUAopqV15dsaIZ9A7YwPf7qmN\n8ntWGlaD/ZTn8F/xJt370/AhfzvMGnvyl0TC02mg91dl4KcCui4jFva2HYZnlH/a\nlMYXPsQJC5Eds7gN8Sd1nnwFX27oT7nSGbSKS3D6E2Yrd8yAxfHzYHQpdnE+YHgK\nR4lPlYECgYEAxylBeilj/mOjJAVVexhHoWCBLvVc1n4NCXSFu2IhtfaraeGI8/Q+\nKWSe1rmAxKONmJpe3RtEU+rwlg8HrtN7TkbpOZhaiTsfkiOwVZpjLrRm4hxFmSMk\nhDIqNp4KCwd1iLtcu8k4wYrBFShjvpXUVBtA+9vpmOmwFgjhOBrshmsCgYEAy5oF\nzy+yInQeL1f3xXXd4TLP2TKOA4fwC/bkSXpGBNonc0VOQS86naxK0wv3Y4eV44Y3\nx7vNvd5SbBqqCQYT9M7WPnvghVGQyY9idMO2WImLK4hYQvoJc0aCUnYXO6vw3hin\nnZ0+v0bzWNqkgRgj1Nr3lDDR0H+3SzA9eAKarsECgYEAt0ehKSHkEpxw6to5wzEh\n4kHkQGmuiPmxV60y0LHLIiChuKvEE/UGK6OchTBrbwqwaOpPOJ06MRv5Ua79PAcE\n55FcWhN55eZR9HQBd5W/hqCgOZ8Y8YekuD9OF7sytNmlcTIzceEI6Rue+rCTsjVC\nFDCMifrkK0OLN4vub2pflocCgYA6avMHw3OlFxQiGWdqLKuBFgc1FqBQuwxRIoHV\n41N7yOxQ0q3lXhu/adP+Qgy1bg2/vp76nBQoSkXz5qKq/Cd1snMecoS1O/YDHzTs\ns8r6FFzuHKzWas+TV8PEzUVVRbxSvVg6jQeX8k+YSwOwVrDRPhKTXn6VCFAbLrg0\nWurvAQKBgH9DEAy0UUdPMwlrbOMd//c5hSlojJU230+U/CH1HofRYLHAlixOr8EP\nwrH1TNowgCFEEv6AaW+ovX9UHeVQxXbg93wZyIgYMikykzwgeCck0K8LT4UYaaen\nWYw6Dd6JqqOrl6VLxjhwiyyeznXcN2DRAC4j8dxRQmFSTFOBb7Xn\n-----END RSA PRIVATE KEY-----\n', '1122', '1122', '{\"issuer\": \"CN=R11,O=Let\'s Encrypt,C=US\", \"subject\": \"CN=*.192886.xyz\", \"version\": 3, \"keyUsage\": \"[true, false, true, false, false, false, false, false, false]\", \"notAfter\": 1761478414000, \"notBefore\": 1753702415000, \"chainLength\": 2, \"serialNumber\": \"61e5806ad1f0ef1c6f907ee49439b0e60ea\", \"extendedKeyUsage\": [\"1.3.6.1.5.5.7.3.1\", \"1.3.6.1.5.5.7.3.2\"], \"publicKeyAlgorithm\": \"RSA\", \"signatureAlgorithm\": \"SHA256withRSA\", \"subjectAlternativeNames\": [\"*.192886.xyz\", \"*.iot.192886.xyz\"]}', '2025-10-26 19:33:34', '*.iot.192886.xyz', '2025-07-28 22:33:35', '2025-07-28 22:33:35', 'iot'); -COMMIT; - --- ---------------------------- --- Table structure for iot_dashboard_statistics --- ---------------------------- -DROP TABLE IF EXISTS `iot_dashboard_statistics`; -CREATE TABLE `iot_dashboard_statistics` ( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', - `stat_date` date NOT NULL COMMENT '统计日期', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '产品Key,NULL表示全产品', - `channel` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '推送渠道,NULL表示全渠道', - `metric_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '指标类型(device_total/device_online/message_total/message_success/message_failed)', - `metric_value` bigint NOT NULL DEFAULT '0' COMMENT '指标值', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`id`) USING BTREE, - UNIQUE KEY `uk_date_product_channel_metric` (`stat_date`,`product_key`,`channel`,`metric_type`) -) ENGINE=InnoDB AUTO_INCREMENT=686 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='仪表盘统计表'; - - --- ---------------------------- --- Table structure for iot_device --- ---------------------------- -DROP TABLE IF EXISTS `iot_device`; -CREATE TABLE `iot_device` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '本平台设备唯一标识符', - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '设备自身序号', - `ext_device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '第三方平台设备ID唯一标识符', - `derive_metadata` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '派生元数据,有的设备的属性,功能,事件可能会动态的添加', - `configuration` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '其他配置', - `product_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '产品名称', - `nick_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '别名', - `features` bigint DEFAULT NULL, - `gw_product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '网关产品ProductKey', - `device_secret` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '1设备密钥', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '产品实例', - `device_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '设备实例名称', - `creator_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '实例名称', - `application` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '归属应用', - `creator_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, - `state` tinyint(1) DEFAULT NULL COMMENT '0-离线,1-在线', - `detail` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '说明', - `create_time` bigint unsigned DEFAULT NULL COMMENT '创建时间', - `registry_time` bigint unsigned DEFAULT NULL COMMENT '激活时间', - `online_time` bigint unsigned DEFAULT NULL COMMENT '最后通信时间', - `areas_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '区域ID', - `coordinate` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '坐标', - PRIMARY KEY (`id`) USING BTREE, - UNIQUE KEY `idx_device_id` (`product_key`,`device_id`) USING BTREE, - KEY `idx_iot_id` (`iot_id`) USING BTREE, - KEY `idx_device_name` (`device_name`) USING BTREE, - KEY `idx_creator_id` (`creator_id`) USING BTREE, - KEY `idx_online` (`product_key`,`state`,`online_time`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=57 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='设备表'; - --- ---------------------------- --- Records of iot_device --- ---------------------------- -BEGIN; -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (1, 'fa1b39fb287a42dd8a0f2cbae0d698d2', '202504150038', NULL, NULL, '{\"meterNo\":\"202504150038\"}', '单相导轨XA-GXSD81(4G)', NULL, NULL, NULL, NULL, 'abcxassxnanahsman', '园区1幢小房间总表', 'test', NULL, '1938504461874020352', NULL, 0, NULL, 1750734595, 1750734756, 1752217002, '330113003', '120.23475,31.207561'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (3, '271232e01d17496f86ab925bdc56eda2', 'cz001923', NULL, NULL, '{}', '智能插座', NULL, NULL, NULL, NULL, '681c0775c2dc427d0480ab5f', '无声飞插', 'test', NULL, '1938504461874020352', NULL, 0, '一个智能模拟操作', 1751109708, 1752313407, 1752314963, '330212105', '120.23475,31.207561'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (6, '9217646384fd46b8816359f03d5802ac', 'ov0000112', NULL, NULL, '{}', '智能插座', NULL, NULL, NULL, NULL, '681c0775c2dc427d0480ab5f', '小小插座', 'test', NULL, '1938504461874020352', NULL, 0, NULL, 1751119477, 1752300564, 1752314319, '320506', '31.207561,120.23475'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (16, '433d68787b2b4fd08dec8fa8ffc60f79', '202505220093', NULL, NULL, '{}', '单相导轨XA-GXSD81(4G)', NULL, NULL, NULL, NULL, 'abcxassxnanahsman', '202505220093', 'test', NULL, '1938504461874020352', NULL, 0, NULL, 1752038771, 1752038778, 1754630784, '542521', '81.314141,31.081598'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (17, '58479b07927342b6bd12c9dfb988e6c9', '202411190247', NULL, NULL, '{}', '单相导轨XA-GXSD81(4G)', NULL, NULL, NULL, NULL, 'abcxassxnanahsman', '顶楼灯泡照明表', 'test', NULL, '1938504461874020352', NULL, 0, NULL, 1752040116, 1752040126, 1754630580, '542521', '81.314141,31.081598'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (18, '29727447e38d49d6a9154aa2dafb47b5', '7g0000117', NULL, NULL, '{}', '智能插座', NULL, NULL, NULL, NULL, '681c0775c2dc427d0480ab5f', '7g0000117', 'test', NULL, '1938504461874020352', NULL, 0, NULL, 1752315969, 1752315975, 1754134955, '542521', '81.314141,31.081598'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (19, '8b0679d5b2054c3389994a905998ccaa', 'so0000132', NULL, NULL, '{}', '智能插座', NULL, NULL, NULL, NULL, '681c0775c2dc427d0480ab5f', 'so0000132', 'test', NULL, '1938504461874020352', NULL, 0, NULL, 1752315969, 1752315975, 1754134955, '542521', '81.314141,31.081598'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (20, '903071db080c4267900a6ab1e159b5a1', 'xh0000101', NULL, NULL, '{}', '智能插座', NULL, NULL, NULL, NULL, '681c0775c2dc427d0480ab5f', 'xh0000101', 'test', NULL, '1938504461874020352', NULL, 0, NULL, 1752315969, 1752315975, 1754134955, '542521', '81.314141,31.081598'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (21, 'c23296b6e84b489290a33a0f0bf33b17', 'ov0000411', NULL, NULL, '{}', '智能插座', NULL, NULL, NULL, NULL, '681c0775c2dc427d0480ab5f', 'ov0000411', 'test', NULL, '1938504461874020352', NULL, 0, NULL, 1752316154, 1752316157, 1752392225, '542521', '81.314141,31.081598'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (22, 'e8517d0ff4984431b2f0874e5ae8a29e', 'ov0001411', NULL, NULL, '{}', '智能插座', NULL, NULL, NULL, NULL, '681c0775c2dc427d0480ab5f', 'ov0001411', 'test', NULL, '1938504461874020352', NULL, 0, NULL, 1752316175, 1752316181, 1752407597, '542521', '81.314141,31.081598'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (23, '4db2d96130964fc49258e4eef0cc55f1', 'ov00014113', NULL, NULL, '{}', '智能插座', NULL, NULL, NULL, NULL, '681c0775c2dc427d0480ab5f', 'ov00014113', 'test', NULL, '1938504461874020352', NULL, 0, NULL, 1752404352, 1752404366, 1756191802, '542521', '81.314141,31.081598'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (24, 'd2dd545dc6b541e9b277de24a8237d4d', 'ov00014116', NULL, NULL, '{}', '智能插座', NULL, NULL, NULL, NULL, '681c0775c2dc427d0480ab5f', 'ov00014116', 'test', NULL, '1938504461874020352', NULL, 0, NULL, 1752404354, 1752404366, 1756191802, '542521', '81.314141,31.081598'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (25, '05a9960673fd47e587b041ff1018898a', 'ov00014110', NULL, NULL, '{}', '智能插座', NULL, NULL, NULL, NULL, '681c0775c2dc427d0480ab5f', 'ov00014110', 'test', NULL, '1938504461874020352', NULL, 0, NULL, 1752404362, 1752404402, 1756191802, '542521', '81.314141,31.081598'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (26, 'c0638ea17c5a4bcf9ad66a2a80ef0ab4', 'ov00014114', NULL, NULL, '{}', '智能插座', NULL, NULL, NULL, NULL, '681c0775c2dc427d0480ab5f', 'ov00014114', 'test', NULL, '1938504461874020352', NULL, 0, NULL, 1752404364, 1752404402, 1756191802, '542521', '81.314141,31.081598'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (27, '52956f3a0bac430aa3f9ce2fd30f83fa', 'ov00014118', NULL, NULL, '{}', '智能插座', NULL, NULL, NULL, NULL, '681c0775c2dc427d0480ab5f', 'ov00014118', 'test', NULL, '1938504461874020352', NULL, 0, NULL, 1752404366, 1752404390, 1756191802, '542521', '81.314141,31.081598'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (28, '82b178e4cff840a4b3128da81e0718d0', 'ov00014115', NULL, NULL, '{}', '智能插座', NULL, NULL, NULL, NULL, '681c0775c2dc427d0480ab5f', 'ov00014115', 'test', NULL, '1938504461874020352', NULL, 0, NULL, 1752404368, 1752404378, 1756191802, '542521', '81.314141,31.081598'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (29, '962ad84e0d12407ebad3cffbb3137e1e', 'ov00014111', NULL, NULL, '{}', '智能插座', NULL, NULL, NULL, NULL, '681c0775c2dc427d0480ab5f', 'ov00014111', 'test', NULL, '1938504461874020352', NULL, 0, NULL, 1752404370, 1752404390, 1756191802, '542521', '81.314141,31.081598'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (30, '7af18836921a48e9aedbb33551032a8a', 'ov00014117', NULL, NULL, '{}', '智能插座', NULL, NULL, NULL, NULL, '681c0775c2dc427d0480ab5f', '潜江雅园1号楼底商店铺', 'test', NULL, '1938504461874020352', NULL, 0, NULL, 1752404372, 1752404390, 1756191802, '542521', '81.314141,31.081598'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (31, 'ab13d2f27d164648adf7d3aa6478bb09', 'ov00014119', NULL, NULL, '{}', '智能插座', NULL, NULL, NULL, NULL, '681c0775c2dc427d0480ab5f', 'ov00014119', 'test', NULL, '1938504461874020352', NULL, 0, NULL, 1752404376, 1752404402, 1756191802, '542521', '81.314141,31.081598'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (32, 'c64f520c8a2e4c9698c6c8f0521db713', 'ov00014112', NULL, NULL, '{}', '智能插座', NULL, NULL, NULL, NULL, '681c0775c2dc427d0480ab5f', '小导向', 'test', NULL, '1938504461874020352', NULL, 0, NULL, 1752404424, 1752404462, 1756191802, '542521', '81.314141,31.081598'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (34, 'e33678b0ba8d48ec995c8ae9a823a6eb', '00010107', NULL, NULL, '{}', '开关面板-文档版', NULL, NULL, NULL, NULL, '38fc80e', '文档设备', 'test', NULL, NULL, NULL, 0, NULL, 1753802579, 1753765134, 1754144297, '542521', '120.291848,30.448023'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (35, 'ff49e3ac84e54b659d6b4d31aca35554', '00010108', NULL, NULL, '{}', '开关面板-文档版', NULL, NULL, NULL, NULL, '38fc80e', '00010108', 'auto_register', NULL, NULL, NULL, 0, NULL, 1754039014, 1754039017, 1754713024, NULL, '81.314141,31.081598'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (36, '0847c610465e41a38839daab0fe36af6', '00020107', NULL, NULL, '{}', '开关面板-文档版', NULL, NULL, NULL, NULL, '38fc80e', '00020107', 'auto_register', NULL, NULL, NULL, 0, NULL, 1754039365, 1754039366, 1754787075, NULL, '81.314141,31.081598'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (37, '8019b103c9c54ab2a59153b99b301c5b', '00050107', NULL, NULL, '{}', '开关面板-文档版', NULL, NULL, NULL, NULL, '38fc80e', '00050107', 'auto_register', NULL, NULL, NULL, 0, NULL, 1754041958, 1754041966, 1754181219, NULL, '81.314141,31.081598'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (38, '77ff448819014018b4566d99cd0b11cc', 'docsmqtt001', NULL, NULL, '{}', '开关面板-MQTT-doc编写', NULL, NULL, NULL, NULL, '688cd92fdb9e0158872f4aa9', 'docsmqtt001', 'auto_register', NULL, NULL, NULL, 0, NULL, 1754064092, 1754064101, 1754094454, NULL, '81.314141,31.081598'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (39, '828f2a663ba54f1a970904d966cd6b56', 'docsmqtt002', NULL, NULL, '{}', '开关面板-MQTT-doc编写', NULL, NULL, NULL, NULL, '688cd92fdb9e0158872f4aa9', 'docsmqtt002', 'auto_register', NULL, NULL, NULL, 0, NULL, 1754095004, 1754095009, 1754095751, NULL, '81.314141,31.081598'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (40, '0ebb38fd253c4c4b8bf9a3eafc4ddba0', 'docsmqtt003', NULL, NULL, '{}', '开关面板-MQTT-doc编写', NULL, NULL, NULL, NULL, '688cd92fdb9e0158872f4aa9', 'docsmqtt003', 'auto_register', NULL, NULL, NULL, 0, NULL, 1754096022, 1754096034, 1754096094, NULL, '81.314141,31.081598'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (41, '1ba1da4813164c0faedd99279dddb670', 'docsmqtt004', NULL, NULL, '{}', '开关面板-MQTT-doc编写', NULL, NULL, NULL, NULL, '688cd92fdb9e0158872f4aa9', '文档编写004', 'test', NULL, NULL, NULL, 0, NULL, 1754208378, 1754096238, 1755011523, NULL, '123.778233,41.899421'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (46, 'd9331ad5d9ef49c6ad0b51ab3c92681d', '202507070079', NULL, NULL, '{}', '单相导轨XA-GXSD81(4G)', NULL, NULL, NULL, NULL, 'abcxassxnanahsman', '202507070079', 'auto_register', NULL, NULL, NULL, 0, NULL, 1754787197, 1754787207, 1755226964, NULL, '81.314141,31.081598'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (47, '95b5117486114b639c0a644d92034042', 'DT2025001', NULL, NULL, '{}', '网关DTU(面板)', NULL, NULL, NULL, NULL, 'lB0Tl1rgf8uz', '1层网关', 'test', NULL, NULL, NULL, 0, NULL, 1754811100, NULL, NULL, NULL, '84.74627,36.478393'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (51, '9b7dfcb1974841b19c31df1dda4e1b5d', '1001', 'DT2025001', NULL, '{}', 'DTU(面板)子设备', NULL, NULL, 'lB0Tl1rgf8uz', NULL, 'lipSSVUj9XLt', '1001', 'test', NULL, NULL, NULL, 0, NULL, 1754815493, NULL, NULL, NULL, '120.291848,30.448023'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (52, '12307328738c4c3ebf34a2da8d27af0b', '1002', 'DT2025001', NULL, '{}', 'DTU(面板)子设备', NULL, NULL, 'lB0Tl1rgf8uz', NULL, 'lipSSVUj9XLt', '1002', 'test', NULL, NULL, NULL, 0, NULL, 1754815525, NULL, NULL, NULL, '104.057932,40.624518'); -INSERT INTO `iot_device` (`id`, `iot_id`, `device_id`, `ext_device_id`, `derive_metadata`, `configuration`, `product_name`, `nick_name`, `features`, `gw_product_key`, `device_secret`, `product_key`, `device_name`, `creator_id`, `instance`, `application`, `creator_name`, `state`, `detail`, `create_time`, `registry_time`, `online_time`, `areas_id`, `coordinate`) VALUES (55, '9cedf37c74ba418c8dca64a2c23a612f', 'ov0000004', NULL, NULL, '{}', '智能插座', NULL, NULL, NULL, NULL, '681c0775c2dc427d0480ab5f', 'ov0000004', 'auto_register', NULL, NULL, NULL, 0, NULL, 1755419988, 1755419990, 1756215123, NULL, '81.314141,31.081598'); -COMMIT; - --- ---------------------------- --- Table structure for iot_device_fence_rel --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_fence_rel`; -CREATE TABLE `iot_device_fence_rel` ( - `id` bigint NOT NULL AUTO_INCREMENT, - `fence_id` bigint NOT NULL COMMENT '围栏id', - `iot_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备唯一标识符', - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备序列号', - `creator_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '创建人', - `create_date` datetime DEFAULT NULL COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='设备和围栏中间表'; - --- ---------------------------- --- Records of iot_device_fence_rel --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_function_history --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_function_history`; -CREATE TABLE `iot_device_function_history` ( - `id` bigint NOT NULL, - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '产品key', - `iot_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备序列号', - `device_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备名称', - `ext_param` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '{}' COMMENT '额外参数', - `down_state` tinyint DEFAULT NULL COMMENT '指令配置状态 0.待下发;1.下发中;2.已下发', - `down_result` tinyint DEFAULT NULL COMMENT '下发结果 0.失败 1.成功', - `down_error` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '异常信息', - `task_id` bigint DEFAULT NULL COMMENT '所属任务id', - `update_time` datetime DEFAULT NULL COMMENT '下发时间', - `retry` int DEFAULT '0' COMMENT '下发次数', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='设备功能批量下发历史'; - --- ---------------------------- --- Records of iot_device_function_history --- ---------------------------- -BEGIN; -INSERT INTO `iot_device_function_history` (`id`, `product_key`, `iot_id`, `device_id`, `device_name`, `ext_param`, `down_state`, `down_result`, `down_error`, `task_id`, `update_time`, `retry`) VALUES (1925489900741828608, '67c69f2a6b0001a9b22a6c9a', 'f7690d50ba1d497caf8b64cf3f4f7d91', '202411190247', '5楼办公室', NULL, 2, 0, 'deviceId不存在', 1925489900725051392, '2025-06-29 18:26:58', 2); -INSERT INTO `iot_device_function_history` (`id`, `product_key`, `iot_id`, `device_id`, `device_name`, `ext_param`, `down_state`, `down_result`, `down_error`, `task_id`, `update_time`, `retry`) VALUES (1939308928588496896, '681c0775c2dc427d0480ab5f', NULL, 'gg0000181', '冰河路35', NULL, 2, 1, 'success', 1939308928533970944, '2025-06-29 21:04:23', 2); -INSERT INTO `iot_device_function_history` (`id`, `product_key`, `iot_id`, `device_id`, `device_name`, `ext_param`, `down_state`, `down_result`, `down_error`, `task_id`, `update_time`, `retry`) VALUES (1948016860616392704, '681c0775c2dc427d0480ab5f', NULL, 'ov00014117', '潜江雅园1号楼底商店铺', NULL, 2, 1, 'success', 1948016860553478144, '2025-07-31 22:27:28', 2); -INSERT INTO `iot_device_function_history` (`id`, `product_key`, `iot_id`, `device_id`, `device_name`, `ext_param`, `down_state`, `down_result`, `down_error`, `task_id`, `update_time`, `retry`) VALUES (1948016860616392705, '681c0775c2dc427d0480ab5f', NULL, 'ov0001411', 'ov0001411', NULL, 2, 1, 'success', 1948016860553478144, '2025-07-31 22:27:33', 2); -INSERT INTO `iot_device_function_history` (`id`, `product_key`, `iot_id`, `device_id`, `device_name`, `ext_param`, `down_state`, `down_result`, `down_error`, `task_id`, `update_time`, `retry`) VALUES (1948016860616392706, '681c0775c2dc427d0480ab5f', NULL, '7g0000117', '7g0000117', NULL, 2, 1, 'success', 1948016860553478144, '2025-07-31 22:27:38', 2); -COMMIT; - --- ---------------------------- --- Table structure for iot_device_function_task --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_function_task`; -CREATE TABLE `iot_device_function_task` ( - `id` bigint NOT NULL, - `task_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '任务名称', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `begin_time` datetime DEFAULT NULL COMMENT '任务开始时间', - `end_time` datetime DEFAULT NULL COMMENT '任务结束时间', - `creator` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '创建人姓名', - `creator_id` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '创建人', - `command` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '功能指令', - `command_data` varchar(800) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '指令内容', - `status` tinyint DEFAULT NULL COMMENT '状态 0.待执行;1.已执行;2.正在执行', - PRIMARY KEY (`id`) USING BTREE, - UNIQUE KEY `dev_function_task_id_uindex` (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='设备功能批量下发任务表'; - --- ---------------------------- --- Records of iot_device_function_task --- ---------------------------- -BEGIN; -INSERT INTO `iot_device_function_task` (`id`, `task_name`, `product_key`, `begin_time`, `end_time`, `creator`, `creator_id`, `command`, `command_data`, `status`) VALUES (1925489900725051392, '鹏辉单相导轨表DDSY1986-4G清表', '67c69f2a6b0001a9b22a6c9a', '2025-05-22 17:52:21', '2025-05-22 17:52:21', 'liulihai', 'liulihai', 'reset', '{\"function\":\"reset\",\"messageType\":\"FUNCTIONS\",\"data\":{\"function\":\"reset\"}}', 1); -INSERT INTO `iot_device_function_task` (`id`, `task_name`, `product_key`, `begin_time`, `end_time`, `creator`, `creator_id`, `command`, `command_data`, `status`) VALUES (1939308928533970944, '智能插座开关控制', '681c0775c2dc427d0480ab5f', '2025-06-29 21:04:14', '2025-06-29 21:04:14', 'iot', 'iot', 'switchControl', '{\"function\":\"switchControl\",\"messageType\":\"FUNCTIONS\",\"data\":{\"function\":\"switchControl\",\"open\":\"0\"}}', 1); -INSERT INTO `iot_device_function_task` (`id`, `task_name`, `product_key`, `begin_time`, `end_time`, `creator`, `creator_id`, `command`, `command_data`, `status`) VALUES (1948016860553478144, '智能插座新开', '681c0775c2dc427d0480ab5f', '2025-07-23 21:46:27', '2025-07-23 21:46:37', 'iot', 'iot', 'newkai', '{\"function\":\"newkai\",\"messageType\":\"FUNCTIONS\",\"data\":{\"function\":\"newkai\",\"docs\":123}}', 1); -COMMIT; - --- ---------------------------- --- Table structure for iot_device_geo_fence --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_geo_fence`; -CREATE TABLE `iot_device_geo_fence` ( - `id` bigint NOT NULL COMMENT 'id', - `name` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '围栏名称', - `status` tinyint DEFAULT NULL COMMENT '围栏状态 0.启用 1.停用', - `touch_way` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '触发模式 in.进入 out.离开 all.进入&离开', - `fence` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '范围', - `type` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '类型 circle.圆 polygon.多边形', - `point` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '圆形中心点', - `radius` decimal(16,8) DEFAULT NULL COMMENT '半径', - `creator_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '创建人', - `create_date` datetime DEFAULT NULL COMMENT '创建时间', - `update_date` datetime DEFAULT NULL COMMENT '更新时间', - `week_time` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '每周触发时间(天)', - `begin_time` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '每天开始时间', - `end_time` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '每天结束时间', - `creator_user` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '归属第三方应用', - `no_trigger_time` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '不触发时间段', - `delay_time` int DEFAULT NULL COMMENT '围栏触发延迟时间(分钟)', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='设备围栏表'; - --- ---------------------------- --- Records of iot_device_geo_fence --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_group --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_group`; -CREATE TABLE `iot_device_group` ( - `id` bigint NOT NULL COMMENT '分组ID,非自增', - `group_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '分组名称', - `group_code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '分组标识', - `group_describe` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '群组描述', - `parent_id` bigint DEFAULT '0' COMMENT '父id', - `group_level` tinyint(1) NOT NULL DEFAULT '0' COMMENT '分组级别', - `has_child` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否有子分组', - `active_dev_count` int(10) unsigned zerofill DEFAULT NULL COMMENT '关联设备树', - `relat_dev_count` int(10) unsigned zerofill DEFAULT NULL COMMENT '激活设备数', - `tag` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '标签', - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '实例编号', - `creator_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '创建人', - `create_time` datetime DEFAULT NULL, - `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='设备分组表'; - --- ---------------------------- --- Records of iot_device_group --- ---------------------------- -BEGIN; -INSERT INTO `iot_device_group` (`id`, `group_name`, `group_code`, `group_describe`, `parent_id`, `group_level`, `has_child`, `active_dev_count`, `relat_dev_count`, `tag`, `instance`, `creator_id`, `create_time`, `update_time`) VALUES (1949364879098044416, '1楼消控室(烟感)', NULL, '消控室烟感~', 0, 1, 1, NULL, NULL, NULL, NULL, 'iot', NULL, '2025-07-31 12:09:07'); -INSERT INTO `iot_device_group` (`id`, `group_name`, `group_code`, `group_describe`, `parent_id`, `group_level`, `has_child`, `active_dev_count`, `relat_dev_count`, `tag`, `instance`, `creator_id`, `create_time`, `update_time`) VALUES (1950447085375692800, '牛逼分组', NULL, '不要问我为什么牛逼', 0, 1, 0, NULL, NULL, NULL, NULL, 'test', NULL, NULL); -INSERT INTO `iot_device_group` (`id`, `group_name`, `group_code`, `group_describe`, `parent_id`, `group_level`, `has_child`, `active_dev_count`, `relat_dev_count`, `tag`, `instance`, `creator_id`, `create_time`, `update_time`) VALUES (1950770676340260864, '508小机房', NULL, '人员杂乱,小心火烛\n', 1949364879098044416, 2, 0, NULL, NULL, NULL, NULL, 'iot', NULL, '2025-07-31 12:09:47'); -COMMIT; - --- ---------------------------- --- Table structure for iot_device_history --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_history`; -CREATE TABLE `iot_device_history` ( - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '设备序列号', - `device_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备名称', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '产品唯一标识', - `coordinate` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '坐标(经纬度)', - `first_online_time` bigint DEFAULT NULL COMMENT '上线时间', - `creater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备创建者', - `delete_time` bigint DEFAULT NULL COMMENT '设备删除时间', - `create_time` bigint DEFAULT NULL COMMENT '设备创建时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_history --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log`; -CREATE TABLE `iot_device_log` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '唯一编码', - `device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备自身序号', - `ext_device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '第三方设备ID唯一标识符', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '产品ID', - `device_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备名称', - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `company_no` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `protocol` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '协议', - `device_node` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '节点类型', - `classified_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `command_id` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '指令ID', - `command_status` tinyint DEFAULT NULL COMMENT '指令状态', - `org_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `event` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '事件名称', - `create_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '实例名称', - `point` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '经纬度', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '内容', - `create_time` int(10) unsigned zerofill DEFAULT '0000000000' COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_id` (`iot_id`) USING BTREE, - KEY `idx_create_date` (`create_time`) USING BTREE, - KEY `idx_device_product_Key` (`device_id`,`product_key`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_0 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_0`; -CREATE TABLE `iot_device_log_0` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '唯一编码', - `device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备自身序号', - `ext_device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '第三方设备ID唯一标识符', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '产品ID', - `device_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备名称', - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `command_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '指令ID', - `command_status` tinyint DEFAULT '0' COMMENT '指令状态', - `event` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `create_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '实例名称', - `point` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '经纬度', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '内容', - `create_time` int(10) unsigned zerofill DEFAULT '0000000000' COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_create_date` (`create_time`) USING BTREE, - KEY `idx_iot_id` (`iot_id`) USING BTREE, - KEY `idx_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_0 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_1 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_1`; -CREATE TABLE `iot_device_log_1` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '唯一编码', - `device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备自身序号', - `ext_device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '第三方设备ID唯一标识符', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '产品ID', - `device_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备名称', - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `command_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '指令ID', - `command_status` tinyint DEFAULT '0' COMMENT '指令状态', - `event` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '事件名称', - `create_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '实例名称', - `point` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '经纬度', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '内容', - `create_time` int(10) unsigned zerofill DEFAULT '0000000000' COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_create_date` (`create_time`) USING BTREE, - KEY `idx_iot_id` (`iot_id`) USING BTREE, - KEY `idx_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_1 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_10 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_10`; -CREATE TABLE `iot_device_log_10` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '唯一编码', - `device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备自身序号', - `ext_device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '第三方设备ID唯一标识符', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '产品ID', - `device_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备名称', - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `command_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '指令ID', - `command_status` tinyint DEFAULT '0' COMMENT '指令状态', - `event` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `create_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '实例名称', - `point` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '经纬度', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '内容', - `create_time` int(10) unsigned zerofill DEFAULT '0000000000' COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_create_date` (`create_time`) USING BTREE, - KEY `idx_iotid_messagetype_createtime` (`iot_id`,`message_type`,`create_time`) USING BTREE COMMENT 'create by DAS-060eacd1-5b7c-4e1b-af2d-2db322aeada8', - KEY `idx_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_10 --- ---------------------------- -BEGIN; -INSERT INTO `iot_device_log_10` (`id`, `iot_id`, `device_id`, `ext_device_id`, `product_key`, `device_name`, `message_type`, `command_id`, `command_status`, `event`, `create_id`, `instance`, `point`, `content`, `create_time`) VALUES (2, '82b178e4cff840a4b3128da81e0718d0', 'ov00014115', '', '681c0775c2dc427d0480ab5f', 'ov00014115', 'EVENT', NULL, 0, 'offline', NULL, '0', '81.314141,31.081598', '{}', 1756305300); -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_11 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_11`; -CREATE TABLE `iot_device_log_11` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '唯一编码', - `device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备自身序号', - `ext_device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '第三方设备ID唯一标识符', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '产品ID', - `device_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备名称', - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `command_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '指令ID', - `command_status` tinyint DEFAULT '0' COMMENT '指令状态', - `event` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `create_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '实例名称', - `point` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '经纬度', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '内容', - `create_time` int(10) unsigned zerofill DEFAULT '0000000000' COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_id` (`iot_id`) USING BTREE, - KEY `idx_create_date` (`create_time`) USING BTREE, - KEY `idx_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_11 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_12 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_12`; -CREATE TABLE `iot_device_log_12` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '唯一编码', - `device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备自身序号', - `ext_device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '第三方设备ID唯一标识符', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '产品ID', - `device_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备名称', - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `command_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '指令ID', - `command_status` tinyint DEFAULT '0' COMMENT '指令状态', - `event` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `create_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '实例名称', - `point` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '经纬度', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '内容', - `create_time` int(10) unsigned zerofill DEFAULT '0000000000' COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_id` (`iot_id`) USING BTREE, - KEY `idx_create_date` (`create_time`) USING BTREE, - KEY `idx_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_12 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_13 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_13`; -CREATE TABLE `iot_device_log_13` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '唯一编码', - `device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备自身序号', - `ext_device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '第三方设备ID唯一标识符', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '产品ID', - `device_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备名称', - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `command_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '指令ID', - `command_status` tinyint DEFAULT '0' COMMENT '指令状态', - `event` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `create_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '实例名称', - `point` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '经纬度', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '内容', - `create_time` int(10) unsigned zerofill DEFAULT '0000000000' COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_id` (`iot_id`) USING BTREE, - KEY `idx_create_date` (`create_time`) USING BTREE, - KEY `idx_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_13 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_14 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_14`; -CREATE TABLE `iot_device_log_14` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '唯一编码', - `device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备自身序号', - `ext_device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '第三方设备ID唯一标识符', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '产品ID', - `device_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备名称', - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `command_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '指令ID', - `command_status` tinyint DEFAULT '0' COMMENT '指令状态', - `event` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `create_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '实例名称', - `point` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '经纬度', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '内容', - `create_time` int(10) unsigned zerofill DEFAULT '0000000000' COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_id` (`iot_id`) USING BTREE, - KEY `idx_create_date` (`create_time`) USING BTREE, - KEY `idx_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_14 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_15 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_15`; -CREATE TABLE `iot_device_log_15` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '唯一编码', - `device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备自身序号', - `ext_device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '第三方设备ID唯一标识符', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '产品ID', - `device_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备名称', - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `command_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '指令ID', - `command_status` tinyint DEFAULT '0' COMMENT '指令状态', - `event` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `create_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '实例名称', - `point` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '经纬度', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '内容', - `create_time` int(10) unsigned zerofill DEFAULT '0000000000' COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_id` (`iot_id`) USING BTREE, - KEY `idx_create_date_product_key` (`create_time`,`product_key`) USING BTREE, - KEY `idx_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_15 --- ---------------------------- -BEGIN; -INSERT INTO `iot_device_log_15` (`id`, `iot_id`, `device_id`, `ext_device_id`, `product_key`, `device_name`, `message_type`, `command_id`, `command_status`, `event`, `create_id`, `instance`, `point`, `content`, `create_time`) VALUES (2, '4db2d96130964fc49258e4eef0cc55f1', 'ov00014113', '', '681c0775c2dc427d0480ab5f', 'ov00014113', 'EVENT', NULL, 0, 'offline', NULL, '0', '81.314141,31.081598', '{}', 1756305300); -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_16 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_16`; -CREATE TABLE `iot_device_log_16` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '唯一编码', - `device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备自身序号', - `ext_device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '第三方设备ID唯一标识符', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '产品ID', - `device_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备名称', - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `command_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '指令ID', - `command_status` tinyint DEFAULT '0' COMMENT '指令状态', - `event` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '事件名称', - `create_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '实例名称', - `point` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '经纬度', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '内容', - `create_time` int(10) unsigned zerofill DEFAULT '0000000000' COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_create_date` (`create_time`) USING BTREE, - KEY `idx_iot_id` (`iot_id`) USING BTREE, - KEY `idx_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_16 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_17 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_17`; -CREATE TABLE `iot_device_log_17` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '唯一编码', - `device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备自身序号', - `ext_device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '第三方设备ID唯一标识符', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '产品ID', - `device_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备名称', - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `command_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '指令ID', - `command_status` tinyint DEFAULT '0' COMMENT '指令状态', - `event` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '事件名称', - `create_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '实例名称', - `point` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '经纬度', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '内容', - `create_time` int(10) unsigned zerofill DEFAULT '0000000000' COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_create_date` (`create_time`) USING BTREE, - KEY `idx_iot_id` (`iot_id`) USING BTREE, - KEY `idx_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_17 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_18 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_18`; -CREATE TABLE `iot_device_log_18` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '唯一编码', - `device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备自身序号', - `ext_device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '第三方设备ID唯一标识符', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '产品ID', - `device_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备名称', - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `command_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '指令ID', - `command_status` tinyint DEFAULT '0' COMMENT '指令状态', - `event` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '事件名称', - `create_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '实例名称', - `point` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '经纬度', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '内容', - `create_time` int(10) unsigned zerofill DEFAULT '0000000000' COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_create_date` (`create_time`) USING BTREE, - KEY `idx_iot_id` (`iot_id`) USING BTREE, - KEY `idx_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_18 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_19 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_19`; -CREATE TABLE `iot_device_log_19` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '唯一编码', - `device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备自身序号', - `ext_device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '第三方设备ID唯一标识符', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '产品ID', - `device_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备名称', - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `command_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '指令ID', - `command_status` tinyint DEFAULT '0' COMMENT '指令状态', - `event` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '事件名称', - `create_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '实例名称', - `point` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '经纬度', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '内容', - `create_time` int(10) unsigned zerofill DEFAULT '0000000000' COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_create_date` (`create_time`) USING BTREE, - KEY `idx_iot_id` (`iot_id`) USING BTREE, - KEY `idx_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_19 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_2 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_2`; -CREATE TABLE `iot_device_log_2` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '唯一编码', - `device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备自身序号', - `ext_device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '第三方设备ID唯一标识符', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '产品ID', - `device_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备名称', - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `command_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '指令ID', - `command_status` tinyint DEFAULT '0' COMMENT '指令状态', - `event` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '事件名称', - `create_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '实例名称', - `point` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '经纬度', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '内容', - `create_time` int(10) unsigned zerofill DEFAULT '0000000000' COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_create_date` (`create_time`) USING BTREE, - KEY `idx_iot_id` (`iot_id`) USING BTREE, - KEY `idx_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_2 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_20 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_20`; -CREATE TABLE `iot_device_log_20` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '唯一编码', - `device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备自身序号', - `ext_device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '第三方设备ID唯一标识符', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '产品ID', - `device_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备名称', - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `command_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '指令ID', - `command_status` tinyint DEFAULT '0' COMMENT '指令状态', - `event` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '事件名称', - `create_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '实例名称', - `point` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '经纬度', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '内容', - `create_time` int(10) unsigned zerofill DEFAULT '0000000000' COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_create_date` (`create_time`) USING BTREE, - KEY `idx_iot_id` (`iot_id`) USING BTREE, - KEY `idx_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_20 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_21 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_21`; -CREATE TABLE `iot_device_log_21` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '唯一编码', - `device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备自身序号', - `ext_device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '第三方设备ID唯一标识符', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '产品ID', - `device_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备名称', - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `command_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '指令ID', - `command_status` tinyint DEFAULT '0' COMMENT '指令状态', - `event` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '事件名称', - `create_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '实例名称', - `point` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '经纬度', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '内容', - `create_time` int(10) unsigned zerofill DEFAULT '0000000000' COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_create_date` (`create_time`) USING BTREE, - KEY `idx_iot_id` (`iot_id`) USING BTREE, - KEY `idx_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_21 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_22 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_22`; -CREATE TABLE `iot_device_log_22` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '唯一编码', - `device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备自身序号', - `ext_device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '第三方设备ID唯一标识符', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '产品ID', - `device_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备名称', - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `command_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '指令ID', - `command_status` tinyint DEFAULT '0' COMMENT '指令状态', - `event` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '事件名称', - `create_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '实例名称', - `point` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '经纬度', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '内容', - `create_time` int(10) unsigned zerofill DEFAULT '0000000000' COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_create_date` (`create_time`) USING BTREE, - KEY `idx_iot_id` (`iot_id`) USING BTREE, - KEY `idx_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_22 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_23 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_23`; -CREATE TABLE `iot_device_log_23` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '唯一编码', - `device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备自身序号', - `ext_device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '第三方设备ID唯一标识符', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '产品ID', - `device_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备名称', - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `command_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '指令ID', - `command_status` tinyint DEFAULT '0' COMMENT '指令状态', - `event` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '事件名称', - `create_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '实例名称', - `point` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '经纬度', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '内容', - `create_time` int(10) unsigned zerofill DEFAULT '0000000000' COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_create_date` (`create_time`) USING BTREE, - KEY `idx_iot_id` (`iot_id`) USING BTREE, - KEY `idx_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_23 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_3 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_3`; -CREATE TABLE `iot_device_log_3` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '唯一编码', - `device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备自身序号', - `ext_device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '第三方设备ID唯一标识符', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '产品ID', - `device_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备名称', - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `command_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '指令ID', - `command_status` tinyint DEFAULT '0' COMMENT '指令状态', - `event` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '事件名称', - `create_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '实例名称', - `point` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '经纬度', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '内容', - `create_time` int(10) unsigned zerofill DEFAULT '0000000000' COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_create_date` (`create_time`) USING BTREE, - KEY `idx_iot_id` (`iot_id`) USING BTREE, - KEY `idx_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_3 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_4 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_4`; -CREATE TABLE `iot_device_log_4` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '唯一编码', - `device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备自身序号', - `ext_device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '第三方设备ID唯一标识符', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '产品ID', - `device_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备名称', - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `command_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '指令ID', - `command_status` tinyint DEFAULT '0' COMMENT '指令状态', - `event` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `create_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '实例名称', - `point` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '经纬度', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '内容', - `create_time` int(10) unsigned zerofill DEFAULT '0000000000' COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_id` (`iot_id`) USING BTREE, - KEY `idx_create_date` (`create_time`) USING BTREE, - KEY `idx_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_4 --- ---------------------------- -BEGIN; -INSERT INTO `iot_device_log_4` (`id`, `iot_id`, `device_id`, `ext_device_id`, `product_key`, `device_name`, `message_type`, `command_id`, `command_status`, `event`, `create_id`, `instance`, `point`, `content`, `create_time`) VALUES (2, 'ab13d2f27d164648adf7d3aa6478bb09', 'ov00014119', '', '681c0775c2dc427d0480ab5f', 'ov00014119', 'EVENT', NULL, 0, 'offline', NULL, '0', '81.314141,31.081598', '{}', 1756305300); -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_5 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_5`; -CREATE TABLE `iot_device_log_5` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '唯一编码', - `device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备自身序号', - `ext_device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '第三方设备ID唯一标识符', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '产品ID', - `device_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备名称', - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `command_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '指令ID', - `command_status` tinyint DEFAULT '0' COMMENT '指令状态', - `event` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `create_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '实例名称', - `point` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '经纬度', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '内容', - `create_time` int(10) unsigned zerofill DEFAULT '0000000000' COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_id` (`iot_id`) USING BTREE, - KEY `idx_create_date` (`create_time`) USING BTREE, - KEY `idx_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_5 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_6 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_6`; -CREATE TABLE `iot_device_log_6` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '唯一编码', - `device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备自身序号', - `ext_device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '第三方设备ID唯一标识符', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '产品ID', - `device_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备名称', - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `command_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '指令ID', - `command_status` tinyint DEFAULT '0' COMMENT '指令状态', - `event` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `create_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '实例名称', - `point` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '经纬度', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '内容', - `create_time` int(10) unsigned zerofill DEFAULT '0000000000' COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_id` (`iot_id`) USING BTREE, - KEY `idx_create_date` (`create_time`) USING BTREE, - KEY `idx_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_6 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_7 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_7`; -CREATE TABLE `iot_device_log_7` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '唯一编码', - `device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备自身序号', - `ext_device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '第三方设备ID唯一标识符', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '产品ID', - `device_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备名称', - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `company_no` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `protocol` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '协议', - `device_node` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '节点类型', - `classified_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `command_id` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '指令ID', - `command_status` tinyint DEFAULT NULL COMMENT '指令状态', - `org_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `event` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `create_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '实例名称', - `point` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '经纬度', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '内容', - `create_time` int(10) unsigned zerofill DEFAULT '0000000000' COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_id` (`iot_id`) USING BTREE, - KEY `idx_create_date` (`create_time`) USING BTREE, - KEY `idx_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_7 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_8 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_8`; -CREATE TABLE `iot_device_log_8` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '唯一编码', - `device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备自身序号', - `ext_device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '第三方设备ID唯一标识符', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '产品ID', - `device_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备名称', - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `command_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '指令ID', - `command_status` tinyint DEFAULT '0' COMMENT '指令状态', - `event` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `create_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '实例名称', - `point` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '经纬度', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '内容', - `create_time` int(10) unsigned zerofill DEFAULT '0000000000' COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_id` (`iot_id`) USING BTREE, - KEY `idx_create_date` (`create_time`) USING BTREE, - KEY `idx_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_8 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_9 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_9`; -CREATE TABLE `iot_device_log_9` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '唯一编码', - `device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备自身序号', - `ext_device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '第三方设备ID唯一标识符', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '产品ID', - `device_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备名称', - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `command_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '指令ID', - `command_status` tinyint DEFAULT '0' COMMENT '指令状态', - `event` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `create_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '实例名称', - `point` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '经纬度', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '内容', - `create_time` int(10) unsigned zerofill DEFAULT '0000000000' COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_id` (`iot_id`) USING BTREE, - KEY `idx_create_date` (`create_time`) USING BTREE, - KEY `idx_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_9 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_metadata --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_metadata`; -CREATE TABLE `iot_device_log_metadata` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '产品唯一标识', - `device_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '设备名称', - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `event` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `property` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '属性', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '其他', - `ext1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext2` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `create_time` int DEFAULT '0' COMMENT '发生时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_Id` (`iot_id`) USING BTREE, - KEY `idx_device_id` (`device_id`) USING BTREE, - KEY `idx_create_time` (`create_time`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_metadata --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_metadata_0 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_metadata_0`; -CREATE TABLE `iot_device_log_metadata_0` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '产品唯一标识', - `device_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '设备名称', - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `event` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `property` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '属性', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '其他', - `ext1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext2` varchar(655) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `ext3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `create_time` int DEFAULT '0' COMMENT '发生时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_Id` (`iot_id`) USING BTREE, - KEY `idx_device_id` (`device_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_metadata_0 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_metadata_1 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_metadata_1`; -CREATE TABLE `iot_device_log_metadata_1` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '产品唯一标识', - `device_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '设备名称', - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `event` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `property` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '属性', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '其他', - `ext1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext2` varchar(655) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `ext3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `create_time` int DEFAULT '0' COMMENT '发生时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_Id` (`iot_id`) USING BTREE, - KEY `idx_meta_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_metadata_1 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_metadata_10 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_metadata_10`; -CREATE TABLE `iot_device_log_metadata_10` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '产品唯一标识', - `device_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '设备名称', - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `event` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `property` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '属性', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '其他', - `ext1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext2` varchar(655) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `ext3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `create_time` int DEFAULT '0' COMMENT '发生时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_Id` (`iot_id`) USING BTREE, - KEY `idx_meta_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_metadata_10 --- ---------------------------- -BEGIN; -INSERT INTO `iot_device_log_metadata_10` (`id`, `iot_id`, `product_key`, `device_name`, `device_id`, `message_type`, `event`, `property`, `content`, `ext1`, `ext2`, `ext3`, `create_time`) VALUES (2, '82b178e4cff840a4b3128da81e0718d0', '681c0775c2dc427d0480ab5f', 'ov00014115', 'ov00014115', 'EVENT', 'offline', NULL, '设备离线', NULL, NULL, NULL, 1756305300); -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_metadata_11 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_metadata_11`; -CREATE TABLE `iot_device_log_metadata_11` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '产品唯一标识', - `device_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '设备名称', - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `event` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `property` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '属性', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '其他', - `ext1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext2` varchar(655) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `ext3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `create_time` int DEFAULT '0' COMMENT '发生时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_Id` (`iot_id`) USING BTREE, - KEY `idx_meta_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_metadata_11 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_metadata_12 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_metadata_12`; -CREATE TABLE `iot_device_log_metadata_12` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '产品唯一标识', - `device_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '设备名称', - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `event` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `property` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '属性', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '其他', - `ext1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext2` varchar(655) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `ext3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `create_time` int DEFAULT '0' COMMENT '发生时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_Id` (`iot_id`) USING BTREE, - KEY `idx_meta_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_metadata_12 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_metadata_13 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_metadata_13`; -CREATE TABLE `iot_device_log_metadata_13` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '产品唯一标识', - `device_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '设备名称', - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `event` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `property` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '属性', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '其他', - `ext1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext2` varchar(655) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `ext3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `create_time` int DEFAULT '0' COMMENT '发生时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_Id` (`iot_id`) USING BTREE, - KEY `idx_meta_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_metadata_13 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_metadata_14 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_metadata_14`; -CREATE TABLE `iot_device_log_metadata_14` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '产品唯一标识', - `device_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '设备名称', - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `event` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `property` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '属性', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '其他', - `ext1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext2` varchar(655) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `ext3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `create_time` int DEFAULT '0' COMMENT '发生时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_Id` (`iot_id`) USING BTREE, - KEY `idx_meta_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_metadata_14 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_metadata_15 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_metadata_15`; -CREATE TABLE `iot_device_log_metadata_15` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '产品唯一标识', - `device_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '设备名称', - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `event` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `property` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '属性', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '其他', - `ext1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext2` varchar(655) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `ext3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `create_time` int DEFAULT '0' COMMENT '发生时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_Id` (`iot_id`) USING BTREE, - KEY `idx_meta_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_metadata_15 --- ---------------------------- -BEGIN; -INSERT INTO `iot_device_log_metadata_15` (`id`, `iot_id`, `product_key`, `device_name`, `device_id`, `message_type`, `event`, `property`, `content`, `ext1`, `ext2`, `ext3`, `create_time`) VALUES (2, '4db2d96130964fc49258e4eef0cc55f1', '681c0775c2dc427d0480ab5f', 'ov00014113', 'ov00014113', 'EVENT', 'offline', NULL, '设备离线', NULL, NULL, NULL, 1756305300); -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_metadata_16 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_metadata_16`; -CREATE TABLE `iot_device_log_metadata_16` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '产品唯一标识', - `device_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '设备名称', - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `event` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `property` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '属性', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '其他', - `ext1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext2` varchar(655) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `create_time` int DEFAULT '0' COMMENT '发生时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_Id` (`iot_id`) USING BTREE, - KEY `idx_meta_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_metadata_16 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_metadata_17 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_metadata_17`; -CREATE TABLE `iot_device_log_metadata_17` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '产品唯一标识', - `device_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '设备名称', - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `event` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `property` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '属性', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '其他', - `ext1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext2` varchar(655) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `create_time` int DEFAULT '0' COMMENT '发生时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_Id` (`iot_id`) USING BTREE, - KEY `idx_meta_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_metadata_17 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_metadata_18 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_metadata_18`; -CREATE TABLE `iot_device_log_metadata_18` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '产品唯一标识', - `device_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '设备名称', - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `event` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `property` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '属性', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '其他', - `ext1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext2` varchar(655) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `create_time` int DEFAULT '0' COMMENT '发生时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_Id` (`iot_id`) USING BTREE, - KEY `idx_meta_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_metadata_18 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_metadata_19 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_metadata_19`; -CREATE TABLE `iot_device_log_metadata_19` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '产品唯一标识', - `device_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '设备名称', - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `event` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `property` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '属性', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '其他', - `ext1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext2` varchar(655) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `create_time` int DEFAULT '0' COMMENT '发生时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_Id` (`iot_id`) USING BTREE, - KEY `idx_meta_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_metadata_19 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_metadata_2 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_metadata_2`; -CREATE TABLE `iot_device_log_metadata_2` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '产品唯一标识', - `device_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '设备名称', - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `event` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `property` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '属性', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '其他', - `ext1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext2` varchar(655) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `ext3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `create_time` int DEFAULT '0' COMMENT '发生时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_Id` (`iot_id`) USING BTREE, - KEY `idx_meta_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_metadata_2 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_metadata_20 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_metadata_20`; -CREATE TABLE `iot_device_log_metadata_20` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '产品唯一标识', - `device_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '设备名称', - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `event` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `property` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '属性', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '其他', - `ext1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext2` varchar(655) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `create_time` int DEFAULT '0' COMMENT '发生时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_Id` (`iot_id`) USING BTREE, - KEY `idx_meta_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_metadata_20 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_metadata_21 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_metadata_21`; -CREATE TABLE `iot_device_log_metadata_21` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '产品唯一标识', - `device_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '设备名称', - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `event` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `property` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '属性', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '其他', - `ext1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext2` varchar(655) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `create_time` int DEFAULT '0' COMMENT '发生时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_Id` (`iot_id`) USING BTREE, - KEY `idx_meta_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_metadata_21 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_metadata_22 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_metadata_22`; -CREATE TABLE `iot_device_log_metadata_22` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '产品唯一标识', - `device_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '设备名称', - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `event` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `property` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '属性', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '其他', - `ext1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext2` varchar(655) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `create_time` int DEFAULT '0' COMMENT '发生时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_Id` (`iot_id`) USING BTREE, - KEY `idx_meta_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_metadata_22 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_metadata_23 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_metadata_23`; -CREATE TABLE `iot_device_log_metadata_23` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '产品唯一标识', - `device_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '设备名称', - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `event` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `property` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '属性', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '其他', - `ext1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext2` varchar(655) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `create_time` int DEFAULT '0' COMMENT '发生时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_Id` (`iot_id`) USING BTREE, - KEY `idx_meta_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_metadata_23 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_metadata_3 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_metadata_3`; -CREATE TABLE `iot_device_log_metadata_3` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '产品唯一标识', - `device_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '设备名称', - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `event` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `property` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '属性', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '其他', - `ext1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext2` varchar(655) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `ext3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `create_time` int DEFAULT '0' COMMENT '发生时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_Id` (`iot_id`) USING BTREE, - KEY `idx_meta_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_metadata_3 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_metadata_4 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_metadata_4`; -CREATE TABLE `iot_device_log_metadata_4` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '产品唯一标识', - `device_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '设备名称', - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `event` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `property` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '属性', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '其他', - `ext1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext2` varchar(655) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `ext3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `create_time` int DEFAULT '0' COMMENT '发生时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_Id` (`iot_id`) USING BTREE, - KEY `idx_meta_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_metadata_4 --- ---------------------------- -BEGIN; -INSERT INTO `iot_device_log_metadata_4` (`id`, `iot_id`, `product_key`, `device_name`, `device_id`, `message_type`, `event`, `property`, `content`, `ext1`, `ext2`, `ext3`, `create_time`) VALUES (2, 'ab13d2f27d164648adf7d3aa6478bb09', '681c0775c2dc427d0480ab5f', 'ov00014119', 'ov00014119', 'EVENT', 'offline', NULL, '设备离线', NULL, NULL, NULL, 1756305300); -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_metadata_5 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_metadata_5`; -CREATE TABLE `iot_device_log_metadata_5` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '产品唯一标识', - `device_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '设备名称', - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `event` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `property` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '属性', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '其他', - `ext1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext2` varchar(655) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `ext3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `create_time` int DEFAULT '0' COMMENT '发生时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_Id` (`iot_id`) USING BTREE, - KEY `idx_meta_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_metadata_5 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_metadata_6 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_metadata_6`; -CREATE TABLE `iot_device_log_metadata_6` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '产品唯一标识', - `device_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '设备名称', - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `event` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `property` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '属性', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '其他', - `ext1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext2` varchar(655) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `ext3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `create_time` int DEFAULT '0' COMMENT '发生时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_Id` (`iot_id`) USING BTREE, - KEY `idx_meta_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_metadata_6 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_metadata_7 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_metadata_7`; -CREATE TABLE `iot_device_log_metadata_7` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '产品唯一标识', - `device_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '设备名称', - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `event` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `property` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '属性', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '其他', - `ext1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext2` varchar(655) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `ext3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `create_time` int DEFAULT '0' COMMENT '发生时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_Id` (`iot_id`) USING BTREE, - KEY `idx_meta_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_metadata_7 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_metadata_8 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_metadata_8`; -CREATE TABLE `iot_device_log_metadata_8` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '产品唯一标识', - `device_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '设备名称', - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `event` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `property` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '属性', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '其他', - `ext1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext2` varchar(655) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `ext3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `create_time` int DEFAULT '0' COMMENT '发生时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_Id` (`iot_id`) USING BTREE, - KEY `idx_meta_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_metadata_8 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_log_metadata_9 --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_log_metadata_9`; -CREATE TABLE `iot_device_log_metadata_9` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '产品唯一标识', - `device_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '设备名称', - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '消息类型', - `event` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `property` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '属性', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '其他', - `ext1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `ext2` varchar(655) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `ext3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '', - `create_time` int DEFAULT '0' COMMENT '发生时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_Id` (`iot_id`) USING BTREE, - KEY `idx_meta_product_device` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_log_metadata_9 --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_model --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_model`; -CREATE TABLE `iot_device_model` ( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id', - `product_key` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '产品编号', - `company_no` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '厂家编号', - `company_name` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '厂家名称', - `device_type` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '设备类型', - `device_type_name` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '设备类型名称', - `device_model` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '设备型号', - `device_model_name` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '型号名称', - `icon` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '设备图标', - `protocol` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '网络协议', - `apps` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '支持应用', - `support_child` tinyint(1) NOT NULL DEFAULT '0' COMMENT '支持子设备', - `link_to` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '小程序跳转webview页面', - `page_ctrl` json DEFAULT NULL COMMENT '页面配置', - `ext_conf` json DEFAULT NULL COMMENT '后台内部扩展字段', - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0', - `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`id`) USING BTREE, - UNIQUE KEY `idx_product_Key` (`product_key`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='存储设备型号规格定义(关联产品型号、硬件版本) '; - --- ---------------------------- --- Records of iot_device_model --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_protocol --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_protocol`; -CREATE TABLE `iot_device_protocol` ( - `id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '产品key,product_key', - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, - `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, - `state` tinyint DEFAULT NULL COMMENT '0-未发布,1-已发布', - `type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, - `configuration` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '配置信息', - `example` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '编解码示例', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='设备协议表'; - --- ---------------------------- --- Records of iot_device_protocol --- ---------------------------- -BEGIN; -INSERT INTO `iot_device_protocol` (`id`, `name`, `description`, `state`, `type`, `configuration`, `example`) VALUES ('38fc80e', '开关面板', NULL, 1, 'magic', '{\"needBs4Decode\":false,\"location\":\"import log;\\n\\n// 16进制转10进制数字\\nvar hexToInt = hex => {\\n return Integer.parseInt(hex, 16);\\n};\\n// 预解码,解析上报的设备编号 deviceId1\\nvar preDecode = payload => {\\n var result = {}\\n var payloadHex = payload.toUpperCase() // 转为大写\\n // 校验报文长度和帧头\\n if (payloadHex.length() >= 18 && payloadHex.substring(0, 4) === \\\"A5A5\\\") {\\n // 从第5位开始取4字节(8个字符)作为 deviceId\\n result.deviceId = payloadHex.substring(4, 12)\\n }\\n return result\\n}\\n\\nvar decode =(payload,context) => {\\n log.info(\\\"进入编解码,payload={},context={}\\\",payload,context)\\n var result = [];\\n var payloadHex =payload.toUpperCase();\\n var propertiesObj = { \\\"messageType\\\": \\\"PROPERTIES\\\", \\\"properties\\\": {} };\\n var eventObj = { \\\"messageType\\\": \\\"EVENT\\\", \\\"event\\\": \\\"\\\", \\\"data\\\": {} };\\n\\n // 验证帧头帧尾\\n if (payloadHex.substring(0, 4) != \\\"A5A5\\\" || payloadHex.substring(payloadHex.length() - 4) != \\\"5A5A\\\") {\\n return jsonToStr([{ \\\"error\\\": \\\"无效帧格式\\\" }]);\\n }\\n\\n // 提取核心字段\\n var deviceId = payloadHex.substring(4, 8); // 设备ID(4字节)\\n var cmdCode = payloadHex.substring(8, 10); // 命令码(1字节)\\n var dataLen = hexToInt(payloadHex.substring(10, 12)); // 数据长度\\n var dataHex = payloadHex.substring(12, 12 + dataLen * 2); // 数据区\\n var checksum = payloadHex.substring(12 + dataLen * 2, 14 + dataLen * 2); // 校验和\\n\\n // 设备ID存入所有对象\\n propertiesObj.deviceId = deviceId;\\n eventObj.deviceId = deviceId;\\n //验证新内容\\n propertiesObj.context=context;\\n propertiesObj.tcpEncode = \'HEX\';\\n propertiesObj.replyPayload = \'727270632C676574637371\'\\n // 1. 属性上报(命令码01)\\n if (cmdCode == \\\"01\\\" && dataLen == 7) {\\n // 解析开关状态(01=开,00=关)\\n propertiesObj.properties.powerState = dataHex.substring(0, 2) == \\\"01\\\" ? \\\"01\\\" : \\\"00\\\";\\n // 解析电流(2字节,单位0.01A)\\n var currentHex = dataHex.substring(2, 6);\\n propertiesObj.properties.current = (hexToInt(currentHex) * 0.01).toFixed(2);\\n // 解析电压(2字节,单位0.1V)\\n var voltageHex = dataHex.substring(6, 10);\\n propertiesObj.properties.voltage = (hexToInt(voltageHex) * 0.1).toFixed(1);\\n // 解析功率(2字节,单位1W)\\n var powerHex = dataHex.substring(10, 14);\\n propertiesObj.properties.power = hexToInt(powerHex).toString();\\n // 加入结果集\\n result.push(propertiesObj);\\n }\\n\\n // 2. 事件上报(命令码02)\\n if (cmdCode == \\\"02\\\" && dataLen >= 3) {\\n // 事件类型(01=过载,02=过压,03=上线,04=下线)\\n var eventType = dataHex.substring(0, 2);\\n if (eventType == \\\"01\\\") {\\n eventObj.event = \\\"overload\\\";\\n eventObj.data.overload = hexToInt(dataHex.substring(2, 6)) + \\\"W\\\"; // 过载功率\\n }\\n if (eventType == \\\"03\\\") {\\n eventObj.event = \\\"online\\\";\\n eventObj.data.online = \\\"设备上线\\\";\\n }\\n if (eventType == \\\"04\\\") {\\n eventObj.event = \\\"offline\\\";\\n eventObj.data.offline = \\\"设备下线\\\";\\n }\\n result.push(eventObj);\\n }\\n\\n // 3. 响应报文(命令码04)\\n if (cmdCode == \\\"04\\\" && dataLen == 1) {\\n var replyObj = {\\n \\\"messageType\\\": \\\"REPLY\\\",\\n \\\"function\\\": \\\"switch\\\",\\n \\\"data\\\": { \\\"result\\\": dataHex == \\\"00\\\" ? \\\"success\\\" : \\\"fail\\\" }\\n };\\n replyObj.deviceId = deviceId;\\n result.push(replyObj);\\n }\\n\\n return jsonToStr(result); \\n};\\n\\nvar encode = payload => {\\n var obj = toJson(payload);\\n var deviceId = obj.data.deviceId; // 设备ID(4位16进制,如\\\"0001\\\")\\n var func = obj.function;\\n var params = obj.data;\\n\\n // 控制开关(function=switch)\\n if (func == \\\"switch\\\") {\\n var state = params.state; // 目标状态:01=开,00=关\\n if (state != \\\"01\\\" && state != \\\"00\\\") {\\n return \\\"\\\"; // 无效状态,返回空\\n }\\n\\n // 数据区:控制类型(01)+目标状态\\n var dataHex = \\\"01\\\" + state;\\n var dataLen = dataHex.length() / 2; // 数据长度(字节数)\\n var cmdCode = \\\"03\\\"; // 控制指令命令码\\n\\n // 拼接完整报文(无校验和)\\n var frame = \\\"A5A5\\\" + \\n deviceId + \\n cmdCode + \\n Integer.toHexString(dataLen) + // 数据长度(1位16进制)\\n dataHex + \\n \\\"5A5A\\\";\\n\\n return frame.toUpperCase(); // 转为大写16进制\\n }\\n\\n return \\\"\\\"; // 不支持的指令\\n};\\n\\n//预解码,得到deviceId\\n// return preDecode(\\\"A5A5000101070105DC08F004B05A5A\\\")\\n//属性上报报文\\n// return decode(\'A5A5000101070105DC08F004B07A5A5A\');\\n\\n//过载事件报文\\n// return decode(\\\"A5A5000102030104B0F35A5A\\\")\\n\\n\\n// return encode(\'{\\\"deviceId\\\": \\\"0001\\\",\\\"function\\\": \\\"switch\\\",\\\"data\\\": { \\\"state\\\": \\\"01\\\" }}\')\\n\\n\\n// return encode(\'{\\\"messageType\\\":\\\"FUNCTIONS\\\",\\\"function\\\":\\\"switch\\\",\\\"data\\\":{\\\"deviceId\\\":\\\"00010107\\\",\\\"state\\\":\\\"01\\\"}}\')\",\"provider\":\"38fc80e\",\"supportMethods\":[\"encode\",\"preDecode\",\"decode\"]}', '\"{}\"'); -INSERT INTO `iot_device_protocol` (`id`, `name`, `description`, `state`, `type`, `configuration`, `example`) VALUES ('681c0775c2dc427d0480ab5f', '智能插座', NULL, 1, 'magic', '{\"needBs4Decode\":false,\"location\":\"\\nimport log;\\n\\nvar url=\\\"\\\";\\n\\nvar post = (url,body) =>{\\n \\n}\\n\\nvar encode = payload => {\\n var dt=toJson(payload)\\n dt.dxxc=randomSign();\\n return dt;\\n}\\n\\n//解码\\nvar decode = payload => {\\n var result = []\\n log.info(\\\"编解码收到消息={}\\\",payload)\\n var dt=toJson(payload)\\n var propertiesObj = {\\n \\\"messageType\\\": \\\"PROPERTIES\\\",\\n \\\"properties\\\": {}\\n }\\n\\n var repayObj={}\\n repayObj.tips=\\\"我想改啥就改啥\\\"\\n repayObj.randomNo=randomSign()\\n repayObj.wings=\\\"universal-iot-great\\\"\\n repayObj.iot=\\\"iotuniv\\\"\\n //设置属性\\n propertiesObj.properties=dt\\n propertiesObj.properties.sn=randomSign()\\n //MQTT设置回复\\n propertiesObj.replyPayload=repayObj\\n // propertiesObj.replyPayload=\\\"xzzxc\\\"+randomSign()//设置回复的内容\\n propertiesObj.downTopic=\\\"$thing/down/681c0775c2dc427d0480ab5f/cz001923\\\" //设置回复的主题\\n \\n return propertiesObj;\\n}\\n\\n//设备增加\\nvar add = payload => {\\n var da=post(url,payload)\\n var rs={\\n \\\"code\\\":0,\\n \\\"msg\\\":\\\"success\\\",\\n \\\"codec\\\":\\\"add\\\",\\n \\\"codec\\\":da\\n }\\n return rs;\\n}\\n\\n//设备更新\\nvar update = payload => {\\n var da=post(url,payload)\\n var rs={\\n \\\"code\\\":0,\\n \\\"msg\\\":\\\"success\\\",\\n \\\"codec\\\":\\\"update\\\",\\n \\\"codec\\\":da\\n }\\n return rs;\\n}\\n\\n//设备查询\\nvar query = payload => {\\n var da=post(url,payload)\\n var rs={\\n \\\"code\\\":0,\\n \\\"req\\\":0,\\n \\\"msg\\\":\\\"success\\\",\\n \\\"codec\\\":\\\"query\\\",\\n \\\"codec\\\":da\\n }\\n return rs;\\n}\\n\\n//功能调用\\nvar function = payload => {\\n var da=post(url,payload)\\n var rs={\\n \\\"code\\\":0,\\n \\\"msg\\\":\\\"success\\\",\\n \\\"codec\\\":\\\"function\\\",\\n \\\"codec\\\":da\\n }\\n return rs;\\n}\\n\\n\\n\",\"provider\":\"681c0775c2dc427d0480ab5f\",\"supportMethods\":[\"encode\",\"decode\"]}', '\"{}\"'); -INSERT INTO `iot_device_protocol` (`id`, `name`, `description`, `state`, `type`, `configuration`, `example`) VALUES ('68831a1f38fc106a8dac3c13', 'AI生成开关', NULL, 1, 'magic', '{\"needBs4Decode\":false,\"location\":\"import log;\\n\\n// 16进制转10进制数字\\nvar hexToInt = hex => {\\n return Integer.parseInt(hex, 16);\\n};\\n// 预解码,解析上报的设备编号 deviceId\\nvar preDecode = payload => {\\n var result = {}\\n var payloadHex = payload.toUpperCase() // 转为大写\\n // 校验报文长度和帧头\\n if (payloadHex.length() >= 18 && payloadHex.substring(0, 4) === \\\"A5A5\\\") {\\n // 从第5位开始取4字节(8个字符)作为 deviceId\\n result.deviceId = payloadHex.substring(4, 12)\\n }\\n return result\\n}\\n\\nvar decode =(payload,context) => {\\n log.info(\\\"进入编解码,payload={},context={}\\\",payload,context)\\n var result = [];\\n var payloadHex =payload.toUpperCase();\\n var propertiesObj = { \\\"messageType\\\": \\\"PROPERTIES\\\", \\\"properties\\\": {} };\\n var eventObj = { \\\"messageType\\\": \\\"EVENT\\\", \\\"event\\\": \\\"\\\", \\\"data\\\": {} };\\n\\n // 验证帧头帧尾\\n if (payloadHex.substring(0, 4) != \\\"A5A5\\\" || payloadHex.substring(payloadHex.length() - 4) != \\\"5A5A\\\") {\\n return jsonToStr([{ \\\"error\\\": \\\"无效帧格式\\\" }]);\\n }\\n\\n // 提取核心字段\\n var deviceId = payloadHex.substring(4, 8); // 设备ID(4字节)\\n var cmdCode = payloadHex.substring(8, 10); // 命令码(1字节)\\n var dataLen = hexToInt(payloadHex.substring(10, 12)); // 数据长度\\n var dataHex = payloadHex.substring(12, 12 + dataLen * 2); // 数据区\\n var checksum = payloadHex.substring(12 + dataLen * 2, 14 + dataLen * 2); // 校验和\\n\\n // 设备ID存入所有对象\\n propertiesObj.deviceId = deviceId;\\n eventObj.deviceId = deviceId;\\n //验证新内容\\n propertiesObj.context=context;\\n propertiesObj.tcpEncode = \'HEX\';\\n propertiesObj.replyPayload = \'727270632C676574637371\'\\n // 1. 属性上报(命令码01)\\n if (cmdCode == \\\"01\\\" && dataLen == 7) {\\n // 解析开关状态(01=开,00=关)\\n propertiesObj.properties.powerState = dataHex.substring(0, 2) == \\\"01\\\" ? \\\"01\\\" : \\\"00\\\";\\n // 解析电流(2字节,单位0.01A)\\n var currentHex = dataHex.substring(2, 6);\\n propertiesObj.properties.current = (hexToInt(currentHex) * 0.01).toFixed(2);\\n // 解析电压(2字节,单位0.1V)\\n var voltageHex = dataHex.substring(6, 10);\\n propertiesObj.properties.voltage = (hexToInt(voltageHex) * 0.1).toFixed(1);\\n // 解析功率(2字节,单位1W)\\n var powerHex = dataHex.substring(10, 14);\\n propertiesObj.properties.power = hexToInt(powerHex).toString();\\n // 加入结果集\\n result.push(propertiesObj);\\n }\\n\\n // 2. 事件上报(命令码02)\\n if (cmdCode == \\\"02\\\" && dataLen >= 3) {\\n // 事件类型(01=过载,02=过压,03=上线,04=下线)\\n var eventType = dataHex.substring(0, 2);\\n if (eventType == \\\"01\\\") {\\n eventObj.event = \\\"overload\\\";\\n eventObj.data.overload = hexToInt(dataHex.substring(2, 6)) + \\\"W\\\"; // 过载功率\\n }\\n if (eventType == \\\"03\\\") {\\n eventObj.event = \\\"online\\\";\\n eventObj.data.online = \\\"设备上线\\\";\\n }\\n if (eventType == \\\"04\\\") {\\n eventObj.event = \\\"offline\\\";\\n eventObj.data.offline = \\\"设备下线\\\";\\n }\\n result.push(eventObj);\\n }\\n\\n // 3. 响应报文(命令码04)\\n if (cmdCode == \\\"04\\\" && dataLen == 1) {\\n var replyObj = {\\n \\\"messageType\\\": \\\"REPLY\\\",\\n \\\"function\\\": \\\"switch\\\",\\n \\\"data\\\": { \\\"result\\\": dataHex == \\\"00\\\" ? \\\"success\\\" : \\\"fail\\\" }\\n };\\n replyObj.deviceId = deviceId;\\n result.push(replyObj);\\n }\\n\\n return jsonToStr(result);\\n};\\n\\nvar encode = payload => {\\n var obj = toJson(payload);\\n var deviceId = obj.data.deviceId; // 设备ID(4位16进制,如\\\"0001\\\")\\n var func = obj.function;\\n var params = obj.data;\\n\\n // 控制开关(function=switch)\\n if (func == \\\"switch\\\") {\\n var state = params.state; // 目标状态:01=开,00=关\\n if (state != \\\"01\\\" && state != \\\"00\\\") {\\n return \\\"\\\"; // 无效状态,返回空\\n }\\n\\n // 数据区:控制类型(01)+目标状态\\n var dataHex = \\\"01\\\" + state;\\n var dataLen = dataHex.length() / 2; // 数据长度(字节数)\\n var cmdCode = \\\"03\\\"; // 控制指令命令码\\n\\n // 拼接完整报文(无校验和)\\n var frame = \\\"A5A5\\\" + \\n deviceId + \\n cmdCode + \\n Integer.toHexString(dataLen) + // 数据长度(1位16进制)\\n dataHex + \\n \\\"5A5A\\\";\\n\\n return frame.toUpperCase(); // 转为大写16进制\\n }\\n\\n return \\\"\\\"; // 不支持的指令\\n};\",\"provider\":\"68831a1f38fc106a8dac3c13\",\"supportMethods\":[\"encode\",\"preDecode\",\"decode\"]}', '{}'); -INSERT INTO `iot_device_protocol` (`id`, `name`, `description`, `state`, `type`, `configuration`, `example`) VALUES ('688cd92fdb9e0158872f4aa9', '开关面板-MQTT-doc编写', '123', 1, 'magic', '{\"needBs4Decode\":false,\"location\":\"import log\\n\\n\\n/**\\n * 编码:平台指令转设备格式\\n * @param {Object} payload 平台指令\\n * @returns {String} 设备可识别的报文(二进制、JSON、16进制字符串等)\\n */\\nvar encode = payload => {\\n var rs=toJson(payload);\\n rs.iot=\'演示iot\'\\n rs.randomNum=randomSign();\\n // TODO:实现编码逻辑\\n return \\\"A5A50001030201015A5A\\\";\\n};\\n\",\"provider\":\"688cd92fdb9e0158872f4aa9\",\"supportMethods\":[\"encode\"]}', '{}'); -INSERT INTO `iot_device_protocol` (`id`, `name`, `description`, `state`, `type`, `configuration`, `example`) VALUES ('abcxassxnanahsman', '电表', NULL, 1, 'magic', '{\"needBs4Decode\":false,\"location\":\"//16进制ASCII转STRING\\nvar hex2str = stringhex => {\\n\\n var i = 0\\n var asciidata = \\\"\\\"\\n while (i < stringhex.length()) {\\n asciidata += (String.valueOf(Integer.parseInt(stringhex.substring(i, i + 2), 16)) + \\\",\\\")\\n i += 2\\n }\\n asciidata = asciidata.substring(0, asciidata.length() - 1)\\n return asciiToString(asciidata)\\n}\\n//大小端转换\\nvar reverseStr = data => {\\n var rData = \\\"\\\"\\n if (data.length() >= 0) {\\n let seq = data.length()\\n while (seq > 0) {\\n rData += data.substring(seq - 2, seq)\\n seq = seq - 2\\n }\\n }\\n return rData\\n}\\n//和校验计算\\nvar check_CS = strData => {\\n let i = 0\\n let accum = 0\\n while (i < strData.length()) {\\n accum += Integer.parseInt(strData.substring(i, i + 2), 16)\\n i += 2\\n }\\n let l = Integer.toHexString(accum).length()\\n return Integer.toHexString(accum).substring(l - 2, l).toUpperCase()\\n}\\n//数据转换 倒转 -33\\nvar transform = str => {\\n let i = 0\\n let result = \'\'\\n str = reverseTwoDigit(str)\\n while (i < str.length()) {\\n if (str.substring(i, 2 + i) == \'33\') {\\n i += 2\\n result += \'00\'\\n } else {\\n let value = Integer.parseInt(str.substring(i, 2 + i), 16) - 0x33;\\n i += 2\\n result += String.format(\'%02X\', value)\\n }\\n }\\n return Integer.parseInt(result, 10)\\n}\\n//+0x33方法\\nvar dataplus = strData => {\\n let sData = \'\'\\n let i = 0\\n let pData = 0\\n while (i < strData.length()) {\\n pData = (Integer.parseInt(strData.substring(i, i + 2), 16) + 0x33) & 0b11111111\\n sData += String.format(\'%02X\', pData)\\n i += 2\\n }\\n return sData\\n}\\n\\n//预解码,解析上报的设备编号产品deviceId\\nvar preDecode = payload => {\\n var result = {}\\n //注册包\\n if (payload.length() == 12) {\\n result.deviceId = reverseTwoDigit(payload)\\n }\\n \\n //电表电量上报消息预解码\\n if(payload.length() == 98 && payload.substring(0,2).equals(\'68\')&& payload.substring(payload.length()-2,payload.length()).equals(\'16\')){\\n result.deviceId = reverseStr(payload.substring(2, 14))\\n }\\n return result\\n}\\n//上行处理\\nvar decode = (payload,context) => {\\n var result = []\\n var propertiesObj = {\\n \\\"messageType\\\": \\\"PROPERTIES\\\",\\n \\\"properties\\\": {}\\n }\\n propertiesObj.properties.originalMessage = payload\\n\\n\\n //propertiesObj.properties.shadow = pData.shadow\\n result.push(propertiesObj)\\n //心跳包\\n if (payload.length() == 12) {\\n result.push(propertiesObj)\\n propertiesObj.tcpEncode = \'HEX\';\\n propertiesObj.replyPayload = \'7868\'\\n } else {\\n //抄表结果\\n if (payload.length() >= 94 && payload.substring(14, 18) == \'6891\') {\\n //表号\\n propertiesObj.properties.meterNo = reverseStr(payload.substring(2, 14))\\n var length = Integer.parseInt(payload.substring(18, 20), 16)\\n\\n //总用电量\\n let mData = (transform(payload.substring(28, 36)) * 0.01).toFixed(2)\\n propertiesObj.properties.meterData = mData.substring(0, mData.length() - 1)\\n //取影子里的上次读数\\n // if (pData!=null &&pData.containsKey(\'shadow\')) {\\n // if (pData.shadow.state.reported.containsKey(\'meterData\')) {\\n // propertiesObj.properties.lastMeterData = pData.shadow.state.reported.meterData\\n // }\\n // }\\n //propertiesObj.properties.meterData = (transform(payload.substring(28, 36)) * 0.01).toFixed(2)\\n //电价\\n propertiesObj.properties.meterPrice = (transform(payload.substring(36, 44)) * 0.0001).toFixed(4)\\n //电压\\n propertiesObj.properties.voltage = (transform(payload.substring(44, 52)) * 0.1).toFixed(1)\\n //电流\\n propertiesObj.properties.current = (transform(payload.substring(52, 60)) * 0.001).toFixed(3)\\n //功率\\n propertiesObj.properties.power = (transform(payload.substring(60, 68)) * 0.1).toFixed(1)\\n //购电次数\\n propertiesObj.properties.purchases = transform(payload.substring(68, 76))\\n //预警电量\\n propertiesObj.properties.warningPower = (transform(payload.substring(76, 84)) * 0.01).toFixed(2)\\n //剩余金额\\n propertiesObj.properties.remainingAmount = (transform(payload.substring(84, 92)) * 0.01).toFixed(2)\\n propertiesObj.properties.openState = (Integer.parseInt(payload.substring(92, 94), 16) - 0x33) == 27 ? \'1\' : \'0\'\\n //新增查询信号值,在reply里面下发\\n propertiesObj.tcpEncode = \'HEX\';\\n propertiesObj.replyPayload = \'727270632C676574637371\'\\n }\\n //抄表分包,第一部分\\n if (payload.length() == 64 && payload.substring(14, 18) == \'6891\') {\\n //表号\\n propertiesObj.properties.meterNo = reverseStr(payload.substring(2, 14))\\n var length = Integer.parseInt(payload.substring(18, 20), 16)\\n\\n //总用电量\\n let mData = (transform(payload.substring(28, 36)) * 0.01).toFixed(2)\\n propertiesObj.properties.meterData = mData.substring(0, mData.length() - 1)\\n //取影子里的上次读数\\n // if (pData.containsKey(\'shadow\')) {\\n // if (pData.shadow.state.reported.containsKey(\'meterData\')) {\\n // propertiesObj.properties.lastMeterData = pData.shadow.state.reported.meterData\\n // }\\n // }\\n //propertiesObj.properties.meterData = (transform(payload.substring(28, 36)) * 0.01).toFixed(2)\\n //电价\\n propertiesObj.properties.meterPrice = (transform(payload.substring(36, 44)) * 0.0001).toFixed(4)\\n //电压\\n propertiesObj.properties.voltage = (transform(payload.substring(44, 52)) * 0.1).toFixed(1)\\n //电流\\n propertiesObj.properties.current = (transform(payload.substring(52, 60)) * 0.001).toFixed(3)\\n //功率\\n propertiesObj.properties.power = (transform(payload.substring(60, 64)) * 0.1).toFixed(1)\\n }\\n //抄表分包,第二部分\\n if (payload.length() == 34) {\\n //\\n //购电次数\\n propertiesObj.properties.purchases = transform(payload.substring(4, 12))\\n //预警电量\\n propertiesObj.properties.warningPower = (transform(payload.substring(12, 20)) * 0.01).toFixed(2)\\n //剩余金额\\n propertiesObj.properties.remainingAmount = (transform(payload.substring(20, 28)) * 0.01).toFixed(2)\\n propertiesObj.properties.openState = (Integer.parseInt(payload.substring(28, 30), 16) - 0x33) == 27 ? \'1\' : \'0\'\\n //新增查询信号值,在reply里面下发\\n propertiesObj.tcpEncode = \'HEX\';\\n propertiesObj.replyPayload = \'727270632C676574637371\'\\n }\\n //控制开合闸回复的丢数据头68兼容处理\\n if (payload.length() == 48) {\\n if (payload.substring(12, 18).equals(\'689C0D\') && ((payload.substring(42, 44).equals(\'4D\')) || (payload.substring(42, 44).equals(\'4E\')))) {\\n payload = \'68\' + payload\\n }\\n }\\n\\n //控制开合闸回复\\n if (payload.substring(14, 18) == \'689C\') {\\n let replyswitchObj = {\\n \\\"messageType\\\": \\\"REPLY\\\",\\n \\\"function\\\": \\\"switchOnOff\\\",\\n \\\"data\\\": {\\n \\\"openState\\\": (Integer.parseInt(payload.substring(44, 46), 16) - 0x33) == 27 ? \'1\' : \'0\'\\n }\\n }\\n\\n result.push(replyswitchObj)\\n //同步上报通电断电属性\\n propertiesObj.properties.openState = replyswitchObj.data.openState\\n //propertiesObj.properties.meterData = (transform(payload.substring(20, 28)) * 0.01).toFixed(2)\\n propertiesObj.properties.remainingAmount = (transform(payload.substring(28, 36)) * 0.01).toFixed(2)\\n propertiesObj.properties.purchases = transform(payload.substring(36, 44))\\n //新增查询信号值,在reply里面下发\\n propertiesObj.tcpEncode = \'HEX\';\\n propertiesObj.replyPayload = \'727270632C676574637371\'\\n }\\n //清表回复\\n if (payload.substring(14, 18) == \'689A\') {\\n let replyswitchObj = {\\n \\\"messageType\\\": \\\"REPLY\\\",\\n \\\"function\\\": \\\"reset\\\",\\n \\\"data\\\": {\\n \\\"result\\\": \'设置成功\'\\n }\\n }\\n result.push(replyswitchObj)\\n let mData = (transform(payload.substring(28, 36)) * 0.01).toFixed(2)\\n propertiesObj.properties.meterData = mData.substring(0, mData.length() - 1)\\n //propertiesObj.properties.meterData = (transform(payload.substring(20, 28)) * 0.01).toFixed(2)\\n propertiesObj.properties.remainingAmount = (transform(payload.substring(28, 36)) * 0.01).toFixed(2)\\n propertiesObj.properties.purchases = transform(payload.substring(36, 44))\\n propertiesObj.properties.openState = (Integer.parseInt(payload.substring(44, 46), 16) - 0x33) == 27 ? \'1\' : \'0\'\\n }\\n //设置限值回复\\n if (payload.substring(14, 20) == \'68841C\') {\\n let replyLimitObj = {\\n \\\"messageType\\\": \\\"REPLY\\\",\\n \\\"function\\\": \\\"setOverloadLimit\\\",\\n \\\"data\\\": {\\n \\\"overVoltageLimit\\\": \\\"\\\",\\n \\\"overCurrrentLimit\\\": \\\"\\\"\\n }\\n }\\n result.push(replyLimitObj)\\n //囤积金额\\n //propertiesObj.properties.hoardAmount = \\n\\n }\\n //售电回复\\n if (payload.substring(14, 20) == \'68840C\') {\\n let replyRechargeObj = {\\n \\\"messageType\\\": \\\"REPLY\\\",\\n \\\"function\\\": \\\"recharge\\\",\\n \\\"data\\\": {\\n \\\"result\\\": \'设置成功\'\\n }\\n }\\n result.push(replyRechargeObj)\\n //囤积金额\\n //propertiesObj.properties.hoardAmount = \\n\\n }\\n //比较上次读数和这次读数的差额\\n if (propertiesObj.properties.containsKey(\'lastMeterData\') && propertiesObj.properties.containsKey(\'meterData\')) {\\n let shortfallData = Float.parseFloat(propertiesObj.properties.meterData) - Float.parseFloat(propertiesObj.properties.lastMeterData)\\n propertiesObj.properties.shortfallData = Float.parseFloat(shortfallData.toFixed(2))\\n if (propertiesObj.properties.shortfallData < 0) {\\n let shortfallAlarmObj = {\\n \\\"messageType\\\": \\\"EVENT\\\",\\n \\\"event\\\": \\\"\\\",\\n \\\"data\\\": {\\n \\\"level\\\": \\\"warn\\\"\\n }\\n }\\n shortfallAlarmObj.event = \'shortfallAlarm\'\\n shortfallAlarmObj.data.shortfallAlarm = \'读数倒流告警\'\\n shortfallAlarmObj.data.shortfallData = propertiesObj.properties.shortfallData\\n result.push(shortfallAlarmObj)\\n }\\n }\\n //CSQ数据,ICCID数据\\n /**\\n * rrpc,getcsq,22\\n * rrpc,geticcid,898604A8102440120152\\n * \\n */\\n if (payload.length() >= 8 && payload.substring(0, 8).equals(\'72727063\')) {\\n let rData = hex2str(payload)\\n let rArray = rData.split(\',\')\\n //CSQ数据\\n if (rArray[0].equals(\'rrpc\') && rArray[1].equals(\'getcsq\')) {\\n propertiesObj.properties.csq = rArray[2]\\n propertiesObj.properties.signalLevel = csq(propertiesObj.properties.csq)\\n }\\n if (rArray[0].equals(\'rrpc\') && rArray[1].equals(\'geticcid\')) {\\n propertiesObj.properties.iccid = rArray[2]\\n }\\n\\n }\\n }\\n /*//开始字节\\n if (payload.substring(0, 2) != \'68\') {\\n \\treturn jsonToStr(result)\\n }*/\\n\\n\\n return jsonToStr(result)\\n}\\n//下行处理\\nvar encode = payload => {\\n var obj = toJson(payload)\\n //读取电表用量\\n if (obj.function == \'meterRead\') {\\n if (obj.data.meterNo.length() == 12) {\\n let str = \'68\' + reverseStr(obj.data.meterNo) + \'6811043335C433\'\\n let check = check_CS(str)\\n str = str + check + \'16\'\\n return str.toLowerCase()\\n }\\n }\\n //开关闸\\n if (obj.function == \'switchOnOff\') {\\n if (obj.data.meterNo.length() == 12) {\\n //1为合闸\\n let switchOn = obj.data.valveOn == \'1\' ? \'4E\' : \'4D\'\\n let str = \'68\' + reverseStr(obj.data.meterNo) + \'681C103533333334896745\' + switchOn + \'3347773B3A443C\'\\n let check = check_CS(str)\\n str = str + check + \'16\'\\n return str.toLowerCase()\\n }\\n }\\n //清表(清除所有,余额、总电量、购电次数、电价全部初始化)\\n if (obj.function == \'reset\') {\\n if (obj.data.meterNo.length() == 12) {\\n let str = \'68\' + reverseStr(obj.data.meterNo) + \'681A09353333333489674535\'\\n let check = check_CS(str)\\n str = str + check + \'16\'\\n return str.toLowerCase()\\n }\\n }\\n //超限值设置\\n if (obj.function == \'setOverloadLimit\') {\\n if (obj.data.meterNo.length() == 12) {\\n let str = \'68\' + reverseStr(obj.data.meterNo) + \'6804203633333335333333734036333333333373403633\'\\n //电压限值处理\\n if (obj.data.containsKey(\'overVoltageLimit\') && obj.data.overVoltageLimit != NULL) {\\n if (Float.valueOf(obj.data.overVoltageLimit) > 220.0 && Float.valueOf(obj.data.overVoltageLimit) <= 260.0) {\\n let hv = String.format(\'%08X\', Integer.valueOf((Float.valueOf(obj.data.overVoltageLimit) * 10).toFixed(0)))\\n str += reverseStr(dataplus(hv))\\n }\\n //如果电压限值不在范围内,补默认限值260.0V\\n else {\\n str += reverseStr(dataplus(String.format(\'%08X\', 2600)))\\n }\\n }\\n //如果不填写电压限值,默认2600\\n else {\\n str += reverseStr(dataplus(String.format(\'%08X\', 2600)))\\n }\\n //电流限值处理\\n if (obj.data.containsKey(\'overCurrrentLimit\') && obj.data.overCurrrentLimit != NULL) {\\n if (Float.valueOf(obj.data.overCurrrentLimit) > 0.000 && Float.valueOf(obj.data.overCurrrentLimit) < 80.000) {\\n let hI = String.format(\'%08X\', Integer.valueOf((Float.valueOf(obj.data.overCurrrentLimit) * 1000).toFixed(0)))\\n str += reverseStr(dataplus(hI))\\n }\\n //如果电流限值不在范围内,补默认限值80A\\n else {\\n str += reverseStr(dataplus(String.format(\'%08X\', 80000)))\\n }\\n }\\n //如果不填写电流限值,默认80000\\n else {\\n str += reverseStr(dataplus(String.format(\'%08X\', 80000)))\\n }\\n //加倍率,默认1\\n str += \'34333333\'\\n let check = check_CS(str)\\n str = str + check + \'16\'\\n return str.toLowerCase()\\n }\\n }\\n //售电\\n if (obj.function == \'recharge\') {\\n if (obj.data.meterNo.length() == 12) {\\n let str = \'68\' + reverseStr(obj.data.meterNo) + \'6804103433333335333333\'\\n str += reverseStr(dataplus(String.format(\'%08X\', (Integer.valueOf(obj.data.rechargeData)) * 100)))\\n\\n if (obj.data.containsKey(\'rechargeCount\')) {\\n str += reverseStr(dataplus(String.format(\'%08X\', obj.data.rechargeCount)))\\n } else {\\n str += \'34333333\'\\n }\\n\\n let check = check_CS(str)\\n str = str + check + \'16\'\\n return str.toLowerCase()\\n }\\n }\\n //测试\\n if (obj.function == \\\"cmd\\\") {\\n let cmdData = obj.data.cmdData\\n return cmdData\\n }\\n //读取信号强度CSQ\\n if (obj.function == \\\"getCSQ\\\") {\\n let cmdData = \'727270632C676574637371\'\\n return cmdData\\n }\\n //读取物联网卡ICCID\\n if (obj.function == \\\"getICCID\\\") {\\n let cmdData = \'727270632C6765746963636964\'\\n return cmdData\\n }\\n}\",\"provider\":\"abcxassxnanahsman\",\"supportMethods\":[\"encode\",\"preDecode\",\"decode\"]}', '{}'); -INSERT INTO `iot_device_protocol` (`id`, `name`, `description`, `state`, `type`, `configuration`, `example`) VALUES ('abcxzxzxzxs', '智能插座', NULL, 1, 'magic', '{\"needBs4Decode\":false,\"location\":\"\\nimport log;\\n\\nvar url=\\\"\\\";\\n\\nvar post = (url,body) =>{\\n \\n}\\n\\nvar encode = payload => {\\n var dt=toJson(payload)\\n dt.dxxc=randomSign();\\n return dt;\\n}\\n\\n//解码\\nvar decode = payload => {\\n var result = []\\n log.info(\\\"编解码收到消息={}\\\",payload)\\n var dt=toJson(payload)\\n var propertiesObj = {\\n \\\"messageType\\\": \\\"PROPERTIES\\\",\\n \\\"properties\\\": {}\\n }\\n //设置属性\\n propertiesObj.properties=dt\\n propertiesObj.properties.sn=randomSign()\\n //设置回复\\n propertiesObj.replyPayload=\\\"xzzxc\\\"+randomSign()\\n propertiesObj.downTopic=\\\"$thing/down/681c0775c2dc427d0480ab5f/cz001923\\\"\\n var event={\\n \\\"messageType\\\": \\\"EVENT\\\",\\n \\\"event\\\":\\\"batteryRestore\\\",\\n \\\"properties\\\": {\\n // \\\"battery\\\":100\\n }\\n }\\n var lowBatteryAlarm={\\n \\\"messageType\\\": \\\"EVENT\\\",\\n \\\"event\\\":\\\"lowBatteryAlarm\\\",\\n \\\"properties\\\": {\\n //\\\"csq\\\":29\\n }\\n }\\n result.push(propertiesObj)\\n result.push(event)\\n result.push(lowBatteryAlarm)\\n return result;\\n}\\n\\n//设备增加\\nvar add = payload => {\\n var da=post(url,payload)\\n var rs={\\n \\\"code\\\":0,\\n \\\"msg\\\":\\\"success\\\",\\n \\\"codec\\\":\\\"add\\\",\\n \\\"codec\\\":da\\n }\\n return rs;\\n}\\n\\n//设备更新\\nvar update = payload => {\\n var da=post(url,payload)\\n var rs={\\n \\\"code\\\":0,\\n \\\"msg\\\":\\\"success\\\",\\n \\\"codec\\\":\\\"update\\\",\\n \\\"codec\\\":da\\n }\\n return rs;\\n}\\n\\n//设备查询\\nvar query = payload => {\\n var da=post(url,payload)\\n var rs={\\n \\\"code\\\":0,\\n \\\"req\\\":0,\\n \\\"msg\\\":\\\"success\\\",\\n \\\"codec\\\":\\\"query\\\",\\n \\\"codec\\\":da\\n }\\n return rs;\\n}\\n\\n//功能调用\\nvar function = payload => {\\n var da=post(url,payload)\\n var rs={\\n \\\"code\\\":0,\\n \\\"msg\\\":\\\"success\\\",\\n \\\"codec\\\":\\\"function\\\",\\n \\\"codec\\\":da\\n }\\n return rs;\\n}\\n\\n\",\"provider\":\"681c0775c2dc427d0480ab5f\",\"supportMethods\":[\"encode\",\"add\",\"function\",\"query\",\"update\",\"decode\"]}', NULL); -COMMIT; - --- ---------------------------- --- Table structure for iot_device_rule_log --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_rule_log`; -CREATE TABLE `iot_device_rule_log` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `c_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '业务ID', - `c_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '业务名称', - `c_status` tinyint unsigned DEFAULT NULL COMMENT '执行状态:0-有失败、1-成功,2-失败', - `c_type` tinyint unsigned DEFAULT NULL COMMENT '1-场景联动,2-数据流转', - `conditions` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '条件', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin, - `create_time` datetime DEFAULT NULL, - `update_time` datetime DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_cid` (`c_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=347 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of iot_device_rule_log --- ---------------------------- -BEGIN; -INSERT INTO `iot_device_rule_log` (`id`, `c_id`, `c_name`, `c_status`, `c_type`, `conditions`, `content`, `create_time`, `update_time`) VALUES (332, '63', '联动', 1, 1, '系统自动', '[{\"trigger\":\"notice\",\"target\":\"3\",\"targetName\":\"Aleo的验证模版\",\"result\":{\"receivers\":\"\",\"content\":\"尊敬的用户你好,设备deviceId=ov00014117,设备名称=潜江雅园1号楼底商店铺产生事件【batteryRestore】,所属租户 请注意查看!\"},\"success\":true},{\"trigger\":\"device\",\"target\":\"ov0001411\",\"param\":[{\"id\":\"open\",\"name\":\"开关控制\",\"params\":\"0\"}],\"result\":{\"dxxc\":\"4\",\"messageType\":\"FUNCTIONS\",\"data\":{\"open\":\"0\"},\"function\":\"switchControl\"},\"success\":true},{\"trigger\":\"notice\",\"target\":\"5\",\"targetName\":\"广丰机房消息推送\",\"result\":{\"receivers\":\"\",\"content\":\"{\\\"deviceId\\\":\\\"ov00014117\\\",\\\"success\\\":\\\"ok\\\"}\"},\"success\":true}]', '2025-08-15 16:25:01', NULL); -INSERT INTO `iot_device_rule_log` (`id`, `c_id`, `c_name`, `c_status`, `c_type`, `conditions`, `content`, `create_time`, `update_time`) VALUES (333, '63', '联动', 1, 1, '系统自动', '[{\"trigger\":\"notice\",\"target\":\"3\",\"targetName\":\"Aleo的验证模版\",\"result\":{\"receivers\":\"\",\"content\":\"尊敬的用户你好,设备deviceId=ov00014117,设备名称=潜江雅园1号楼底商店铺产生事件【batteryRestore】,所属租户 请注意查看!\"},\"success\":true},{\"trigger\":\"device\",\"target\":\"ov0001411\",\"param\":[{\"id\":\"open\",\"name\":\"开关控制\",\"params\":\"0\"}],\"result\":{\"dxxc\":\"85\",\"messageType\":\"FUNCTIONS\",\"data\":{\"open\":\"0\"},\"function\":\"switchControl\"},\"success\":true},{\"trigger\":\"notice\",\"target\":\"5\",\"targetName\":\"广丰机房消息推送\",\"result\":{\"receivers\":\"\",\"content\":\"{\\\"deviceId\\\":\\\"ov00014117\\\",\\\"success\\\":\\\"ok\\\"}\"},\"success\":true}]', '2025-08-15 20:39:49', NULL); -INSERT INTO `iot_device_rule_log` (`id`, `c_id`, `c_name`, `c_status`, `c_type`, `conditions`, `content`, `create_time`, `update_time`) VALUES (334, '63', '联动', 1, 1, '系统自动', '[{\"trigger\":\"notice\",\"target\":\"3\",\"targetName\":\"Aleo的验证模版\",\"result\":{\"receivers\":\"\",\"content\":\"尊敬的用户你好,设备deviceId=ov00014117,设备名称=潜江雅园1号楼底商店铺产生事件【batteryRestore】,所属租户 请注意查看!\"},\"success\":true},{\"trigger\":\"device\",\"target\":\"ov0001411\",\"param\":[{\"id\":\"open\",\"name\":\"开关控制\",\"params\":\"0\"}],\"result\":{\"dxxc\":\"17\",\"messageType\":\"FUNCTIONS\",\"data\":{\"open\":\"0\"},\"function\":\"switchControl\"},\"success\":true},{\"trigger\":\"notice\",\"target\":\"5\",\"targetName\":\"广丰机房消息推送\",\"result\":{\"receivers\":\"\",\"content\":\"{\\\"deviceId\\\":\\\"ov00014117\\\",\\\"success\\\":\\\"ok\\\"}\"},\"success\":true}]', '2025-08-15 23:18:29', NULL); -INSERT INTO `iot_device_rule_log` (`id`, `c_id`, `c_name`, `c_status`, `c_type`, `conditions`, `content`, `create_time`, `update_time`) VALUES (335, '63', '联动', 1, 1, '系统自动', '[{\"trigger\":\"notice\",\"target\":\"3\",\"targetName\":\"Aleo的验证模版\",\"result\":{\"receivers\":\"\",\"content\":\"尊敬的用户你好,设备deviceId=ov00014117,设备名称=潜江雅园1号楼底商店铺产生事件【batteryRestore】,所属租户 请注意查看!\"},\"success\":true},{\"trigger\":\"device\",\"target\":\"ov0001411\",\"param\":[{\"id\":\"open\",\"name\":\"开关控制\",\"params\":\"0\"}],\"result\":{\"dxxc\":\"16\",\"messageType\":\"FUNCTIONS\",\"data\":{\"open\":\"0\"},\"function\":\"switchControl\"},\"success\":true},{\"trigger\":\"notice\",\"target\":\"5\",\"targetName\":\"广丰机房消息推送\",\"result\":{\"receivers\":\"\",\"content\":\"{\\\"deviceId\\\":\\\"ov00014117\\\",\\\"success\\\":\\\"ok\\\"}\"},\"success\":true}]', '2025-08-15 23:18:29', NULL); -INSERT INTO `iot_device_rule_log` (`id`, `c_id`, `c_name`, `c_status`, `c_type`, `conditions`, `content`, `create_time`, `update_time`) VALUES (336, '63', '联动', 1, 1, '系统自动', '[{\"trigger\":\"notice\",\"target\":\"3\",\"targetName\":\"Aleo的验证模版\",\"result\":{\"receivers\":\"\",\"content\":\"尊敬的用户你好,设备deviceId=ov00014117,设备名称=潜江雅园1号楼底商店铺产生事件【batteryRestore】,所属租户 请注意查看!\"},\"success\":true},{\"trigger\":\"device\",\"target\":\"ov0001411\",\"param\":[{\"id\":\"open\",\"name\":\"开关控制\",\"params\":\"0\"}],\"result\":{\"dxxc\":\"26\",\"messageType\":\"FUNCTIONS\",\"data\":{\"open\":\"0\"},\"function\":\"switchControl\"},\"success\":true},{\"trigger\":\"notice\",\"target\":\"5\",\"targetName\":\"广丰机房消息推送\",\"result\":{\"receivers\":\"\",\"content\":\"{\\\"deviceId\\\":\\\"ov00014117\\\",\\\"success\\\":\\\"ok\\\"}\"},\"success\":true}]', '2025-08-16 11:53:24', NULL); -INSERT INTO `iot_device_rule_log` (`id`, `c_id`, `c_name`, `c_status`, `c_type`, `conditions`, `content`, `create_time`, `update_time`) VALUES (337, '63', '联动', 1, 1, '系统自动', '[{\"trigger\":\"notice\",\"target\":\"3\",\"targetName\":\"Aleo的验证模版\",\"result\":{\"receivers\":\"\",\"content\":\"尊敬的用户你好,设备deviceId=ov00014117,设备名称=潜江雅园1号楼底商店铺产生事件【batteryRestore】,所属租户 请注意查看!\"},\"success\":true},{\"trigger\":\"device\",\"target\":\"ov0001411\",\"param\":[{\"id\":\"open\",\"name\":\"开关控制\",\"params\":\"0\"}],\"result\":{\"dxxc\":\"10\",\"messageType\":\"FUNCTIONS\",\"data\":{\"open\":\"0\"},\"function\":\"switchControl\"},\"success\":true},{\"trigger\":\"notice\",\"target\":\"5\",\"targetName\":\"广丰机房消息推送\",\"result\":{\"receivers\":\"\",\"content\":\"{\\\"deviceId\\\":\\\"ov00014117\\\",\\\"success\\\":\\\"ok\\\"}\"},\"success\":true}]', '2025-08-16 13:55:56', NULL); -INSERT INTO `iot_device_rule_log` (`id`, `c_id`, `c_name`, `c_status`, `c_type`, `conditions`, `content`, `create_time`, `update_time`) VALUES (338, '63', '联动', 1, 1, '系统自动', '[{\"trigger\":\"notice\",\"target\":\"3\",\"targetName\":\"Aleo的验证模版\",\"result\":{\"content\":\"尊敬的用户你好,设备deviceId=ov00014117,设备名称=潜江雅园1号楼底商店铺产生事件【batteryRestore】,所属租户 请注意查看!\",\"receivers\":\"\"},\"success\":true},{\"trigger\":\"device\",\"target\":\"ov0001411\",\"param\":[{\"id\":\"open\",\"name\":\"开关控制\",\"params\":\"0\"}],\"result\":{\"dxxc\":\"4\",\"messageType\":\"FUNCTIONS\",\"data\":{\"open\":\"0\"},\"function\":\"switchControl\"},\"success\":true},{\"trigger\":\"notice\",\"target\":\"5\",\"targetName\":\"广丰机房消息推送\",\"result\":{\"content\":\"{\\\"deviceId\\\":\\\"ov00014117\\\",\\\"success\\\":\\\"ok\\\"}\",\"receivers\":\"\"},\"success\":true}]', '2025-08-16 16:15:19', NULL); -INSERT INTO `iot_device_rule_log` (`id`, `c_id`, `c_name`, `c_status`, `c_type`, `conditions`, `content`, `create_time`, `update_time`) VALUES (339, '63', '联动', 1, 1, '系统自动', '[{\"trigger\":\"notice\",\"target\":\"3\",\"targetName\":\"Aleo的验证模版\",\"result\":{\"content\":\"尊敬的用户你好,设备deviceId=ov00014117,设备名称=潜江雅园1号楼底商店铺产生事件【batteryRestore】,所属租户 请注意查看!\",\"receivers\":\"\"},\"success\":true},{\"trigger\":\"device\",\"target\":\"ov0001411\",\"param\":[{\"id\":\"open\",\"name\":\"开关控制\",\"params\":\"0\"}],\"result\":{\"dxxc\":\"4\",\"messageType\":\"FUNCTIONS\",\"data\":{\"open\":\"0\"},\"function\":\"switchControl\"},\"success\":true},{\"trigger\":\"notice\",\"target\":\"5\",\"targetName\":\"广丰机房消息推送\",\"result\":{\"content\":\"{\\\"deviceId\\\":\\\"ov00014117\\\",\\\"success\\\":\\\"ok\\\"}\",\"receivers\":\"\"},\"success\":true}]', '2025-08-16 21:14:36', NULL); -INSERT INTO `iot_device_rule_log` (`id`, `c_id`, `c_name`, `c_status`, `c_type`, `conditions`, `content`, `create_time`, `update_time`) VALUES (340, '63', '联动', 1, 1, '系统自动', '[{\"trigger\":\"notice\",\"target\":\"3\",\"targetName\":\"Aleo的验证模版\",\"result\":{\"content\":\"尊敬的用户你好,设备deviceId=ov00014117,设备名称=潜江雅园1号楼底商店铺产生事件【batteryRestore】,所属租户 请注意查看!\",\"receivers\":\"\"},\"success\":true},{\"trigger\":\"device\",\"target\":\"ov0001411\",\"param\":[{\"id\":\"open\",\"name\":\"开关控制\",\"params\":\"0\"}],\"result\":{\"dxxc\":\"4\",\"messageType\":\"FUNCTIONS\",\"data\":{\"open\":\"0\"},\"function\":\"switchControl\"},\"success\":true},{\"trigger\":\"notice\",\"target\":\"5\",\"targetName\":\"广丰机房消息推送\",\"result\":{\"content\":\"{\\\"deviceId\\\":\\\"ov00014117\\\",\\\"success\\\":\\\"ok\\\"}\",\"receivers\":\"\"},\"success\":true}]', '2025-08-17 14:29:35', NULL); -INSERT INTO `iot_device_rule_log` (`id`, `c_id`, `c_name`, `c_status`, `c_type`, `conditions`, `content`, `create_time`, `update_time`) VALUES (341, '63', '联动', 1, 1, '手动操作', '[{\"trigger\":\"notice\",\"target\":\"3\",\"targetName\":\"Aleo的验证模版\",\"result\":{\"content\":\"尊敬的用户你好,设备deviceId=,设备名称=产生事件【】,所属租户 请注意查看!\",\"receivers\":\"\"},\"success\":true},{\"trigger\":\"device\",\"target\":\"ov0001411\",\"param\":[{\"id\":\"open\",\"name\":\"开关控制\",\"params\":\"0\"}],\"result\":{\"msg\":\"设备可能不在线\"},\"success\":true},{\"trigger\":\"notice\",\"target\":\"5\",\"targetName\":\"广丰机房消息推送\",\"result\":{\"content\":\"{\\\"deviceId\\\":\\\"\\\",\\\"success\\\":\\\"ok\\\"}\",\"receivers\":\"\"},\"success\":true}]', '2025-08-20 09:30:22', NULL); -INSERT INTO `iot_device_rule_log` (`id`, `c_id`, `c_name`, `c_status`, `c_type`, `conditions`, `content`, `create_time`, `update_time`) VALUES (342, '65', '01', 1, 1, '手动操作', '[{\"trigger\":\"device\",\"target\":\"ov00014117\",\"param\":[{\"id\":\"open\",\"name\":\"开关控制\",\"params\":\"0\"}],\"result\":{\"msg\":\"设备可能不在线\"},\"success\":true}]', '2025-08-26 11:16:33', NULL); -INSERT INTO `iot_device_rule_log` (`id`, `c_id`, `c_name`, `c_status`, `c_type`, `conditions`, `content`, `create_time`, `update_time`) VALUES (343, '65', '01', 1, 1, '手动操作', '[{\"trigger\":\"device\",\"target\":\"ov00014117\",\"param\":[{\"id\":\"open\",\"name\":\"开关控制\",\"params\":\"0\"}],\"result\":{\"msg\":\"设备可能不在线\"},\"success\":true}]', '2025-08-26 11:16:35', NULL); -INSERT INTO `iot_device_rule_log` (`id`, `c_id`, `c_name`, `c_status`, `c_type`, `conditions`, `content`, `create_time`, `update_time`) VALUES (344, '63', '联动', 1, 1, '系统自动', '[{\"trigger\":\"notice\",\"target\":\"3\",\"targetName\":\"Aleo的验证模版\",\"result\":{\"content\":\"尊敬的用户你好,设备deviceId=ov00014117,设备名称=潜江雅园1号楼底商店铺产生事件【batteryRestore】,所属租户 请注意查看!\",\"receivers\":\"\"},\"success\":true},{\"trigger\":\"device\",\"target\":\"ov0001411\",\"param\":[{\"id\":\"open\",\"name\":\"开关控制\",\"params\":\"0\"}],\"result\":{\"dxxc\":\"926\",\"messageType\":\"FUNCTIONS\",\"data\":{\"open\":\"0\"},\"function\":\"switchControl\"},\"success\":true},{\"trigger\":\"notice\",\"target\":\"5\",\"targetName\":\"广丰机房消息推送\",\"result\":{\"content\":\"{\\\"deviceId\\\":\\\"ov00014117\\\",\\\"success\\\":\\\"ok\\\"}\",\"receivers\":\"\"},\"success\":true}]', '2025-08-26 13:50:32', NULL); -INSERT INTO `iot_device_rule_log` (`id`, `c_id`, `c_name`, `c_status`, `c_type`, `conditions`, `content`, `create_time`, `update_time`) VALUES (345, '63', '联动', 1, 1, '手动操作', '[{\"trigger\":\"notice\",\"target\":\"3\",\"targetName\":\"Aleo的验证模版\",\"result\":{\"content\":\"尊敬的用户你好,设备deviceId=,设备名称=产生事件【】,所属租户 请注意查看!\",\"receivers\":\"\"},\"success\":true},{\"trigger\":\"device\",\"target\":\"ov0001411\",\"param\":[{\"id\":\"open\",\"name\":\"开关控制\",\"params\":\"0\"}],\"result\":{\"msg\":\"设备可能不在线\"},\"success\":true},{\"trigger\":\"notice\",\"target\":\"5\",\"targetName\":\"广丰机房消息推送\",\"result\":{\"content\":\"{\\\"deviceId\\\":\\\"\\\",\\\"success\\\":\\\"ok\\\"}\",\"receivers\":\"\"},\"success\":true}]', '2025-08-26 15:17:05', NULL); -INSERT INTO `iot_device_rule_log` (`id`, `c_id`, `c_name`, `c_status`, `c_type`, `conditions`, `content`, `create_time`, `update_time`) VALUES (346, '63', '联动', 1, 1, '手动操作', '[{\"trigger\":\"notice\",\"target\":\"3\",\"targetName\":\"Aleo的验证模版\",\"result\":{\"content\":\"尊敬的用户你好,设备deviceId=,设备名称=产生事件【】,所属租户 请注意查看!\",\"receivers\":\"\"},\"success\":true},{\"trigger\":\"device\",\"target\":\"ov0001411\",\"param\":[{\"id\":\"open\",\"name\":\"开关控制\",\"params\":\"0\"}],\"result\":{\"msg\":\"设备可能不在线\"},\"success\":true},{\"trigger\":\"notice\",\"target\":\"5\",\"targetName\":\"广丰机房消息推送\",\"result\":{\"content\":\"{\\\"deviceId\\\":\\\"\\\",\\\"success\\\":\\\"ok\\\"}\",\"receivers\":\"\"},\"success\":true}]', '2025-08-26 16:31:07', NULL); -COMMIT; - --- ---------------------------- --- Table structure for iot_device_shadow --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_shadow`; -CREATE TABLE `iot_device_shadow` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '本平台设备唯一标识符', - `product_key` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '产品Key', - `device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '设备自身序号', - `ext_device_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '第三方平台设备ID唯一标识符', - `active_time` datetime DEFAULT NULL COMMENT '激活时间', - `online_time` datetime DEFAULT NULL COMMENT '在线时间', - `last_time` datetime DEFAULT NULL COMMENT '最后通信时间', - `metadata` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '影子数据', - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '实例名称', - `update_date` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`id`) USING BTREE, - UNIQUE KEY `dev_iot_id` (`iot_id`) USING BTREE, - KEY `idx_pk_did` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='设备影子表'; - --- ---------------------------- --- Records of iot_device_shadow --- ---------------------------- -BEGIN; -INSERT INTO `iot_device_shadow` (`id`, `iot_id`, `product_key`, `device_id`, `ext_device_id`, `active_time`, `online_time`, `last_time`, `metadata`, `instance`, `update_date`) VALUES (1, '8b0679d5b2054c3389994a905998ccaa', '681c0775c2dc427d0480ab5f', 'so0000132', NULL, '2025-07-26 12:22:54', '2025-07-26 12:22:54', '2025-08-02 19:42:27', '{\"state\":{\"desired\":{},\"reported\":{\"battery\":\"99\",\"ecl\":\"30\",\"switchStatus\":0,\"sn\":\"44\"}},\"metadata\":{\"desired\":{},\"reported\":{\"battery\":{\"timestamp\":1754134946},\"ecl\":{\"timestamp\":1754134946},\"switchStatus\":{\"timestamp\":1754134946},\"sn\":{\"timestamp\":1754134946}}},\"timestamp\":1754134946,\"version\":167}', '0', '2025-08-02 19:42:27'); -INSERT INTO `iot_device_shadow` (`id`, `iot_id`, `product_key`, `device_id`, `ext_device_id`, `active_time`, `online_time`, `last_time`, `metadata`, `instance`, `update_date`) VALUES (2, '903071db080c4267900a6ab1e159b5a1', '681c0775c2dc427d0480ab5f', 'xh0000101', NULL, '2025-07-26 12:22:59', '2025-07-26 12:22:59', '2025-08-02 19:42:27', '{\"state\":{\"desired\":{},\"reported\":{\"battery\":\"21\",\"ecl\":\"11\",\"switchStatus\":0,\"sn\":\"46\"}},\"metadata\":{\"desired\":{},\"reported\":{\"battery\":{\"timestamp\":1754134946},\"ecl\":{\"timestamp\":1754134946},\"switchStatus\":{\"timestamp\":1754134946},\"sn\":{\"timestamp\":1754134946}}},\"timestamp\":1754134946,\"version\":166}', '0', '2025-08-02 19:42:27'); -INSERT INTO `iot_device_shadow` (`id`, `iot_id`, `product_key`, `device_id`, `ext_device_id`, `active_time`, `online_time`, `last_time`, `metadata`, `instance`, `update_date`) VALUES (4, '82b178e4cff840a4b3128da81e0718d0', '681c0775c2dc427d0480ab5f', 'ov00014115', NULL, '2025-07-26 16:27:57', '2025-07-26 16:27:57', '2025-08-26 15:03:11', '{\"state\":{\"desired\":{},\"reported\":{\"battery\":\"48\",\"ecl\":\"79\",\"switchStatus\":0,\"csq\":16,\"sn\":\"29323\"}},\"metadata\":{\"desired\":{},\"reported\":{\"battery\":{\"timestamp\":1756191791},\"ecl\":{\"timestamp\":1756191791},\"switchStatus\":{\"timestamp\":1756191791},\"csq\":{\"timestamp\":1756191791},\"sn\":{\"timestamp\":1756191791}}},\"timestamp\":1756191791,\"version\":416091}', '0', '2025-08-26 15:03:11'); -INSERT INTO `iot_device_shadow` (`id`, `iot_id`, `product_key`, `device_id`, `ext_device_id`, `active_time`, `online_time`, `last_time`, `metadata`, `instance`, `update_date`) VALUES (5, '7af18836921a48e9aedbb33551032a8a', '681c0775c2dc427d0480ab5f', 'ov00014117', NULL, '2025-07-26 16:27:59', '2025-07-26 16:27:59', '2025-08-26 15:03:12', '{\"state\":{\"desired\":{},\"reported\":{\"battery\":\"75\",\"ecl\":\"83\",\"switchStatus\":1,\"csq\":9,\"sn\":\"29049\",\"current\":\"31.00\",\"power\":\"110\",\"powerState\":0,\"voltage\":\"133.8\"}},\"metadata\":{\"desired\":{},\"reported\":{\"battery\":{\"timestamp\":1756191791},\"ecl\":{\"timestamp\":1756191791},\"switchStatus\":{\"timestamp\":1756191791},\"csq\":{\"timestamp\":1756191791},\"sn\":{\"timestamp\":1756191791},\"current\":{\"timestamp\":1755272016},\"power\":{\"timestamp\":1755272016},\"powerState\":{\"timestamp\":1755250506},\"voltage\":{\"timestamp\":1755272016}}},\"timestamp\":1756191791,\"version\":414951}', '0', '2025-08-26 15:03:12'); -INSERT INTO `iot_device_shadow` (`id`, `iot_id`, `product_key`, `device_id`, `ext_device_id`, `active_time`, `online_time`, `last_time`, `metadata`, `instance`, `update_date`) VALUES (6, 'c0638ea17c5a4bcf9ad66a2a80ef0ab4', '681c0775c2dc427d0480ab5f', 'ov00014114', NULL, '2025-07-26 16:27:59', '2025-07-26 16:27:59', '2025-08-26 15:03:12', '{\"state\":{\"desired\":{},\"reported\":{\"battery\":\"1\",\"ecl\":\"11\",\"switchStatus\":0,\"csq\":16,\"sn\":\"28983\"}},\"metadata\":{\"desired\":{},\"reported\":{\"battery\":{\"timestamp\":1756191791},\"ecl\":{\"timestamp\":1756191791},\"switchStatus\":{\"timestamp\":1756191791},\"csq\":{\"timestamp\":1756191791},\"sn\":{\"timestamp\":1756191791}}},\"timestamp\":1756191791,\"version\":415857}', '0', '2025-08-26 15:03:12'); -INSERT INTO `iot_device_shadow` (`id`, `iot_id`, `product_key`, `device_id`, `ext_device_id`, `active_time`, `online_time`, `last_time`, `metadata`, `instance`, `update_date`) VALUES (7, 'c64f520c8a2e4c9698c6c8f0521db713', '681c0775c2dc427d0480ab5f', 'ov00014112', NULL, '2025-07-26 16:28:01', '2025-07-26 16:28:01', '2025-08-26 15:03:12', '{\"state\":{\"desired\":{},\"reported\":{\"battery\":\"17\",\"ecl\":\"49\",\"switchStatus\":0,\"csq\":8,\"sn\":\"29079\"}},\"metadata\":{\"desired\":{},\"reported\":{\"battery\":{\"timestamp\":1756191791},\"ecl\":{\"timestamp\":1756191791},\"switchStatus\":{\"timestamp\":1756191791},\"csq\":{\"timestamp\":1756191791},\"sn\":{\"timestamp\":1756191791}}},\"timestamp\":1756191791,\"version\":415441}', '0', '2025-08-26 15:03:12'); -INSERT INTO `iot_device_shadow` (`id`, `iot_id`, `product_key`, `device_id`, `ext_device_id`, `active_time`, `online_time`, `last_time`, `metadata`, `instance`, `update_date`) VALUES (8, 'ab13d2f27d164648adf7d3aa6478bb09', '681c0775c2dc427d0480ab5f', 'ov00014119', NULL, '2025-07-26 16:28:03', '2025-07-26 16:28:03', '2025-08-26 15:03:11', '{\"state\":{\"desired\":{},\"reported\":{\"battery\":\"33\",\"ecl\":\"70\",\"switchStatus\":1,\"csq\":11,\"sn\":\"29443\"}},\"metadata\":{\"desired\":{},\"reported\":{\"battery\":{\"timestamp\":1756191790},\"ecl\":{\"timestamp\":1756191790},\"switchStatus\":{\"timestamp\":1756191790},\"csq\":{\"timestamp\":1756191790},\"sn\":{\"timestamp\":1756191790}}},\"timestamp\":1756191790,\"version\":413033}', '0', '2025-08-26 15:03:11'); -INSERT INTO `iot_device_shadow` (`id`, `iot_id`, `product_key`, `device_id`, `ext_device_id`, `active_time`, `online_time`, `last_time`, `metadata`, `instance`, `update_date`) VALUES (9, '52956f3a0bac430aa3f9ce2fd30f83fa', '681c0775c2dc427d0480ab5f', 'ov00014118', NULL, '2025-07-26 16:28:04', '2025-07-26 16:28:04', '2025-08-26 15:03:12', '{\"state\":{\"desired\":{},\"reported\":{\"battery\":\"65\",\"ecl\":\"94\",\"switchStatus\":1,\"csq\":21,\"sn\":\"29077\"}},\"metadata\":{\"desired\":{},\"reported\":{\"battery\":{\"timestamp\":1756191791},\"ecl\":{\"timestamp\":1756191791},\"switchStatus\":{\"timestamp\":1756191791},\"csq\":{\"timestamp\":1756191791},\"sn\":{\"timestamp\":1756191791}}},\"timestamp\":1756191791,\"version\":414834}', '0', '2025-08-26 15:03:12'); -INSERT INTO `iot_device_shadow` (`id`, `iot_id`, `product_key`, `device_id`, `ext_device_id`, `active_time`, `online_time`, `last_time`, `metadata`, `instance`, `update_date`) VALUES (10, 'd2dd545dc6b541e9b277de24a8237d4d', '681c0775c2dc427d0480ab5f', 'ov00014116', NULL, '2025-07-26 16:28:07', '2025-07-26 16:28:07', '2025-08-26 15:03:12', '{\"state\":{\"desired\":{},\"reported\":{\"battery\":\"56\",\"ecl\":\"69\",\"switchStatus\":0,\"csq\":21,\"sn\":\"29335\"}},\"metadata\":{\"desired\":{},\"reported\":{\"battery\":{\"timestamp\":1756191790},\"ecl\":{\"timestamp\":1756191790},\"switchStatus\":{\"timestamp\":1756191790},\"csq\":{\"timestamp\":1756191790},\"sn\":{\"timestamp\":1756191790}}},\"timestamp\":1756191790,\"version\":414559}', '0', '2025-08-26 15:03:12'); -INSERT INTO `iot_device_shadow` (`id`, `iot_id`, `product_key`, `device_id`, `ext_device_id`, `active_time`, `online_time`, `last_time`, `metadata`, `instance`, `update_date`) VALUES (11, '4db2d96130964fc49258e4eef0cc55f1', '681c0775c2dc427d0480ab5f', 'ov00014113', NULL, '2025-07-26 16:28:10', '2025-07-26 16:28:10', '2025-08-26 15:03:12', '{\"state\":{\"desired\":{},\"reported\":{\"battery\":\"77\",\"ecl\":\"16\",\"switchStatus\":1,\"csq\":11,\"sn\":\"29445\"}},\"metadata\":{\"desired\":{},\"reported\":{\"battery\":{\"timestamp\":1756191790},\"ecl\":{\"timestamp\":1756191790},\"switchStatus\":{\"timestamp\":1756191790},\"csq\":{\"timestamp\":1756191790},\"sn\":{\"timestamp\":1756191790}}},\"timestamp\":1756191790,\"version\":417293}', '0', '2025-08-26 15:03:12'); -INSERT INTO `iot_device_shadow` (`id`, `iot_id`, `product_key`, `device_id`, `ext_device_id`, `active_time`, `online_time`, `last_time`, `metadata`, `instance`, `update_date`) VALUES (12, '962ad84e0d12407ebad3cffbb3137e1e', '681c0775c2dc427d0480ab5f', 'ov00014111', NULL, '2025-07-26 16:28:13', '2025-07-26 16:28:13', '2025-08-26 15:03:12', '{\"state\":{\"desired\":{},\"reported\":{\"battery\":\"62\",\"ecl\":\"38\",\"switchStatus\":0,\"csq\":0,\"sn\":\"29057\"}},\"metadata\":{\"desired\":{},\"reported\":{\"battery\":{\"timestamp\":1756191791},\"ecl\":{\"timestamp\":1756191791},\"switchStatus\":{\"timestamp\":1756191791},\"csq\":{\"timestamp\":1756191791},\"sn\":{\"timestamp\":1756191791}}},\"timestamp\":1756191791,\"version\":415128}', '0', '2025-08-26 15:03:12'); -INSERT INTO `iot_device_shadow` (`id`, `iot_id`, `product_key`, `device_id`, `ext_device_id`, `active_time`, `online_time`, `last_time`, `metadata`, `instance`, `update_date`) VALUES (13, '05a9960673fd47e587b041ff1018898a', '681c0775c2dc427d0480ab5f', 'ov00014110', NULL, '2025-07-26 16:28:20', '2025-07-26 16:28:20', '2025-08-26 15:03:12', '{\"state\":{\"desired\":{},\"reported\":{\"battery\":\"57\",\"ecl\":\"79\",\"switchStatus\":1,\"csq\":23,\"sn\":\"29131\"}},\"metadata\":{\"desired\":{},\"reported\":{\"battery\":{\"timestamp\":1756191791},\"ecl\":{\"timestamp\":1756191791},\"switchStatus\":{\"timestamp\":1756191791},\"csq\":{\"timestamp\":1756191791},\"sn\":{\"timestamp\":1756191791}}},\"timestamp\":1756191791,\"version\":414100}', '0', '2025-08-26 15:03:12'); -INSERT INTO `iot_device_shadow` (`id`, `iot_id`, `product_key`, `device_id`, `ext_device_id`, `active_time`, `online_time`, `last_time`, `metadata`, `instance`, `update_date`) VALUES (14, '58479b07927342b6bd12c9dfb988e6c9', 'abcxassxnanahsman', '202411190247', NULL, '2025-07-26 23:17:11', '2025-07-26 23:17:11', '2025-07-27 14:57:01', '{\"state\":{\"desired\":{},\"reported\":{\"originalMessage\":\"684702191124206891253335c43333333333333334337a55333333333333333333333433333333333333338333334e0516\",\"meterNo\":\"202411190247\",\"meterData\":\"0.0\",\"meterPrice\":\"1.0000\",\"voltage\":\"224.7\",\"current\":\"0.000\",\"power\":\"0.0\",\"purchases\":1,\"warningPower\":\"0.00\",\"remainingAmount\":\"50.00\",\"openState\":\"1\"}},\"metadata\":{\"desired\":{},\"reported\":{\"originalMessage\":{\"timestamp\":1753599421},\"meterNo\":{\"timestamp\":1753599421},\"meterData\":{\"timestamp\":1753599421},\"meterPrice\":{\"timestamp\":1753599421},\"voltage\":{\"timestamp\":1753599421},\"current\":{\"timestamp\":1753599421},\"power\":{\"timestamp\":1753599421},\"purchases\":{\"timestamp\":1753599421},\"warningPower\":{\"timestamp\":1753599421},\"remainingAmount\":{\"timestamp\":1753599421},\"openState\":{\"timestamp\":1753599421}}},\"timestamp\":1753599421,\"version\":10}', '0', '2025-07-27 14:57:01'); -INSERT INTO `iot_device_shadow` (`id`, `iot_id`, `product_key`, `device_id`, `ext_device_id`, `active_time`, `online_time`, `last_time`, `metadata`, `instance`, `update_date`) VALUES (15, '29727447e38d49d6a9154aa2dafb47b5', '681c0775c2dc427d0480ab5f', '7g0000117', NULL, '2025-07-27 22:32:32', '2025-07-27 22:32:32', '2025-08-02 19:42:26', '{\"state\":{\"desired\":{},\"reported\":{\"messageType\":\"PROPERTIES\",\"properties\":{\"battery\":\"99\",\"ecl\":\"30\",\"switchStatus\":0},\"sn\":\"3\",\"battery\":\"99\",\"ecl\":\"30\",\"switchStatus\":0}},\"metadata\":{\"desired\":{},\"reported\":{\"messageType\":{\"timestamp\":1754134946},\"properties\":{\"timestamp\":1754134946},\"sn\":{\"timestamp\":1754134946},\"battery\":{\"timestamp\":1754134946},\"ecl\":{\"timestamp\":1754134946},\"switchStatus\":{\"timestamp\":1754134946}}},\"timestamp\":1754134946,\"version\":433}', '0', '2025-08-02 19:42:26'); -INSERT INTO `iot_device_shadow` (`id`, `iot_id`, `product_key`, `device_id`, `ext_device_id`, `active_time`, `online_time`, `last_time`, `metadata`, `instance`, `update_date`) VALUES (16, 'e33678b0ba8d48ec995c8ae9a823a6eb', '38fc80e', '00010107', NULL, '2025-07-29 12:58:47', '2025-07-29 12:58:47', '2025-08-01 17:04:29', '{\"state\":{\"desired\":{},\"reported\":{\"powerState\":\"01\",\"current\":\"15.00\",\"voltage\":\"228.8\",\"power\":\"1200\"}},\"metadata\":{\"desired\":{},\"reported\":{\"powerState\":{\"timestamp\":1754039069},\"current\":{\"timestamp\":1754039069},\"voltage\":{\"timestamp\":1754039069},\"power\":{\"timestamp\":1754039069}}},\"timestamp\":1754039069,\"version\":21}', '0', '2025-08-01 17:04:29'); -INSERT INTO `iot_device_shadow` (`id`, `iot_id`, `product_key`, `device_id`, `ext_device_id`, `active_time`, `online_time`, `last_time`, `metadata`, `instance`, `update_date`) VALUES (17, 'ff49e3ac84e54b659d6b4d31aca35554', '38fc80e', '00010108', NULL, '2025-08-01 17:03:35', '2025-08-01 17:03:35', '2025-08-01 17:03:55', '{\"state\":{\"desired\":{},\"reported\":{}},\"metadata\":{\"desired\":{},\"reported\":{}},\"timestamp\":1754039014,\"version\":1}', '0', '2025-08-01 17:03:55'); -INSERT INTO `iot_device_shadow` (`id`, `iot_id`, `product_key`, `device_id`, `ext_device_id`, `active_time`, `online_time`, `last_time`, `metadata`, `instance`, `update_date`) VALUES (18, '0847c610465e41a38839daab0fe36af6', '38fc80e', '00020107', NULL, '2025-08-01 17:09:25', '2025-08-01 17:09:25', '2025-08-10 08:51:12', '{\"state\":{\"desired\":{},\"reported\":{\"powerState\":\"00\",\"current\":\"0.00\",\"voltage\":\"0.0\",\"power\":\"0\"}},\"metadata\":{\"desired\":{},\"reported\":{\"powerState\":{\"timestamp\":1754787071},\"current\":{\"timestamp\":1754787071},\"voltage\":{\"timestamp\":1754787071},\"power\":{\"timestamp\":1754787071}}},\"timestamp\":1754787071,\"version\":58}', '0', '2025-08-10 08:51:12'); -INSERT INTO `iot_device_shadow` (`id`, `iot_id`, `product_key`, `device_id`, `ext_device_id`, `active_time`, `online_time`, `last_time`, `metadata`, `instance`, `update_date`) VALUES (19, '8019b103c9c54ab2a59153b99b301c5b', '38fc80e', '00050107', NULL, '2025-08-01 17:52:39', '2025-08-01 17:52:39', '2025-08-03 08:33:39', '{\"state\":{\"desired\":{},\"reported\":{\"powerState\":\"01\",\"current\":\"40.00\",\"voltage\":\"228.8\",\"power\":\"3904\"}},\"metadata\":{\"desired\":{},\"reported\":{\"powerState\":{\"timestamp\":1754181219},\"current\":{\"timestamp\":1754181219},\"voltage\":{\"timestamp\":1754181219},\"power\":{\"timestamp\":1754181219}}},\"timestamp\":1754181219,\"version\":13758}', '0', '2025-08-03 08:33:39'); -INSERT INTO `iot_device_shadow` (`id`, `iot_id`, `product_key`, `device_id`, `ext_device_id`, `active_time`, `online_time`, `last_time`, `metadata`, `instance`, `update_date`) VALUES (20, '77ff448819014018b4566d99cd0b11cc', '688cd92fdb9e0158872f4aa9', 'docsmqtt001', NULL, '2025-08-02 00:01:33', '2025-08-02 00:01:33', '2025-08-02 08:27:23', '{\"state\":{\"desired\":{},\"reported\":{\"powerState\":0,\"current\":\"30.00\",\"voltage\":\"221.8\",\"power\":\"600\"}},\"metadata\":{\"desired\":{},\"reported\":{\"powerState\":{\"timestamp\":1754094443},\"current\":{\"timestamp\":1754094443},\"voltage\":{\"timestamp\":1754094443},\"power\":{\"timestamp\":1754094443}}},\"timestamp\":1754094443,\"version\":3}', '0', '2025-08-02 08:27:23'); -INSERT INTO `iot_device_shadow` (`id`, `iot_id`, `product_key`, `device_id`, `ext_device_id`, `active_time`, `online_time`, `last_time`, `metadata`, `instance`, `update_date`) VALUES (21, '828f2a663ba54f1a970904d966cd6b56', '688cd92fdb9e0158872f4aa9', 'docsmqtt002', NULL, '2025-08-02 08:36:44', '2025-08-02 08:36:44', '2025-08-02 08:49:11', '{\"state\":{\"desired\":{},\"reported\":{\"powerState\":1,\"current\":\"31.00\",\"voltage\":\"122.8\",\"power\":\"129\",\"messageType\":\"EVENT\",\"event\":\"overload\"}},\"metadata\":{\"desired\":{},\"reported\":{\"powerState\":{\"timestamp\":1754095033},\"current\":{\"timestamp\":1754095033},\"voltage\":{\"timestamp\":1754095033},\"power\":{\"timestamp\":1754095033},\"messageType\":{\"timestamp\":1754095751},\"event\":{\"timestamp\":1754095751}}},\"timestamp\":1754095751,\"version\":8}', '0', '2025-08-02 08:49:11'); -INSERT INTO `iot_device_shadow` (`id`, `iot_id`, `product_key`, `device_id`, `ext_device_id`, `active_time`, `online_time`, `last_time`, `metadata`, `instance`, `update_date`) VALUES (22, '0ebb38fd253c4c4b8bf9a3eafc4ddba0', '688cd92fdb9e0158872f4aa9', 'docsmqtt003', NULL, '2025-08-02 08:53:42', '2025-08-02 08:53:42', '2025-08-02 08:54:48', '{\"state\":{\"desired\":{},\"reported\":{\"powerState\":1,\"current\":\"31.00\",\"voltage\":\"122.8\",\"power\":\"129\"}},\"metadata\":{\"desired\":{},\"reported\":{\"powerState\":{\"timestamp\":1754096060},\"current\":{\"timestamp\":1754096060},\"voltage\":{\"timestamp\":1754096060},\"power\":{\"timestamp\":1754096060}}},\"timestamp\":1754096060,\"version\":2}', '0', '2025-08-02 08:54:48'); -INSERT INTO `iot_device_shadow` (`id`, `iot_id`, `product_key`, `device_id`, `ext_device_id`, `active_time`, `online_time`, `last_time`, `metadata`, `instance`, `update_date`) VALUES (23, '1ba1da4813164c0faedd99279dddb670', '688cd92fdb9e0158872f4aa9', 'docsmqtt004', NULL, '2025-08-02 08:57:14', '2025-08-02 08:57:14', '2025-08-12 23:11:59', '{\"state\":{\"desired\":{},\"reported\":{\"current\":\"36.00\",\"power\":\"129\",\"powerState\":1,\"voltage\":\"122.8\"}},\"metadata\":{\"desired\":{},\"reported\":{\"current\":{\"timestamp\":1755011518},\"power\":{\"timestamp\":1755011518},\"powerState\":{\"timestamp\":1755011518},\"voltage\":{\"timestamp\":1755011518}}},\"timestamp\":1755011518,\"version\":62}', '0', '2025-08-12 23:11:59'); -INSERT INTO `iot_device_shadow` (`id`, `iot_id`, `product_key`, `device_id`, `ext_device_id`, `active_time`, `online_time`, `last_time`, `metadata`, `instance`, `update_date`) VALUES (24, 'd9331ad5d9ef49c6ad0b51ab3c92681d', 'abcxassxnanahsman', '202507070079', NULL, '2025-08-10 08:53:18', '2025-08-10 08:53:18', '2025-08-15 11:02:44', '{\"state\":{\"desired\":{},\"reported\":{\"originalMessage\":\"687900070725206891253335c43339333333333333337555333333333333333333333333333333333333333333334ec916\",\"meterNo\":\"202507070079\",\"meterData\":\"0.0\",\"meterPrice\":\"0.0000\",\"voltage\":\"224.2\",\"current\":\"0.000\",\"power\":\"0.0\",\"purchases\":0,\"warningPower\":\"0.00\",\"remainingAmount\":\"0.00\",\"openState\":\"1\"}},\"metadata\":{\"desired\":{},\"reported\":{\"originalMessage\":{\"timestamp\":1755226963},\"meterNo\":{\"timestamp\":1755226963},\"meterData\":{\"timestamp\":1755226963},\"meterPrice\":{\"timestamp\":1755226963},\"voltage\":{\"timestamp\":1755226963},\"current\":{\"timestamp\":1755226963},\"power\":{\"timestamp\":1755226963},\"purchases\":{\"timestamp\":1755226963},\"warningPower\":{\"timestamp\":1755226963},\"remainingAmount\":{\"timestamp\":1755226963},\"openState\":{\"timestamp\":1755226963}}},\"timestamp\":1755226963,\"version\":24}', '0', '2025-08-15 11:02:44'); -INSERT INTO `iot_device_shadow` (`id`, `iot_id`, `product_key`, `device_id`, `ext_device_id`, `active_time`, `online_time`, `last_time`, `metadata`, `instance`, `update_date`) VALUES (27, '9cedf37c74ba418c8dca64a2c23a612f', '681c0775c2dc427d0480ab5f', 'ov0000004', NULL, '2025-08-17 16:39:49', '2025-08-17 16:39:49', '2025-08-26 21:31:56', '{\"state\":{\"desired\":{},\"reported\":{\"battery\":86,\"csq\":32,\"ecl\":\"12\",\"switchStatus\":0,\"sn\":\"18\"}},\"metadata\":{\"desired\":{},\"reported\":{\"battery\":{\"timestamp\":1756215116},\"csq\":{\"timestamp\":1756215116},\"ecl\":{\"timestamp\":1756215116},\"switchStatus\":{\"timestamp\":1756215116},\"sn\":{\"timestamp\":1756215116}}},\"timestamp\":1756215116,\"version\":23}', '0', '2025-08-26 21:31:56'); -COMMIT; - --- ---------------------------- --- Table structure for iot_device_statistics --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_statistics`; -CREATE TABLE `iot_device_statistics` ( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', - `stat_date` date NOT NULL COMMENT '统计日期', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '产品Key', - `total_devices` bigint NOT NULL DEFAULT '0' COMMENT '设备总数', - `online_devices` bigint NOT NULL DEFAULT '0' COMMENT '在线设备数', - `offline_devices` bigint NOT NULL DEFAULT '0' COMMENT '离线设备数', - `new_devices` bigint NOT NULL DEFAULT '0' COMMENT '新增设备数', - `active_devices` bigint NOT NULL DEFAULT '0' COMMENT '活跃设备数(当天有消息的设备)', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`id`) USING BTREE, - UNIQUE KEY `uk_date_product` (`stat_date`,`product_key`) USING BTREE, - KEY `idx_stat_date` (`stat_date`) USING BTREE, - KEY `idx_product_key` (`product_key`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='设备统计表'; - --- ---------------------------- --- Records of iot_device_statistics --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_subscribe --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_subscribe`; -CREATE TABLE `iot_device_subscribe` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `iot_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '设备唯一标识', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '产品唯一标识', - `device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - `msg_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '消息类别:属性(PROPERTIES),指令(REPLY),事件(EVENT),上下线(EVENT:online,offline),所有(ALL)', - `sub_type` enum('DEVICE','PRODUCT') CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '订阅级别:设备级(DEVICE),产品级(PRODUCT)', - `url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '订阅地址', - `topic` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '主题', - `create_date` datetime DEFAULT NULL COMMENT '创建时间', - `creater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '创建人', - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '实例编号', - `enabled` tinyint(1) DEFAULT '1' COMMENT '是否启用', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_iot_id` (`iot_id`) USING BTREE, - KEY `iot_pd` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='设备订阅'; - --- ---------------------------- --- Records of iot_device_subscribe --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_device_tags --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_tags`; -CREATE TABLE `iot_device_tags` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `product_key` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, - `device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, - `iot_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `create_time` bigint DEFAULT NULL, - `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, - `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, - `type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `value` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0', - PRIMARY KEY (`id`) USING BTREE, - KEY `dev_iot_id_idx` (`iot_id`) USING BTREE, - KEY `dev_tag_idx` (`key`,`value`) USING BTREE, - KEY `idx_pk_did` (`product_key`,`device_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=53 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='设备标签表'; - --- ---------------------------- --- Records of iot_device_tags --- ---------------------------- -BEGIN; -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (2, '681c0775c2dc427d0480ab5f', '7g0000117', '271232e01d17496f86ab925bdc56eda2', NULL, '1楼消控室(烟感)', NULL, 'devGroup', '1949364879098044416', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (3, '681c0775c2dc427d0480ab5f', '7g0000117', '9217646384fd46b8816359f03d5802ac', NULL, '1楼消控室(烟感)', NULL, 'devGroup', '1949364879098044416', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (4, '681c0775c2dc427d0480ab5f', '7g0000117', '433d68787b2b4fd08dec8fa8ffc60f79', NULL, '1楼消控室(烟感)', NULL, 'devGroup', '1949364879098044416', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (5, '681c0775c2dc427d0480ab5f', '7g0000117', '58479b07927342b6bd12c9dfb988e6c9', NULL, '1楼消控室(烟感)', NULL, 'devGroup', '1949364879098044416', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (6, '681c0775c2dc427d0480ab5f', '7g0000117', '29727447e38d49d6a9154aa2dafb47b5', NULL, '1楼消控室(烟感)', NULL, 'devGroup', '1949364879098044416', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (7, '681c0775c2dc427d0480ab5f', '7g0000117', '8b0679d5b2054c3389994a905998ccaa', NULL, '1楼消控室(烟感)', NULL, 'devGroup', '1949364879098044416', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (8, '681c0775c2dc427d0480ab5f', '7g0000117', '903071db080c4267900a6ab1e159b5a1', NULL, '1楼消控室(烟感)', NULL, 'devGroup', '1949364879098044416', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (9, '681c0775c2dc427d0480ab5f', '7g0000117', 'c23296b6e84b489290a33a0f0bf33b17', NULL, '1楼消控室(烟感)', NULL, 'devGroup', '1949364879098044416', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (11, '681c0775c2dc427d0480ab5f', '7g0000117', 'fa1b39fb287a42dd8a0f2cbae0d698d2', NULL, '牛逼分组', NULL, 'devGroup', '1950447085375692800', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (13, '681c0775c2dc427d0480ab5f', '7g0000117', '9217646384fd46b8816359f03d5802ac', NULL, '牛逼分组', NULL, 'devGroup', '1950447085375692800', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (14, '681c0775c2dc427d0480ab5f', '7g0000117', '433d68787b2b4fd08dec8fa8ffc60f79', NULL, '牛逼分组', NULL, 'devGroup', '1950447085375692800', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (15, '681c0775c2dc427d0480ab5f', '7g0000117', '58479b07927342b6bd12c9dfb988e6c9', NULL, '牛逼分组', NULL, 'devGroup', '1950447085375692800', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (16, '681c0775c2dc427d0480ab5f', '7g0000117', '29727447e38d49d6a9154aa2dafb47b5', NULL, '牛逼分组', NULL, 'devGroup', '1950447085375692800', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (17, '681c0775c2dc427d0480ab5f', '7g0000117', '8b0679d5b2054c3389994a905998ccaa', NULL, '牛逼分组', NULL, 'devGroup', '1950447085375692800', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (18, '681c0775c2dc427d0480ab5f', '7g0000117', '903071db080c4267900a6ab1e159b5a1', NULL, '牛逼分组', NULL, 'devGroup', '1950447085375692800', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (19, '681c0775c2dc427d0480ab5f', '7g0000117', 'c23296b6e84b489290a33a0f0bf33b17', NULL, '牛逼分组', NULL, 'devGroup', '1950447085375692800', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (20, '681c0775c2dc427d0480ab5f', '7g0000117', 'e8517d0ff4984431b2f0874e5ae8a29e', NULL, '牛逼分组', NULL, 'devGroup', '1950447085375692800', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (21, '681c0775c2dc427d0480ab5f', '7g0000117', '4db2d96130964fc49258e4eef0cc55f1', NULL, '牛逼分组', NULL, 'devGroup', '1950447085375692800', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (22, '681c0775c2dc427d0480ab5f', '7g0000117', 'd2dd545dc6b541e9b277de24a8237d4d', NULL, '牛逼分组', NULL, 'devGroup', '1950447085375692800', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (23, '681c0775c2dc427d0480ab5f', '7g0000117', '05a9960673fd47e587b041ff1018898a', NULL, '牛逼分组', NULL, 'devGroup', '1950447085375692800', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (24, '681c0775c2dc427d0480ab5f', '7g0000117', 'c0638ea17c5a4bcf9ad66a2a80ef0ab4', NULL, '牛逼分组', NULL, 'devGroup', '1950447085375692800', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (25, '681c0775c2dc427d0480ab5f', '7g0000117', '52956f3a0bac430aa3f9ce2fd30f83fa', NULL, '牛逼分组', NULL, 'devGroup', '1950447085375692800', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (26, '681c0775c2dc427d0480ab5f', '7g0000117', '82b178e4cff840a4b3128da81e0718d0', NULL, '牛逼分组', NULL, 'devGroup', '1950447085375692800', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (27, '681c0775c2dc427d0480ab5f', '7g0000117', '962ad84e0d12407ebad3cffbb3137e1e', NULL, '牛逼分组', NULL, 'devGroup', '1950447085375692800', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (28, '681c0775c2dc427d0480ab5f', '7g0000117', '7af18836921a48e9aedbb33551032a8a', NULL, '牛逼分组', NULL, 'devGroup', '1950447085375692800', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (29, '681c0775c2dc427d0480ab5f', '7g0000117', 'ab13d2f27d164648adf7d3aa6478bb09', NULL, '牛逼分组', NULL, 'devGroup', '1950447085375692800', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (30, '681c0775c2dc427d0480ab5f', '7g0000117', 'c64f520c8a2e4c9698c6c8f0521db713', NULL, '牛逼分组', NULL, 'devGroup', '1950447085375692800', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (31, '681c0775c2dc427d0480ab5f', '7g0000117', 'fa1b39fb287a42dd8a0f2cbae0d698d2', NULL, '508小机房', NULL, 'devGroup', '1950770676340260864', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (32, '681c0775c2dc427d0480ab5f', '7g0000117', '271232e01d17496f86ab925bdc56eda2', NULL, '508小机房', NULL, 'devGroup', '1950770676340260864', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (33, '681c0775c2dc427d0480ab5f', '7g0000117', '9217646384fd46b8816359f03d5802ac', NULL, '508小机房', NULL, 'devGroup', '1950770676340260864', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (34, '681c0775c2dc427d0480ab5f', '7g0000117', '433d68787b2b4fd08dec8fa8ffc60f79', NULL, '508小机房', NULL, 'devGroup', '1950770676340260864', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (35, '681c0775c2dc427d0480ab5f', '7g0000117', '58479b07927342b6bd12c9dfb988e6c9', NULL, '508小机房', NULL, 'devGroup', '1950770676340260864', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (36, '681c0775c2dc427d0480ab5f', '7g0000117', '29727447e38d49d6a9154aa2dafb47b5', NULL, '508小机房', NULL, 'devGroup', '1950770676340260864', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (37, '681c0775c2dc427d0480ab5f', '7g0000117', '8b0679d5b2054c3389994a905998ccaa', NULL, '508小机房', NULL, 'devGroup', '1950770676340260864', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (38, '681c0775c2dc427d0480ab5f', '7g0000117', '903071db080c4267900a6ab1e159b5a1', NULL, '508小机房', NULL, 'devGroup', '1950770676340260864', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (39, '681c0775c2dc427d0480ab5f', '7g0000117', 'c23296b6e84b489290a33a0f0bf33b17', NULL, '508小机房', NULL, 'devGroup', '1950770676340260864', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (40, '681c0775c2dc427d0480ab5f', '7g0000117', 'e8517d0ff4984431b2f0874e5ae8a29e', NULL, '508小机房', NULL, 'devGroup', '1950770676340260864', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (41, '681c0775c2dc427d0480ab5f', '7g0000117', '4db2d96130964fc49258e4eef0cc55f1', NULL, '508小机房', NULL, 'devGroup', '1950770676340260864', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (42, '681c0775c2dc427d0480ab5f', '7g0000117', 'd2dd545dc6b541e9b277de24a8237d4d', NULL, '508小机房', NULL, 'devGroup', '1950770676340260864', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (43, '681c0775c2dc427d0480ab5f', '7g0000117', '05a9960673fd47e587b041ff1018898a', NULL, '508小机房', NULL, 'devGroup', '1950770676340260864', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (44, '681c0775c2dc427d0480ab5f', '7g0000117', 'c0638ea17c5a4bcf9ad66a2a80ef0ab4', NULL, '508小机房', NULL, 'devGroup', '1950770676340260864', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (45, '681c0775c2dc427d0480ab5f', '7g0000117', '52956f3a0bac430aa3f9ce2fd30f83fa', NULL, '508小机房', NULL, 'devGroup', '1950770676340260864', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (46, '681c0775c2dc427d0480ab5f', '7g0000117', '82b178e4cff840a4b3128da81e0718d0', NULL, '508小机房', NULL, 'devGroup', '1950770676340260864', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (47, '681c0775c2dc427d0480ab5f', '7g0000117', '962ad84e0d12407ebad3cffbb3137e1e', NULL, '508小机房', NULL, 'devGroup', '1950770676340260864', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (48, '681c0775c2dc427d0480ab5f', '7g0000117', '7af18836921a48e9aedbb33551032a8a', NULL, '508小机房', NULL, 'devGroup', '1950770676340260864', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (49, '681c0775c2dc427d0480ab5f', '7g0000117', 'ab13d2f27d164648adf7d3aa6478bb09', NULL, '508小机房', NULL, 'devGroup', '1950770676340260864', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (50, '681c0775c2dc427d0480ab5f', '7g0000117', 'c64f520c8a2e4c9698c6c8f0521db713', NULL, '508小机房', NULL, 'devGroup', '1950770676340260864', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (51, '681c0775c2dc427d0480ab5f', '7g0000117', 'e33678b0ba8d48ec995c8ae9a823a6eb', NULL, '508小机房', NULL, 'devGroup', '1950770676340260864', 'devGroup', NULL); -INSERT INTO `iot_device_tags` (`id`, `product_key`, `device_id`, `iot_id`, `create_time`, `name`, `description`, `type`, `value`, `key`, `instance`) VALUES (52, '681c0775c2dc427d0480ab5f', '7g0000117', 'd2dd545dc6b541e9b277de24a8237d4d', NULL, '1楼消控室(烟感)', NULL, 'devGroup', '1949364879098044416', 'devGroup', NULL); -COMMIT; - --- ---------------------------- --- Table structure for iot_device_up_format --- ---------------------------- -DROP TABLE IF EXISTS `iot_device_up_format`; -CREATE TABLE `iot_device_up_format` ( - `id` bigint NOT NULL AUTO_INCREMENT, - `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '费用名称', - `apply` tinyint NOT NULL COMMENT '应用级别(1-应用 2-产品 3-所有)', - `target_id` bigint NOT NULL COMMENT '目标ID(1-应用主键ID,2-ProductKey,3-0)', - `cfg` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '模板配置', - `create_time` datetime DEFAULT CURRENT_TIMESTAMP, - `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `unionId` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '用户编号', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='消息格式化表'; - --- ---------------------------- --- Records of iot_device_up_format --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for iot_network --- ---------------------------- -DROP TABLE IF EXISTS `iot_network`; -CREATE TABLE `iot_network` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'TCP_CLIENT,TCP_SERVER,MQTT_CLIENT,MQTT_SERVER', - `union_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '网络唯一标识:MQTT为自定义惟一标识', - `product_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'ProductKey', - `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '网络组件名称', - `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '详细描述', - `configuration` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '配置内容', - `create_user` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建用户', - `create_date` datetime DEFAULT NULL COMMENT '创建时间', - `state` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0-关闭,1-启动', - PRIMARY KEY (`id`) USING BTREE, - UNIQUE KEY `uniq_network_pk_id` (`union_id`,`type`) USING BTREE COMMENT '网络组件唯一标识' -) ENGINE=InnoDB AUTO_INCREMENT=88 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='网络组件表'; - --- ---------------------------- --- Records of iot_network --- ---------------------------- -BEGIN; -INSERT INTO `iot_network` (`id`, `type`, `union_id`, `product_key`, `name`, `description`, `configuration`, `create_user`, `create_date`, `state`) VALUES (81, 'TCP_SERVER', 'abcxassxnanahsman', 'abcxassxnanahsman', '单相轨道电表1', '电表监听端口', '{\n \"preStore\": false,\n \"enabled\": true,\n \"alwaysPreDecode\": true,\n \"port\": 12345,\n \"host\": \"0.0.0.0\",\n \"ssl\": false,\n \"onlyCache\": false,\n \"cert\": \"\",\n \"key\": \"\",\n \"rootCa\": \"\",\n \"decodeType\": \"HEX\",\n \"parserType\": \"DIRECT\",\n \"allIdleTime\": \"\",\n \"readerIdleTime\": \"\",\n \"writerIdleTime\": \"\",\n \"readTimeout\": \"\",\n \"sendTimeout\": \"\",\n \"idleInterval\": \"\",\n \"delimited\": \"\",\n \"lineMaxLength\": \"\",\n \"delimitedMaxlength\": \"\",\n \"fixedLength\": \"\",\n \"byteOrderLittle\": \"true\",\n \"maxFrameLength\": \"\",\n \"lengthFieldOffset\": \"\",\n \"lengthFieldLength\": \"\",\n \"lengthAdjustment\": \"\",\n \"initialBytesToStrip\": \"\",\n \"failFast\": \"true\"\n}', 'test', '2025-07-09 11:49:24', 1); -INSERT INTO `iot_network` (`id`, `type`, `union_id`, `product_key`, `name`, `description`, `configuration`, `create_user`, `create_date`, `state`) VALUES (85, 'TCP_SERVER', '38fc80e', '38fc80e', '文档版小插座', NULL, '{\"host\":\"0.0.0.0\",\"port\":12344}', 'test', '2025-07-28 21:57:40', 1); -INSERT INTO `iot_network` (`id`, `type`, `union_id`, `product_key`, `name`, `description`, `configuration`, `create_user`, `create_date`, `state`) VALUES (87, 'MQTT_CLIENT', '68ada9c78c22c1573cb70d55', '', '火山引擎99服务器emqx', NULL, '{}', 'iot', '2025-08-26 20:34:15', 0); -COMMIT; - --- ---------------------------- --- Table structure for iot_product --- ---------------------------- -DROP TABLE IF EXISTS `iot_product`; -CREATE TABLE `iot_product` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', - `product_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '产品编号,当前等同设备型号', - `company_no` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '厂商编号', - `name` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '名称', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '产品KEY', - `third_platform` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '第三方平台:lvzhou,ctwing,onenet,alibaba,baidu', - `classified_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '分类名称', - `product_secret` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '产品密钥(1型1密)', - `third_configuration` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '第三方平台配置信息', - `classified_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '分类ID', - `configuration` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '协议配置', - `network_union_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '网络组件:TCP,MQTT', - `device_node` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '设备节点: gateway(网关),childrenDevice(网关子设备),device(设备)', - `gw_product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '所属项目', - `tags` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '标签字段', - `message_protocol` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '消息协议: ', - `creator_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建者id', - `describe` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '说明', - `store_policy` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '数据存储策略', - `store_policy_configuration` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '数据存储策略配置', - `transport_protocol` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '传输协议: MQTT,COAP,UDP', - `photo_url` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '图片地址', - `metadata` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '物模型', - `create_time` bigint DEFAULT NULL COMMENT '创建时间', - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0', - `state` tinyint unsigned DEFAULT '0' COMMENT '产品状态(0-正常)', - `third_down_request` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '第三方产品下发信息', - `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, - `is_deleted` tinyint(1) DEFAULT '0', - PRIMARY KEY (`id`) USING BTREE, - UNIQUE KEY `idx_product_key` (`product_key`) USING BTREE COMMENT '产品唯一密钥', - KEY `idx_prod_class_id` (`classified_id`) USING BTREE, - KEY `idx_product_id` (`product_id`) USING BTREE COMMENT '产品ID(设备型号)' -) ENGINE=InnoDB AUTO_INCREMENT=542 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='物联网产品基本信息(产品Key、协议类型、制造商)'; - --- ---------------------------- --- Records of iot_product --- ---------------------------- -BEGIN; -INSERT INTO `iot_product` (`id`, `product_id`, `company_no`, `name`, `product_key`, `third_platform`, `classified_name`, `product_secret`, `third_configuration`, `classified_id`, `configuration`, `network_union_id`, `device_node`, `gw_product_key`, `tags`, `message_protocol`, `creator_id`, `describe`, `store_policy`, `store_policy_configuration`, `transport_protocol`, `photo_url`, `metadata`, `create_time`, `instance`, `state`, `third_down_request`, `update_time`, `is_deleted`) VALUES (502, '单相导轨表DDSY1986-4G', '理想东风', '单相导轨XA-GXSD81(4G)', 'abcxassxnanahsman', 'tcp', '验证(beta)', NULL, '{\"customField\":[]}', '100100', '{\"requirePayload\":true,\"requireUpShadow\":true,\"allowInsert\":true,\"alwaysPreDecode\":true,\"productKey\":\"67c69f2a6b0001a9b22a6c9a\",\"ssl\":false,\"onlyCache\":false,\"parserConfiguration\":{\"byteOrderLittle\":true,\"failFast\":true,\"fixedLength\":6},\"parserType\":\"DIRECT\",\"port\":12345,\"preStore\":false,\"host\":\"0.0.0.0\",\"decodeType\":\"HEX\",\"byteOrderLittle\":\"true\",\"failFast\":\"true\",\"fixedLength\":\"\",\"enabled\":true,\"offlineThreshold\":\"48\",\"isGps\":false,\"saveFunctionParam\":true,\"logMaxStorage\":\"300\",\"cert\":\"\",\"key\":\"\",\"rootCa\":\"\",\"allIdleTime\":\"\",\"readerIdleTime\":\"\",\"writerIdleTime\":\"\",\"readTimeout\":\"\",\"sendTimeout\":\"\",\"idleInterval\":\"\",\"delimited\":\"\",\"lineMaxLength\":\"\",\"delimitedMaxlength\":\"\",\"maxFrameLength\":\"\",\"lengthFieldOffset\":\"\",\"lengthFieldLength\":\"\",\"lengthAdjustment\":\"\",\"initialBytesToStrip\":\"\"}', 'abcxassxnanahsman', 'DEVICE', NULL, 'huanbao,yiliao,yanglao', NULL, 'test', NULL, 'mysql', '{\"properties\":[{\"id\":\"openState\",\"maxStorage\":\"200\"},{\"id\":\"meterData\",\"maxStorage\":\"500\"}],\"event\":[]}', '4G LTE Cat.1', '{\"img\":\"http://qiniu.oss.filecoin.ren/device/logo/dianbiao.jpg\",\"detail\":\"\"}', '{\"tags\": [], \"events\": [{\"id\": \"online\", \"name\": \"上线\", \"valueType\": {\"type\": \"string\"}}, {\"id\": \"offline\", \"name\": \"下线\", \"valueType\": {\"type\": \"string\"}}, {\"id\": \"shortfallAlarm\", \"name\": \"读数倒流告警\", \"config\": false, \"expands\": {\"level\": \"warn\"}, \"valueType\": {\"type\": \"string\", \"expands\": {\"maxLength\": \"50\"}}}], \"functions\": [{\"id\": \"meterRead\", \"name\": \"获取用电量\", \"config\": false, \"inputs\": [{\"id\": \"meterNo\", \"name\": \"电表表号\", \"valueType\": {\"type\": \"string\", \"expands\": {\"maxLength\": \"12\"}}}], \"output\": {}}, {\"id\": \"switchOnOff\", \"name\": \"开关阀\", \"config\": false, \"inputs\": [{\"id\": \"meterNo\", \"name\": \"表号\", \"valueType\": {\"type\": \"string\", \"expands\": {\"maxLength\": \"12\"}}}, {\"id\": \"valveOn\", \"name\": \"开关阀操作\", \"valueType\": {\"type\": \"enum\", \"elements\": [{\"text\": \"分闸(断电)\", \"value\": \"0\"}, {\"text\": \"合闸(来电)\", \"value\": \"1\"}]}}], \"output\": {}}], \"properties\": [{\"id\": \"openState\", \"mode\": \"rw\", \"name\": \"当前的通/断电状态\", \"config\": false, \"valueType\": {\"type\": \"enum\", \"elements\": [{\"text\": \"断电\", \"value\": \"0\"}, {\"text\": \"通电\", \"value\": \"1\"}]}}, {\"id\": \"meterData\", \"mode\": \"r\", \"name\": \"电表读数\", \"config\": false, \"valueType\": {\"type\": \"float\", \"unit\": \"kW·h\"}}, {\"id\": \"meterPrice\", \"mode\": \"r\", \"name\": \"电价\", \"config\": false, \"valueType\": {\"type\": \"string\"}, \"description\": \"单位 元/千瓦时\"}, {\"id\": \"voltage\", \"mode\": \"r\", \"name\": \"电压\", \"config\": false, \"valueType\": {\"type\": \"string\", \"unit\": \"V\"}}, {\"id\": \"current\", \"mode\": \"r\", \"name\": \"电流\", \"config\": false, \"valueType\": {\"type\": \"string\", \"unit\": \"A\"}}, {\"id\": \"power\", \"mode\": \"r\", \"name\": \"功率\", \"config\": false, \"valueType\": {\"type\": \"string\", \"unit\": \"W\"}}, {\"id\": \"purchases\", \"mode\": \"r\", \"name\": \"购电次数\", \"config\": false, \"valueType\": {\"type\": \"string\"}}, {\"id\": \"warningPower\", \"mode\": \"r\", \"name\": \"预警电量\", \"config\": false, \"valueType\": {\"type\": \"string\", \"unit\": \"kW·h\"}}, {\"id\": \"remainingAmount\", \"mode\": \"r\", \"name\": \"剩余金额\", \"config\": false, \"valueType\": {\"type\": \"string\"}, \"description\": \"单位 元\"}, {\"id\": \"overVoltageLimit\", \"mode\": \"rw\", \"name\": \"电压过载限值\", \"config\": false, \"valueType\": {\"type\": \"float\", \"unit\": \"V\"}, \"description\": \"超过此电压,电表会立即分闸,精确到1位小数点\"}, {\"id\": \"overCurrrentLimit\", \"mode\": \"rw\", \"name\": \"电流过载限值\", \"config\": false, \"valueType\": {\"type\": \"float\", \"unit\": \"A\"}, \"description\": \"精确到毫安,3个小数点。超过此限值,立即分闸\"}, {\"id\": \"meterNo\", \"mode\": \"r\", \"name\": \"电表表号\", \"config\": false, \"valueType\": {\"type\": \"string\"}}, {\"id\": \"lastMeterData\", \"mode\": \"r\", \"name\": \"上次电表读数\", \"config\": false, \"valueType\": {\"type\": \"float\", \"unit\": \"kW·h\"}}, {\"id\": \"shortfallData\", \"mode\": \"r\", \"name\": \"读数差额\", \"config\": false, \"valueType\": {\"type\": \"float\"}}, {\"id\": \"csq\", \"mode\": \"r\", \"name\": \"信号强度CSQ\", \"config\": false, \"valueType\": {\"type\": \"int\"}}, {\"id\": \"iccid\", \"mode\": \"r\", \"name\": \"物联网卡ICCID\", \"config\": false, \"valueType\": {\"type\": \"string\"}}, {\"id\": \"signalLevel\", \"mode\": \"r\", \"name\": \"信号强度等级\", \"config\": false, \"valueType\": {\"type\": \"string\"}}, {}]}', 1741070122575, '0', 0, NULL, '2025-08-15 13:42:56', 0); -INSERT INTO `iot_product` (`id`, `product_id`, `company_no`, `name`, `product_key`, `third_platform`, `classified_name`, `product_secret`, `third_configuration`, `classified_id`, `configuration`, `network_union_id`, `device_node`, `gw_product_key`, `tags`, `message_protocol`, `creator_id`, `describe`, `store_policy`, `store_policy_configuration`, `transport_protocol`, `photo_url`, `metadata`, `create_time`, `instance`, `state`, `third_down_request`, `update_time`, `is_deleted`) VALUES (526, 'HTTP_WS_CZ001', '格林物联', '智能插座', '681c0775c2dc427d0480ab5f', 'mqtt', '验证(beta)', '8bccf5291e5b4120b645863c328eafe1', '{\"customField\":[]}', NULL, '{\"isGps\":false,\"saveFunctionParam\":true,\"allowInsert\":true}', 'univ_mqtt_server', 'DEVICE', NULL, NULL, NULL, 'test', NULL, 'mysql', '{\"properties\":[{\"id\":\"ecl\",\"maxStorage\":\"999\"},{\"id\":\"switchStatus\",\"maxStorage\":\"999\"},{\"id\":\"battery\",\"maxStorage\":\"999\"},{\"id\":\"csq\",\"maxStorage\":\"999\"}],\"event\":[{\"id\":\"powerOffAlarm\",\"maxStorage\":\"999\"},{\"id\":\"powerOnRestore\",\"maxStorage\":\"999\"},{\"id\":\"lowBatteryAlarm\",\"maxStorage\":\"999\"},{\"id\":\"batteryRestore\",\"maxStorage\":\"999\"}]}', 'NB-IoT', '{\"img\":\"http://qiniu.oss.filecoin.ren/device/logo/liuliang.png\",\"detail\":\"\"}', '{\"tags\": [], \"events\": [{\"id\": \"online\", \"name\": \"上线\", \"valueType\": {\"type\": \"string\"}}, {\"id\": \"offline\", \"name\": \"下线\", \"valueType\": {\"type\": \"string\"}}, {\"id\": \"onOffline\", \"name\": \"上下线\", \"valueType\": {\"type\": \"string\"}}, {\"id\": \"powerOffAlarm\", \"name\": \"断电报警\", \"expands\": {\"level\": \"warn\"}, \"valueType\": {\"type\": \"string\", \"expands\": {\"maxLength\": \"50\"}}, \"description\": \"你猜\"}, {\"id\": \"powerOnRestore\", \"name\": \"恢复通电\", \"expands\": {\"level\": \"ordinary\"}, \"valueType\": {\"type\": \"string\", \"expands\": {\"maxLength\": \"50\"}}}, {\"id\": \"lowBatteryAlarm\", \"name\": \"电池低电量报警\", \"expands\": {\"level\": \"ordinary\"}, \"valueType\": {\"type\": \"string\", \"expands\": {\"maxLength\": \"50\"}}}, {\"id\": \"batteryRestore\", \"name\": \"电池恢复正常\", \"expands\": {\"level\": \"ordinary\"}, \"valueType\": {\"type\": \"string\", \"expands\": {\"maxLength\": \"50\"}}}], \"functions\": [{\"id\": \"switchControl\", \"name\": \"开关控制\", \"inputs\": [{\"id\": \"open\", \"name\": \"开关控制\", \"valueType\": {\"type\": \"enum\", \"elements\": [{\"text\": \"开\", \"value\": \"0\"}, {\"text\": \"关\", \"value\": \"1\"}]}, \"description\": \"0-开,1-关\"}], \"output\": {}, \"description\": \"你猜\"}, {\"id\": \"newkai\", \"name\": \"新开\", \"config\": false, \"inputs\": [{\"id\": \"docs\", \"name\": \"新开\", \"valueType\": {\"max\": \"99\", \"min\": \"0\", \"type\": \"int\", \"unit\": \"N.m\"}}], \"output\": {}}], \"properties\": [{\"id\": \"ecl\", \"mode\": \"r\", \"name\": \"无线信号覆盖等级\", \"config\": false, \"source\": \"device\", \"valueType\": {\"type\": \"int\", \"unit\": \"Hz\"}, \"description\": \"你猜\"}, {\"id\": \"switchStatus\", \"mode\": \"r\", \"name\": \"开关状态\", \"valueType\": {\"type\": \"enum\", \"elements\": [{\"text\": \"开\", \"value\": \"0\"}, {\"text\": \"关\", \"value\": \"1\"}]}, \"description\": \"开关状态\"}, {\"id\": \"battery\", \"mode\": \"r\", \"name\": \"电池电压\", \"config\": false, \"source\": \"device\", \"valueType\": {\"type\": \"float\", \"unit\": \"kV\"}}, {\"id\": \"csq\", \"mode\": \"r\", \"name\": \"信号\", \"config\": false, \"source\": \"device\", \"valueType\": {\"type\": \"int\", \"unit\": \"KΩ\"}, \"description\": \"信号值20-31,超出无效\"}]}', 1750928224958, '0', 0, '', '2025-08-26 20:19:14', 0); -INSERT INTO `iot_product` (`id`, `product_id`, `company_no`, `name`, `product_key`, `third_platform`, `classified_name`, `product_secret`, `third_configuration`, `classified_id`, `configuration`, `network_union_id`, `device_node`, `gw_product_key`, `tags`, `message_protocol`, `creator_id`, `describe`, `store_policy`, `store_policy_configuration`, `transport_protocol`, `photo_url`, `metadata`, `create_time`, `instance`, `state`, `third_down_request`, `update_time`, `is_deleted`) VALUES (527, 'V587', '绿信科技', '全能监测面板', '685f795c753809d9355d2212', 'http', '验证(beta)', NULL, '{\"customField\":[]}', '100100', '{\"thirdDownSupport\":true,\"thirdDownUrl\":\"http://nas.fil.asia:81/test/echo\"}', NULL, 'DEVICE', NULL, NULL, NULL, 'test', NULL, 'mysql', NULL, 'NB-IoT', '{\"img\":\"http://qiniu.oss.filecoin.ren/device/logo/hujiao.jpg\",\"detail\":\"\"}', '{\"tags\": [], \"events\": [{\"id\": \"online\", \"name\": \"上线\", \"valueType\": {\"type\": \"string\"}}, {\"id\": \"offline\", \"name\": \"下线\", \"valueType\": {\"type\": \"string\"}}, {\"id\": \"fire\", \"name\": \"着火了\", \"config\": false, \"expands\": {\"level\": \"urgent\"}, \"valueType\": {\"type\": \"string\", \"expands\": {\"maxLength\": \"50\"}}, \"description\": \"一级紧急\"}], \"functions\": [{\"id\": \"fireInNull\", \"name\": \"灭火\", \"config\": false, \"inputs\": [{\"id\": \"water\", \"name\": \"水\", \"valueType\": {\"max\": \"50\", \"min\": \"1\", \"type\": \"int\", \"unit\": \"t\"}}, {\"id\": \"feng\", \"name\": \"吹风\", \"valueType\": {\"type\": \"enum\", \"elements\": [{\"text\": \"中级\", \"value\": \"middle\"}, {\"text\": \"轻\", \"value\": \"low\"}, {\"text\": \"疯狂\", \"value\": \"crazy\"}]}}], \"output\": {}, \"description\": \"灭火的描述\"}], \"properties\": [{\"id\": \"csq\", \"mode\": \"r\", \"name\": \"信号值\", \"config\": false, \"valueType\": {\"type\": \"int\"}, \"description\": \"取值范围0-31\"}, {\"id\": \"battery\", \"mode\": \"r\", \"name\": \"🔋电量\", \"config\": false, \"valueType\": {\"type\": \"double\", \"unit\": \"%\"}}]}', 1751087452437, '0', 0, NULL, '2025-08-15 13:44:01', 0); -INSERT INTO `iot_product` (`id`, `product_id`, `company_no`, `name`, `product_key`, `third_platform`, `classified_name`, `product_secret`, `third_configuration`, `classified_id`, `configuration`, `network_union_id`, `device_node`, `gw_product_key`, `tags`, `message_protocol`, `creator_id`, `describe`, `store_policy`, `store_policy_configuration`, `transport_protocol`, `photo_url`, `metadata`, `create_time`, `instance`, `state`, `third_down_request`, `update_time`, `is_deleted`) VALUES (528, 'DP_31', '大豆物联', '小灯泡', '6863896d75386b5c1e7e908c', 'tcp', '验证(beta)', NULL, '{\"customField\":[]}', '100100', '{\"offlineThreshold\":300,\"requirePayload\":\"false\",\"isGps\":\"false\",\"saveFunctionParam\":\"true\",\"requireUpShadow\":\"true\",\"allowInsert\":\"true\"}', 'univ_mqtt_client', 'DEVICE', NULL, NULL, NULL, 'test', NULL, 'mysql', NULL, 'MQTT', '{\"img\":\"http://qiniu.oss.filecoin.ren/device/logo/dianbiao.jpg\",\"detail\":\"\"}', '{\"tags\": [], \"events\": [{\"id\": \"online\", \"name\": \"上线\", \"valueType\": {\"type\": \"string\"}}, {\"id\": \"offline\", \"name\": \"下线\", \"valueType\": {\"type\": \"string\"}}, {\"id\": \"onOffline\", \"name\": \"上下线\", \"valueType\": {\"type\": \"string\"}}, {\"id\": \"powerOffAlarm\", \"name\": \"断电报警\", \"expands\": {\"level\": \"warn\"}, \"valueType\": {\"type\": \"string\", \"expands\": {\"maxLength\": \"50\"}}, \"description\": \"你猜\"}, {\"id\": \"powerOnRestore\", \"name\": \"恢复通电\", \"expands\": {\"level\": \"ordinary\"}, \"valueType\": {\"type\": \"string\", \"expands\": {\"maxLength\": \"50\"}}}, {\"id\": \"lowBatteryAlarm\", \"name\": \"电池低电量报警\", \"expands\": {\"level\": \"ordinary\"}, \"valueType\": {\"type\": \"string\", \"expands\": {\"maxLength\": \"50\"}}}, {\"id\": \"batteryRestore\", \"name\": \"电池恢复正常\", \"expands\": {\"level\": \"ordinary\"}, \"valueType\": {\"type\": \"string\", \"expands\": {\"maxLength\": \"50\"}}}], \"functions\": [{\"id\": \"switchControl\", \"name\": \"开关控制\", \"inputs\": [{\"id\": \"open\", \"name\": \"开关控制\", \"valueType\": {\"type\": \"enum\", \"elements\": [{\"text\": \"开\", \"value\": \"0\"}, {\"text\": \"关\", \"value\": \"1\"}]}, \"description\": \"0-开,1-关\"}], \"output\": {}, \"description\": \"你猜\"}, {\"id\": \"newkai\", \"name\": \"新开\", \"config\": false, \"inputs\": [{\"id\": \"docs\", \"name\": \"新开\", \"valueType\": {\"type\": \"int\"}}], \"output\": {}}], \"properties\": [{\"id\": \"ecl\", \"mode\": \"r\", \"name\": \"无线信号覆盖等级\", \"valueType\": {\"type\": \"int\"}, \"description\": \"你猜\"}, {\"id\": \"switchStatus\", \"mode\": \"r\", \"name\": \"开关状态\", \"valueType\": {\"type\": \"enum\", \"elements\": [{\"text\": \"开\", \"value\": \"0\"}, {\"text\": \"关\", \"value\": \"1\"}]}, \"description\": \"开关状态\"}, {\"id\": \"battery\", \"mode\": \"r\", \"name\": \"电池电压\", \"valueType\": {\"type\": \"string\", \"unit\": \"V\"}}, {\"id\": \"csq\", \"mode\": \"r\", \"name\": \"信号\", \"config\": false, \"valueType\": {\"type\": \"int\"}, \"description\": \"信号值20-31\"}]}', 1751353709983, '0', 0, NULL, '2025-08-15 13:43:22', 0); -INSERT INTO `iot_product` (`id`, `product_id`, `company_no`, `name`, `product_key`, `third_platform`, `classified_name`, `product_secret`, `third_configuration`, `classified_id`, `configuration`, `network_union_id`, `device_node`, `gw_product_key`, `tags`, `message_protocol`, `creator_id`, `describe`, `store_policy`, `store_policy_configuration`, `transport_protocol`, `photo_url`, `metadata`, `create_time`, `instance`, `state`, `third_down_request`, `update_time`, `is_deleted`) VALUES (530, '三相导轨表XA2005-4G', '人行', '三相导轨表XA2005(4G)', 'xsdsdasds', 'sniTcp', '验证(beta)', NULL, '{\"customField\":[]}', '100100', '{\"requirePayload\":true,\"requireUpShadow\":true,\"allowInsert\":true,\"alwaysPreDecode\":true,\"productKey\":\"67c69f2a6b0001a9b22a6c9a\",\"ssl\":true,\"onlyCache\":false,\"parserConfiguration\":{\"byteOrderLittle\":true,\"failFast\":true,\"fixedLength\":6},\"parserType\":\"DIRECT\",\"port\":55598,\"preStore\":false,\"host\":\"0.0.0.0\",\"decodeType\":\"HEX\",\"byteOrderLittle\":\"true\",\"failFast\":\"true\",\"fixedLength\":\"\",\"enabled\":true,\"offlineThreshold\":\"48\",\"isGps\":false,\"saveFunctionParam\":true,\"logMaxStorage\":\"300\",\"cert\":\"\",\"key\":\"\",\"rootCa\":\"\",\"allIdleTime\":\"\",\"readerIdleTime\":\"\",\"writerIdleTime\":\"\",\"readTimeout\":\"\",\"sendTimeout\":\"\",\"idleInterval\":\"\",\"delimited\":\"\",\"lineMaxLength\":\"\",\"delimitedMaxlength\":\"\",\"maxFrameLength\":\"\",\"lengthFieldOffset\":\"\",\"lengthFieldLength\":\"\",\"lengthAdjustment\":\"\",\"initialBytesToStrip\":\"\",\"sslKey\":\"6882287f38fc33174b2d3869\"}', 'abcxassxnanahsman', 'DEVICE', NULL, 'huanbao,yiliao,yanglao', NULL, 'test', NULL, 'mysql', '{\"properties\":[{\"id\":\"openState\",\"maxStorage\":\"200\"},{\"id\":\"meterData\",\"maxStorage\":\"500\"}],\"event\":[]}', '4G LTE Cat.1', '{\"img\":\"http://qiniu.oss.filecoin.ren/device/logo/liuliang.png\",\"detail\":\"\"}', '{\"tags\": [], \"events\": [{\"id\": \"online\", \"name\": \"上线\", \"valueType\": {\"type\": \"string\"}}, {\"id\": \"offline\", \"name\": \"下线\", \"valueType\": {\"type\": \"string\"}}, {\"id\": \"shortfallAlarm\", \"name\": \"读数倒流告警\", \"config\": false, \"expands\": {\"level\": \"warn\"}, \"valueType\": {\"type\": \"string\", \"expands\": {\"maxLength\": \"50\"}}}], \"functions\": [{\"id\": \"meterRead\", \"name\": \"获取用电量\", \"config\": false, \"inputs\": [{\"id\": \"meterNo\", \"name\": \"电表表号\", \"valueType\": {\"type\": \"string\", \"expands\": {\"maxLength\": \"12\"}}}], \"output\": {}}, {\"id\": \"switchOnOff\", \"name\": \"开关阀\", \"config\": false, \"inputs\": [{\"id\": \"meterNo\", \"name\": \"表号\", \"valueType\": {\"type\": \"string\", \"expands\": {\"maxLength\": \"12\"}}}, {\"id\": \"valveOn\", \"name\": \"开关阀操作\", \"valueType\": {\"type\": \"enum\", \"elements\": [{\"text\": \"分闸(断电)\", \"value\": \"0\"}, {\"text\": \"合闸(来电)\", \"value\": \"1\"}]}}], \"output\": {}}], \"properties\": [{\"id\": \"openState\", \"mode\": \"rw\", \"name\": \"当前的通/断电状态\", \"config\": false, \"valueType\": {\"type\": \"enum\", \"elements\": [{\"text\": \"断电\", \"value\": \"0\"}, {\"text\": \"通电\", \"value\": \"1\"}]}}, {\"id\": \"meterData\", \"mode\": \"r\", \"name\": \"电表读数\", \"config\": false, \"valueType\": {\"type\": \"float\", \"unit\": \"kW·h\"}}, {\"id\": \"meterPrice\", \"mode\": \"r\", \"name\": \"电价\", \"config\": false, \"valueType\": {\"type\": \"string\"}, \"description\": \"单位 元/千瓦时\"}, {\"id\": \"voltage\", \"mode\": \"r\", \"name\": \"电压\", \"config\": false, \"valueType\": {\"type\": \"string\", \"unit\": \"V\"}}, {\"id\": \"current\", \"mode\": \"r\", \"name\": \"电流\", \"config\": false, \"valueType\": {\"type\": \"string\", \"unit\": \"A\"}}, {\"id\": \"power\", \"mode\": \"r\", \"name\": \"功率\", \"config\": false, \"valueType\": {\"type\": \"string\", \"unit\": \"W\"}}, {\"id\": \"purchases\", \"mode\": \"r\", \"name\": \"购电次数\", \"config\": false, \"valueType\": {\"type\": \"string\"}}, {\"id\": \"warningPower\", \"mode\": \"r\", \"name\": \"预警电量\", \"config\": false, \"valueType\": {\"type\": \"string\", \"unit\": \"kW·h\"}}, {\"id\": \"remainingAmount\", \"mode\": \"r\", \"name\": \"剩余金额\", \"config\": false, \"valueType\": {\"type\": \"string\"}, \"description\": \"单位 元\"}, {\"id\": \"overVoltageLimit\", \"mode\": \"rw\", \"name\": \"电压过载限值\", \"config\": false, \"valueType\": {\"type\": \"float\", \"unit\": \"V\"}, \"description\": \"超过此电压,电表会立即分闸,精确到1位小数点\"}, {\"id\": \"overCurrrentLimit\", \"mode\": \"rw\", \"name\": \"电流过载限值\", \"config\": false, \"valueType\": {\"type\": \"float\", \"unit\": \"A\"}, \"description\": \"精确到毫安,3个小数点。超过此限值,立即分闸\"}, {\"id\": \"meterNo\", \"mode\": \"r\", \"name\": \"电表表号\", \"config\": false, \"valueType\": {\"type\": \"string\"}}, {\"id\": \"lastMeterData\", \"mode\": \"r\", \"name\": \"上次电表读数\", \"config\": false, \"valueType\": {\"type\": \"float\", \"unit\": \"kW·h\"}}, {\"id\": \"shortfallData\", \"mode\": \"r\", \"name\": \"读数差额\", \"config\": false, \"valueType\": {\"type\": \"float\"}}, {\"id\": \"csq\", \"mode\": \"r\", \"name\": \"信号强度CSQ\", \"config\": false, \"valueType\": {\"type\": \"int\"}}, {\"id\": \"iccid\", \"mode\": \"r\", \"name\": \"物联网卡ICCID\", \"config\": false, \"valueType\": {\"type\": \"string\"}}, {\"id\": \"signalLevel\", \"mode\": \"r\", \"name\": \"信号强度等级\", \"config\": false, \"valueType\": {\"type\": \"string\"}}, {}]}', 1741070122575, '0', 0, NULL, '2025-08-15 13:46:56', 0); -INSERT INTO `iot_product` (`id`, `product_id`, `company_no`, `name`, `product_key`, `third_platform`, `classified_name`, `product_secret`, `third_configuration`, `classified_id`, `configuration`, `network_union_id`, `device_node`, `gw_product_key`, `tags`, `message_protocol`, `creator_id`, `describe`, `store_policy`, `store_policy_configuration`, `transport_protocol`, `photo_url`, `metadata`, `create_time`, `instance`, `state`, `third_down_request`, `update_time`, `is_deleted`) VALUES (531, 'YG_2025', 'universal', '小蘑菇插座', '68831a1f38fc106a8dac3c13', 'tcp', '验证(beta)', '8bccf5291e5b4120b645863c328eafe1', '{\"customField\":[]}', '100100', '{\"allIdleTime\":0,\"allowInsert\":false,\"alwaysPreDecode\":true,\"byteOrderLittle\":true,\"cert\":\"\",\"decoderType\":\"HEX\",\"delimited\":\"\",\"delimitedMaxlength\":\"\",\"enabled\":true,\"failFast\":true,\"fixedLength\":\"\",\"host\":\"0.0.0.0\",\"idleInterval\":0,\"initialBytesToStrip\":\"\",\"isGps\":false,\"key\":\"\",\"lengthAdjustment\":\"\",\"lengthFieldLength\":\"\",\"lengthFieldOffset\":\"\",\"lineMaxLength\":\"\",\"logMaxStorage\":\"300\",\"maxFrameLength\":\"\",\"offlineThreshold\":\"0.5\",\"onlyCache\":false,\"parserConfiguration\":{\"byteOrderLittle\":true,\"failFast\":true,\"fixedLength\":6},\"parserType\":\"DIRECT\",\"preStore\":false,\"readerIdleTime\":360,\"readTimeout\":0,\"requirePayload\":true,\"requireUpShadow\":true,\"rootCa\":\"\",\"saveFunctionParam\":true,\"sendTimeout\":0,\"port\":11990,\"ssl\":false,\"writerIdleTime\":0,\"decodeType\":\"HEX\",\"encoderType\":\"STRING\"}', '68831a1f38fc106a8dac3c13', 'DEVICE', NULL, NULL, NULL, 'iot', NULL, 'mysql', NULL, '4G LTE Cat.1', '{\"img\":\"http://qiniu.oss.filecoin.ren/device/logo/dianbiao.jpg\",\"detail\":\"\"}', '{\"tags\": [], \"events\": [{\"id\": \"overload\", \"name\": \"过载报警\", \"valueType\": {\"type\": \"int\", \"unit\": \"W\"}}, {\"id\": \"online\", \"name\": \"上线\", \"valueType\": {\"type\": \"string\"}}, {\"id\": \"offline\", \"name\": \"下线\", \"valueType\": {\"type\": \"string\"}}], \"functions\": [{\"id\": \"switch\", \"name\": \"开关控制\", \"config\": false, \"inputs\": [{\"id\": \"state\", \"valueType\": {\"type\": \"enum\", \"elements\": [{\"text\": \"开\", \"value\": \"01\"}, {\"text\": \"关\", \"value\": \"00\"}]}}, {\"id\": \"deviceId\", \"name\": \"设备编号\", \"valueType\": {\"type\": \"string\", \"expands\": {\"maxLength\": \"50\"}}}], \"output\": {}}], \"properties\": [{\"id\": \"powerState\", \"mode\": \"rw\", \"name\": \"开关状态\", \"config\": false, \"source\": \"device\", \"valueType\": {\"type\": \"enum\", \"elements\": [{\"text\": \"开\", \"value\": \"01\"}, {\"text\": \"关\", \"value\": \"00\"}]}}, {\"id\": \"current\", \"mode\": \"r\", \"name\": \"电流\", \"valueType\": {\"type\": \"float\", \"unit\": \"A\"}}, {\"id\": \"voltage\", \"mode\": \"r\", \"name\": \"电压\", \"valueType\": {\"type\": \"float\", \"unit\": \"V\"}}, {\"id\": \"power\", \"mode\": \"r\", \"name\": \"功率\", \"valueType\": {\"type\": \"int\", \"unit\": \"W\"}}]}', 1753422367137, '0', 0, NULL, '2025-08-15 13:43:22', 0); -INSERT INTO `iot_product` (`id`, `product_id`, `company_no`, `name`, `product_key`, `third_platform`, `classified_name`, `product_secret`, `third_configuration`, `classified_id`, `configuration`, `network_union_id`, `device_node`, `gw_product_key`, `tags`, `message_protocol`, `creator_id`, `describe`, `store_policy`, `store_policy_configuration`, `transport_protocol`, `photo_url`, `metadata`, `create_time`, `instance`, `state`, `third_down_request`, `update_time`, `is_deleted`) VALUES (532, 'KG_2021', '文档', '开关面板-TCP', '38fc80e', 'tcp', '验证(beta)', '4b683f8bd7c44653a45e9de792251f63', '{\"customField\":[]}', '100100', '{\"preStore\":\"true\",\"enabled\":true,\"alwaysPreDecode\":\"true\",\"ssl\":false,\"onlyCache\":\"false\",\"byteOrderLittle\":\"true\",\"failFast\":\"true\",\"encoderType\":\"HEX\",\"parserType\":\"DIRECT\",\"decodeType\":\"STRING\",\"isGps\":\"false\",\"saveFunctionParam\":\"true\",\"allowInsert\":\"true\",\"offlineThreshold\":12,\"readTimeout\":\"30\",\"decoderType\":\"HEX\",\"requirePayload\":\"\",\"requireUpShadow\":\"\",\"host\":\"0.0.0.0\",\"port\":12344}', '38fc80e', 'DEVICE', NULL, NULL, NULL, 'test', NULL, 'mysql', NULL, '4G LTE Cat.1', '{\"img\":\"http://qiniu.oss.filecoin.ren/device/logo/shuibiao.jpeg\",\"detail\":\"\"}', '{\"tags\": [], \"events\": [{\"id\": \"overload\", \"name\": \"过载报警\", \"valueType\": {\"type\": \"int\", \"unit\": \"W\"}}, {\"id\": \"online\", \"name\": \"上线\", \"valueType\": {\"type\": \"string\"}}, {\"id\": \"offline\", \"name\": \"下线\", \"valueType\": {\"type\": \"string\"}}], \"functions\": [{\"id\": \"switch\", \"name\": \"开关控制\", \"config\": false, \"inputs\": [{\"id\": \"state\", \"name\": \"控制状态\", \"valueType\": {\"type\": \"enum\", \"elements\": [{\"text\": \"开\", \"value\": \"01\"}, {\"text\": \"关\", \"value\": \"00\"}]}}, {\"id\": \"deviceId\", \"name\": \"设备编号\", \"valueType\": {\"type\": \"string\", \"expands\": {\"maxLength\": \"50\"}}}], \"output\": {}}], \"properties\": [{\"id\": \"powerState\", \"mode\": \"rw\", \"name\": \"开关状态\", \"valueType\": {\"type\": \"enum\", \"elements\": [{\"text\": \"开\", \"value\": \"01\"}, {\"text\": \"关\", \"value\": \"00\"}]}}, {\"id\": \"current\", \"mode\": \"r\", \"name\": \"电流\", \"valueType\": {\"type\": \"float\", \"unit\": \"A\"}}, {\"id\": \"voltage\", \"mode\": \"r\", \"name\": \"电压\", \"valueType\": {\"type\": \"float\", \"unit\": \"V\"}}, {\"id\": \"power\", \"mode\": \"r\", \"name\": \"功率\", \"valueType\": {\"type\": \"int\", \"unit\": \"W\"}}]}', 1753708542587, '0', 0, NULL, '2025-08-15 13:47:05', 0); -INSERT INTO `iot_product` (`id`, `product_id`, `company_no`, `name`, `product_key`, `third_platform`, `classified_name`, `product_secret`, `third_configuration`, `classified_id`, `configuration`, `network_union_id`, `device_node`, `gw_product_key`, `tags`, `message_protocol`, `creator_id`, `describe`, `store_policy`, `store_policy_configuration`, `transport_protocol`, `photo_url`, `metadata`, `create_time`, `instance`, `state`, `third_down_request`, `update_time`, `is_deleted`) VALUES (533, 'vite_mqtt_2025', 'vite', '开关面板-MQTT', '688cd92fdb9e0158872f4aa9', 'mqtt', '验证(beta)', 'b2e71bfb1bf443eb88878c0827652a55', '{\"customField\":[]}', '100100', '{\"requirePayload\":\"\",\"isGps\":\"\",\"saveFunctionParam\":\"\",\"requireUpShadow\":\"\",\"allowInsert\":\"true\",\"logMaxStorage\":120,\"downTopic\":\"$thing/688cd92fdb9e0158872f4aa9/etc\"}', NULL, 'DEVICE', NULL, NULL, NULL, 'test', NULL, 'mysql', '{\"properties\":[{\"id\":\"voltage\",\"maxStorage\":\"9999\"},{\"id\":\"powerState\",\"maxStorage\":\"9999\"},{\"id\":\"current\",\"maxStorage\":\"9999\"},{\"id\":\"power\",\"maxStorage\":\"9999\"}],\"event\":[{\"id\":\"overload\",\"maxStorage\":\"999\"}]}', 'MQTT', '{\"img\":\"http://qiniu.oss.filecoin.ren/device/logo/dianbiao.jpg\",\"detail\":\"\"}', '{\"tags\": [], \"events\": [{\"id\": \"overload\", \"name\": \"过载报警\", \"valueType\": {\"type\": \"int\", \"unit\": \"W\"}}, {\"id\": \"online\", \"name\": \"上线\", \"valueType\": {\"type\": \"string\"}}, {\"id\": \"offline\", \"name\": \"下线\", \"valueType\": {\"type\": \"string\"}}], \"functions\": [{\"id\": \"switch\", \"name\": \"开关控制\", \"config\": false, \"inputs\": [{\"id\": \"state\", \"name\": \"控制状态\", \"valueType\": {\"type\": \"enum\", \"elements\": [{\"text\": \"开\", \"value\": \"1\"}, {\"text\": \"关\", \"value\": \"0\"}]}}, {\"id\": \"deviceId\", \"name\": \"设备编号\", \"valueType\": {\"type\": \"string\", \"expands\": {\"maxLength\": \"50\"}}}], \"output\": {}}], \"properties\": [{\"id\": \"powerState\", \"mode\": \"rw\", \"name\": \"开关状态\", \"config\": false, \"source\": \"device\", \"valueType\": {\"type\": \"enum\", \"elements\": [{\"text\": \"开\", \"value\": \"1\"}, {\"text\": \"关\", \"value\": \"0\"}]}}, {\"id\": \"current\", \"mode\": \"r\", \"name\": \"电流\", \"valueType\": {\"type\": \"float\", \"unit\": \"A\"}}, {\"id\": \"voltage\", \"mode\": \"r\", \"name\": \"电压\", \"valueType\": {\"type\": \"float\", \"unit\": \"V\"}}, {\"id\": \"power\", \"mode\": \"r\", \"name\": \"功率\", \"valueType\": {\"type\": \"int\", \"unit\": \"W\"}}]}', 1754061103336, '0', 0, NULL, '2025-08-15 13:43:22', 0); -INSERT INTO `iot_product` (`id`, `product_id`, `company_no`, `name`, `product_key`, `third_platform`, `classified_name`, `product_secret`, `third_configuration`, `classified_id`, `configuration`, `network_union_id`, `device_node`, `gw_product_key`, `tags`, `message_protocol`, `creator_id`, `describe`, `store_policy`, `store_policy_configuration`, `transport_protocol`, `photo_url`, `metadata`, `create_time`, `instance`, `state`, `third_down_request`, `update_time`, `is_deleted`) VALUES (534, 'HTTP_WS_CZ001', '格林物联', '智能插座', 'abcxzxzxzxs', 'mqtt', NULL, '4e3d75bd43054ef2a9b7fb0b29bf6550', '{\"customField\":[]}', NULL, '{\"isGps\":false,\"saveFunctionParam\":true,\"allowInsert\":true}', 'univ_mqtt_server', 'DEVICE', NULL, NULL, NULL, 'test', NULL, 'mysql', '{\"properties\":[{\"id\":\"ecl\",\"maxStorage\":\"999\"},{\"id\":\"switchStatus\",\"maxStorage\":\"999\"},{\"id\":\"battery\",\"maxStorage\":\"999\"},{\"id\":\"csq\",\"maxStorage\":\"999\"}],\"event\":[{\"id\":\"powerOffAlarm\",\"maxStorage\":\"999\"},{\"id\":\"powerOnRestore\",\"maxStorage\":\"999\"},{\"id\":\"lowBatteryAlarm\",\"maxStorage\":\"999\"},{\"id\":\"batteryRestore\",\"maxStorage\":\"999\"}]}', 'NB-IoT', '{\"img\":\"http://qiniu.oss.filecoin.ren/device/logo/shuibiao.jpeg\",\"detail\":\"\"}', '{\"tags\": [], \"events\": [{\"id\": \"online\", \"name\": \"上线\", \"valueType\": {\"type\": \"string\"}}, {\"id\": \"offline\", \"name\": \"下线\", \"valueType\": {\"type\": \"string\"}}, {\"id\": \"onOffline\", \"name\": \"上下线\", \"valueType\": {\"type\": \"string\"}}, {\"id\": \"powerOffAlarm\", \"name\": \"断电报警\", \"expands\": {\"level\": \"warn\"}, \"valueType\": {\"type\": \"string\", \"expands\": {\"maxLength\": \"50\"}}, \"description\": \"你猜\"}, {\"id\": \"powerOnRestore\", \"name\": \"恢复通电\", \"expands\": {\"level\": \"ordinary\"}, \"valueType\": {\"type\": \"string\", \"expands\": {\"maxLength\": \"50\"}}}, {\"id\": \"lowBatteryAlarm\", \"name\": \"电池低电量报警\", \"expands\": {\"level\": \"ordinary\"}, \"valueType\": {\"type\": \"string\", \"expands\": {\"maxLength\": \"50\"}}}, {\"id\": \"batteryRestore\", \"name\": \"电池恢复正常\", \"expands\": {\"level\": \"ordinary\"}, \"valueType\": {\"type\": \"string\", \"expands\": {\"maxLength\": \"50\"}}}], \"functions\": [{\"id\": \"switchControl\", \"name\": \"开关控制\", \"inputs\": [{\"id\": \"open\", \"name\": \"开关控制\", \"valueType\": {\"type\": \"enum\", \"elements\": [{\"text\": \"开\", \"value\": \"0\"}, {\"text\": \"关\", \"value\": \"1\"}]}, \"description\": \"0-开,1-关\"}], \"output\": {}, \"description\": \"你猜\"}, {\"id\": \"newkai\", \"name\": \"新开\", \"config\": false, \"inputs\": [{\"id\": \"docs\", \"name\": \"新开\", \"valueType\": {\"max\": \"99\", \"min\": \"0\", \"type\": \"int\", \"unit\": \"N.m\"}}], \"output\": {}}], \"properties\": [{\"id\": \"ecl\", \"mode\": \"r\", \"name\": \"无线信号覆盖等级\", \"config\": false, \"source\": \"device\", \"valueType\": {\"type\": \"int\", \"unit\": \"Hz\"}, \"description\": \"你猜\"}, {\"id\": \"switchStatus\", \"mode\": \"r\", \"name\": \"开关状态\", \"valueType\": {\"type\": \"enum\", \"elements\": [{\"text\": \"开\", \"value\": \"0\"}, {\"text\": \"关\", \"value\": \"1\"}]}, \"description\": \"开关状态\"}, {\"id\": \"battery\", \"mode\": \"r\", \"name\": \"电池电压\", \"config\": false, \"source\": \"device\", \"valueType\": {\"type\": \"float\", \"unit\": \"kV\"}}, {\"id\": \"csq\", \"mode\": \"r\", \"name\": \"信号\", \"config\": false, \"source\": \"device\", \"valueType\": {\"type\": \"int\", \"unit\": \"KΩ\"}, \"description\": \"信号值20-31,超出无效\"}]}', 1754405586290, NULL, 0, '', '2025-08-15 13:47:03', NULL); -INSERT INTO `iot_product` (`id`, `product_id`, `company_no`, `name`, `product_key`, `third_platform`, `classified_name`, `product_secret`, `third_configuration`, `classified_id`, `configuration`, `network_union_id`, `device_node`, `gw_product_key`, `tags`, `message_protocol`, `creator_id`, `describe`, `store_policy`, `store_policy_configuration`, `transport_protocol`, `photo_url`, `metadata`, `create_time`, `instance`, `state`, `third_down_request`, `update_time`, `is_deleted`) VALUES (535, 'XYX-001-L', '深圳市星韵鑫科技有限公司', '拍照抄表器', '68975d7e6b9414067b209199', 'ctaiot', '拍照抄表器', NULL, NULL, '100100', '{\"masterKey\":\"1550a607ab394785b36117cbca608b8e\",\"productId\":17242608,\"payloadFormat\":0,\"ttl\":86400,\"operator\":\"univ\",\"dataType\":2,\"downParaType\":0,\"requirePayload\":true,\"powerModel\":0,\"lwm2mEdrxTime\":null}', NULL, 'DEVICE', NULL, NULL, NULL, 'iot', NULL, 'mysql', NULL, 'NB-iot', '{\"img\":\"http://qiniu.oss.filecoin.ren/device/logo/yangan.png\",\"detail\":\"\"}', '{\"tags\": [], \"events\": [{\"id\": \"online\", \"name\": \"上线\", \"valueType\": {\"type\": \"string\"}}, {\"id\": \"offline\", \"name\": \"下线\", \"valueType\": {\"type\": \"string\"}}], \"functions\": [], \"properties\": [{\"id\": \"iccid\", \"mode\": \"r\", \"name\": \"ICCID\", \"valueType\": {\"type\": \"string\"}, \"description\": \"SIM卡ICCID\"}]}', 1754750334032, '0', 0, '{\"ctwingRequestData\":{\"ttl\":0,\"dataType\":0,\"nodeType\":0,\"accessType\":0,\"networkType\":0,\"productProtocol\":0,\"dataEncryption\":0,\"authType\":0,\"endpointFormat\":0,\"tupIsThrough\":0,\"payloadFormat\":0,\"powerModel\":0,\"productId\":\"XYX-001-L\",\"pageNow\":0,\"pageSize\":0,\"publicProductId\":99015579},\"creatorId\":\"iot\",\"companyNo\":\"深圳市星韵鑫科技有限公司\",\"classifiedId\":\"100100\",\"classifiedName\":\"拍照抄表器\",\"data\":{\"productId\":\"XYX-001-L\",\"publicProductId\":99015579},\"cmd\":\"PUBPRO_ADD\",\"deviceReuse\":false,\"isAdmin\":false,\"allowInsert\":false}', '2025-08-15 13:47:08', 0); -INSERT INTO `iot_product` (`id`, `product_id`, `company_no`, `name`, `product_key`, `third_platform`, `classified_name`, `product_secret`, `third_configuration`, `classified_id`, `configuration`, `network_union_id`, `device_node`, `gw_product_key`, `tags`, `message_protocol`, `creator_id`, `describe`, `store_policy`, `store_policy_configuration`, `transport_protocol`, `photo_url`, `metadata`, `create_time`, `instance`, `state`, `third_down_request`, `update_time`, `is_deleted`) VALUES (536, 'DTU_2025_univ', '四喜', '网关DTU(面板)', 'lB0Tl1rgf8uz', 'mqtt', '验证(beta)', 'd239fdd5660f4e4893655182fc20c11d', '{\"customField\":[]}', '100100', NULL, NULL, 'GATEWAY', NULL, NULL, NULL, 'test', NULL, 'mysql', NULL, 'Wi-Fi', '{\"img\":\"http://qiniu.oss.filecoin.ren/device/logo/dianbiao.jpg\",\"detail\":\"\"}', '{\"tags\":[],\"events\":[{\"id\":\"online\",\"name\":\"上线\",\"valueType\":{\"type\":\"string\"}},{\"id\":\"offline\",\"name\":\"下线\",\"valueType\":{\"type\":\"string\"}}],\"functions\":[],\"properties\":[]}', 1754800276327, '0', 0, NULL, '2025-08-15 13:43:22', 0); -INSERT INTO `iot_product` (`id`, `product_id`, `company_no`, `name`, `product_key`, `third_platform`, `classified_name`, `product_secret`, `third_configuration`, `classified_id`, `configuration`, `network_union_id`, `device_node`, `gw_product_key`, `tags`, `message_protocol`, `creator_id`, `describe`, `store_policy`, `store_policy_configuration`, `transport_protocol`, `photo_url`, `metadata`, `create_time`, `instance`, `state`, `third_down_request`, `update_time`, `is_deleted`) VALUES (538, 'SX_Blue', '四喜', 'DTU(面板)子设备', 'lipSSVUj9XLt', 'mqtt', '验证(beta)', '0a0a1c19446749dc91d19c1c44aa405e', '{\"customField\":[]}', '100100', NULL, NULL, 'GATEWAY_SUB_DEVICE', 'lB0Tl1rgf8uz', 'yanglao,yiliao', NULL, 'test', NULL, 'mysql', NULL, '有线', '{\"img\":\"http://qiniu.oss.filecoin.ren/device/logo/shuibiao.jpeg\",\"detail\":\"\"}', '{\"tags\": [], \"events\": [{\"id\": \"online\", \"name\": \"上线\", \"valueType\": {\"type\": \"string\"}}, {\"id\": \"offline\", \"name\": \"下线\", \"valueType\": {\"type\": \"string\"}}], \"functions\": [], \"properties\": []}', 1754800824069, '0', 0, NULL, '2025-08-15 13:46:43', 0); -INSERT INTO `iot_product` (`id`, `product_id`, `company_no`, `name`, `product_key`, `third_platform`, `classified_name`, `product_secret`, `third_configuration`, `classified_id`, `configuration`, `network_union_id`, `device_node`, `gw_product_key`, `tags`, `message_protocol`, `creator_id`, `describe`, `store_policy`, `store_policy_configuration`, `transport_protocol`, `photo_url`, `metadata`, `create_time`, `instance`, `state`, `third_down_request`, `update_time`, `is_deleted`) VALUES (539, 'DTU_Blue', '东信', 'DTU蓝牙电表', '8qlWaAd8Rz2B', 'mqtt', '验证(beta)', 'a613a63b62834d29b00b7c8f7b806c6e', '{\"customField\":[]}', '100100', NULL, NULL, 'GATEWAY', NULL, NULL, NULL, 'test', NULL, 'mysql', NULL, '有线', '{\"img\":\"http://qiniu.oss.filecoin.ren/device/logo/yangan.png\",\"detail\":\"\"}', '{\"tags\":[],\"events\":[{\"id\":\"online\",\"name\":\"上线\",\"valueType\":{\"type\":\"string\"}},{\"id\":\"offline\",\"name\":\"下线\",\"valueType\":{\"type\":\"string\"}}],\"functions\":[],\"properties\":[]}', 1754812722452, '0', 0, NULL, '2025-08-15 13:46:34', 0); -COMMIT; - --- ---------------------------- --- Table structure for iot_product_sort --- ---------------------------- -DROP TABLE IF EXISTS `iot_product_sort`; -CREATE TABLE `iot_product_sort` ( - `id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '分类id', - `parent_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '父id', - `has_child` tinyint(1) NOT NULL COMMENT '是否有子节点', - `identification` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '标识', - `classified_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '分类名称', - `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '说明', - `create_time` datetime DEFAULT NULL COMMENT '创建时间', - `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '创建者', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='产品分类'; - --- ---------------------------- --- Records of iot_product_sort --- ---------------------------- -BEGIN; -INSERT INTO `iot_product_sort` (`id`, `parent_id`, `has_child`, `identification`, `classified_name`, `description`, `create_time`, `create_by`) VALUES ('100', '0', 1, 'IoT-Universal ', 'IoT-Universal ', '首个分类', '2025-06-24 14:21:08', 'test'); -INSERT INTO `iot_product_sort` (`id`, `parent_id`, `has_child`, `identification`, `classified_name`, `description`, `create_time`, `create_by`) VALUES ('100100', '100', 0, 'beta', '验证(beta)', NULL, '2025-06-24 14:46:20', 'test'); -COMMIT; - --- ---------------------------- --- Table structure for iot_user --- ---------------------------- -DROP TABLE IF EXISTS `iot_user`; -CREATE TABLE `iot_user` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `org_id` bigint DEFAULT NULL COMMENT '归属组织机构', - `username` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '用户名', - `password` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '密码', - `alias` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '别名', - `union_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '用户唯一标识', - `email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '邮箱', - `salt` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '密码加盐', - `mobile` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '手机号', - `status` tinyint unsigned DEFAULT NULL COMMENT '账号状态(0正常,1停用)', - `avatar` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '头像', - `parent_union_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '上级用户唯一id', - `identity` tinyint NOT NULL DEFAULT '1' COMMENT '账号身份 0.超级管理员 1.普通用户 2.子用户', - `login_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '登录IP', - `login_date` datetime DEFAULT NULL COMMENT '登录时间', - `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '创建者', - `create_date` datetime DEFAULT NULL COMMENT '创建时间', - `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `update_date` datetime DEFAULT NULL, - `cfg` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '自定义配置', - `remark` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '备注', - `deleted` tinyint unsigned DEFAULT NULL COMMENT '0-正常,1-删除', - `license` int unsigned DEFAULT '0' COMMENT '022租户接入数限制', - `license_total_amount` int unsigned DEFAULT '1000' COMMENT 'license总额度', - `register_from` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '注册来源', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=1944353342247555073 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='用户表'; - --- ---------------------------- --- Records of iot_user --- ---------------------------- -BEGIN; -INSERT INTO `iot_user` (`id`, `org_id`, `username`, `password`, `alias`, `union_id`, `email`, `salt`, `mobile`, `status`, `avatar`, `parent_union_id`, `identity`, `login_ip`, `login_date`, `create_by`, `create_date`, `update_by`, `update_date`, `cfg`, `remark`, `deleted`, `license`, `license_total_amount`, `register_from`) VALUES (1, NULL, 'iot', '$2a$10$opb7qtNzvAaQBbbXFuW1R.HJSOXPQjd0GtxdRNnuo.gfcfSZyYpci', 'iot', 'iot', 'wo8335224@gmail.com', NULL, '19219288111', 0, NULL, NULL, 0, NULL, '2025-08-28 09:22:24', '', '2025-06-23 16:18:01', 'iot', '2025-08-12 18:46:23', '{\"exclusiveFirstLogin\":false}', NULL, 0, 4998, 5000, NULL); -INSERT INTO `iot_user` (`id`, `org_id`, `username`, `password`, `alias`, `union_id`, `email`, `salt`, `mobile`, `status`, `avatar`, `parent_union_id`, `identity`, `login_ip`, `login_date`, `create_by`, `create_date`, `update_by`, `update_date`, `cfg`, `remark`, `deleted`, `license`, `license_total_amount`, `register_from`) VALUES (1937479897454936064, NULL, 'test', '$2a$10$lo9j6knUiLMqsMgpajRNV.geNetYI/ryeQFxlSDAJXpd/.QRmiOpG', '请误故意删数据!否则IP拉黑', 'test', NULL, NULL, '13800138001', 0, NULL, NULL, 1, NULL, '2025-08-28 10:26:39', 'iot', '2025-06-24 19:56:19', 'iot', '2025-08-12 18:09:34', NULL, NULL, 0, 5001, 5000, 'admin'); -INSERT INTO `iot_user` (`id`, `org_id`, `username`, `password`, `alias`, `union_id`, `email`, `salt`, `mobile`, `status`, `avatar`, `parent_union_id`, `identity`, `login_ip`, `login_date`, `create_by`, `create_date`, `update_by`, `update_date`, `cfg`, `remark`, `deleted`, `license`, `license_total_amount`, `register_from`) VALUES (1944353342247555072, NULL, 'view', '$2a$10$B03AP27l8sinWJ0d5POQ/..8585fKpZhgndFG2QM0CjRtxbJacvZ.', '只读', 'view', NULL, NULL, '13900139000', 0, NULL, NULL, 1, NULL, NULL, 'iot', '2025-07-13 19:08:56', NULL, NULL, NULL, NULL, 0, 5000, 5000, 'admin'); -COMMIT; - --- ---------------------------- --- Table structure for iot_user_application --- ---------------------------- -DROP TABLE IF EXISTS `iot_user_application`; -CREATE TABLE `iot_user_application` ( - `app_unique_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '应用标识', - `union_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - `app_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '应用名称', - `app_id` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '调用凭证APPID,必须16位', - `up_topic` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'MQ上行主题,英文逗号分隔', - `down_topic` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'MQ下行主题,英文逗号分隔', - `notify_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '回调地址', - `app_secret` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '调用密钥,必须32位', - `valid_end_date` datetime DEFAULT NULL COMMENT '授权结束时间', - `scope` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '授权范围', - `app_status` tinyint unsigned DEFAULT '0' COMMENT '0-正常,1-停用', - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT 'public' COMMENT '实例名称', - `remark` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '描述', - `logo` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'logo', - `create_date` datetime DEFAULT NULL COMMENT '创建时间', - `cfg` json DEFAULT NULL COMMENT '额外配置', - `deleted` tinyint unsigned DEFAULT '0' COMMENT '0-正常,1-删除', - `http_enable` tinyint(1) DEFAULT '1' COMMENT 'http推送是否启用,0:不启用 1:启用', - `mqtt_enable` tinyint(1) DEFAULT '1' COMMENT 'mqtt推送是否启用,0:不启用 1:启用', - `tcp_enable` tinyint(1) DEFAULT '0' COMMENT 'tcp 809协议第三方推送是否启用 0不启用 1启用', - PRIMARY KEY (`app_unique_id`) USING BTREE, - UNIQUE KEY `idx_app_id` (`app_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='用户应用信息表'; - --- ---------------------------- --- Records of iot_user_application --- ---------------------------- -BEGIN; -INSERT INTO `iot_user_application` (`app_unique_id`, `union_id`, `app_name`, `app_id`, `up_topic`, `down_topic`, `notify_url`, `app_secret`, `valid_end_date`, `scope`, `app_status`, `instance`, `remark`, `logo`, `create_date`, `cfg`, `deleted`, `http_enable`, `mqtt_enable`, `tcp_enable`) VALUES ('1938504461874020352', 'test', '笑盈盈1', '9PSfpC7Yp53fih5H', 'test/9PSfpC7Yp53fih5H', NULL, 'http://127.0.0.1:9092/test/echo', '5Lr9r7t53rU3AGOYEDA4vIVZmMMChjLJ', NULL, NULL, 0, 'public', '笑死钱1238', NULL, '2025-06-27 15:47:34', '{\"http\": {\"url\": \"http://127.0.0.1:9092/test/echo\"}, \"jdbc\": {}, \"mqtt\": {\"url\": \"tcp:127.0.0.1:1883\", \"topic\": \"$universal/appid/#\", \"enable\": false, \"support\": false, \"password\": \"xajsba123\", \"username\": \"xxxx\"}, \"kafka\": {\"enable\": false, \"support\": false}, \"rockerMQ\": {\"enable\": false, \"support\": false}, \"rocketMQ\": {\"enable\": false, \"support\": false}}', 0, 1, 1, 0); -COMMIT; - --- ---------------------------- --- Table structure for iot_user_sub --- ---------------------------- -DROP TABLE IF EXISTS `iot_user_sub`; -CREATE TABLE `iot_user_sub` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `org_id` bigint DEFAULT NULL COMMENT '归属组织机构', - `username` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '用户名', - `password` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '密码', - `alias` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '别名', - `union_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '用户唯一标识', - `email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '邮箱', - `salt` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '密码加盐', - `mobile` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '手机号', - `status` tinyint unsigned DEFAULT NULL COMMENT '账号状态(0正常,1停用)', - `avatar` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '头像', - `parent_union_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '上级用户唯一id', - `identity` tinyint NOT NULL DEFAULT '2' COMMENT '账号身份 0.超级管理员 1.普通用户 2.子用户', - `login_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '登录IP', - `login_date` datetime DEFAULT NULL COMMENT '登录时间', - `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '创建者', - `create_date` datetime DEFAULT NULL COMMENT '创建时间', - `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `update_date` datetime DEFAULT NULL, - `cfg` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '自定义配置', - `remark` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '备注', - `deleted` tinyint unsigned DEFAULT NULL COMMENT '0-正常,1-删除', - `license` int unsigned DEFAULT '0' COMMENT '022租户接入数限制', - `license_total_amount` int unsigned DEFAULT '1000' COMMENT 'license总额度', - `authorized_application_id` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '该账号有权限操作的应用id列表', - `app_id` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '子账号用于oauth2认证的客户端id', - `app_secret` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '子账号用于oauth2认证的客户端密钥', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='子账号表'; - --- ---------------------------- --- Records of iot_user_sub --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for notice_channel --- ---------------------------- -DROP TABLE IF EXISTS `notice_channel`; -CREATE TABLE `notice_channel` ( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', - `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '配置名称', - `channel_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '渠道类型(如dingTalk、sms_ali、sms_tencent、feishu、wecom、email等)', - `config` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '渠道参数(JSON字符串,如webhook、appKey、smtp等)', - `status` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注', - `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人', - `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='通知notice_channel表'; - --- ---------------------------- --- Records of notice_channel --- ---------------------------- -BEGIN; -INSERT INTO `notice_channel` (`id`, `name`, `channel_type`, `config`, `status`, `remark`, `creator`, `create_time`, `update_time`) VALUES (1, 'xzxzx', 'email', '{}', '1', '', 'test', '2025-07-19 09:14:25', '2025-07-28 13:51:10'); -INSERT INTO `notice_channel` (`id`, `name`, `channel_type`, `config`, `status`, `remark`, `creator`, `create_time`, `update_time`) VALUES (2, 'xzxzx', 'email', '{}', '1', '', 'test', '2025-07-19 09:14:28', '2025-07-28 13:51:10'); -INSERT INTO `notice_channel` (`id`, `name`, `channel_type`, `config`, `status`, `remark`, `creator`, `create_time`, `update_time`) VALUES (3, 'AleoXin个人群', 'dingTalk', '{\"webhook\":\"https://oapi.dingtalk.com/robot/send?access_token=f731085dd9ef094114794a0f5ff2cc09e017d18acea205415cc03039af472661\",\"secret\":\"SECee225435f2e30b7218a2e7486bc7671d7ec0725e6e7d15142783f7b488161ddf\"}', '0', '', 'test', '2025-07-19 21:40:08', '2025-07-28 13:51:10'); -INSERT INTO `notice_channel` (`id`, `name`, `channel_type`, `config`, `status`, `remark`, `creator`, `create_time`, `update_time`) VALUES (4, '阿里呀', 'sms_ali', '{\"accessKey\":\"xzxz\",\"secretKey\":\"xzxz\",\"signName\":\"xzxz\",\"templateCode\":\"xzxzx\"}', '0', NULL, 'test', '2025-07-20 10:01:20', '2025-07-28 13:51:10'); -INSERT INTO `notice_channel` (`id`, `name`, `channel_type`, `config`, `status`, `remark`, `creator`, `create_time`, `update_time`) VALUES (5, '腾讯云语音', 'sms_tencent', '{\"secretId\":\"kcssds\",\"secretKey\":\"dsdscxcxc\",\"signName\":\"ccx\",\"templateCode\":\"xzxzxz\"}', '0', NULL, 'test', '2025-07-20 10:01:44', '2025-07-28 13:51:10'); -INSERT INTO `notice_channel` (`id`, `name`, `channel_type`, `config`, `status`, `remark`, `creator`, `create_time`, `update_time`) VALUES (6, 'cdcndjc', 'feishu', '{\"webhook\":\"kdsdsndsd\"}', '0', NULL, 'test', '2025-07-20 10:02:03', '2025-07-28 13:51:10'); -INSERT INTO `notice_channel` (`id`, `name`, `channel_type`, `config`, `status`, `remark`, `creator`, `create_time`, `update_time`) VALUES (7, '三楼消息', 'webhook', '{\"webhook\":\"http://192.168.31.194:9092/test/echo\",\"AuthTokenKey\":\"Universal_web\",\"TokenValue\":\"xsxscdscd\"}', '0', NULL, 'iot', '2025-07-23 20:35:07', '2025-08-10 22:02:08'); -COMMIT; - --- ---------------------------- --- Table structure for notice_send_record --- ---------------------------- -DROP TABLE IF EXISTS `notice_send_record`; -CREATE TABLE `notice_send_record` ( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', - `template_id` bigint DEFAULT NULL COMMENT '模板ID', - `config_id` bigint DEFAULT NULL COMMENT '通知配置ID', - `receivers` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '实际收件人', - `params` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '实际参数(JSON字符串)', - `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '发送状态(如SUCCESS、FAIL)', - `result` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '返回结果', - `send_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '发送时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_template_id` (`template_id`) USING BTREE, - KEY `idx_config_id` (`config_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='通知发送记录表'; - --- ---------------------------- --- Records of notice_send_record --- ---------------------------- -BEGIN; -INSERT INTO `notice_send_record` (`id`, `template_id`, `config_id`, `receivers`, `params`, `status`, `result`, `send_time`) VALUES (1, 3, 3, NULL, '{sceneName=联动, execTime=2025-08-15T14:18:02.877686094, trigger=[{\"trigger\":\"device\",\"type\":\"event\",\"deviceId\":\"ov00014117\",\"deviceName\":\"ov00014117\",\"modelId\":\"batteryRestore\",\"filters\":[]}], productKey=681c0775c2dc427d0480ab5f, deviceId=ov00014117, deviceName=潜江雅园1号楼底商店铺, iotId=7af18836921a48e9aedbb33551032a8a, userUnionId=test, messageType=EVENT, deviceNode=DEVICE, sceneId=63, action=TriggerBO(trigger=notice, cron=null, type=null, deviceId=null, deviceName=null, modelId=null, filters=[], execData=null, noticeTemplateId=3, noticeTemplateName=Aleo的验证模版, execTriggerType=null), time=1755238682672, event=batteryRestore, properties={}}', 'SUCCESS', 'OK', '2025-08-15 14:18:03'); -INSERT INTO `notice_send_record` (`id`, `template_id`, `config_id`, `receivers`, `params`, `status`, `result`, `send_time`) VALUES (2, 5, 7, NULL, '{sceneName=联动, execTime=2025-08-15T14:18:03.173005886, trigger=[{\"trigger\":\"device\",\"type\":\"event\",\"deviceId\":\"ov00014117\",\"deviceName\":\"ov00014117\",\"modelId\":\"batteryRestore\",\"filters\":[]}], productKey=681c0775c2dc427d0480ab5f, deviceId=ov00014117, deviceName=潜江雅园1号楼底商店铺, iotId=7af18836921a48e9aedbb33551032a8a, userUnionId=test, messageType=EVENT, deviceNode=DEVICE, sceneId=63, action=TriggerBO(trigger=notice, cron=null, type=null, deviceId=null, deviceName=null, modelId=null, filters=[], execData=null, noticeTemplateId=5, noticeTemplateName=广丰机房消息推送, execTriggerType=null), time=1755238682672, event=batteryRestore, properties={}}', 'SUCCESS', 'OK', '2025-08-15 14:18:03'); -INSERT INTO `notice_send_record` (`id`, `template_id`, `config_id`, `receivers`, `params`, `status`, `result`, `send_time`) VALUES (3, 3, 3, NULL, '{sceneName=联动, execTime=2025-08-15T16:25:00.980141149, trigger=[{\"trigger\":\"device\",\"type\":\"event\",\"deviceId\":\"ov00014117\",\"deviceName\":\"ov00014117\",\"modelId\":\"batteryRestore\",\"filters\":[]}], productKey=681c0775c2dc427d0480ab5f, deviceId=ov00014117, deviceName=潜江雅园1号楼底商店铺, iotId=7af18836921a48e9aedbb33551032a8a, userUnionId=test, messageType=EVENT, deviceNode=DEVICE, sceneId=63, action=TriggerBO(trigger=notice, cron=null, type=null, deviceId=null, deviceName=null, modelId=null, filters=[], execData=null, noticeTemplateId=3, noticeTemplateName=Aleo的验证模版, execTriggerType=null), time=1755246300935, event=batteryRestore, properties={}}', 'SUCCESS', 'OK', '2025-08-15 16:25:01'); -INSERT INTO `notice_send_record` (`id`, `template_id`, `config_id`, `receivers`, `params`, `status`, `result`, `send_time`) VALUES (4, 5, 7, NULL, '{sceneName=联动, execTime=2025-08-15T16:25:01.410751050, trigger=[{\"trigger\":\"device\",\"type\":\"event\",\"deviceId\":\"ov00014117\",\"deviceName\":\"ov00014117\",\"modelId\":\"batteryRestore\",\"filters\":[]}], productKey=681c0775c2dc427d0480ab5f, deviceId=ov00014117, deviceName=潜江雅园1号楼底商店铺, iotId=7af18836921a48e9aedbb33551032a8a, userUnionId=test, messageType=EVENT, deviceNode=DEVICE, sceneId=63, action=TriggerBO(trigger=notice, cron=null, type=null, deviceId=null, deviceName=null, modelId=null, filters=[], execData=null, noticeTemplateId=5, noticeTemplateName=广丰机房消息推送, execTriggerType=null), time=1755246300935, event=batteryRestore, properties={}}', 'SUCCESS', 'OK', '2025-08-15 16:25:01'); -INSERT INTO `notice_send_record` (`id`, `template_id`, `config_id`, `receivers`, `params`, `status`, `result`, `send_time`) VALUES (5, 3, 3, NULL, '{sceneName=联动, execTime=2025-08-15T20:39:49.057189411, trigger=[{\"trigger\":\"device\",\"type\":\"event\",\"deviceId\":\"ov00014117\",\"deviceName\":\"ov00014117\",\"modelId\":\"batteryRestore\",\"filters\":[]}], productKey=681c0775c2dc427d0480ab5f, deviceId=ov00014117, deviceName=潜江雅园1号楼底商店铺, iotId=7af18836921a48e9aedbb33551032a8a, userUnionId=test, messageType=EVENT, deviceNode=DEVICE, sceneId=63, action=TriggerBO(trigger=notice, cron=null, type=null, deviceId=null, deviceName=null, modelId=null, filters=[], execData=null, noticeTemplateId=3, noticeTemplateName=Aleo的验证模版, execTriggerType=null), time=1755261588961, event=batteryRestore, properties={}}', 'SUCCESS', 'OK', '2025-08-15 20:39:50'); -INSERT INTO `notice_send_record` (`id`, `template_id`, `config_id`, `receivers`, `params`, `status`, `result`, `send_time`) VALUES (6, 5, 7, NULL, '{sceneName=联动, execTime=2025-08-15T20:39:50.071993579, trigger=[{\"trigger\":\"device\",\"type\":\"event\",\"deviceId\":\"ov00014117\",\"deviceName\":\"ov00014117\",\"modelId\":\"batteryRestore\",\"filters\":[]}], productKey=681c0775c2dc427d0480ab5f, deviceId=ov00014117, deviceName=潜江雅园1号楼底商店铺, iotId=7af18836921a48e9aedbb33551032a8a, userUnionId=test, messageType=EVENT, deviceNode=DEVICE, sceneId=63, action=TriggerBO(trigger=notice, cron=null, type=null, deviceId=null, deviceName=null, modelId=null, filters=[], execData=null, noticeTemplateId=5, noticeTemplateName=广丰机房消息推送, execTriggerType=null), time=1755261588961, event=batteryRestore, properties={}}', 'SUCCESS', 'OK', '2025-08-15 20:39:50'); -INSERT INTO `notice_send_record` (`id`, `template_id`, `config_id`, `receivers`, `params`, `status`, `result`, `send_time`) VALUES (7, 3, 3, NULL, '{sceneName=联动, execTime=2025-08-15T23:18:28.783384155, trigger=[{\"trigger\":\"device\",\"type\":\"event\",\"deviceId\":\"ov00014117\",\"deviceName\":\"ov00014117\",\"modelId\":\"batteryRestore\",\"filters\":[]}], productKey=681c0775c2dc427d0480ab5f, deviceId=ov00014117, deviceName=潜江雅园1号楼底商店铺, iotId=7af18836921a48e9aedbb33551032a8a, userUnionId=test, messageType=EVENT, deviceNode=DEVICE, sceneId=63, action=TriggerBO(trigger=notice, cron=null, type=null, deviceId=null, deviceName=null, modelId=null, filters=[], execData=null, noticeTemplateId=3, noticeTemplateName=Aleo的验证模版, execTriggerType=null), eventName=电池恢复正常, time=1755271108374, event=batteryRestore, properties={}}', 'SUCCESS', 'OK', '2025-08-15 23:18:29'); -INSERT INTO `notice_send_record` (`id`, `template_id`, `config_id`, `receivers`, `params`, `status`, `result`, `send_time`) VALUES (8, 3, 3, NULL, '{sceneName=联动, execTime=2025-08-15T23:18:28.786797391, trigger=[{\"trigger\":\"device\",\"type\":\"event\",\"deviceId\":\"ov00014117\",\"deviceName\":\"ov00014117\",\"modelId\":\"batteryRestore\",\"filters\":[]}], productKey=681c0775c2dc427d0480ab5f, deviceId=ov00014117, deviceName=潜江雅园1号楼底商店铺, iotId=7af18836921a48e9aedbb33551032a8a, userUnionId=test, messageType=EVENT, deviceNode=DEVICE, sceneId=63, action=TriggerBO(trigger=notice, cron=null, type=null, deviceId=null, deviceName=null, modelId=null, filters=[], execData=null, noticeTemplateId=3, noticeTemplateName=Aleo的验证模版, execTriggerType=null), eventName=电池恢复正常, time=1755271108338, event=batteryRestore, properties={}}', 'SUCCESS', 'OK', '2025-08-15 23:18:29'); -INSERT INTO `notice_send_record` (`id`, `template_id`, `config_id`, `receivers`, `params`, `status`, `result`, `send_time`) VALUES (9, 5, 7, NULL, '{sceneName=联动, execTime=2025-08-15T23:18:29.081467901, trigger=[{\"trigger\":\"device\",\"type\":\"event\",\"deviceId\":\"ov00014117\",\"deviceName\":\"ov00014117\",\"modelId\":\"batteryRestore\",\"filters\":[]}], productKey=681c0775c2dc427d0480ab5f, deviceId=ov00014117, deviceName=潜江雅园1号楼底商店铺, iotId=7af18836921a48e9aedbb33551032a8a, userUnionId=test, messageType=EVENT, deviceNode=DEVICE, sceneId=63, action=TriggerBO(trigger=notice, cron=null, type=null, deviceId=null, deviceName=null, modelId=null, filters=[], execData=null, noticeTemplateId=5, noticeTemplateName=广丰机房消息推送, execTriggerType=null), eventName=电池恢复正常, time=1755271108374, event=batteryRestore, properties={}}', 'SUCCESS', 'OK', '2025-08-15 23:18:29'); -INSERT INTO `notice_send_record` (`id`, `template_id`, `config_id`, `receivers`, `params`, `status`, `result`, `send_time`) VALUES (10, 5, 7, NULL, '{sceneName=联动, execTime=2025-08-15T23:18:29.081467901, trigger=[{\"trigger\":\"device\",\"type\":\"event\",\"deviceId\":\"ov00014117\",\"deviceName\":\"ov00014117\",\"modelId\":\"batteryRestore\",\"filters\":[]}], productKey=681c0775c2dc427d0480ab5f, deviceId=ov00014117, deviceName=潜江雅园1号楼底商店铺, iotId=7af18836921a48e9aedbb33551032a8a, userUnionId=test, messageType=EVENT, deviceNode=DEVICE, sceneId=63, action=TriggerBO(trigger=notice, cron=null, type=null, deviceId=null, deviceName=null, modelId=null, filters=[], execData=null, noticeTemplateId=5, noticeTemplateName=广丰机房消息推送, execTriggerType=null), eventName=电池恢复正常, time=1755271108338, event=batteryRestore, properties={}}', 'SUCCESS', 'OK', '2025-08-15 23:18:29'); -INSERT INTO `notice_send_record` (`id`, `template_id`, `config_id`, `receivers`, `params`, `status`, `result`, `send_time`) VALUES (11, 3, 3, NULL, '{sceneName=联动, execTime=2025-08-16T11:53:24.445527, trigger=[{\"trigger\":\"device\",\"type\":\"event\",\"deviceId\":\"ov00014117\",\"deviceName\":\"ov00014117\",\"modelId\":\"batteryRestore\",\"filters\":[]}], productKey=681c0775c2dc427d0480ab5f, deviceId=ov00014117, deviceName=潜江雅园1号楼底商店铺, iotId=7af18836921a48e9aedbb33551032a8a, userUnionId=test, messageType=EVENT, deviceNode=DEVICE, sceneId=63, action=TriggerBO(trigger=notice, cron=null, type=null, deviceId=null, deviceName=null, modelId=null, filters=[], execData=null, noticeTemplateId=3, noticeTemplateName=Aleo的验证模版, execTriggerType=null), time=1755316404345, event=batteryRestore, properties={}}', 'SUCCESS', 'OK', '2025-08-16 11:53:25'); -INSERT INTO `notice_send_record` (`id`, `template_id`, `config_id`, `receivers`, `params`, `status`, `result`, `send_time`) VALUES (12, 5, 7, NULL, '{sceneName=联动, execTime=2025-08-16T11:53:36.419875, trigger=[{\"trigger\":\"device\",\"type\":\"event\",\"deviceId\":\"ov00014117\",\"deviceName\":\"ov00014117\",\"modelId\":\"batteryRestore\",\"filters\":[]}], productKey=681c0775c2dc427d0480ab5f, deviceId=ov00014117, deviceName=潜江雅园1号楼底商店铺, iotId=7af18836921a48e9aedbb33551032a8a, userUnionId=test, messageType=EVENT, deviceNode=DEVICE, sceneId=63, action=TriggerBO(trigger=notice, cron=null, type=null, deviceId=null, deviceName=null, modelId=null, filters=[], execData=null, noticeTemplateId=5, noticeTemplateName=广丰机房消息推送, execTriggerType=null), time=1755316404345, event=batteryRestore, properties={}}', 'SUCCESS', 'OK', '2025-08-16 11:53:36'); -INSERT INTO `notice_send_record` (`id`, `template_id`, `config_id`, `receivers`, `params`, `status`, `result`, `send_time`) VALUES (13, 3, 3, NULL, '{sceneName=联动, execTime=2025-08-16T13:55:55.926409797, trigger=[{\"trigger\":\"device\",\"type\":\"event\",\"deviceId\":\"ov00014117\",\"deviceName\":\"ov00014117\",\"modelId\":\"batteryRestore\",\"filters\":[]}], productKey=681c0775c2dc427d0480ab5f, deviceId=ov00014117, deviceName=潜江雅园1号楼底商店铺, iotId=7af18836921a48e9aedbb33551032a8a, userUnionId=test, messageType=EVENT, deviceNode=DEVICE, sceneId=63, action=TriggerBO(trigger=notice, cron=null, type=null, deviceId=null, deviceName=null, modelId=null, filters=[], execData=null, noticeTemplateId=3, noticeTemplateName=Aleo的验证模版, execTriggerType=null), time=1755323755908, event=batteryRestore, properties={}}', 'SUCCESS', 'OK', '2025-08-16 13:55:56'); -INSERT INTO `notice_send_record` (`id`, `template_id`, `config_id`, `receivers`, `params`, `status`, `result`, `send_time`) VALUES (14, 5, 7, NULL, '{sceneName=联动, execTime=2025-08-16T13:55:56.266825124, trigger=[{\"trigger\":\"device\",\"type\":\"event\",\"deviceId\":\"ov00014117\",\"deviceName\":\"ov00014117\",\"modelId\":\"batteryRestore\",\"filters\":[]}], productKey=681c0775c2dc427d0480ab5f, deviceId=ov00014117, deviceName=潜江雅园1号楼底商店铺, iotId=7af18836921a48e9aedbb33551032a8a, userUnionId=test, messageType=EVENT, deviceNode=DEVICE, sceneId=63, action=TriggerBO(trigger=notice, cron=null, type=null, deviceId=null, deviceName=null, modelId=null, filters=[], execData=null, noticeTemplateId=5, noticeTemplateName=广丰机房消息推送, execTriggerType=null), time=1755323755908, event=batteryRestore, properties={}}', 'SUCCESS', 'OK', '2025-08-16 13:55:56'); -INSERT INTO `notice_send_record` (`id`, `template_id`, `config_id`, `receivers`, `params`, `status`, `result`, `send_time`) VALUES (15, 3, 3, NULL, '{sceneName=联动, execTime=2025-08-16T16:15:19.217470131, trigger=[{\"trigger\":\"device\",\"type\":\"event\",\"deviceId\":\"ov00014117\",\"deviceName\":\"ov00014117\",\"modelId\":\"batteryRestore\",\"filters\":[]}], productKey=681c0775c2dc427d0480ab5f, deviceId=ov00014117, deviceName=潜江雅园1号楼底商店铺, iotId=7af18836921a48e9aedbb33551032a8a, userUnionId=test, messageType=EVENT, deviceNode=DEVICE, sceneId=63, action=TriggerBO(trigger=notice, cron=null, type=null, deviceId=null, deviceName=null, modelId=null, filters=[], execData=null, noticeTemplateId=3, noticeTemplateName=Aleo的验证模版, execTriggerType=null), time=1755332119170, event=batteryRestore, properties={}}', 'SUCCESS', 'OK', '2025-08-16 16:15:20'); -INSERT INTO `notice_send_record` (`id`, `template_id`, `config_id`, `receivers`, `params`, `status`, `result`, `send_time`) VALUES (16, 5, 7, NULL, '{sceneName=联动, execTime=2025-08-16T16:15:19.634643340, trigger=[{\"trigger\":\"device\",\"type\":\"event\",\"deviceId\":\"ov00014117\",\"deviceName\":\"ov00014117\",\"modelId\":\"batteryRestore\",\"filters\":[]}], productKey=681c0775c2dc427d0480ab5f, deviceId=ov00014117, deviceName=潜江雅园1号楼底商店铺, iotId=7af18836921a48e9aedbb33551032a8a, userUnionId=test, messageType=EVENT, deviceNode=DEVICE, sceneId=63, action=TriggerBO(trigger=notice, cron=null, type=null, deviceId=null, deviceName=null, modelId=null, filters=[], execData=null, noticeTemplateId=5, noticeTemplateName=广丰机房消息推送, execTriggerType=null), time=1755332119170, event=batteryRestore, properties={}}', 'SUCCESS', 'OK', '2025-08-16 16:15:20'); -INSERT INTO `notice_send_record` (`id`, `template_id`, `config_id`, `receivers`, `params`, `status`, `result`, `send_time`) VALUES (17, 3, 3, NULL, '{sceneName=联动, execTime=2025-08-16T21:14:36.422883894, trigger=[{\"trigger\":\"device\",\"type\":\"event\",\"deviceId\":\"ov00014117\",\"deviceName\":\"ov00014117\",\"modelId\":\"batteryRestore\",\"filters\":[]}], productKey=681c0775c2dc427d0480ab5f, deviceId=ov00014117, deviceName=潜江雅园1号楼底商店铺, iotId=7af18836921a48e9aedbb33551032a8a, userUnionId=test, messageType=EVENT, deviceNode=DEVICE, sceneId=63, action=TriggerBO(trigger=notice, cron=null, type=null, deviceId=null, deviceName=null, modelId=null, filters=[], execData=null, noticeTemplateId=3, noticeTemplateName=Aleo的验证模版, execTriggerType=null), time=1755350076311, event=batteryRestore, properties={}}', 'SUCCESS', 'OK', '2025-08-16 21:14:37'); -INSERT INTO `notice_send_record` (`id`, `template_id`, `config_id`, `receivers`, `params`, `status`, `result`, `send_time`) VALUES (18, 5, 7, NULL, '{sceneName=联动, execTime=2025-08-16T21:14:36.806093456, trigger=[{\"trigger\":\"device\",\"type\":\"event\",\"deviceId\":\"ov00014117\",\"deviceName\":\"ov00014117\",\"modelId\":\"batteryRestore\",\"filters\":[]}], productKey=681c0775c2dc427d0480ab5f, deviceId=ov00014117, deviceName=潜江雅园1号楼底商店铺, iotId=7af18836921a48e9aedbb33551032a8a, userUnionId=test, messageType=EVENT, deviceNode=DEVICE, sceneId=63, action=TriggerBO(trigger=notice, cron=null, type=null, deviceId=null, deviceName=null, modelId=null, filters=[], execData=null, noticeTemplateId=5, noticeTemplateName=广丰机房消息推送, execTriggerType=null), time=1755350076311, event=batteryRestore, properties={}}', 'SUCCESS', 'OK', '2025-08-16 21:14:37'); -INSERT INTO `notice_send_record` (`id`, `template_id`, `config_id`, `receivers`, `params`, `status`, `result`, `send_time`) VALUES (19, 3, 3, NULL, '{sceneName=联动, execTime=2025-08-17T14:29:34.595719677, trigger=[{\"trigger\":\"device\",\"type\":\"event\",\"deviceId\":\"ov00014117\",\"deviceName\":\"ov00014117\",\"modelId\":\"batteryRestore\",\"filters\":[]}], productKey=681c0775c2dc427d0480ab5f, deviceId=ov00014117, deviceName=潜江雅园1号楼底商店铺, iotId=7af18836921a48e9aedbb33551032a8a, userUnionId=test, messageType=EVENT, deviceNode=DEVICE, sceneId=63, action=TriggerBO(trigger=notice, cron=null, type=null, deviceId=null, deviceName=null, modelId=null, filters=[], execData=null, noticeTemplateId=3, noticeTemplateName=Aleo的验证模版, execTriggerType=null), time=1755412174562, event=batteryRestore, properties={}}', 'SUCCESS', 'OK', '2025-08-17 14:29:35'); -INSERT INTO `notice_send_record` (`id`, `template_id`, `config_id`, `receivers`, `params`, `status`, `result`, `send_time`) VALUES (20, 5, 7, NULL, '{sceneName=联动, execTime=2025-08-17T14:29:34.962613774, trigger=[{\"trigger\":\"device\",\"type\":\"event\",\"deviceId\":\"ov00014117\",\"deviceName\":\"ov00014117\",\"modelId\":\"batteryRestore\",\"filters\":[]}], productKey=681c0775c2dc427d0480ab5f, deviceId=ov00014117, deviceName=潜江雅园1号楼底商店铺, iotId=7af18836921a48e9aedbb33551032a8a, userUnionId=test, messageType=EVENT, deviceNode=DEVICE, sceneId=63, action=TriggerBO(trigger=notice, cron=null, type=null, deviceId=null, deviceName=null, modelId=null, filters=[], execData=null, noticeTemplateId=5, noticeTemplateName=广丰机房消息推送, execTriggerType=null), time=1755412174562, event=batteryRestore, properties={}}', 'SUCCESS', 'OK', '2025-08-17 14:29:35'); -INSERT INTO `notice_send_record` (`id`, `template_id`, `config_id`, `receivers`, `params`, `status`, `result`, `send_time`) VALUES (21, 3, 3, NULL, '{sceneName=联动, sceneId=63, execTime=2025-08-20T09:30:21.288363321, action=TriggerBO(trigger=notice, cron=null, type=null, deviceId=null, deviceName=null, modelId=null, filters=[], execData=null, noticeTemplateId=3, noticeTemplateName=Aleo的验证模版, execTriggerType=null), trigger=[{\"trigger\":\"device\",\"type\":\"event\",\"deviceId\":\"ov00014117\",\"deviceName\":\"ov00014117\",\"modelId\":\"batteryRestore\",\"filters\":[]}]}', 'SUCCESS', 'OK', '2025-08-20 09:30:22'); -INSERT INTO `notice_send_record` (`id`, `template_id`, `config_id`, `receivers`, `params`, `status`, `result`, `send_time`) VALUES (22, 5, 7, NULL, '{sceneName=联动, sceneId=63, execTime=2025-08-20T09:30:21.656242463, action=TriggerBO(trigger=notice, cron=null, type=null, deviceId=null, deviceName=null, modelId=null, filters=[], execData=null, noticeTemplateId=5, noticeTemplateName=广丰机房消息推送, execTriggerType=null), trigger=[{\"trigger\":\"device\",\"type\":\"event\",\"deviceId\":\"ov00014117\",\"deviceName\":\"ov00014117\",\"modelId\":\"batteryRestore\",\"filters\":[]}]}', 'SUCCESS', 'OK', '2025-08-20 09:30:22'); -INSERT INTO `notice_send_record` (`id`, `template_id`, `config_id`, `receivers`, `params`, `status`, `result`, `send_time`) VALUES (23, 3, 3, NULL, '{sceneName=联动, execTime=2025-08-26T13:50:31.860793421, trigger=[{\"trigger\":\"device\",\"type\":\"event\",\"deviceId\":\"ov00014117\",\"deviceName\":\"ov00014117\",\"modelId\":\"batteryRestore\",\"filters\":[]}], productKey=681c0775c2dc427d0480ab5f, deviceId=ov00014117, deviceName=潜江雅园1号楼底商店铺, iotId=7af18836921a48e9aedbb33551032a8a, userUnionId=test, messageType=EVENT, deviceNode=DEVICE, sceneId=63, action=TriggerBO(trigger=notice, cron=null, type=null, deviceId=null, deviceName=null, modelId=null, filters=[], execData=null, noticeTemplateId=3, noticeTemplateName=Aleo的验证模版, execTriggerType=null), time=1756187430545, event=batteryRestore, properties={}}', 'SUCCESS', 'OK', '2025-08-26 13:50:39'); -INSERT INTO `notice_send_record` (`id`, `template_id`, `config_id`, `receivers`, `params`, `status`, `result`, `send_time`) VALUES (24, 5, 7, NULL, '{sceneName=联动, execTime=2025-08-26T13:50:39.344427857, trigger=[{\"trigger\":\"device\",\"type\":\"event\",\"deviceId\":\"ov00014117\",\"deviceName\":\"ov00014117\",\"modelId\":\"batteryRestore\",\"filters\":[]}], productKey=681c0775c2dc427d0480ab5f, deviceId=ov00014117, deviceName=潜江雅园1号楼底商店铺, iotId=7af18836921a48e9aedbb33551032a8a, userUnionId=test, messageType=EVENT, deviceNode=DEVICE, sceneId=63, action=TriggerBO(trigger=notice, cron=null, type=null, deviceId=null, deviceName=null, modelId=null, filters=[], execData=null, noticeTemplateId=5, noticeTemplateName=广丰机房消息推送, execTriggerType=null), time=1756187430545, event=batteryRestore, properties={}}', 'SUCCESS', 'OK', '2025-08-26 13:50:40'); -INSERT INTO `notice_send_record` (`id`, `template_id`, `config_id`, `receivers`, `params`, `status`, `result`, `send_time`) VALUES (25, 3, 3, NULL, '{sceneName=联动, sceneId=63, execTime=2025-08-26T15:17:04.707173421, action=TriggerBO(trigger=notice, cron=null, type=null, deviceId=null, deviceName=null, modelId=null, filters=[], execData=null, noticeTemplateId=3, noticeTemplateName=Aleo的验证模版, execTriggerType=null), trigger=[{\"trigger\":\"device\",\"type\":\"event\",\"deviceId\":\"ov00014117\",\"deviceName\":\"ov00014117\",\"modelId\":\"batteryRestore\",\"filters\":[]}]}', 'SUCCESS', 'OK', '2025-08-26 15:17:05'); -INSERT INTO `notice_send_record` (`id`, `template_id`, `config_id`, `receivers`, `params`, `status`, `result`, `send_time`) VALUES (26, 5, 7, NULL, '{sceneName=联动, sceneId=63, execTime=2025-08-26T15:17:04.900569804, action=TriggerBO(trigger=notice, cron=null, type=null, deviceId=null, deviceName=null, modelId=null, filters=[], execData=null, noticeTemplateId=5, noticeTemplateName=广丰机房消息推送, execTriggerType=null), trigger=[{\"trigger\":\"device\",\"type\":\"event\",\"deviceId\":\"ov00014117\",\"deviceName\":\"ov00014117\",\"modelId\":\"batteryRestore\",\"filters\":[]}]}', 'SUCCESS', 'OK', '2025-08-26 15:17:05'); -INSERT INTO `notice_send_record` (`id`, `template_id`, `config_id`, `receivers`, `params`, `status`, `result`, `send_time`) VALUES (27, 3, 3, NULL, '{sceneName=联动, sceneId=63, execTime=2025-08-26T16:31:06.471396634, action=TriggerBO(trigger=notice, cron=null, type=null, deviceId=null, deviceName=null, modelId=null, filters=[], execData=null, noticeTemplateId=3, noticeTemplateName=Aleo的验证模版, execTriggerType=null), trigger=[{\"trigger\":\"device\",\"type\":\"event\",\"deviceId\":\"ov00014117\",\"deviceName\":\"ov00014117\",\"modelId\":\"batteryRestore\",\"filters\":[]}]}', 'SUCCESS', 'OK', '2025-08-26 16:31:07'); -INSERT INTO `notice_send_record` (`id`, `template_id`, `config_id`, `receivers`, `params`, `status`, `result`, `send_time`) VALUES (28, 5, 7, NULL, '{sceneName=联动, sceneId=63, execTime=2025-08-26T16:31:06.645486175, action=TriggerBO(trigger=notice, cron=null, type=null, deviceId=null, deviceName=null, modelId=null, filters=[], execData=null, noticeTemplateId=5, noticeTemplateName=广丰机房消息推送, execTriggerType=null), trigger=[{\"trigger\":\"device\",\"type\":\"event\",\"deviceId\":\"ov00014117\",\"deviceName\":\"ov00014117\",\"modelId\":\"batteryRestore\",\"filters\":[]}]}', 'SUCCESS', 'OK', '2025-08-26 16:31:07'); -COMMIT; - --- ---------------------------- --- Table structure for notice_template --- ---------------------------- -DROP TABLE IF EXISTS `notice_template`; -CREATE TABLE `notice_template` ( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', - `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '模板名称', - `channel_id` bigint NOT NULL COMMENT '关联的通知配置ID', - `channel_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '渠道类型(如dingTalk、sms_ali、sms_tencent、feishu、wecom、email等)', - `status` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '状态', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '模板内容(支持变量占位符)', - `receivers` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '收件人(手机号、邮箱、群ID等,逗号分隔或JSON)', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注', - `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人', - `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_config_id` (`channel_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='通知模板表'; - --- ---------------------------- --- Records of notice_template --- ---------------------------- -BEGIN; -INSERT INTO `notice_template` (`id`, `name`, `channel_id`, `channel_type`, `status`, `content`, `receivers`, `remark`, `creator`, `create_time`, `update_time`) VALUES (2, '行啊叫啊是', 4, 'feishu', '1', '#{productKey}#{deviceName}#{messageId}#{location}#{alertLevel}#{payload}#{topic}#{timestamp}#{eventType}', NULL, '飒飒', 'test', '2025-07-20 10:10:40', '2025-07-28 13:50:59'); -INSERT INTO `notice_template` (`id`, `name`, `channel_id`, `channel_type`, `status`, `content`, `receivers`, `remark`, `creator`, `create_time`, `update_time`) VALUES (3, 'Aleo的验证模版', 3, 'dingTalk', '1', '尊敬的用户你好,设备deviceId=#{deviceId},设备名称=#{deviceName}产生事件【#{event}】,所属租户 #appUnionId 请注意查看!', NULL, 'NASA\'s', 'test', '2025-07-20 10:57:39', '2025-07-30 15:54:03'); -INSERT INTO `notice_template` (`id`, `name`, `channel_id`, `channel_type`, `status`, `content`, `receivers`, `remark`, `creator`, `create_time`, `update_time`) VALUES (4, '3点提醒', 3, 'dingTalk', '1', '你好,现在是15点了哦~记得喝水~', NULL, '', 'test', '2025-07-23 14:59:43', '2025-07-28 13:50:59'); -INSERT INTO `notice_template` (`id`, `name`, `channel_id`, `channel_type`, `status`, `content`, `receivers`, `remark`, `creator`, `create_time`, `update_time`) VALUES (5, '三楼消息推送', 7, 'webhook', '1', '{\"deviceId\":\"#{deviceId}\",\"success\":\"ok\"}', NULL, 'JSON', 'iot', '2025-07-23 20:47:31', '2025-08-10 22:01:42'); -COMMIT; - --- ---------------------------- --- Table structure for oauth_client_details --- ---------------------------- -DROP TABLE IF EXISTS `oauth_client_details`; -CREATE TABLE `oauth_client_details` ( - `client_id` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '客户端标识', - `resource_ids` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '资源标识', - `client_secret` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '客户端秘钥', - `scope` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `authorized_grant_types` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '授权类型\r\n authorization_code:授权码模式\r\nrefresh_token:刷新token\r\npassword:密码模式\r\nimplicit:隐私授权模式\r\nclient_credentials:客户端模式', - `web_server_redirect_uri` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '授权成功后回调URL', - `authorities` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `access_token_validity` int DEFAULT NULL COMMENT '访问令牌的有效时间', - `refresh_token_validity` int DEFAULT NULL COMMENT '刷新令牌的有效时间', - `additional_information` varchar(4096) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '额外的信息,备用', - `autoapprove` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '自动批准标识:0代表不显示授权页面 1显示授权页面', - `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '用户名', - `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '密码', - `iot_union_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '唯一标识', - PRIMARY KEY (`client_id`) USING BTREE, - UNIQUE KEY `idx_unq_client_id` (`client_id`) USING BTREE COMMENT 'client_id唯一校验' -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='oauth2鉴权密钥表'; - --- ---------------------------- --- Records of oauth_client_details --- ---------------------------- -BEGIN; -INSERT INTO `oauth_client_details` (`client_id`, `resource_ids`, `client_secret`, `scope`, `authorized_grant_types`, `web_server_redirect_uri`, `authorities`, `access_token_validity`, `refresh_token_validity`, `additional_information`, `autoapprove`, `username`, `password`, `iot_union_id`) VALUES ('9PSfpC7Yp53fih5H', NULL, '$2a$10$L.cmEPEr/jc3wnoAsjjzO.txPa4voKe.ONO3fMnzKW39yI5Nq53Si', 'all', 'client_credentials,refresh_token,password', 'http://localhost:9091/client-authcode/login', NULL, 350, 36000, NULL, '1', NULL, NULL, 'iot'); -COMMIT; - --- ---------------------------- --- Table structure for protocol_file --- ---------------------------- -DROP TABLE IF EXISTS `protocol_file`; -CREATE TABLE `protocol_file` ( - `file_path` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - `file_content` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin, - PRIMARY KEY (`file_path`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; - --- ---------------------------- --- Records of protocol_file --- ---------------------------- -BEGIN; -INSERT INTO `protocol_file` (`file_path`, `file_content`) VALUES ('/api/', 'this is directory'); -INSERT INTO `protocol_file` (`file_path`, `file_content`) VALUES ('/api/123/', 'this is directory'); -INSERT INTO `protocol_file` (`file_path`, `file_content`) VALUES ('/api/123/group.json', '{\n \"properties\" : { },\n \"id\" : \"7a98d2939f3344ab8641d4d667c2c262\",\n \"name\" : \"123\",\n \"type\" : \"api\",\n \"parentId\" : \"0\",\n \"path\" : \"12\",\n \"createTime\" : 1755090411512,\n \"updateTime\" : null,\n \"createBy\" : \"test\",\n \"updateBy\" : null,\n \"paths\" : [ ],\n \"options\" : [ ]\n}'); -INSERT INTO `protocol_file` (`file_path`, `file_content`) VALUES ('/datasource/', 'this is directory'); -INSERT INTO `protocol_file` (`file_path`, `file_content`) VALUES ('/function/', 'this is directory'); -INSERT INTO `protocol_file` (`file_path`, `file_content`) VALUES ('universal/api/', 'this is directory'); -INSERT INTO `protocol_file` (`file_path`, `file_content`) VALUES ('universal/api/Ctwing(电信AEP)/', 'this is directory'); -INSERT INTO `protocol_file` (`file_path`, `file_content`) VALUES ('universal/api/Ctwing(电信AEP)/group.json', '{\n \"properties\" : { },\n \"id\" : \"69eeb7ac5e72480d97f16064fe01a938\",\n \"name\" : \"Ctwing(电信AEP)\",\n \"type\" : \"api\",\n \"parentId\" : \"0\",\n \"path\" : \"ctwing\",\n \"createTime\" : 1752800093705,\n \"updateTime\" : null,\n \"createBy\" : \"test\",\n \"updateBy\" : null,\n \"paths\" : [ ],\n \"options\" : [ ]\n}'); -INSERT INTO `protocol_file` (`file_path`, `file_content`) VALUES ('universal/api/TCP/', 'this is directory'); -INSERT INTO `protocol_file` (`file_path`, `file_content`) VALUES ('universal/api/TCP/group.json', '{\n \"properties\" : { },\n \"id\" : \"f4beb08dc7fe4157b9f63a22a0e1a430\",\n \"name\" : \"TCP\",\n \"type\" : \"api\",\n \"parentId\" : \"0\",\n \"path\" : \"tcp\",\n \"createTime\" : 1752800005714,\n \"updateTime\" : null,\n \"createBy\" : \"test\",\n \"updateBy\" : null,\n \"paths\" : [ ],\n \"options\" : [ ]\n}'); -INSERT INTO `protocol_file` (`file_path`, `file_content`) VALUES ('universal/api/TCP/单相导轨XA-GXSD8-4G.ms', '{\n \"properties\" : { },\n \"id\" : \"5393bfe75eb64c2182f4308458eadb5e\",\n \"script\" : null,\n \"groupId\" : \"f4beb08dc7fe4157b9f63a22a0e1a430\",\n \"name\" : \"单相导轨XA-GXSD8-4G\",\n \"createTime\" : 1752805008549,\n \"updateTime\" : 1754787309090,\n \"lock\" : null,\n \"createBy\" : \"test\",\n \"updateBy\" : \"test\",\n \"path\" : \"abcxassxnanahsman\",\n \"method\" : \"POST\",\n \"parameters\" : [ ],\n \"options\" : [ ],\n \"requestBody\" : null,\n \"headers\" : [ ],\n \"paths\" : [ ],\n \"responseBody\" : null,\n \"description\" : \"这个是一个电表\",\n \"requestBodyDefinition\" : null,\n \"responseBodyDefinition\" : null\n}\n================================\n//16进制ASCII转STRING\nvar hex2str = stringhex => {\n\n var i = 0\n var asciidata = \"\"\n while (i < stringhex.length()) {\n asciidata += (String.valueOf(Integer.parseInt(stringhex.substring(i, i + 2), 16)) + \",\")\n i += 2\n }\n asciidata = asciidata.substring(0, asciidata.length() - 1)\n return asciiToString(asciidata)\n}\n//大小端转换\nvar reverseStr = data => {\n var rData = \"\"\n if (data.length() >= 0) {\n let seq = data.length()\n while (seq > 0) {\n rData += data.substring(seq - 2, seq)\n seq = seq - 2\n }\n }\n return rData\n}\n//和校验计算\nvar check_CS = strData => {\n let i = 0\n let accum = 0\n while (i < strData.length()) {\n accum += Integer.parseInt(strData.substring(i, i + 2), 16)\n i += 2\n }\n let l = Integer.toHexString(accum).length()\n return Integer.toHexString(accum).substring(l - 2, l).toUpperCase()\n}\n//数据转换 倒转 -33\nvar transform = str => {\n let i = 0\n let result = \'\'\n str = reverseTwoDigit(str)\n while (i < str.length()) {\n if (str.substring(i, 2 + i) == \'33\') {\n i += 2\n result += \'00\'\n } else {\n let value = Integer.parseInt(str.substring(i, 2 + i), 16) - 0x33;\n i += 2\n result += String.format(\'%02X\', value)\n }\n }\n return Integer.parseInt(result, 10)\n}\n//+0x33方法\nvar dataplus = strData => {\n let sData = \'\'\n let i = 0\n let pData = 0\n while (i < strData.length()) {\n pData = (Integer.parseInt(strData.substring(i, i + 2), 16) + 0x33) & 0b11111111\n sData += String.format(\'%02X\', pData)\n i += 2\n }\n return sData\n}\n\n//预解码,解析上报的设备编号产品deviceId\nvar preDecode = payload => {\n var result = {}\n //注册包\n if (payload.length() == 12) {\n result.deviceId = reverseTwoDigit(payload)\n }\n \n //电表电量上报消息预解码\n if(payload.length() == 98 && payload.substring(0,2).equals(\'68\')&& payload.substring(payload.length()-2,payload.length()).equals(\'16\')){\n result.deviceId = reverseStr(payload.substring(2, 14))\n }\n return result\n}\n//上行处理\nvar decode = (payload,context) => {\n var result = []\n var propertiesObj = {\n \"messageType\": \"PROPERTIES\",\n \"properties\": {}\n }\n propertiesObj.properties.originalMessage = payload\n\n\n //propertiesObj.properties.shadow = pData.shadow\n result.push(propertiesObj)\n //心跳包\n if (payload.length() == 12) {\n result.push(propertiesObj)\n propertiesObj.tcpEncode = \'HEX\';\n propertiesObj.replyPayload = \'7868\'\n } else {\n //抄表结果\n if (payload.length() >= 94 && payload.substring(14, 18) == \'6891\') {\n //表号\n propertiesObj.properties.meterNo = reverseStr(payload.substring(2, 14))\n var length = Integer.parseInt(payload.substring(18, 20), 16)\n\n //总用电量\n let mData = (transform(payload.substring(28, 36)) * 0.01).toFixed(2)\n propertiesObj.properties.meterData = mData.substring(0, mData.length() - 1)\n //取影子里的上次读数\n // if (pData!=null &&pData.containsKey(\'shadow\')) {\n // if (pData.shadow.state.reported.containsKey(\'meterData\')) {\n // propertiesObj.properties.lastMeterData = pData.shadow.state.reported.meterData\n // }\n // }\n //propertiesObj.properties.meterData = (transform(payload.substring(28, 36)) * 0.01).toFixed(2)\n //电价\n propertiesObj.properties.meterPrice = (transform(payload.substring(36, 44)) * 0.0001).toFixed(4)\n //电压\n propertiesObj.properties.voltage = (transform(payload.substring(44, 52)) * 0.1).toFixed(1)\n //电流\n propertiesObj.properties.current = (transform(payload.substring(52, 60)) * 0.001).toFixed(3)\n //功率\n propertiesObj.properties.power = (transform(payload.substring(60, 68)) * 0.1).toFixed(1)\n //购电次数\n propertiesObj.properties.purchases = transform(payload.substring(68, 76))\n //预警电量\n propertiesObj.properties.warningPower = (transform(payload.substring(76, 84)) * 0.01).toFixed(2)\n //剩余金额\n propertiesObj.properties.remainingAmount = (transform(payload.substring(84, 92)) * 0.01).toFixed(2)\n propertiesObj.properties.openState = (Integer.parseInt(payload.substring(92, 94), 16) - 0x33) == 27 ? \'1\' : \'0\'\n //新增查询信号值,在reply里面下发\n propertiesObj.tcpEncode = \'HEX\';\n propertiesObj.replyPayload = \'727270632C676574637371\'\n }\n //抄表分包,第一部分\n if (payload.length() == 64 && payload.substring(14, 18) == \'6891\') {\n //表号\n propertiesObj.properties.meterNo = reverseStr(payload.substring(2, 14))\n var length = Integer.parseInt(payload.substring(18, 20), 16)\n\n //总用电量\n let mData = (transform(payload.substring(28, 36)) * 0.01).toFixed(2)\n propertiesObj.properties.meterData = mData.substring(0, mData.length() - 1)\n //取影子里的上次读数\n // if (pData.containsKey(\'shadow\')) {\n // if (pData.shadow.state.reported.containsKey(\'meterData\')) {\n // propertiesObj.properties.lastMeterData = pData.shadow.state.reported.meterData\n // }\n // }\n //propertiesObj.properties.meterData = (transform(payload.substring(28, 36)) * 0.01).toFixed(2)\n //电价\n propertiesObj.properties.meterPrice = (transform(payload.substring(36, 44)) * 0.0001).toFixed(4)\n //电压\n propertiesObj.properties.voltage = (transform(payload.substring(44, 52)) * 0.1).toFixed(1)\n //电流\n propertiesObj.properties.current = (transform(payload.substring(52, 60)) * 0.001).toFixed(3)\n //功率\n propertiesObj.properties.power = (transform(payload.substring(60, 64)) * 0.1).toFixed(1)\n }\n //抄表分包,第二部分\n if (payload.length() == 34) {\n //\n //购电次数\n propertiesObj.properties.purchases = transform(payload.substring(4, 12))\n //预警电量\n propertiesObj.properties.warningPower = (transform(payload.substring(12, 20)) * 0.01).toFixed(2)\n //剩余金额\n propertiesObj.properties.remainingAmount = (transform(payload.substring(20, 28)) * 0.01).toFixed(2)\n propertiesObj.properties.openState = (Integer.parseInt(payload.substring(28, 30), 16) - 0x33) == 27 ? \'1\' : \'0\'\n //新增查询信号值,在reply里面下发\n propertiesObj.tcpEncode = \'HEX\';\n propertiesObj.replyPayload = \'727270632C676574637371\'\n }\n //控制开合闸回复的丢数据头68兼容处理\n if (payload.length() == 48) {\n if (payload.substring(12, 18).equals(\'689C0D\') && ((payload.substring(42, 44).equals(\'4D\')) || (payload.substring(42, 44).equals(\'4E\')))) {\n payload = \'68\' + payload\n }\n }\n\n //控制开合闸回复\n if (payload.substring(14, 18) == \'689C\') {\n let replyswitchObj = {\n \"messageType\": \"REPLY\",\n \"function\": \"switchOnOff\",\n \"data\": {\n \"openState\": (Integer.parseInt(payload.substring(44, 46), 16) - 0x33) == 27 ? \'1\' : \'0\'\n }\n }\n\n result.push(replyswitchObj)\n //同步上报通电断电属性\n propertiesObj.properties.openState = replyswitchObj.data.openState\n //propertiesObj.properties.meterData = (transform(payload.substring(20, 28)) * 0.01).toFixed(2)\n propertiesObj.properties.remainingAmount = (transform(payload.substring(28, 36)) * 0.01).toFixed(2)\n propertiesObj.properties.purchases = transform(payload.substring(36, 44))\n //新增查询信号值,在reply里面下发\n propertiesObj.tcpEncode = \'HEX\';\n propertiesObj.replyPayload = \'727270632C676574637371\'\n }\n //清表回复\n if (payload.substring(14, 18) == \'689A\') {\n let replyswitchObj = {\n \"messageType\": \"REPLY\",\n \"function\": \"reset\",\n \"data\": {\n \"result\": \'设置成功\'\n }\n }\n result.push(replyswitchObj)\n let mData = (transform(payload.substring(28, 36)) * 0.01).toFixed(2)\n propertiesObj.properties.meterData = mData.substring(0, mData.length() - 1)\n //propertiesObj.properties.meterData = (transform(payload.substring(20, 28)) * 0.01).toFixed(2)\n propertiesObj.properties.remainingAmount = (transform(payload.substring(28, 36)) * 0.01).toFixed(2)\n propertiesObj.properties.purchases = transform(payload.substring(36, 44))\n propertiesObj.properties.openState = (Integer.parseInt(payload.substring(44, 46), 16) - 0x33) == 27 ? \'1\' : \'0\'\n }\n //设置限值回复\n if (payload.substring(14, 20) == \'68841C\') {\n let replyLimitObj = {\n \"messageType\": \"REPLY\",\n \"function\": \"setOverloadLimit\",\n \"data\": {\n \"overVoltageLimit\": \"\",\n \"overCurrrentLimit\": \"\"\n }\n }\n result.push(replyLimitObj)\n //囤积金额\n //propertiesObj.properties.hoardAmount = \n\n }\n //售电回复\n if (payload.substring(14, 20) == \'68840C\') {\n let replyRechargeObj = {\n \"messageType\": \"REPLY\",\n \"function\": \"recharge\",\n \"data\": {\n \"result\": \'设置成功\'\n }\n }\n result.push(replyRechargeObj)\n //囤积金额\n //propertiesObj.properties.hoardAmount = \n\n }\n //比较上次读数和这次读数的差额\n if (propertiesObj.properties.containsKey(\'lastMeterData\') && propertiesObj.properties.containsKey(\'meterData\')) {\n let shortfallData = Float.parseFloat(propertiesObj.properties.meterData) - Float.parseFloat(propertiesObj.properties.lastMeterData)\n propertiesObj.properties.shortfallData = Float.parseFloat(shortfallData.toFixed(2))\n if (propertiesObj.properties.shortfallData < 0) {\n let shortfallAlarmObj = {\n \"messageType\": \"EVENT\",\n \"event\": \"\",\n \"data\": {\n \"level\": \"warn\"\n }\n }\n shortfallAlarmObj.event = \'shortfallAlarm\'\n shortfallAlarmObj.data.shortfallAlarm = \'读数倒流告警\'\n shortfallAlarmObj.data.shortfallData = propertiesObj.properties.shortfallData\n result.push(shortfallAlarmObj)\n }\n }\n //CSQ数据,ICCID数据\n /**\n * rrpc,getcsq,22\n * rrpc,geticcid,898604A8102440120152\n * \n */\n if (payload.length() >= 8 && payload.substring(0, 8).equals(\'72727063\')) {\n let rData = hex2str(payload)\n let rArray = rData.split(\',\')\n //CSQ数据\n if (rArray[0].equals(\'rrpc\') && rArray[1].equals(\'getcsq\')) {\n propertiesObj.properties.csq = rArray[2]\n propertiesObj.properties.signalLevel = csq(propertiesObj.properties.csq)\n }\n if (rArray[0].equals(\'rrpc\') && rArray[1].equals(\'geticcid\')) {\n propertiesObj.properties.iccid = rArray[2]\n }\n\n }\n }\n /*//开始字节\n if (payload.substring(0, 2) != \'68\') {\n return jsonToStr(result)\n }*/\n\n\n return jsonToStr(result)\n}\n//下行处理\nvar encode = payload => {\n var obj = toJson(payload)\n //读取电表用量\n if (obj.function == \'meterRead\') {\n if (obj.data.meterNo.length() == 12) {\n let str = \'68\' + reverseStr(obj.data.meterNo) + \'6811043335C433\'\n let check = check_CS(str)\n str = str + check + \'16\'\n return str.toLowerCase()\n }\n }\n //开关闸\n if (obj.function == \'switchOnOff\') {\n if (obj.data.meterNo.length() == 12) {\n //1为合闸\n let switchOn = obj.data.valveOn == \'1\' ? \'4E\' : \'4D\'\n let str = \'68\' + reverseStr(obj.data.meterNo) + \'681C103533333334896745\' + switchOn + \'3347773B3A443C\'\n let check = check_CS(str)\n str = str + check + \'16\'\n return str.toLowerCase()\n }\n }\n //清表(清除所有,余额、总电量、购电次数、电价全部初始化)\n if (obj.function == \'reset\') {\n if (obj.data.meterNo.length() == 12) {\n let str = \'68\' + reverseStr(obj.data.meterNo) + \'681A09353333333489674535\'\n let check = check_CS(str)\n str = str + check + \'16\'\n return str.toLowerCase()\n }\n }\n //超限值设置\n if (obj.function == \'setOverloadLimit\') {\n if (obj.data.meterNo.length() == 12) {\n let str = \'68\' + reverseStr(obj.data.meterNo) + \'6804203633333335333333734036333333333373403633\'\n //电压限值处理\n if (obj.data.containsKey(\'overVoltageLimit\') && obj.data.overVoltageLimit != NULL) {\n if (Float.valueOf(obj.data.overVoltageLimit) > 220.0 && Float.valueOf(obj.data.overVoltageLimit) <= 260.0) {\n let hv = String.format(\'%08X\', Integer.valueOf((Float.valueOf(obj.data.overVoltageLimit) * 10).toFixed(0)))\n str += reverseStr(dataplus(hv))\n }\n //如果电压限值不在范围内,补默认限值260.0V\n else {\n str += reverseStr(dataplus(String.format(\'%08X\', 2600)))\n }\n }\n //如果不填写电压限值,默认2600\n else {\n str += reverseStr(dataplus(String.format(\'%08X\', 2600)))\n }\n //电流限值处理\n if (obj.data.containsKey(\'overCurrrentLimit\') && obj.data.overCurrrentLimit != NULL) {\n if (Float.valueOf(obj.data.overCurrrentLimit) > 0.000 && Float.valueOf(obj.data.overCurrrentLimit) < 80.000) {\n let hI = String.format(\'%08X\', Integer.valueOf((Float.valueOf(obj.data.overCurrrentLimit) * 1000).toFixed(0)))\n str += reverseStr(dataplus(hI))\n }\n //如果电流限值不在范围内,补默认限值80A\n else {\n str += reverseStr(dataplus(String.format(\'%08X\', 80000)))\n }\n }\n //如果不填写电流限值,默认80000\n else {\n str += reverseStr(dataplus(String.format(\'%08X\', 80000)))\n }\n //加倍率,默认1\n str += \'34333333\'\n let check = check_CS(str)\n str = str + check + \'16\'\n return str.toLowerCase()\n }\n }\n //售电\n if (obj.function == \'recharge\') {\n if (obj.data.meterNo.length() == 12) {\n let str = \'68\' + reverseStr(obj.data.meterNo) + \'6804103433333335333333\'\n str += reverseStr(dataplus(String.format(\'%08X\', (Integer.valueOf(obj.data.rechargeData)) * 100)))\n\n if (obj.data.containsKey(\'rechargeCount\')) {\n str += reverseStr(dataplus(String.format(\'%08X\', obj.data.rechargeCount)))\n } else {\n str += \'34333333\'\n }\n\n let check = check_CS(str)\n str = str + check + \'16\'\n return str.toLowerCase()\n }\n }\n //测试\n if (obj.function == \"cmd\") {\n let cmdData = obj.data.cmdData\n return cmdData\n }\n //读取信号强度CSQ\n if (obj.function == \"getCSQ\") {\n let cmdData = \'727270632C676574637371\'\n return cmdData\n }\n //读取物联网卡ICCID\n if (obj.function == \"getICCID\") {\n let cmdData = \'727270632C6765746963636964\'\n return cmdData\n }\n}\n\n// return preDecode(\'689300220525206891253335c43368333333333333334b563333c7673333b7b533333333333333333333333333334ed016\')\n// return decode(\'68121111111111689C0D33343333333c3333343333334ecs16\')\n//return encode(\'{\"messageType\":\"FUNCTIONS\",\"function\":\"recharge\",\"data\":{\"meterNo\":\"202411190247\",\"rechargeData\":10000,\"rechargeCount\":2}}\')\nreturn decode(\'684702191124206891253335c43333333333333334337a55333333333333333333333433333333333333338333334e0516\')\n//return decode(\'{\"payload\":\"202411190261\"}\')\n\n//带影子数据\n//return decode(\'{\"shadow\":{\"metadata\":{\"desired\":{},\"reported\":{\"purchases\":{\"timestamp\":1747726475},\"openState\":{\"timestamp\":1747726475},\"meterPrice\":{\"timestamp\":1747726475},\"voltage\":{\"timestamp\":1747726475},\"remainingAmount\":{\"timestamp\":1747726475},\"current\":{\"timestamp\":1747726475},\"warningPower\":{\"timestamp\":1747726475},\"meterNo\":{\"timestamp\":1747726475},\"power\":{\"timestamp\":1747726475},\"originalMessage\":{\"timestamp\":1747726723},\"meterData\":{\"timestamp\":1747726475}}},\"version\":315,\"state\":{\"desired\":{},\"reported\":{\"purchases\":15,\"openState\":\"1\",\"meterPrice\":\"1.0000\",\"voltage\":\"227.9\",\"remainingAmount\":\"199999.04\",\"current\":\"0.000\",\"warningPower\":\"0.00\",\"meterNo\":\"202411190247\",\"power\":\"0.0\",\"originalMessage\":\"727270632C676574637371\",\"meterData\":\"1.0\"}},\"timestamp\":1747726723},\"productKey\":\"67c69f2a6b0001a9b22a6c9a\",\"deviceId\":\"202411190247\",\"iotId\":\"63337253d93644bcad1513ca318a520a\",\"payload\":\"684702191124206891253335c43333333333333334337a55333333333333333333333433333333333333338333334e0516\"}\')\n\n//CSQ数据\nreturn decode(\'727270632C6765746373712C3232\')\n\n//ICCID数据\n// return decode(\'{\"payload\":\"727270632C67657469636369642C3839383630344138313032343430313230313532\"}\')'); -INSERT INTO `protocol_file` (`file_path`, `file_content`) VALUES ('universal/api/TCP/小蘑菇插座.ms', '{\n \"properties\" : { },\n \"id\" : \"b5723ec5a8e24bdaa647e60a1dc82638\",\n \"script\" : null,\n \"groupId\" : \"f4beb08dc7fe4157b9f63a22a0e1a430\",\n \"name\" : \"小蘑菇插座\",\n \"createTime\" : 1753423344428,\n \"updateTime\" : 1754039332333,\n \"lock\" : null,\n \"createBy\" : \"test\",\n \"updateBy\" : \"test\",\n \"path\" : \"68831a1f38fc106a8dac3c13\",\n \"method\" : \"POST\",\n \"parameters\" : [ ],\n \"options\" : [ ],\n \"requestBody\" : null,\n \"headers\" : [ ],\n \"paths\" : [ ],\n \"responseBody\" : \"[]\",\n \"description\" : \"AI自动生成的解析和协议\",\n \"requestBodyDefinition\" : null,\n \"responseBodyDefinition\" : null\n}\r\n================================\r\nimport log;\n\n// 16进制转10进制数字\nvar hexToInt = hex => {\n return Integer.parseInt(hex, 16);\n};\n// 预解码,解析上报的设备编号 deviceId\nvar preDecode = payload => {\n var result = {}\n var payloadHex = payload.toUpperCase() // 转为大写\n // 校验报文长度和帧头\n if (payloadHex.length() >= 18 && payloadHex.substring(0, 4) === \"A5A5\") {\n // 从第5位开始取4字节(8个字符)作为 deviceId\n result.deviceId = payloadHex.substring(4, 12)\n }\n return result\n}\n\nvar decode =(payload,context) => {\n log.info(\"进入编解码,payload={},context={}\",payload,context)\n var result = [];\n var payloadHex =payload.toUpperCase();\n var propertiesObj = { \"messageType\": \"PROPERTIES\", \"properties\": {} };\n var eventObj = { \"messageType\": \"EVENT\", \"event\": \"\", \"data\": {} };\n\n // 验证帧头帧尾\n if (payloadHex.substring(0, 4) != \"A5A5\" || payloadHex.substring(payloadHex.length() - 4) != \"5A5A\") {\n return jsonToStr([{ \"error\": \"无效帧格式\" }]);\n }\n\n // 提取核心字段\n var deviceId = payloadHex.substring(4, 8); // 设备ID(4字节)\n var cmdCode = payloadHex.substring(8, 10); // 命令码(1字节)\n var dataLen = hexToInt(payloadHex.substring(10, 12)); // 数据长度\n var dataHex = payloadHex.substring(12, 12 + dataLen * 2); // 数据区\n var checksum = payloadHex.substring(12 + dataLen * 2, 14 + dataLen * 2); // 校验和\n\n // 设备ID存入所有对象\n propertiesObj.deviceId = deviceId;\n eventObj.deviceId = deviceId;\n //验证新内容\n propertiesObj.context=context;\n propertiesObj.tcpEncode = \'HEX\';\n propertiesObj.replyPayload = \'727270632C676574637371\'\n // 1. 属性上报(命令码01)\n if (cmdCode == \"01\" && dataLen == 7) {\n // 解析开关状态(01=开,00=关)\n propertiesObj.properties.powerState = dataHex.substring(0, 2) == \"01\" ? \"01\" : \"00\";\n // 解析电流(2字节,单位0.01A)\n var currentHex = dataHex.substring(2, 6);\n propertiesObj.properties.current = (hexToInt(currentHex) * 0.01).toFixed(2);\n // 解析电压(2字节,单位0.1V)\n var voltageHex = dataHex.substring(6, 10);\n propertiesObj.properties.voltage = (hexToInt(voltageHex) * 0.1).toFixed(1);\n // 解析功率(2字节,单位1W)\n var powerHex = dataHex.substring(10, 14);\n propertiesObj.properties.power = hexToInt(powerHex).toString();\n // 加入结果集\n result.push(propertiesObj);\n }\n\n // 2. 事件上报(命令码02)\n if (cmdCode == \"02\" && dataLen >= 3) {\n // 事件类型(01=过载,02=过压,03=上线,04=下线)\n var eventType = dataHex.substring(0, 2);\n if (eventType == \"01\") {\n eventObj.event = \"overload\";\n eventObj.data.overload = hexToInt(dataHex.substring(2, 6)) + \"W\"; // 过载功率\n }\n if (eventType == \"03\") {\n eventObj.event = \"online\";\n eventObj.data.online = \"设备上线\";\n }\n if (eventType == \"04\") {\n eventObj.event = \"offline\";\n eventObj.data.offline = \"设备下线\";\n }\n result.push(eventObj);\n }\n\n // 3. 响应报文(命令码04)\n if (cmdCode == \"04\" && dataLen == 1) {\n var replyObj = {\n \"messageType\": \"REPLY\",\n \"function\": \"switch\",\n \"data\": { \"result\": dataHex == \"00\" ? \"success\" : \"fail\" }\n };\n replyObj.deviceId = deviceId;\n result.push(replyObj);\n }\n\n return jsonToStr(result);\n};\n\nvar encode = payload => {\n var obj = toJson(payload);\n var deviceId = obj.data.deviceId; // 设备ID(4位16进制,如\"0001\")\n var func = obj.function;\n var params = obj.data;\n\n // 控制开关(function=switch)\n if (func == \"switch\") {\n var state = params.state; // 目标状态:01=开,00=关\n if (state != \"01\" && state != \"00\") {\n return \"\"; // 无效状态,返回空\n }\n\n // 数据区:控制类型(01)+目标状态\n var dataHex = \"01\" + state;\n var dataLen = dataHex.length() / 2; // 数据长度(字节数)\n var cmdCode = \"03\"; // 控制指令命令码\n\n // 拼接完整报文(无校验和)\n var frame = \"A5A5\" + \n deviceId + \n cmdCode + \n Integer.toHexString(dataLen) + // 数据长度(1位16进制)\n dataHex + \n \"5A5A\";\n\n return frame.toUpperCase(); // 转为大写16进制\n }\n\n return \"\"; // 不支持的指令\n};\n\n// return preDecode(\"A5A5000101070105DC08F004B05A5A\")\n//属性上报报文\nreturn decode(\'A5A5000201070103E809C405DC5A5A\');\n\n//过载事件报文\n// return decode(\"A5A5000102030104B0F35A5A\")\n\n\n// return encode(\'{\"deviceId\": \"0001\",\"function\": \"switch\",\"data\": { \"state\": \"01\" }}\')\n\n\n// return encode(\'{\"messageType\":\"FUNCTIONS\",\"function\":\"switch\",\"data\":{\"deviceId\":\"00010107\",\"state\":\"01\"}}\')'); -INSERT INTO `protocol_file` (`file_path`, `file_content`) VALUES ('universal/api/test/', 'this is directory'); -INSERT INTO `protocol_file` (`file_path`, `file_content`) VALUES ('universal/api/test/group.json', '{\n \"properties\" : { },\n \"id\" : \"77b59996549d4638a85888f7edd8131d\",\n \"name\" : \"test\",\n \"type\" : \"api\",\n \"parentId\" : \"0\",\n \"path\" : \"test\",\n \"createTime\" : 1753682463817,\n \"updateTime\" : null,\n \"createBy\" : \"test\",\n \"updateBy\" : null,\n \"paths\" : [ ],\n \"options\" : [ ]\n}'); -INSERT INTO `protocol_file` (`file_path`, `file_content`) VALUES ('universal/api/test/小蘑菇插座.ms', '{\n \"properties\" : { },\n \"id\" : \"6ead3277d72e4740bbe5e2a29c2672f4\",\n \"script\" : null,\n \"groupId\" : \"77b59996549d4638a85888f7edd8131d\",\n \"name\" : \"小蘑菇插座\",\n \"createTime\" : 1753682493898,\n \"updateTime\" : 1755239952178,\n \"lock\" : \"0\",\n \"createBy\" : \"test\",\n \"updateBy\" : \"test\",\n \"path\" : \"68831a1f38fc106a8dac3c13\",\n \"method\" : \"POST\",\n \"parameters\" : [ ],\n \"options\" : [ ],\n \"requestBody\" : null,\n \"headers\" : [ ],\n \"paths\" : [ ],\n \"responseBody\" : \"{\\n \\\"deviceId\\\": \\\"00010107\\\"\\n}\",\n \"description\" : \"AI自动生成的解析和协议\",\n \"requestBodyDefinition\" : null,\n \"responseBodyDefinition\" : null\n}\r\n================================\r\nimport log;\n\n// 16进制转10进制数字\nvar hexToInt = hex => {\n return Integer.parseInt(hex, 16);\n};\n// 预解码,解析上报的设备编号 deviceId\nvar preDecode = payload => {\n var result = {}\n var payloadHex = payload.toUpperCase() // 转为大写\n // 校验报文长度和帧头\n if (payloadHex.length() >= 18 && payloadHex.substring(0, 4) === \"A5A5\") {\n // 从第5位开始取4字节(8个字符)作为 deviceId\n result.deviceId = payloadHex.substring(4, 12)\n }\n return result\n}\n\nvar decode =(payload,context) => {\n log.info(\"进入编解码,payload={},context={}\",payload,context)\n var result = [];\n var payloadHex =payload.toUpperCase();\n var propertiesObj = { \"messageType\": \"PROPERTIES\", \"properties\": {} };\n var eventObj = { \"messageType\": \"EVENT\", \"event\": \"\", \"data\": {} };\n\n // 验证帧头帧尾\n if (payloadHex.substring(0, 4) != \"A5A5\" || payloadHex.substring(payloadHex.length() - 4) != \"5A5A\") {\n return jsonToStr([{ \"error\": \"无效帧格式\" }]);\n }\n\n // 提取核心字段\n var deviceId = payloadHex.substring(4, 8); // 设备ID(4字节)\n var cmdCode = payloadHex.substring(8, 10); // 命令码(1字节)\n var dataLen = hexToInt(payloadHex.substring(10, 12)); // 数据长度\n var dataHex = payloadHex.substring(12, 12 + dataLen * 2); // 数据区\n var checksum = payloadHex.substring(12 + dataLen * 2, 14 + dataLen * 2); // 校验和\n\n // 设备ID存入所有对象\n propertiesObj.deviceId = deviceId;\n eventObj.deviceId = deviceId;\n //验证新内容\n propertiesObj.context=context;\n propertiesObj.tcpEncode = \'HEX\';\n propertiesObj.replyPayload = \'727270632C676574637371\'\n // 1. 属性上报(命令码01)\n if (cmdCode == \"01\" && dataLen == 7) {\n // 解析开关状态(01=开,00=关)\n propertiesObj.properties.powerState = dataHex.substring(0, 2) == \"01\" ? \"01\" : \"00\";\n // 解析电流(2字节,单位0.01A)\n var currentHex = dataHex.substring(2, 6);\n propertiesObj.properties.current = (hexToInt(currentHex) * 0.01).toFixed(2);\n // 解析电压(2字节,单位0.1V)\n var voltageHex = dataHex.substring(6, 10);\n propertiesObj.properties.voltage = (hexToInt(voltageHex) * 0.1).toFixed(1);\n // 解析功率(2字节,单位1W)\n var powerHex = dataHex.substring(10, 14);\n propertiesObj.properties.power = hexToInt(powerHex).toString();\n // 加入结果集\n result.push(propertiesObj);\n }\n\n // 2. 事件上报(命令码02)\n if (cmdCode == \"02\" && dataLen >= 3) {\n // 事件类型(01=过载,02=过压,03=上线,04=下线)\n var eventType = dataHex.substring(0, 2);\n if (eventType == \"01\") {\n eventObj.event = \"overload\";\n eventObj.data.overload = hexToInt(dataHex.substring(2, 6)) + \"W\"; // 过载功率\n }\n if (eventType == \"03\") {\n eventObj.event = \"online\";\n eventObj.data.online = \"设备上线\";\n }\n if (eventType == \"04\") {\n eventObj.event = \"offline\";\n eventObj.data.offline = \"设备下线\";\n }\n result.push(eventObj);\n }\n\n // 3. 响应报文(命令码04)\n if (cmdCode == \"04\" && dataLen == 1) {\n var replyObj = {\n \"messageType\": \"REPLY\",\n \"function\": \"switch\",\n \"data\": { \"result\": dataHex == \"00\" ? \"success\" : \"fail\" }\n };\n replyObj.deviceId = deviceId;\n result.push(replyObj);\n }\n\n return jsonToStr(result);\n};\n\nvar encode = payload => {\n var obj = toJson(payload);\n var deviceId = obj.data.deviceId; // 设备ID(4位16进制,如\"0001\")\n var func = obj.function;\n var params = obj.data;\n\n // 控制开关(function=switch)\n if (func == \"switch\") {\n var state = params.state; // 目标状态:01=开,00=关\n if (state != \"01\" && state != \"00\") {\n return \"\"; // 无效状态,返回空\n }\n\n // 数据区:控制类型(01)+目标状态\n var dataHex = \"01\" + state;\n var dataLen = dataHex.length() / 2; // 数据长度(字节数)\n var cmdCode = \"03\"; // 控制指令命令码\n\n // 拼接完整报文(无校验和)\n var frame = \"A5A5\" + \n deviceId + \n cmdCode + \n Integer.toHexString(dataLen) + // 数据长度(1位16进制)\n dataHex + \n \"5A5A\";\n\n return frame.toUpperCase(); // 转为大写16进制\n }\n\n return \"\"; // 不支持的指令\n};\n\n// return preDecode(\"A5A5000101070105DC08F004B05A5A\")\n//属性上报报文\nreturn decode(\'A5A5000101070105DC08F004B07A5A5A\');\n\n//过载事件报文\n// return decode(\"A5A5000102030104B0F35A5A\")\n\n\n// return encode(\'{\"deviceId\": \"0001\",\"function\": \"switch\",\"data\": { \"state\": \"01\" }}\')\n\n\n// return encode(\'{\"messageType\":\"FUNCTIONS\",\"function\":\"switch\",\"data\":{\"deviceId\":\"00010107\",\"state\":\"01\"}}\')'); -INSERT INTO `protocol_file` (`file_path`, `file_content`) VALUES ('universal/api/test/开关面板-MQTT-doc编写.ms', '{\n \"properties\" : { },\n \"id\" : \"e3857faf66c04d9499c4d1e6a4406036\",\n \"script\" : null,\n \"groupId\" : \"77b59996549d4638a85888f7edd8131d\",\n \"name\" : \"开关面板-MQTT-doc编写\",\n \"createTime\" : 1754144167814,\n \"updateTime\" : 1754209859636,\n \"lock\" : null,\n \"createBy\" : \"test\",\n \"updateBy\" : \"test\",\n \"path\" : \"688cd92fdb9e0158872f4aa9\",\n \"method\" : \"POST\",\n \"parameters\" : [ ],\n \"options\" : [ ],\n \"requestBody\" : null,\n \"headers\" : [ ],\n \"paths\" : [ ],\n \"responseBody\" : null,\n \"description\" : \"开关面板-MQTT-doc编写\",\n \"requestBodyDefinition\" : null,\n \"responseBodyDefinition\" : null\n}\r\n================================\r\nimport log\n\n\n/**\n * 编码:平台指令转设备格式\n * @param {Object} payload 平台指令\n * @returns {String} 设备可识别的报文(二进制、JSON、16进制字符串等)\n */\nvar encode = payload => {\n var rs=toJson(payload);\n rs.iot=\'演示iot\'\n rs.randomNum=randomSign();\n // TODO:实现编码逻辑\n return rs;\n};\n'); -INSERT INTO `protocol_file` (`file_path`, `file_content`) VALUES ('universal/api/test/开关面板-文档版-TCP.ms', '{\n \"properties\" : { },\n \"id\" : \"44e371fdbede4e44a0b3ddf7620c8b54\",\n \"script\" : null,\n \"groupId\" : \"77b59996549d4638a85888f7edd8131d\",\n \"name\" : \"开关面板-文档版-TCP\",\n \"createTime\" : 1753764305597,\n \"updateTime\" : 1754144117243,\n \"lock\" : \"0\",\n \"createBy\" : \"test\",\n \"updateBy\" : \"test\",\n \"path\" : \"38fc80e\",\n \"method\" : \"POST\",\n \"parameters\" : [ ],\n \"options\" : [ ],\n \"requestBody\" : null,\n \"headers\" : [ ],\n \"paths\" : [ ],\n \"responseBody\" : null,\n \"description\" : \"文档演示协议\",\n \"requestBodyDefinition\" : null,\n \"responseBodyDefinition\" : null\n}\r\n================================\r\nimport log;\n\n// 16进制转10进制数字\nvar hexToInt = hex => {\n return Integer.parseInt(hex, 16);\n};\n// 预解码,解析上报的设备编号 deviceId\nvar preDecode = payload => {\n var result = {}\n var payloadHex = payload.toUpperCase() // 转为大写\n // 校验报文长度和帧头\n if (payloadHex.length() >= 18 && payloadHex.substring(0, 4) === \"A5A5\") {\n // 从第5位开始取4字节(8个字符)作为 deviceId\n result.deviceId = payloadHex.substring(4, 12)\n }\n return result\n}\n\nvar decode =(payload,context) => {\n log.info(\"进入编解码,payload={},context={}\",payload,context)\n var result = [];\n var payloadHex =payload.toUpperCase();\n var propertiesObj = { \"messageType\": \"PROPERTIES\", \"properties\": {} };\n var eventObj = { \"messageType\": \"EVENT\", \"event\": \"\", \"data\": {} };\n\n // 验证帧头帧尾\n if (payloadHex.substring(0, 4) != \"A5A5\" || payloadHex.substring(payloadHex.length() - 4) != \"5A5A\") {\n return jsonToStr([{ \"error\": \"无效帧格式\" }]);\n }\n\n // 提取核心字段\n var deviceId = payloadHex.substring(4, 8); // 设备ID(4字节)\n var cmdCode = payloadHex.substring(8, 10); // 命令码(1字节)\n var dataLen = hexToInt(payloadHex.substring(10, 12)); // 数据长度\n var dataHex = payloadHex.substring(12, 12 + dataLen * 2); // 数据区\n var checksum = payloadHex.substring(12 + dataLen * 2, 14 + dataLen * 2); // 校验和\n\n // 设备ID存入所有对象\n propertiesObj.deviceId = deviceId;\n eventObj.deviceId = deviceId;\n //验证新内容\n propertiesObj.context=context;\n propertiesObj.tcpEncode = \'HEX\';\n propertiesObj.replyPayload = \'727270632C676574637371\'\n // 1. 属性上报(命令码01)\n if (cmdCode == \"01\" && dataLen == 7) {\n // 解析开关状态(01=开,00=关)\n propertiesObj.properties.powerState = dataHex.substring(0, 2) == \"01\" ? \"01\" : \"00\";\n // 解析电流(2字节,单位0.01A)\n var currentHex = dataHex.substring(2, 6);\n propertiesObj.properties.current = (hexToInt(currentHex) * 0.01).toFixed(2);\n // 解析电压(2字节,单位0.1V)\n var voltageHex = dataHex.substring(6, 10);\n propertiesObj.properties.voltage = (hexToInt(voltageHex) * 0.1).toFixed(1);\n // 解析功率(2字节,单位1W)\n var powerHex = dataHex.substring(10, 14);\n propertiesObj.properties.power = hexToInt(powerHex).toString();\n // 加入结果集\n result.push(propertiesObj);\n }\n\n // 2. 事件上报(命令码02)\n if (cmdCode == \"02\" && dataLen >= 3) {\n // 事件类型(01=过载,02=过压,03=上线,04=下线)\n var eventType = dataHex.substring(0, 2);\n if (eventType == \"01\") {\n eventObj.event = \"overload\";\n eventObj.data.overload = hexToInt(dataHex.substring(2, 6)) + \"W\"; // 过载功率\n }\n if (eventType == \"03\") {\n eventObj.event = \"online\";\n eventObj.data.online = \"设备上线\";\n }\n if (eventType == \"04\") {\n eventObj.event = \"offline\";\n eventObj.data.offline = \"设备下线\";\n }\n result.push(eventObj);\n }\n\n // 3. 响应报文(命令码04)\n if (cmdCode == \"04\" && dataLen == 1) {\n var replyObj = {\n \"messageType\": \"REPLY\",\n \"function\": \"switch\",\n \"data\": { \"result\": dataHex == \"00\" ? \"success\" : \"fail\" }\n };\n replyObj.deviceId = deviceId;\n result.push(replyObj);\n }\n\n return jsonToStr(result);\n};\n\nvar encode = payload => {\n var obj = toJson(payload);\n var deviceId = obj.data.deviceId; // 设备ID(4位16进制,如\"0001\")\n var func = obj.function;\n var params = obj.data;\n\n // 控制开关(function=switch)\n if (func == \"switch\") {\n var state = params.state; // 目标状态:01=开,00=关\n if (state != \"01\" && state != \"00\") {\n return \"\"; // 无效状态,返回空\n }\n\n // 数据区:控制类型(01)+目标状态\n var dataHex = \"01\" + state;\n var dataLen = dataHex.length() / 2; // 数据长度(字节数)\n var cmdCode = \"03\"; // 控制指令命令码\n\n // 拼接完整报文(无校验和)\n var frame = \"A5A5\" + \n deviceId + \n cmdCode + \n Integer.toHexString(dataLen) + // 数据长度(1位16进制)\n dataHex + \n \"5A5A\";\n\n return frame.toUpperCase(); // 转为大写16进制\n }\n\n return \"\"; // 不支持的指令\n};\n\n//预解码,得到deviceId\n// return preDecode(\"A5A5000101070105DC08F004B05A5A\")\n//属性上报报文\n// return decode(\'A5A5000101070105DC08F004B07A5A5A\');\n\n//过载事件报文\n// return decode(\"A5A5000102030104B0F35A5A\")\n\n\n// return encode(\'{\"deviceId\": \"0001\",\"function\": \"switch\",\"data\": { \"state\": \"01\" }}\')\n\n\n// return encode(\'{\"messageType\":\"FUNCTIONS\",\"function\":\"switch\",\"data\":{\"deviceId\":\"00010107\",\"state\":\"01\"}}\')'); -INSERT INTO `protocol_file` (`file_path`, `file_content`) VALUES ('universal/api/test/智能插座(格林物联).ms', '{\n \"properties\" : { },\n \"id\" : \"1975956f8f474cf1a914373daaa0709d\",\n \"script\" : null,\n \"groupId\" : \"77b59996549d4638a85888f7edd8131d\",\n \"name\" : \"智能插座(格林物联)\",\n \"createTime\" : 1754285636730,\n \"updateTime\" : 1754286430946,\n \"lock\" : \"1\",\n \"createBy\" : \"test\",\n \"updateBy\" : \"test\",\n \"path\" : \"681c0775c2dc427d0480ab5f\",\n \"method\" : \"POST\",\n \"parameters\" : [ ],\n \"options\" : [ ],\n \"requestBody\" : null,\n \"headers\" : [ ],\n \"paths\" : [ ],\n \"responseBody\" : \"{\\n \\\"messageType\\\": \\\"PROPERTIES\\\",\\n \\\"properties\\\": {\\n \\\"temp\\\": 1,\\n \\\"sn\\\": \\\"23176\\\"\\n },\\n \\\"replyPayload\\\": \\\"xzzxc23177\\\",\\n \\\"downTopic\\\": \\\"$thing/down/681c0775c2dc427d0480ab5f/cz001923\\\"\\n}\",\n \"description\" : null,\n \"requestBodyDefinition\" : null,\n \"responseBodyDefinition\" : null\n}\r\n================================\r\n\nimport log;\n\nvar url=\"\";\n\nvar post = (url,body) =>{\n \n}\n\nvar encode = payload => {\n var dt=toJson(payload)\n dt.dxxc=randomSign();\n return dt;\n}\n\n//解码\nvar decode = payload => {\n var result = []\n log.info(\"编解码收到消息={}\",payload)\n var dt=toJson(payload)\n var propertiesObj = {\n \"messageType\": \"PROPERTIES\",\n \"properties\": {}\n }\n //设置属性\n propertiesObj.properties=dt\n propertiesObj.properties.sn=randomSign()\n //MQTT设置回复\n propertiesObj.replyPayload=\"xzzxc\"+randomSign()//设置回复的内容\n propertiesObj.downTopic=\"$thing/down/681c0775c2dc427d0480ab5f/cz001923\" //设置回复的主题\n \n return propertiesObj;\n}\n\n//设备增加\nvar add = payload => {\n var da=post(url,payload)\n var rs={\n \"code\":0,\n \"msg\":\"success\",\n \"codec\":\"add\",\n \"codec\":da\n }\n return rs;\n}\n\n//设备更新\nvar update = payload => {\n var da=post(url,payload)\n var rs={\n \"code\":0,\n \"msg\":\"success\",\n \"codec\":\"update\",\n \"codec\":da\n }\n return rs;\n}\n\n//设备查询\nvar query = payload => {\n var da=post(url,payload)\n var rs={\n \"code\":0,\n \"req\":0,\n \"msg\":\"success\",\n \"codec\":\"query\",\n \"codec\":da\n }\n return rs;\n}\n\n//功能调用\nvar function = payload => {\n var da=post(url,payload)\n var rs={\n \"code\":0,\n \"msg\":\"success\",\n \"codec\":\"function\",\n \"codec\":da\n }\n return rs;\n}\n\n\nreturn decode(\"{\'temp\':1}\")'); -INSERT INTO `protocol_file` (`file_path`, `file_content`) VALUES ('universal/api/test/演示教学一下.ms', '{\n \"properties\" : { },\n \"id\" : \"3b003406803b42d3b00ea0bde1892a50\",\n \"script\" : null,\n \"groupId\" : \"77b59996549d4638a85888f7edd8131d\",\n \"name\" : \"演示教学一下\",\n \"createTime\" : 1754210880647,\n \"updateTime\" : 1754212263177,\n \"lock\" : null,\n \"createBy\" : \"test\",\n \"updateBy\" : \"test\",\n \"path\" : \"DEMO\",\n \"method\" : \"POST\",\n \"parameters\" : [ ],\n \"options\" : [ ],\n \"requestBody\" : null,\n \"headers\" : [ ],\n \"paths\" : [ ],\n \"responseBody\" : \"{\\n \\\"messageType\\\": \\\"PROPERTIES\\\",\\n \\\"properties\\\": {\\n \\\"payload\\\": \\\"A1B2C3\\\",\\n \\\"randomStr\\\": \\\"38678\\\"\\n }\\n}\",\n \"description\" : null,\n \"requestBodyDefinition\" : null,\n \"responseBodyDefinition\" : null\n}\r\n================================\r\n/**\n * 预解码:提取设备身份标识\n * @param {String} payload 设备原始报文(可能是二进制、JSON、16进制字符串等)\n * @returns {Object} {deviceId, productKey}\n */\nvar preDecode = payload => {\n var rs = {\n \"deviceId\": \"\",\n \"productKey\": \"\"\n };\n // TODO:解析设备标识\n return rs;\n};\n\n/**\n * 编码:平台指令转设备格式\n * @param {Object} payload 平台指令\n * @returns {String} 设备可识别的报文(二进制、JSON、16进制字符串等)\n */\nvar encode = payload => {\n var result = \"\";\n // TODO:实现编码逻辑\n return result;\n};\n\n/**\n * 解码:设备数据转平台格式\n * @param {String} payload 设备原始报文(二进制、JSON、16进制字符串等)\n * @returns {Array} 平台标准消息数组,每个元素结构:\n * [\n * {\n * messageType: \"PROPERTIES\", // 属性类型\n * properties: {} // 解析后的属性键值对(根据物模型动态调整)\n * },\n * {\n * messageType: \"EVENT\", // 事件类型\n * event: \"\", // 事件名称\n * data: {} // 事件参数\n * }\n * ]\n */\nvar decode = payload => {\n var rs = [];\n let isJsonParam=false;\n let newPayload={}\n if(isJson(payload)){\n newPayload=toJson(payload)\n isJsonParam=true\n }\n // 属性\n var propertiesObj = {\n \"messageType\": \"PROPERTIES\",\n \"properties\": {}\n };\n propertiesObj.properties=newPayload\n propertiesObj.isJsonParam=isJsonParam\n\n rs.push(propertiesObj);\n // 事件\n var event = {\n \"messageType\": \"EVENT\",\n \"event\": \"\",\n \"data\": {}\n };\n // rs.push(event);\n \n return propertiesObj;\n};\n\n// 调试示例(正式使用请删除或注释)\n//return preDecode(\"\");\n// return encode({});\nreturn decode(\'{\"current\": \"199.00\",\"power\": \"199\",\"powerState\": 0,\"voltage\": \"199.8\"}\');'); -INSERT INTO `protocol_file` (`file_path`, `file_content`) VALUES ('universal/api/测试分组/', 'this is directory'); -INSERT INTO `protocol_file` (`file_path`, `file_content`) VALUES ('universal/api/测试分组/group.json', '{\n \"properties\" : { },\n \"id\" : \"bea746cb74484886b5ea0d1efc678636\",\n \"name\" : \"测试分组\",\n \"type\" : \"api\",\n \"parentId\" : \"0\",\n \"path\" : \"/testprotocol\",\n \"createTime\" : 1755154048548,\n \"updateTime\" : null,\n \"createBy\" : \"test\",\n \"updateBy\" : null,\n \"paths\" : [ ],\n \"options\" : [ ]\n}'); -INSERT INTO `protocol_file` (`file_path`, `file_content`) VALUES ('universal/datasource/', 'this is directory'); -INSERT INTO `protocol_file` (`file_path`, `file_content`) VALUES ('universal/function/', 'this is directory'); -COMMIT; - --- ---------------------------- --- Table structure for protocol_file_backup --- ---------------------------- -DROP TABLE IF EXISTS `protocol_file_backup`; -CREATE TABLE `protocol_file_backup` ( - `id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '原对象ID', - `create_date` bigint NOT NULL COMMENT '备份时间', - `tag` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '标签', - `type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '类型', - `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '原名称', - `content` blob COMMENT '备份内容', - `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '操作人', - PRIMARY KEY (`id`,`create_date`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- ---------------------------- --- Records of protocol_file_backup --- ---------------------------- -BEGIN; -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('1975956f8f474cf1a914373daaa0709d', 1754285636766, NULL, 'api', '智能插座(格林物联)', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223139373539353666386634373463663161393134333733646161613037303964222C0A20202273637269707422203A20225C6E696D706F7274206C6F673B5C6E5C6E7661722075726C3D5C225C223B5C6E5C6E76617220706F7374203D202875726C2C626F647929203D3E7B5C6E2020205C6E7D5C6E5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E202020207661722064743D746F4A736F6E287061796C6F6164295C6E2020202064742E647878633D72616E646F6D5369676E28293B5C6E2020202072657475726E2064743B5C6E7D5C6E5C6E2F2FE8A7A3E7A0815C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205B5D5C6E202020206C6F672E696E666F285C22E7BC96E8A7A3E7A081E694B6E588B0E6B688E681AF3D7B7D5C222C7061796C6F6164295C6E202020207661722064743D746F4A736F6E287061796C6F6164295C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D5C6E202020202F2FE8AEBEE7BDAEE5B19EE680A75C6E2020202070726F706572746965734F626A2E70726F706572746965733D64745C6E2020202070726F706572746965734F626A2E70726F706572746965732E736E3D72616E646F6D5369676E28295C6E202020202F2FE8AEBEE7BDAEE59B9EE5A48D5C6E2020202070726F706572746965734F626A2E7265706C795061796C6F61643D5C22787A7A78635C222B72616E646F6D5369676E28295C6E2020202070726F706572746965734F626A2E646F776E546F7069633D5C22247468696E672F646F776E2F3638316330373735633264633432376430343830616235662F637A3030313932335C225C6E20202020766172206576656E743D7B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A5C2262617474657279526573746F72655C222C5C6E20202020202020205C2270726F706572746965735C223A207B5C6E20202020202020202020202F2F205C22626174746572795C223A3130305C6E20202020202020207D5C6E202020207D5C6E2020202020766172206C6F7742617474657279416C61726D3D7B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A5C226C6F7742617474657279416C61726D5C222C5C6E20202020202020205C2270726F706572746965735C223A207B5C6E2020202020202020202020202F2F5C226373715C223A32395C6E20202020202020207D5C6E202020207D5C6E20202020726573756C742E707573682870726F706572746965734F626A295C6E20202020726573756C742E70757368286576656E74295C6E20202020726573756C742E70757368286C6F7742617474657279416C61726D295C6E2020202072657475726E20726573756C743B5C6E7D5C6E5C6E2F2FE8AEBEE5A487E5A29EE58AA05C6E76617220616464203D207061796C6F6164203D3E207B5C6E202020207661722064613D706F73742875726C2C7061796C6F6164295C6E202020207661722072733D7B5C6E20202020202020205C22636F64655C223A302C5C6E20202020202020205C226D73675C223A5C22737563636573735C222C5C6E20202020202020205C22636F6465635C223A5C226164645C222C5C6E20202020202020205C22636F6465635C223A64615C6E202020207D5C6E2020202072657475726E2072733B5C6E7D5C6E5C6E2F2FE8AEBEE5A487E69BB4E696B05C6E76617220757064617465203D207061796C6F6164203D3E207B5C6E202020207661722064613D706F73742875726C2C7061796C6F6164295C6E202020207661722072733D7B5C6E20202020202020205C22636F64655C223A302C5C6E20202020202020205C226D73675C223A5C22737563636573735C222C5C6E20202020202020205C22636F6465635C223A5C227570646174655C222C5C6E20202020202020205C22636F6465635C223A64615C6E202020207D5C6E2020202072657475726E2072733B5C6E7D5C6E5C6E2F2FE8AEBEE5A487E69FA5E8AFA25C6E766172207175657279203D207061796C6F6164203D3E207B5C6E2020207661722064613D706F73742875726C2C7061796C6F6164295C6E202020207661722072733D7B5C6E20202020202020205C22636F64655C223A302C5C6E20202020202020205C227265715C223A302C5C6E20202020202020205C226D73675C223A5C22737563636573735C222C5C6E20202020202020205C22636F6465635C223A5C2271756572795C222C5C6E20202020202020205C22636F6465635C223A64615C6E202020207D5C6E2020202072657475726E2072733B5C6E7D5C6E5C6E2F2FE58A9FE883BDE8B083E794A85C6E7661722066756E6374696F6E203D207061796C6F6164203D3E207B5C6E202020207661722064613D706F73742875726C2C7061796C6F6164295C6E202020207661722072733D7B5C6E20202020202020205C22636F64655C223A302C5C6E20202020202020205C226D73675C223A5C22737563636573735C222C5C6E20202020202020205C22636F6465635C223A5C2266756E6374696F6E5C222C5C6E20202020202020205C22636F6465635C223A64615C6E202020207D5C6E2020202072657475726E2072733B5C6E7D5C6E5C6E222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E699BAE883BDE68F92E5BAA728E6A0BCE69E97E789A9E8819429222C0A20202263726561746554696D6522203A20313735343238353633363733302C0A20202275706461746554696D6522203A206E756C6C2C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A206E756C6C2C0A2020227061746822203A2022363831633037373563326463343237643034383061623566222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('1975956f8f474cf1a914373daaa0709d', 1754285700984, NULL, 'api', '智能插座(格林物联)', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223139373539353666386634373463663161393134333733646161613037303964222C0A20202273637269707422203A20225C6E696D706F7274206C6F673B5C6E5C6E7661722075726C3D5C225C223B5C6E5C6E76617220706F7374203D202875726C2C626F647929203D3E7B5C6E2020205C6E7D5C6E5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E202020207661722064743D746F4A736F6E287061796C6F6164295C6E2020202064742E647878633D72616E646F6D5369676E28293B5C6E2020202072657475726E2064743B5C6E7D5C6E5C6E2F2FE8A7A3E7A0815C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205B5D5C6E202020206C6F672E696E666F285C22E7BC96E8A7A3E7A081E694B6E588B0E6B688E681AF3D7B7D5C222C7061796C6F6164295C6E202020207661722064743D746F4A736F6E287061796C6F6164295C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D5C6E202020202F2FE8AEBEE7BDAEE5B19EE680A75C6E2020202070726F706572746965734F626A2E70726F706572746965733D64745C6E2020202070726F706572746965734F626A2E70726F706572746965732E736E3D72616E646F6D5369676E28295C6E202020202F2FE8AEBEE7BDAEE59B9EE5A48D5C6E2020202070726F706572746965734F626A2E7265706C795061796C6F61643D5C22787A7A78635C222B72616E646F6D5369676E28295C6E2020202070726F706572746965734F626A2E646F776E546F7069633D5C22247468696E672F646F776E2F3638316330373735633264633432376430343830616235662F637A3030313932335C225C6E20202020766172206576656E743D7B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A5C2262617474657279526573746F72655C222C5C6E20202020202020205C2270726F706572746965735C223A207B5C6E20202020202020202020202F2F205C22626174746572795C223A3130305C6E20202020202020207D5C6E202020207D5C6E2020202020766172206C6F7742617474657279416C61726D3D7B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A5C226C6F7742617474657279416C61726D5C222C5C6E20202020202020205C2270726F706572746965735C223A207B5C6E2020202020202020202020202F2F5C226373715C223A32395C6E20202020202020207D5C6E202020207D5C6E20202020726573756C742E707573682870726F706572746965734F626A295C6E20202020726573756C742E70757368286576656E74295C6E20202020726573756C742E70757368286C6F7742617474657279416C61726D295C6E2020202072657475726E20726573756C743B5C6E7D5C6E5C6E2F2FE8AEBEE5A487E5A29EE58AA05C6E76617220616464203D207061796C6F6164203D3E207B5C6E202020207661722064613D706F73742875726C2C7061796C6F6164295C6E202020207661722072733D7B5C6E20202020202020205C22636F64655C223A302C5C6E20202020202020205C226D73675C223A5C22737563636573735C222C5C6E20202020202020205C22636F6465635C223A5C226164645C222C5C6E20202020202020205C22636F6465635C223A64615C6E202020207D5C6E2020202072657475726E2072733B5C6E7D5C6E5C6E2F2FE8AEBEE5A487E69BB4E696B05C6E76617220757064617465203D207061796C6F6164203D3E207B5C6E202020207661722064613D706F73742875726C2C7061796C6F6164295C6E202020207661722072733D7B5C6E20202020202020205C22636F64655C223A302C5C6E20202020202020205C226D73675C223A5C22737563636573735C222C5C6E20202020202020205C22636F6465635C223A5C227570646174655C222C5C6E20202020202020205C22636F6465635C223A64615C6E202020207D5C6E2020202072657475726E2072733B5C6E7D5C6E5C6E2F2FE8AEBEE5A487E69FA5E8AFA25C6E766172207175657279203D207061796C6F6164203D3E207B5C6E2020207661722064613D706F73742875726C2C7061796C6F6164295C6E202020207661722072733D7B5C6E20202020202020205C22636F64655C223A302C5C6E20202020202020205C227265715C223A302C5C6E20202020202020205C226D73675C223A5C22737563636573735C222C5C6E20202020202020205C22636F6465635C223A5C2271756572795C222C5C6E20202020202020205C22636F6465635C223A64615C6E202020207D5C6E2020202072657475726E2072733B5C6E7D5C6E5C6E2F2FE58A9FE883BDE8B083E794A85C6E7661722066756E6374696F6E203D207061796C6F6164203D3E207B5C6E202020207661722064613D706F73742875726C2C7061796C6F6164295C6E202020207661722072733D7B5C6E20202020202020205C22636F64655C223A302C5C6E20202020202020205C226D73675C223A5C22737563636573735C222C5C6E20202020202020205C22636F6465635C223A5C2266756E6374696F6E5C222C5C6E20202020202020205C22636F6465635C223A64615C6E202020207D5C6E2020202072657475726E2072733B5C6E7D5C6E5C6E222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E699BAE883BDE68F92E5BAA728E6A0BCE69E97E789A9E8819429222C0A20202263726561746554696D6522203A20313735343238353633363733302C0A20202275706461746554696D6522203A20313735343238353730303936382C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A2022363831633037373563326463343237643034383061623566222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('1975956f8f474cf1a914373daaa0709d', 1754285863924, NULL, 'api', '智能插座(格林物联)', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223139373539353666386634373463663161393134333733646161613037303964222C0A20202273637269707422203A20225C6E696D706F7274206C6F673B5C6E5C6E7661722075726C3D5C225C223B5C6E5C6E76617220706F7374203D202875726C2C626F647929203D3E7B5C6E2020205C6E7D5C6E5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E202020207661722064743D746F4A736F6E287061796C6F6164295C6E2020202064742E647878633D72616E646F6D5369676E28293B5C6E2020202072657475726E2064743B5C6E7D5C6E5C6E2F2FE8A7A3E7A0815C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205B5D5C6E202020206C6F672E696E666F285C22E7BC96E8A7A3E7A081E694B6E588B0E6B688E681AF3D7B7D5C222C7061796C6F6164295C6E202020207661722064743D746F4A736F6E287061796C6F6164295C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D5C6E202020202F2FE8AEBEE7BDAEE5B19EE680A75C6E2020202070726F706572746965734F626A2E70726F706572746965733D64745C6E2020202070726F706572746965734F626A2E70726F706572746965732E736E3D72616E646F6D5369676E28295C6E202020202F2F4D515454E8AEBEE7BDAEE59B9EE5A48D5C6E2020202070726F706572746965734F626A2E7265706C795061796C6F61643D5C22787A7A78635C222B72616E646F6D5369676E28292F2FE8AEBEE7BDAEE59B9EE5A48DE79A84E58685E5AEB95C6E2020202070726F706572746965734F626A2E646F776E546F7069633D5C22247468696E672F646F776E2F3638316330373735633264633432376430343830616235662F637A3030313932335C22202F2FE8AEBEE7BDAEE59B9EE5A48DE79A84E4B8BBE9A2985C6E20202020766172206576656E743D7B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A5C2262617474657279526573746F72655C222C5C6E20202020202020205C2270726F706572746965735C223A207B5C6E20202020202020202020202F2F205C22626174746572795C223A3130305C6E20202020202020207D5C6E202020207D5C6E2020202020766172206C6F7742617474657279416C61726D3D7B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A5C226C6F7742617474657279416C61726D5C222C5C6E20202020202020205C2270726F706572746965735C223A207B5C6E2020202020202020202020202F2F5C226373715C223A32395C6E20202020202020207D5C6E202020207D5C6E20202020726573756C742E707573682870726F706572746965734F626A295C6E20202020726573756C742E70757368286576656E74295C6E20202020726573756C742E70757368286C6F7742617474657279416C61726D295C6E2020202072657475726E20726573756C743B5C6E7D5C6E5C6E2F2FE8AEBEE5A487E5A29EE58AA05C6E76617220616464203D207061796C6F6164203D3E207B5C6E202020207661722064613D706F73742875726C2C7061796C6F6164295C6E202020207661722072733D7B5C6E20202020202020205C22636F64655C223A302C5C6E20202020202020205C226D73675C223A5C22737563636573735C222C5C6E20202020202020205C22636F6465635C223A5C226164645C222C5C6E20202020202020205C22636F6465635C223A64615C6E202020207D5C6E2020202072657475726E2072733B5C6E7D5C6E5C6E2F2FE8AEBEE5A487E69BB4E696B05C6E76617220757064617465203D207061796C6F6164203D3E207B5C6E202020207661722064613D706F73742875726C2C7061796C6F6164295C6E202020207661722072733D7B5C6E20202020202020205C22636F64655C223A302C5C6E20202020202020205C226D73675C223A5C22737563636573735C222C5C6E20202020202020205C22636F6465635C223A5C227570646174655C222C5C6E20202020202020205C22636F6465635C223A64615C6E202020207D5C6E2020202072657475726E2072733B5C6E7D5C6E5C6E2F2FE8AEBEE5A487E69FA5E8AFA25C6E766172207175657279203D207061796C6F6164203D3E207B5C6E2020207661722064613D706F73742875726C2C7061796C6F6164295C6E202020207661722072733D7B5C6E20202020202020205C22636F64655C223A302C5C6E20202020202020205C227265715C223A302C5C6E20202020202020205C226D73675C223A5C22737563636573735C222C5C6E20202020202020205C22636F6465635C223A5C2271756572795C222C5C6E20202020202020205C22636F6465635C223A64615C6E202020207D5C6E2020202072657475726E2072733B5C6E7D5C6E5C6E2F2FE58A9FE883BDE8B083E794A85C6E7661722066756E6374696F6E203D207061796C6F6164203D3E207B5C6E202020207661722064613D706F73742875726C2C7061796C6F6164295C6E202020207661722072733D7B5C6E20202020202020205C22636F64655C223A302C5C6E20202020202020205C226D73675C223A5C22737563636573735C222C5C6E20202020202020205C22636F6465635C223A5C2266756E6374696F6E5C222C5C6E20202020202020205C22636F6465635C223A64615C6E202020207D5C6E2020202072657475726E2072733B5C6E7D5C6E5C6E222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E699BAE883BDE68F92E5BAA728E6A0BCE69E97E789A9E8819429222C0A20202263726561746554696D6522203A20313735343238353633363733302C0A20202275706461746554696D6522203A20313735343238353836333838342C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A2022363831633037373563326463343237643034383061623566222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('1975956f8f474cf1a914373daaa0709d', 1754285901501, NULL, 'api', '智能插座(格林物联)', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223139373539353666386634373463663161393134333733646161613037303964222C0A20202273637269707422203A20225C6E696D706F7274206C6F673B5C6E5C6E7661722075726C3D5C225C223B5C6E5C6E76617220706F7374203D202875726C2C626F647929203D3E7B5C6E2020205C6E7D5C6E5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E202020207661722064743D746F4A736F6E287061796C6F6164295C6E2020202064742E647878633D72616E646F6D5369676E28293B5C6E2020202072657475726E2064743B5C6E7D5C6E5C6E2F2FE8A7A3E7A0815C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205B5D5C6E202020206C6F672E696E666F285C22E7BC96E8A7A3E7A081E694B6E588B0E6B688E681AF3D7B7D5C222C7061796C6F6164295C6E202020207661722064743D746F4A736F6E287061796C6F6164295C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D5C6E202020202F2FE8AEBEE7BDAEE5B19EE680A75C6E2020202070726F706572746965734F626A2E70726F706572746965733D64745C6E2020202070726F706572746965734F626A2E70726F706572746965732E736E3D72616E646F6D5369676E28295C6E202020202F2F4D515454E8AEBEE7BDAEE59B9EE5A48D5C6E2020202070726F706572746965734F626A2E7265706C795061796C6F61643D5C22787A7A78635C222B72616E646F6D5369676E28292F2FE8AEBEE7BDAEE59B9EE5A48DE79A84E58685E5AEB95C6E2020202070726F706572746965734F626A2E646F776E546F7069633D5C22247468696E672F646F776E2F3638316330373735633264633432376430343830616235662F637A3030313932335C22202F2FE8AEBEE7BDAEE59B9EE5A48DE79A84E4B8BBE9A2985C6E20202020766172206576656E743D7B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A5C2262617474657279526573746F72655C222C5C6E20202020202020205C2270726F706572746965735C223A207B5C6E20202020202020202020202F2F205C22626174746572795C223A3130305C6E20202020202020207D5C6E202020207D5C6E2020202020766172206C6F7742617474657279416C61726D3D7B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A5C226C6F7742617474657279416C61726D5C222C5C6E20202020202020205C2270726F706572746965735C223A207B5C6E2020202020202020202020202F2F5C226373715C223A32395C6E20202020202020207D5C6E202020207D5C6E20202020726573756C742E707573682870726F706572746965734F626A295C6E20202020726573756C742E70757368286576656E74295C6E20202020726573756C742E70757368286C6F7742617474657279416C61726D295C6E2020202072657475726E20726573756C743B5C6E7D5C6E5C6E2F2FE8AEBEE5A487E5A29EE58AA05C6E76617220616464203D207061796C6F6164203D3E207B5C6E202020207661722064613D706F73742875726C2C7061796C6F6164295C6E202020207661722072733D7B5C6E20202020202020205C22636F64655C223A302C5C6E20202020202020205C226D73675C223A5C22737563636573735C222C5C6E20202020202020205C22636F6465635C223A5C226164645C222C5C6E20202020202020205C22636F6465635C223A64615C6E202020207D5C6E2020202072657475726E2072733B5C6E7D5C6E5C6E2F2FE8AEBEE5A487E69BB4E696B05C6E76617220757064617465203D207061796C6F6164203D3E207B5C6E202020207661722064613D706F73742875726C2C7061796C6F6164295C6E202020207661722072733D7B5C6E20202020202020205C22636F64655C223A302C5C6E20202020202020205C226D73675C223A5C22737563636573735C222C5C6E20202020202020205C22636F6465635C223A5C227570646174655C222C5C6E20202020202020205C22636F6465635C223A64615C6E202020207D5C6E2020202072657475726E2072733B5C6E7D5C6E5C6E2F2FE8AEBEE5A487E69FA5E8AFA25C6E766172207175657279203D207061796C6F6164203D3E207B5C6E2020207661722064613D706F73742875726C2C7061796C6F6164295C6E202020207661722072733D7B5C6E20202020202020205C22636F64655C223A302C5C6E20202020202020205C227265715C223A302C5C6E20202020202020205C226D73675C223A5C22737563636573735C222C5C6E20202020202020205C22636F6465635C223A5C2271756572795C222C5C6E20202020202020205C22636F6465635C223A64615C6E202020207D5C6E2020202072657475726E2072733B5C6E7D5C6E5C6E2F2FE58A9FE883BDE8B083E794A85C6E7661722066756E6374696F6E203D207061796C6F6164203D3E207B5C6E202020207661722064613D706F73742875726C2C7061796C6F6164295C6E202020207661722072733D7B5C6E20202020202020205C22636F64655C223A302C5C6E20202020202020205C226D73675C223A5C22737563636573735C222C5C6E20202020202020205C22636F6465635C223A5C2266756E6374696F6E5C222C5C6E20202020202020205C22636F6465635C223A64615C6E202020207D5C6E2020202072657475726E2072733B5C6E7D5C6E5C6E5C6E72657475726E206465636F6465285C227B2774656D70273A317D5C2229222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E699BAE883BDE68F92E5BAA728E6A0BCE69E97E789A9E8819429222C0A20202263726561746554696D6522203A20313735343238353633363733302C0A20202275706461746554696D6522203A20313735343238353930313438302C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A2022363831633037373563326463343237643034383061623566222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('1975956f8f474cf1a914373daaa0709d', 1754285928764, NULL, 'api', '智能插座(格林物联)', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223139373539353666386634373463663161393134333733646161613037303964222C0A20202273637269707422203A20225C6E696D706F7274206C6F673B5C6E5C6E7661722075726C3D5C225C223B5C6E5C6E76617220706F7374203D202875726C2C626F647929203D3E7B5C6E2020205C6E7D5C6E5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E202020207661722064743D746F4A736F6E287061796C6F6164295C6E2020202064742E647878633D72616E646F6D5369676E28293B5C6E2020202072657475726E2064743B5C6E7D5C6E5C6E2F2FE8A7A3E7A0815C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205B5D5C6E202020206C6F672E696E666F285C22E7BC96E8A7A3E7A081E694B6E588B0E6B688E681AF3D7B7D5C222C7061796C6F6164295C6E202020207661722064743D746F4A736F6E287061796C6F6164295C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D5C6E202020202F2FE8AEBEE7BDAEE5B19EE680A75C6E2020202070726F706572746965734F626A2E70726F706572746965733D64745C6E2020202070726F706572746965734F626A2E70726F706572746965732E736E3D72616E646F6D5369676E28295C6E202020202F2F4D515454E8AEBEE7BDAEE59B9EE5A48D5C6E2020202070726F706572746965734F626A2E7265706C795061796C6F61643D5C22787A7A78635C222B72616E646F6D5369676E28292F2FE8AEBEE7BDAEE59B9EE5A48DE79A84E58685E5AEB95C6E2020202070726F706572746965734F626A2E646F776E546F7069633D5C22247468696E672F646F776E2F3638316330373735633264633432376430343830616235662F637A3030313932335C22202F2FE8AEBEE7BDAEE59B9EE5A48DE79A84E4B8BBE9A2985C6E20202020766172206576656E743D7B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A5C2262617474657279526573746F72655C222C5C6E20202020202020205C2270726F706572746965735C223A207B5C6E20202020202020202020202F2F205C22626174746572795C223A3130305C6E20202020202020207D5C6E202020207D5C6E2020202020766172206C6F7742617474657279416C61726D3D7B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A5C226C6F7742617474657279416C61726D5C222C5C6E20202020202020205C2270726F706572746965735C223A207B5C6E2020202020202020202020202F2F5C226373715C223A32395C6E20202020202020207D5C6E202020207D5C6E20202020726573756C742E707573682870726F706572746965734F626A295C6E20202020726573756C742E70757368286576656E74295C6E20202020726573756C742E70757368286C6F7742617474657279416C61726D295C6E2020202072657475726E2070726F706572746965734F626A3B5C6E7D5C6E5C6E2F2FE8AEBEE5A487E5A29EE58AA05C6E76617220616464203D207061796C6F6164203D3E207B5C6E202020207661722064613D706F73742875726C2C7061796C6F6164295C6E202020207661722072733D7B5C6E20202020202020205C22636F64655C223A302C5C6E20202020202020205C226D73675C223A5C22737563636573735C222C5C6E20202020202020205C22636F6465635C223A5C226164645C222C5C6E20202020202020205C22636F6465635C223A64615C6E202020207D5C6E2020202072657475726E2072733B5C6E7D5C6E5C6E2F2FE8AEBEE5A487E69BB4E696B05C6E76617220757064617465203D207061796C6F6164203D3E207B5C6E202020207661722064613D706F73742875726C2C7061796C6F6164295C6E202020207661722072733D7B5C6E20202020202020205C22636F64655C223A302C5C6E20202020202020205C226D73675C223A5C22737563636573735C222C5C6E20202020202020205C22636F6465635C223A5C227570646174655C222C5C6E20202020202020205C22636F6465635C223A64615C6E202020207D5C6E2020202072657475726E2072733B5C6E7D5C6E5C6E2F2FE8AEBEE5A487E69FA5E8AFA25C6E766172207175657279203D207061796C6F6164203D3E207B5C6E2020207661722064613D706F73742875726C2C7061796C6F6164295C6E202020207661722072733D7B5C6E20202020202020205C22636F64655C223A302C5C6E20202020202020205C227265715C223A302C5C6E20202020202020205C226D73675C223A5C22737563636573735C222C5C6E20202020202020205C22636F6465635C223A5C2271756572795C222C5C6E20202020202020205C22636F6465635C223A64615C6E202020207D5C6E2020202072657475726E2072733B5C6E7D5C6E5C6E2F2FE58A9FE883BDE8B083E794A85C6E7661722066756E6374696F6E203D207061796C6F6164203D3E207B5C6E202020207661722064613D706F73742875726C2C7061796C6F6164295C6E202020207661722072733D7B5C6E20202020202020205C22636F64655C223A302C5C6E20202020202020205C226D73675C223A5C22737563636573735C222C5C6E20202020202020205C22636F6465635C223A5C2266756E6374696F6E5C222C5C6E20202020202020205C22636F6465635C223A64615C6E202020207D5C6E2020202072657475726E2072733B5C6E7D5C6E5C6E5C6E72657475726E206465636F6465285C227B2774656D70273A317D5C2229222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E699BAE883BDE68F92E5BAA728E6A0BCE69E97E789A9E8819429222C0A20202263726561746554696D6522203A20313735343238353633363733302C0A20202275706461746554696D6522203A20313735343238353932383733392C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A2022363831633037373563326463343237643034383061623566222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20225B5C6E202020207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B5C6E2020202020202020202020205C2274656D705C223A20312C5C6E2020202020202020202020205C22736E5C223A205C2232323631345C225C6E20202020202020207D2C5C6E20202020202020205C227265706C795061796C6F61645C223A205C22787A7A786332323631355C222C5C6E20202020202020205C22646F776E546F7069635C223A205C22247468696E672F646F776E2F3638316330373735633264633432376430343830616235662F637A3030313932335C225C6E202020207D2C5C6E202020207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C2262617474657279526573746F72655C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D2C5C6E202020207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C226C6F7742617474657279416C61726D5C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D5C6E5D222C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('1975956f8f474cf1a914373daaa0709d', 1754286426458, NULL, 'api', '智能插座(格林物联)', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223139373539353666386634373463663161393134333733646161613037303964222C0A20202273637269707422203A20225C6E696D706F7274206C6F673B5C6E5C6E7661722075726C3D5C225C223B5C6E5C6E76617220706F7374203D202875726C2C626F647929203D3E7B5C6E2020205C6E7D5C6E5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E202020207661722064743D746F4A736F6E287061796C6F6164295C6E2020202064742E647878633D72616E646F6D5369676E28293B5C6E2020202072657475726E2064743B5C6E7D5C6E5C6E2F2FE8A7A3E7A0815C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205B5D5C6E202020206C6F672E696E666F285C22E7BC96E8A7A3E7A081E694B6E588B0E6B688E681AF3D7B7D5C222C7061796C6F6164295C6E202020207661722064743D746F4A736F6E287061796C6F6164295C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D5C6E202020202F2FE8AEBEE7BDAEE5B19EE680A75C6E2020202070726F706572746965734F626A2E70726F706572746965733D64745C6E2020202070726F706572746965734F626A2E70726F706572746965732E736E3D72616E646F6D5369676E28295C6E202020202F2F4D515454E8AEBEE7BDAEE59B9EE5A48D5C6E2020202070726F706572746965734F626A2E7265706C795061796C6F61643D5C22787A7A78635C222B72616E646F6D5369676E28292F2FE8AEBEE7BDAEE59B9EE5A48DE79A84E58685E5AEB95C6E2020202070726F706572746965734F626A2E646F776E546F7069633D5C22247468696E672F646F776E2F3638316330373735633264633432376430343830616235662F637A3030313932335C22202F2FE8AEBEE7BDAEE59B9EE5A48DE79A84E4B8BBE9A2985C6E2020205C6E2020202072657475726E2070726F706572746965734F626A3B5C6E7D5C6E5C6E2F2FE8AEBEE5A487E5A29EE58AA05C6E76617220616464203D207061796C6F6164203D3E207B5C6E202020207661722064613D706F73742875726C2C7061796C6F6164295C6E202020207661722072733D7B5C6E20202020202020205C22636F64655C223A302C5C6E20202020202020205C226D73675C223A5C22737563636573735C222C5C6E20202020202020205C22636F6465635C223A5C226164645C222C5C6E20202020202020205C22636F6465635C223A64615C6E202020207D5C6E2020202072657475726E2072733B5C6E7D5C6E5C6E2F2FE8AEBEE5A487E69BB4E696B05C6E76617220757064617465203D207061796C6F6164203D3E207B5C6E202020207661722064613D706F73742875726C2C7061796C6F6164295C6E202020207661722072733D7B5C6E20202020202020205C22636F64655C223A302C5C6E20202020202020205C226D73675C223A5C22737563636573735C222C5C6E20202020202020205C22636F6465635C223A5C227570646174655C222C5C6E20202020202020205C22636F6465635C223A64615C6E202020207D5C6E2020202072657475726E2072733B5C6E7D5C6E5C6E2F2FE8AEBEE5A487E69FA5E8AFA25C6E766172207175657279203D207061796C6F6164203D3E207B5C6E2020207661722064613D706F73742875726C2C7061796C6F6164295C6E202020207661722072733D7B5C6E20202020202020205C22636F64655C223A302C5C6E20202020202020205C227265715C223A302C5C6E20202020202020205C226D73675C223A5C22737563636573735C222C5C6E20202020202020205C22636F6465635C223A5C2271756572795C222C5C6E20202020202020205C22636F6465635C223A64615C6E202020207D5C6E2020202072657475726E2072733B5C6E7D5C6E5C6E2F2FE58A9FE883BDE8B083E794A85C6E7661722066756E6374696F6E203D207061796C6F6164203D3E207B5C6E202020207661722064613D706F73742875726C2C7061796C6F6164295C6E202020207661722072733D7B5C6E20202020202020205C22636F64655C223A302C5C6E20202020202020205C226D73675C223A5C22737563636573735C222C5C6E20202020202020205C22636F6465635C223A5C2266756E6374696F6E5C222C5C6E20202020202020205C22636F6465635C223A64615C6E202020207D5C6E2020202072657475726E2072733B5C6E7D5C6E5C6E5C6E72657475726E206465636F6465285C227B2774656D70273A317D5C2229222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E699BAE883BDE68F92E5BAA728E6A0BCE69E97E789A9E8819429222C0A20202263726561746554696D6522203A20313735343238353633363733302C0A20202275706461746554696D6522203A20313735343238363432363433382C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A2022363831633037373563326463343237643034383061623566222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20227B5C6E202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E202020205C2270726F706572746965735C223A207B5C6E20202020202020205C2274656D705C223A20312C5C6E20202020202020205C22736E5C223A205C2232333137365C225C6E202020207D2C5C6E202020205C227265706C795061796C6F61645C223A205C22787A7A786332333137375C222C5C6E202020205C22646F776E546F7069635C223A205C22247468696E672F646F776E2F3638316330373735633264633432376430343830616235662F637A3030313932335C225C6E7D222C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754210880678, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F70657274696573203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E707573682870726F70657274696573293B5C6E202020205C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E2F2F2072657475726E206465636F6465285C225C22293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A206E756C6C2C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A206E756C6C2C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211239567, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F70657274696573203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E707573682870726F70657274696573293B5C6E202020205C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F6465285C224131413241335C22293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313233393533372C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211294357, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F70657274696573203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202072732E707573682870726F70657274696573293B5C6E2020202070726F706572746965732E7470733D7061796C6F61645C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965733B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F6465285C224131413241335C22293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313239343333372C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211363153, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F70657274696573203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202072732E707573682870726F70657274696573293B5C6E2020202070726F706572746965732E70726F706572746965732E7470733D7061796C6F61645C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965733B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F6465285C224131413241335C22293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313336333131322C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20227B5C6E202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E202020205C2270726F706572746965735C223A207B7D2C5C6E202020205C227470735C223A205C224131413241335C225C6E7D222C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211472389, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020207661722074703D7B7D5C6E2020202069662869734A736F6E287061796C6F616429297B5C6E202020202020202074703D746F4A736F6E287061796C6F6164295C6E202020207D5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F70657274696573203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202072732E707573682870726F70657274696573293B5C6E2020202070726F706572746965732E70726F706572746965733D74705C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965733B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F6465287B5C6E20205C2263757272656E745C223A205C223139392E30305C222C5C6E20205C22706F7765725C223A205C223139395C222C5C6E20205C22706F77657253746174655C223A20302C5C6E20205C22766F6C746167655C223A205C223139392E385C225C6E7D293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313437323237332C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20227B5C6E202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E202020205C2270726F706572746965735C223A207B5C6E20202020202020205C227470735C223A205C224131413241335C225C6E202020207D5C6E7D222C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211490070, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020207661722074703D7B7D5C6E202020202F2F2069662869734A736F6E287061796C6F616429297B5C6E202020202F2F202020202074703D746F4A736F6E287061796C6F6164295C6E202020202F2F207D5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F70657274696573203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202072732E707573682870726F70657274696573293B5C6E2020202070726F706572746965732E70726F706572746965733D7061796C6F61645C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965733B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F6465287B5C6E20205C2263757272656E745C223A205C223139392E30305C222C5C6E20205C22706F7765725C223A205C223139395C222C5C6E20205C22706F77657253746174655C223A20302C5C6E20205C22766F6C746167655C223A205C223139392E385C225C6E7D293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313439303034392C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20227B5C6E202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E202020205C2270726F706572746965735C223A207B7D5C6E7D222C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211534738, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020207661722074703D7B7D5C6E2020202069662869734A736F6E287061796C6F616429297B5C6E202020202020202074703D747275653B5C6E202020207D5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F70657274696573203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202072732E707573682870726F70657274696573293B5C6E2020202070726F706572746965732E70726F706572746965733D7061796C6F61645C6E2020202070726F706572746965732E74703D74705C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965733B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F6465287B5C6E20205C2263757272656E745C223A205C223139392E30305C222C5C6E20205C22706F7765725C223A205C223139395C222C5C6E20205C22706F77657253746174655C223A20302C5C6E20205C22766F6C746167655C223A205C223139392E385C225C6E7D293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313533343730362C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20227B5C6E202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E202020205C2270726F706572746965735C223A207B5C6E20202020202020205C2263757272656E745C223A205C223139392E30305C222C5C6E20202020202020205C22706F7765725C223A205C223139395C222C5C6E20202020202020205C22706F77657253746174655C223A20302C5C6E20202020202020205C22766F6C746167655C223A205C223139392E385C225C6E202020207D5C6E7D222C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211546925, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020207661722074703B5C6E2020202069662869734A736F6E287061796C6F616429297B5C6E202020202020202074703D747275653B5C6E202020207D5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F70657274696573203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202072732E707573682870726F70657274696573293B5C6E2020202070726F706572746965732E70726F706572746965733D7061796C6F61645C6E2020202070726F706572746965732E74703D74705C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965733B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F6465287B5C6E20205C2263757272656E745C223A205C223139392E30305C222C5C6E20205C22706F7765725C223A205C223139395C222C5C6E20205C22706F77657253746174655C223A20302C5C6E20205C22766F6C746167655C223A205C223139392E385C225C6E7D293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313534363931302C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20227B5C6E202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E202020205C2270726F706572746965735C223A207B5C6E20202020202020205C2263757272656E745C223A205C223139392E30305C222C5C6E20202020202020205C22706F7765725C223A205C223139395C222C5C6E20202020202020205C22706F77657253746174655C223A20302C5C6E20202020202020205C22766F6C746167655C223A205C223139392E385C225C6E202020207D2C5C6E202020205C2274705C223A207B7D5C6E7D222C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211611429, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020207661722074703B5C6E2020202069662869734A736F6E287061796C6F616429297B5C6E202020202020202074703D747275653B5C6E202020207D5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F70657274696573203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202072732E707573682870726F70657274696573293B5C6E2020202070726F706572746965732E70726F706572746965733D7061796C6F61645C6E2020202070726F706572746965732E74703D74705C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965733B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F646528277B5C2263757272656E745C223A205C223139392E30305C222C5C22706F7765725C223A205C223139395C222C5C22706F77657253746174655C223A20302C5C22766F6C746167655C223A205C223139392E385C227D27293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313631313430332C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20227B5C6E202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E202020205C2270726F706572746965735C223A207B5C6E20202020202020205C2263757272656E745C223A205C223139392E30305C222C5C6E20202020202020205C22706F7765725C223A205C223139395C222C5C6E20202020202020205C22706F77657253746174655C223A20302C5C6E20202020202020205C22766F6C746167655C223A205C223139392E385C225C6E202020207D2C5C6E202020205C2274705C223A206E756C6C5C6E7D222C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211618306, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020207661722074703B5C6E2020202069662869734A736F6E287061796C6F616429297B5C6E202020202020202074703D747275653B5C6E202020207D5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F70657274696573203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202072732E707573682870726F70657274696573293B5C6E2020202070726F706572746965732E70726F706572746965733D7061796C6F61645C6E2020202070726F706572746965732E70726F706572746965732E74703D74705C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965733B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F646528277B5C2263757272656E745C223A205C223139392E30305C222C5C22706F7765725C223A205C223139395C222C5C22706F77657253746174655C223A20302C5C22766F6C746167655C223A205C223139392E385C227D27293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313631383238342C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20227B5C6E202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E202020205C2270726F706572746965735C223A205C227B5C5C5C2263757272656E745C5C5C223A205C5C5C223139392E30305C5C5C222C5C5C5C22706F7765725C5C5C223A205C5C5C223139395C5C5C222C5C5C5C22706F77657253746174655C5C5C223A20302C5C5C5C22766F6C746167655C5C5C223A205C5C5C223139392E385C5C5C227D5C222C5C6E202020205C2274705C223A20747275655C6E7D222C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211627995, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020207661722074703B5C6E2020202069662869734A736F6E287061796C6F616429297B5C6E202020202020202074703D747275653B5C6E202020207D5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F70657274696573203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202072732E707573682870726F70657274696573293B5C6E2020202070726F706572746965732E70726F706572746965733D7061796C6F61645C6E2020202070726F706572746965732E70726F706572746965732E6A736F6E3D74705C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965733B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F646528277B5C2263757272656E745C223A205C223139392E30305C222C5C22706F7765725C223A205C223139395C222C5C22706F77657253746174655C223A20302C5C22766F6C746167655C223A205C223139392E385C227D27293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313632373935332C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211642677, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020207661722074703B5C6E2020202069662869734A736F6E287061796C6F616429297B5C6E202020202020202074703D5C2269734A736F6E5C223B5C6E202020207D5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F70657274696573203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202072732E707573682870726F70657274696573293B5C6E2020202070726F706572746965732E70726F706572746965733D7061796C6F61645C6E2020202070726F706572746965732E70726F706572746965732E6A736F6E3D74705C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965733B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F646528277B5C2263757272656E745C223A205C223139392E30305C222C5C22706F7765725C223A205C223139395C222C5C22706F77657253746174655C223A20302C5C22766F6C746167655C223A205C223139392E385C227D27293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313634323635332C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211655476, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020207661722074703B5C6E2020202069662869734A736F6E287061796C6F616429297B5C6E202020202020202074703D5C2269734A736F6E5C223B5C6E202020207D5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F70657274696573203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202072732E707573682870726F70657274696573293B5C6E2020202070726F706572746965732E70726F706572746965733D7061796C6F61645C6E2020202070726F706572746965732E70726F706572746965732E787A3D74705C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965733B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F646528277B5C2263757272656E745C223A205C223139392E30305C222C5C22706F7765725C223A205C223139395C222C5C22706F77657253746174655C223A20302C5C22766F6C746167655C223A205C223139392E385C227D27293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313635353433352C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211685608, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020207661722074703B5C6E2020202069662869734A736F6E287061796C6F616429297B5C6E202020202020202074703D5C2269734A736F6E5C223B5C6E202020207D5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202070726F706572746965734F626A2E70726F706572746965733D7061796C6F61645C6E2020202070726F706572746965734F626A2E70726F706572746965732E787A3D74705C6E2020202072732E707573682870726F706572746965734F626A293B5C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965733B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F646528277B5C2263757272656E745C223A205C223139392E30305C222C5C22706F7765725C223A205C223139395C222C5C22706F77657253746174655C223A20302C5C22766F6C746167655C223A205C223139392E385C227D27293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313638353537392C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211693641, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020207661722074703D5C225C225C6E2020202069662869734A736F6E287061796C6F616429297B5C6E202020202020202074703D5C2269734A736F6E5C223B5C6E202020207D5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202070726F706572746965734F626A2E70726F706572746965733D7061796C6F61645C6E2020202070726F706572746965734F626A2E70726F706572746965732E787A3D74705C6E2020202072732E707573682870726F706572746965734F626A293B5C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965733B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F646528277B5C2263757272656E745C223A205C223139392E30305C222C5C22706F7765725C223A205C223139395C222C5C22706F77657253746174655C223A20302C5C22766F6C746167655C223A205C223139392E385C227D27293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313639333535302C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211710950, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020206C65742074703D5C225C225C6E2020202069662869734A736F6E287061796C6F616429297B5C6E202020202020202074703D5C2269734A736F6E5C223B5C6E202020207D5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202070726F706572746965734F626A2E70726F706572746965733D7061796C6F61645C6E2020202070726F706572746965734F626A2E70726F706572746965732E787A3D74705C6E2020202072732E707573682870726F706572746965734F626A293B5C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965733B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F646528277B5C2263757272656E745C223A205C223139392E30305C222C5C22706F7765725C223A205C223139395C222C5C22706F77657253746174655C223A20302C5C22766F6C746167655C223A205C223139392E385C227D27293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313731303930382C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211737079, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020206C65742074703D5C225C225C6E2020202069662869734A736F6E287061796C6F616429297B5C6E202020202020202074703D5C2269734A736F6E5C223B5C6E202020207D5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202070726F706572746965734F626A2E70726F706572746965733D7061796C6F61645C6E2020202070726F706572746965734F626A2E70726F706572746965732E74703D74705C6E2020202072732E707573682870726F706572746965734F626A293B5C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965733B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F646528277B5C2263757272656E745C223A205C223139392E30305C222C5C22706F7765725C223A205C223139395C222C5C22706F77657253746174655C223A20302C5C22766F6C746167655C223A205C223139392E385C227D27293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313733373036342C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211752970, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020206C65742074703D5C225C225C6E2020202069662869734A736F6E287061796C6F616429297B5C6E202020202020202074703D5C2269734A736F6E5C223B5C6E202020207D5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202070726F706572746965734F626A2E70726F706572746965733D7061796C6F61645C6E202020205C6E2020202072732E707573682870726F706572746965734F626A293B5C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965733B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F646528277B5C2263757272656E745C223A205C223139392E30305C222C5C22706F7765725C223A205C223139395C222C5C22706F77657253746174655C223A20302C5C22766F6C746167655C223A205C223139392E385C227D27293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313735323934362C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211757718, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020206C65742074703D5C225C225C6E2020202069662869734A736F6E287061796C6F616429297B5C6E202020202020202074703D5C2269734A736F6E5C223B5C6E202020207D5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202070726F706572746965734F626A2E70726F706572746965733D7061796C6F61645C6E2020202070726F706572746965734F626A2E70726F706572746965732E74703D74705C6E2020202072732E707573682870726F706572746965734F626A293B5C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965734F626A3B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F646528277B5C2263757272656E745C223A205C223139392E30305C222C5C22706F7765725C223A205C223139395C222C5C22706F77657253746174655C223A20302C5C22766F6C746167655C223A205C223139392E385C227D27293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313735373635372C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211763875, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020206C65742074703D5C225C225C6E2020202069662869734A736F6E287061796C6F616429297B5C6E202020202020202074703D5C2269734A736F6E5C223B5C6E202020207D5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202070726F706572746965734F626A2E70726F706572746965733D7061796C6F61645C6E2020202070726F706572746965734F626A2E70726F706572746965732E74703D72735C6E2020202072732E707573682870726F706572746965734F626A293B5C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965734F626A3B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F646528277B5C2263757272656E745C223A205C223139392E30305C222C5C22706F7765725C223A205C223139395C222C5C22706F77657253746174655C223A20302C5C22766F6C746167655C223A205C223139392E385C227D27293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313736333833332C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211777727, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020206C65742074703D5C225C225C6E2020202069662869734A736F6E287061796C6F616429297B5C6E202020202020202074703D5C2269734A736F6E5C223B5C6E202020207D5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202070726F706572746965734F626A2E70726F706572746965733D7061796C6F61645C6E2020202070726F706572746965734F626A2E70726F706572746965732E74703D72735C6E2020202072732E707573682870726F706572746965734F626A293B5C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965734F626A3B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F646528277B5C2263757272656E745C223A205C223139392E30305C222C5C22706F7765725C223A205C223139395C222C5C22706F77657253746174655C223A20302C5C22766F6C746167655C223A205C223139392E385C227D27293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313737373638392C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211780761, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020206C65742074703D5C225C225C6E2020202069662869734A736F6E287061796C6F616429297B5C6E202020202020202074703D5C2269734A736F6E5C223B5C6E202020207D5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202070726F706572746965734F626A2E70726F706572746965733D7061796C6F61645C6E2020202070726F706572746965734F626A2E70726F706572746965732E74703D72735C6E2020202072732E707573682870726F706572746965734F626A293B5C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965734F626A3B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F646528277B5C2263757272656E745C223A205C223139392E30305C222C5C22706F7765725C223A205C223139395C222C5C22706F77657253746174655C223A20302C5C22766F6C746167655C223A205C223139392E385C227D27293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313738303732352C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211786972, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020206C65742074703D5C225C225C6E2020202069662869734A736F6E287061796C6F616429297B5C6E202020202020202074703D5C2269734A736F6E5C223B5C6E202020207D5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202070726F706572746965734F626A2E70726F706572746965733D7061796C6F61645C6E2020202072732E707573682870726F706572746965734F626A293B5C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965734F626A3B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F646528277B5C2263757272656E745C223A205C223139392E30305C222C5C22706F7765725C223A205C223139395C222C5C22706F77657253746174655C223A20302C5C22766F6C746167655C223A205C223139392E385C227D27293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313738363933312C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211832878, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020206C65742074703D7B7D5C6E2020202069662869734A736F6E287061796C6F616429297B5C6E202020202020202074703D746F4A736F6E287061796C6F6164295C6E202020207D5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202070726F706572746965734F626A2E70726F706572746965733D7061796C6F61645C6E2020202072732E707573682870726F706572746965734F626A293B5C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965734F626A3B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F646528277B5C2263757272656E745C223A205C223139392E30305C222C5C22706F7765725C223A205C223139395C222C5C22706F77657253746174655C223A20302C5C22766F6C746167655C223A205C223139392E385C227D27293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313833323834302C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20227B5C6E202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E202020205C2270726F706572746965735C223A205C227B5C5C5C2263757272656E745C5C5C223A205C5C5C223139392E30305C5C5C222C5C5C5C22706F7765725C5C5C223A205C5C5C223139395C5C5C222C5C5C5C22706F77657253746174655C5C5C223A20302C5C5C5C22766F6C746167655C5C5C223A205C5C5C223139392E385C5C5C227D5C225C6E7D222C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211840337, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020206C65742074703D7B7D5C6E2020202069662869734A736F6E287061796C6F616429297B5C6E20202020202020207061796C6F61643D746F4A736F6E287061796C6F6164295C6E202020207D5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202070726F706572746965734F626A2E70726F706572746965733D7061796C6F61645C6E2020202072732E707573682870726F706572746965734F626A293B5C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965734F626A3B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F646528277B5C2263757272656E745C223A205C223139392E30305C222C5C22706F7765725C223A205C223139395C222C5C22706F77657253746174655C223A20302C5C22766F6C746167655C223A205C223139392E385C227D27293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313834303330342C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20227B5C6E202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E202020205C2270726F706572746965735C223A205C227B5C5C5C2263757272656E745C5C5C223A205C5C5C223139392E30305C5C5C222C5C5C5C22706F7765725C5C5C223A205C5C5C223139395C5C5C222C5C5C5C22706F77657253746174655C5C5C223A20302C5C5C5C22766F6C746167655C5C5C223A205C5C5C223139392E385C5C5C227D5C225C6E7D222C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211853577, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020206C65742069734A736F6E506172616D3D66616C73653B5C6E2020202069662869734A736F6E287061796C6F616429297B5C6E20202020202020207061796C6F61643D746F4A736F6E287061796C6F6164295C6E202020202020202069734A736F6E506172616D3D747275655C6E202020207D5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202070726F706572746965734F626A2E70726F706572746965733D7061796C6F61645C6E2020202072732E707573682870726F706572746965734F626A293B5C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965734F626A3B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F646528277B5C2263757272656E745C223A205C223139392E30305C222C5C22706F7765725C223A205C223139395C222C5C22706F77657253746174655C223A20302C5C22766F6C746167655C223A205C223139392E385C227D27293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313835333536332C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20227B5C6E202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E202020205C2270726F706572746965735C223A205C227B5C5C5C2263757272656E745C5C5C223A205C5C5C223139392E30305C5C5C222C5C5C5C22706F7765725C5C5C223A205C5C5C223139395C5C5C222C5C5C5C22706F77657253746174655C5C5C223A20302C5C5C5C22766F6C746167655C5C5C223A205C5C5C223139392E385C5C5C227D5C225C6E7D222C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211859625, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020206C65742069734A736F6E506172616D3D66616C73653B5C6E2020202069662869734A736F6E287061796C6F616429297B5C6E20202020202020207061796C6F61643D746F4A736F6E287061796C6F6164295C6E202020202020202069734A736F6E506172616D3D747275655C6E202020207D5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202070726F706572746965734F626A2E70726F706572746965733D7061796C6F61645C6E2020202070726F706572746965734F626A2E70726F706572746965733D69734A736F6E506172616D5C6E2020202072732E707573682870726F706572746965734F626A293B5C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965734F626A3B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F646528277B5C2263757272656E745C223A205C223139392E30305C222C5C22706F7765725C223A205C223139395C222C5C22706F77657253746174655C223A20302C5C22766F6C746167655C223A205C223139392E385C227D27293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313835393630352C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20227B5C6E202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E202020205C2270726F706572746965735C223A205C227B5C5C5C2263757272656E745C5C5C223A205C5C5C223139392E30305C5C5C222C5C5C5C22706F7765725C5C5C223A205C5C5C223139395C5C5C222C5C5C5C22706F77657253746174655C5C5C223A20302C5C5C5C22766F6C746167655C5C5C223A205C5C5C223139392E385C5C5C227D5C225C6E7D222C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211871687, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020206C65742069734A736F6E506172616D3D66616C73653B5C6E2020202069662869734A736F6E287061796C6F616429297B5C6E20202020202020207061796C6F61643D746F4A736F6E287061796C6F6164295C6E202020202020202069734A736F6E506172616D3D747275655C6E202020207D5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202070726F706572746965734F626A2E70726F706572746965733D7061796C6F61645C6E2020202070726F706572746965734F626A2E70726F706572746965733D69734A736F6E506172616D5C6E2020202072732E707573682870726F706572746965734F626A293B5C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965734F626A3B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F646528277B5C2263757272656E745C223A205C223139392E30305C222C5C22706F7765725C223A205C223139395C222C5C22706F77657253746174655C223A20302C5C22766F6C746167655C223A205C223139392E385C227D27293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313837313637312C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20227B5C6E202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E202020205C2270726F706572746965735C223A20747275655C6E7D222C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211889575, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020206C65742069734A736F6E506172616D3D66616C73653B5C6E202020206C6574206E65775061796C6F61643D7B7D5C6E2020202069662869734A736F6E287061796C6F616429297B5C6E20202020202020206E65775061796C6F61643D746F4A736F6E287061796C6F6164295C6E202020202020202069734A736F6E506172616D3D747275655C6E202020207D5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202070726F706572746965734F626A2E70726F706572746965733D7061796C6F61645C6E2020202070726F706572746965734F626A2E70726F706572746965733D69734A736F6E506172616D5C6E2020202072732E707573682870726F706572746965734F626A293B5C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965734F626A3B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F646528277B5C2263757272656E745C223A205C223139392E30305C222C5C22706F7765725C223A205C223139395C222C5C22706F77657253746174655C223A20302C5C22766F6C746167655C223A205C223139392E385C227D27293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313838393533302C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20227B5C6E202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E202020205C2270726F706572746965735C223A20747275655C6E7D222C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211890923, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020206C65742069734A736F6E506172616D3D66616C73653B5C6E202020206C6574206E65775061796C6F61643D7B7D5C6E2020202069662869734A736F6E287061796C6F616429297B5C6E20202020202020206E65775061796C6F61643D746F4A736F6E287061796C6F6164295C6E202020202020202069734A736F6E506172616D3D747275655C6E202020207D5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202070726F706572746965734F626A2E70726F706572746965733D6E65775061796C6F61645C6E2020202070726F706572746965734F626A2E70726F706572746965733D69734A736F6E506172616D5C6E2020202072732E707573682870726F706572746965734F626A293B5C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965734F626A3B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F646528277B5C2263757272656E745C223A205C223139392E30305C222C5C22706F7765725C223A205C223139395C222C5C22706F77657253746174655C223A20302C5C22766F6C746167655C223A205C223139392E385C227D27293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313839303839382C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20227B5C6E202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E202020205C2270726F706572746965735C223A20747275655C6E7D222C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211902387, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020206C65742069734A736F6E506172616D3D66616C73653B5C6E202020206C6574206E65775061796C6F61643D7B7D5C6E2020202069662869734A736F6E287061796C6F616429297B5C6E20202020202020206E65775061796C6F61643D746F4A736F6E287061796C6F6164295C6E202020202020202069734A736F6E506172616D3D747275655C6E202020207D5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202070726F706572746965734F626A2E70726F706572746965733D6E65775061796C6F61645C6E2020202070726F706572746965734F626A2E70726F706572746965732E69734A736F6E506172616D3D69734A736F6E506172616D5C6E2020202072732E707573682870726F706572746965734F626A293B5C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965734F626A3B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F646528277B5C2263757272656E745C223A205C223139392E30305C222C5C22706F7765725C223A205C223139395C222C5C22706F77657253746174655C223A20302C5C22766F6C746167655C223A205C223139392E385C227D27293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313930323335392C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20227B5C6E202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E202020205C2270726F706572746965735C223A20747275655C6E7D222C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754211918430, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020206C65742069734A736F6E506172616D3D66616C73653B5C6E202020206C6574206E65775061796C6F61643D7B7D5C6E2020202069662869734A736F6E287061796C6F616429297B5C6E20202020202020206E65775061796C6F61643D746F4A736F6E287061796C6F6164295C6E202020202020202069734A736F6E506172616D3D747275655C6E202020207D5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202070726F706572746965734F626A2E70726F706572746965733D6E65775061796C6F61645C6E2020202070726F706572746965734F626A2E69734A736F6E506172616D3D69734A736F6E506172616D5C6E5C6E2020202072732E707573682870726F706572746965734F626A293B5C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965734F626A3B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F646528277B5C2263757272656E745C223A205C223139392E30305C222C5C22706F7765725C223A205C223139395C222C5C22706F77657253746174655C223A20302C5C22766F6C746167655C223A205C223139392E385C227D27293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231313931383339312C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20227B5C6E202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E202020205C2270726F706572746965735C223A207B5C6E20202020202020205C2263757272656E745C223A205C223139392E30305C222C5C6E20202020202020205C22706F7765725C223A205C223139395C222C5C6E20202020202020205C22706F77657253746174655C223A20302C5C6E20202020202020205C22766F6C746167655C223A205C223139392E385C222C5C6E20202020202020205C2269734A736F6E506172616D5C223A20747275655C6E202020207D5C6E7D222C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754212136922, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F70657274696573203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E707573682870726F70657274696573293B5C6E202020205C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F6465285C224131423243335C22293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231323133363838352C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20227B5C6E202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E202020205C2270726F706572746965735C223A207B5C6E20202020202020205C2263757272656E745C223A205C223139392E30305C222C5C6E20202020202020205C22706F7765725C223A205C223139395C222C5C6E20202020202020205C22706F77657253746174655C223A20302C5C6E20202020202020205C22766F6C746167655C223A205C223139392E385C222C5C6E20202020202020205C2269734A736F6E506172616D5C223A20747275655C6E202020207D5C6E7D222C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754212172739, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E707573682870726F70657274696573293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E7061796C6F61643D7061796C6F61645C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F6465285C224131423243335C22293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231323137323732342C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20227B5C6E202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E202020205C2270726F706572746965735C223A207B5C6E20202020202020205C2263757272656E745C223A205C223139392E30305C222C5C6E20202020202020205C22706F7765725C223A205C223139395C222C5C6E20202020202020205C22706F77657253746174655C223A20302C5C6E20202020202020205C22766F6C746167655C223A205C223139392E385C222C5C6E20202020202020205C2269734A736F6E506172616D5C223A20747275655C6E202020207D5C6E7D222C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754212175337, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E707573682870726F70657274696573293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E7061796C6F61643D7061796C6F61645C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965734F626A3B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F6465285C224131423243335C22293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231323137353239362C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20227B5C6E202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E202020205C2270726F706572746965735C223A207B5C6E20202020202020205C2263757272656E745C223A205C223139392E30305C222C5C6E20202020202020205C22706F7765725C223A205C223139395C222C5C6E20202020202020205C22706F77657253746174655C223A20302C5C6E20202020202020205C22766F6C746167655C223A205C223139392E385C222C5C6E20202020202020205C2269734A736F6E506172616D5C223A20747275655C6E202020207D5C6E7D222C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754212243404, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E707573682870726F70657274696573293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E7061796C6F61643D7061796C6F61645C6E2020202070726F706572746965734F626A2E70726F706572746965732E72616E646F6D5374723D72616E646F6D5369676E28295C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965734F626A3B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F6465285C224131423243335C22293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231323234333336322C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20227B5C6E202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E202020205C2270726F706572746965735C223A207B5C6E20202020202020205C227061796C6F61645C223A205C224131423243335C225C6E202020207D5C6E7D222C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('3b003406803b42d3b00ea0bde1892a50', 1754212263209, NULL, 'api', '演示教学一下', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223362303033343036383033623432643362303065613062646531383932613530222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020206C65742069734A736F6E506172616D3D66616C73653B5C6E202020206C6574206E65775061796C6F61643D7B7D5C6E2020202069662869734A736F6E287061796C6F616429297B5C6E20202020202020206E65775061796C6F61643D746F4A736F6E287061796C6F6164295C6E202020202020202069734A736F6E506172616D3D747275655C6E202020207D5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E2020202070726F706572746965734F626A2E70726F706572746965733D6E65775061796C6F61645C6E2020202070726F706572746965734F626A2E69734A736F6E506172616D3D69734A736F6E506172616D5C6E5C6E2020202072732E707573682870726F706572746965734F626A293B5C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2070726F706572746965734F626A3B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E72657475726E206465636F646528277B5C2263757272656E745C223A205C223139392E30305C222C5C22706F7765725C223A205C223139395C222C5C22706F77657253746174655C223A20302C5C22766F6C746167655C223A205C223139392E385C227D27293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E6BC94E7A4BAE69599E5ADA6E4B880E4B88B222C0A20202263726561746554696D6522203A20313735343231303838303634372C0A20202275706461746554696D6522203A20313735343231323236333137372C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202244454D4F222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20227B5C6E202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E202020205C2270726F706572746965735C223A207B5C6E20202020202020205C227061796C6F61645C223A205C224131423243335C222C5C6E20202020202020205C2272616E646F6D5374725C223A205C2233383637385C225C6E202020207D5C6E7D222C0A2020226465736372697074696F6E22203A206E756C6C2C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('44e371fdbede4e44a0b3ddf7620c8b54', 1753764305611, NULL, 'api', '开关面板-文档版', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223434653337316664626564653465343461306233646466373632306338623534222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F70657274696573203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E707573682870726F70657274696573293B5C6E202020205C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E2F2F2072657475726E206465636F6465285C225C22293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E5BC80E585B3E99DA2E69DBF2DE69687E6A1A3E78988222C0A20202263726561746554696D6522203A20313735333736343330353539372C0A20202275706461746554696D6522203A206E756C6C2C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A206E756C6C2C0A2020227061746822203A202233386663383065222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A2022E69687E6A1A3E6BC94E7A4BAE58D8FE8AEAE222C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('44e371fdbede4e44a0b3ddf7620c8b54', 1753764307282, NULL, 'api', '开关面板-文档版', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223434653337316664626564653465343461306233646466373632306338623534222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F70657274696573203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E707573682870726F70657274696573293B5C6E202020205C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E2F2F2072657475726E206465636F6465285C225C22293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E5BC80E585B3E99DA2E69DBF2DE69687E6A1A3E78988222C0A20202263726561746554696D6522203A20313735333736343330353539372C0A20202275706461746554696D6522203A20313735333736343330373237322C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202233386663383065222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A2022E69687E6A1A3E6BC94E7A4BAE58D8FE8AEAE222C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('44e371fdbede4e44a0b3ddf7620c8b54', 1753764312138, NULL, 'api', '开关面板-文档版', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223434653337316664626564653465343461306233646466373632306338623534222C0A20202273637269707422203A2022696D706F7274206C6F673B5C6E5C6E2F2F203136E8BF9BE588B6E8BDAC3130E8BF9BE588B6E695B0E5AD975C6E76617220686578546F496E74203D20686578203D3E207B5C6E202072657475726E20496E74656765722E7061727365496E74286865782C203136293B5C6E7D3B5C6E2F2F20E9A284E8A7A3E7A081EFBC8CE8A7A3E69E90E4B88AE68AA5E79A84E8AEBEE5A487E7BC96E58FB72064657669636549645C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D207B7D5C6E20202020766172207061796C6F6164486578203D207061796C6F61642E746F5570706572436173652829202F2F20E8BDACE4B8BAE5A4A7E586995C6E202020202F2F20E6A0A1E9AA8CE68AA5E69687E995BFE5BAA6E5928CE5B8A7E5A4B45C6E20202020696620287061796C6F61644865782E6C656E6774682829203E3D203138202626207061796C6F61644865782E737562737472696E6728302C203429203D3D3D205C22413541355C2229207B5C6E20202020202020202F2F20E4BB8EE7ACAC35E4BD8DE5BC80E5A78BE58F9634E5AD97E88A82EFBC8838E4B8AAE5AD97E7ACA6EFBC89E4BD9CE4B8BA2064657669636549645C6E2020202020202020726573756C742E6465766963654964203D207061796C6F61644865782E737562737472696E6728342C203132295C6E202020207D5C6E2020202072657475726E20726573756C745C6E7D5C6E5C6E766172206465636F6465203D287061796C6F61642C636F6E7465787429203D3E207B5C6E20206C6F672E696E666F285C22E8BF9BE585A5E7BC96E8A7A3E7A0812C7061796C6F61643D7B7D2C636F6E746578743D7B7D5C222C7061796C6F61642C636F6E74657874295C6E202076617220726573756C74203D205B5D3B5C6E2020766172207061796C6F6164486578203D7061796C6F61642E746F55707065724361736528293B5C6E20207661722070726F706572746965734F626A203D207B205C226D657373616765547970655C223A205C2250524F504552544945535C222C205C2270726F706572746965735C223A207B7D207D3B5C6E2020766172206576656E744F626A203D207B205C226D657373616765547970655C223A205C224556454E545C222C205C226576656E745C223A205C225C222C205C22646174615C223A207B7D207D3B5C6E5C6E20202F2F20E9AA8CE8AF81E5B8A7E5A4B4E5B8A7E5B0BE5C6E2020696620287061796C6F61644865782E737562737472696E6728302C20342920213D205C22413541355C22207C7C207061796C6F61644865782E737562737472696E67287061796C6F61644865782E6C656E6774682829202D20342920213D205C22354135415C2229207B5C6E2020202072657475726E206A736F6E546F537472285B7B205C226572726F725C223A205C22E697A0E69588E5B8A7E6A0BCE5BC8F5C22207D5D293B5C6E20207D5C6E5C6E20202F2F20E68F90E58F96E6A0B8E5BF83E5AD97E6AEB55C6E2020766172206465766963654964203D207061796C6F61644865782E737562737472696E6728342C2038293B202F2F20E8AEBEE5A4874944EFBC8834E5AD97E88A82EFBC895C6E202076617220636D64436F6465203D207061796C6F61644865782E737562737472696E6728382C203130293B202F2F20E591BDE4BBA4E7A081EFBC8831E5AD97E88A82EFBC895C6E202076617220646174614C656E203D20686578546F496E74287061796C6F61644865782E737562737472696E672831302C20313229293B202F2F20E695B0E68DAEE995BFE5BAA65C6E20207661722064617461486578203D207061796C6F61644865782E737562737472696E672831322C203132202B20646174614C656E202A2032293B202F2F20E695B0E68DAEE58CBA5C6E202076617220636865636B73756D203D207061796C6F61644865782E737562737472696E67283132202B20646174614C656E202A20322C203134202B20646174614C656E202A2032293B202F2F20E6A0A1E9AA8CE5928C5C6E5C6E20202F2F20E8AEBEE5A4874944E5AD98E585A5E68980E69C89E5AFB9E8B1A15C6E202070726F706572746965734F626A2E6465766963654964203D2064657669636549643B5C6E20206576656E744F626A2E6465766963654964203D2064657669636549643B5C6E20202F2FE9AA8CE8AF81E696B0E58685E5AEB95C6E202070726F706572746965734F626A2E636F6E746578743D636F6E746578743B5C6E202070726F706572746965734F626A2E746370456E636F6465203D2027484558273B5C6E202070726F706572746965734F626A2E7265706C795061796C6F6164203D202737323732373036333243363736353734363337333731275C6E20202F2F20312E20E5B19EE680A7E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813031EFBC895C6E202069662028636D64436F6465203D3D205C2230315C2220262620646174614C656E203D3D203729207B5C6E202020202F2F20E8A7A3E69E90E5BC80E585B3E78AB6E68081EFBC8830313DE5BC80EFBC8C30303DE585B3EFBC895C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F7765725374617465203D20646174614865782E737562737472696E6728302C203229203D3D205C2230315C22203F205C2230315C22203A205C2230305C223B5C6E202020202F2F20E8A7A3E69E90E794B5E6B581EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E303141EFBC895C6E202020207661722063757272656E74486578203D20646174614865782E737562737472696E6728322C2036293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E63757272656E74203D2028686578546F496E742863757272656E7448657829202A20302E3031292E746F46697865642832293B5C6E202020202F2F20E8A7A3E69E90E794B5E58E8BEFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E3156EFBC895C6E2020202076617220766F6C74616765486578203D20646174614865782E737562737472696E6728362C203130293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E766F6C74616765203D2028686578546F496E7428766F6C7461676548657829202A20302E31292E746F46697865642831293B5C6E202020202F2F20E8A7A3E69E90E58A9FE78E87EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D3157EFBC895C6E2020202076617220706F776572486578203D20646174614865782E737562737472696E672831302C203134293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F776572203D20686578546F496E7428706F776572486578292E746F537472696E6728293B5C6E202020202F2F20E58AA0E585A5E7BB93E69E9CE99B865C6E20202020726573756C742E707573682870726F706572746965734F626A293B5C6E20207D5C6E5C6E20202F2F20322E20E4BA8BE4BBB6E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813032EFBC895C6E202069662028636D64436F6465203D3D205C2230325C2220262620646174614C656E203E3D203329207B5C6E202020202F2F20E4BA8BE4BBB6E7B1BBE59E8BEFBC8830313DE8BF87E8BDBDEFBC8C30323DE8BF87E58E8BEFBC8C30333DE4B88AE7BABFEFBC8C30343DE4B88BE7BABFEFBC895C6E20202020766172206576656E7454797065203D20646174614865782E737562737472696E6728302C2032293B5C6E20202020696620286576656E7454797065203D3D205C2230315C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F7665726C6F61645C223B5C6E2020202020206576656E744F626A2E646174612E6F7665726C6F6164203D20686578546F496E7428646174614865782E737562737472696E6728322C20362929202B205C22575C223B202F2F20E8BF87E8BDBDE58A9FE78E875C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230335C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F6E6C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F6E6C696E65203D205C22E8AEBEE5A487E4B88AE7BABF5C223B5C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230345C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F66666C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F66666C696E65203D205C22E8AEBEE5A487E4B88BE7BABF5C223B5C6E202020207D5C6E20202020726573756C742E70757368286576656E744F626A293B5C6E20207D5C6E5C6E20202F2F20332E20E5938DE5BA94E68AA5E69687EFBC88E591BDE4BBA4E7A0813034EFBC895C6E202069662028636D64436F6465203D3D205C2230345C2220262620646174614C656E203D3D203129207B5C6E20202020766172207265706C794F626A203D207B5C6E2020202020205C226D657373616765547970655C223A205C225245504C595C222C5C6E2020202020205C2266756E6374696F6E5C223A205C227377697463685C222C5C6E2020202020205C22646174615C223A207B205C22726573756C745C223A2064617461486578203D3D205C2230305C22203F205C22737563636573735C22203A205C226661696C5C22207D5C6E202020207D3B5C6E202020207265706C794F626A2E6465766963654964203D2064657669636549643B5C6E20202020726573756C742E70757368287265706C794F626A293B5C6E20207D5C6E5C6E202072657475726E206A736F6E546F53747228726573756C74293B5C6E7D3B5C6E5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020766172206F626A203D20746F4A736F6E287061796C6F6164293B5C6E2020766172206465766963654964203D206F626A2E646174612E64657669636549643B202F2F20E8AEBEE5A4874944EFBC8834E4BD8D3136E8BF9BE588B6EFBC8CE5A6825C22303030315C22EFBC895C6E20207661722066756E63203D206F626A2E66756E6374696F6E3B5C6E202076617220706172616D73203D206F626A2E646174613B5C6E5C6E20202F2F20E68EA7E588B6E5BC80E585B3EFBC8866756E6374696F6E3D737769746368EFBC895C6E20206966202866756E63203D3D205C227377697463685C2229207B5C6E20202020766172207374617465203D20706172616D732E73746174653B202F2F20E79BAEE6A087E78AB6E68081EFBC9A30313DE5BC80EFBC8C30303DE585B35C6E2020202069662028737461746520213D205C2230315C2220262620737461746520213D205C2230305C2229207B5C6E20202020202072657475726E205C225C223B202F2F20E697A0E69588E78AB6E68081EFBC8CE8BF94E59B9EE7A9BA5C6E202020207D5C6E5C6E202020202F2F20E695B0E68DAEE58CBAEFBC9AE68EA7E588B6E7B1BBE59E8B283031292BE79BAEE6A087E78AB6E680815C6E202020207661722064617461486578203D205C2230315C22202B2073746174653B5C6E2020202076617220646174614C656E203D20646174614865782E6C656E6774682829202F20323B202F2F20E695B0E68DAEE995BFE5BAA6EFBC88E5AD97E88A82E695B0EFBC895C6E2020202076617220636D64436F6465203D205C2230335C223B202F2F20E68EA7E588B6E68C87E4BBA4E591BDE4BBA4E7A0815C6E5C6E202020202F2F20E68BBCE68EA5E5AE8CE695B4E68AA5E69687EFBC88E697A0E6A0A1E9AA8CE5928CEFBC895C6E20202020766172206672616D65203D205C22413541355C22202B205C6E202020202020202020202020202020206465766963654964202B205C6E20202020202020202020202020202020636D64436F6465202B205C6E20202020202020202020202020202020496E74656765722E746F486578537472696E6728646174614C656E29202B202F2F20E695B0E68DAEE995BFE5BAA6EFBC8831E4BD8D3136E8BF9BE588B6EFBC895C6E2020202020202020202020202020202064617461486578202B205C6E202020202020202020202020202020205C22354135415C223B5C6E5C6E2020202072657475726E206672616D652E746F55707065724361736528293B202F2F20E8BDACE4B8BAE5A4A7E586993136E8BF9BE588B65C6E20207D5C6E5C6E202072657475726E205C225C223B202F2F20E4B88DE694AFE68C81E79A84E68C87E4BBA45C6E7D3B5C6E5C6E2F2F2072657475726E207072654465636F6465285C224135413530303031303130373031303544433038463030344230354135415C22295C6E2F2FE5B19EE680A7E4B88AE68AA5E68AA5E696875C6E72657475726E206465636F64652827413541353030303130313037303130354443303846303034423037413541354127293B5C6E5C6E2F2FE8BF87E8BDBDE4BA8BE4BBB6E68AA5E696875C6E2F2F2072657475726E206465636F6465285C224135413530303031303230333031303442304633354135415C22295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C2264657669636549645C223A205C22303030315C222C5C2266756E6374696F6E5C223A205C227377697463685C222C5C22646174615C223A207B205C2273746174655C223A205C2230315C22207D7D27295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C226D657373616765547970655C223A5C2246554E4354494F4E535C222C5C2266756E6374696F6E5C223A5C227377697463685C222C5C22646174615C223A7B5C2264657669636549645C223A5C2230303031303130375C222C5C2273746174655C223A5C2230315C227D7D2729222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E5BC80E585B3E99DA2E69DBF2DE69687E6A1A3E78988222C0A20202263726561746554696D6522203A20313735333736343330353539372C0A20202275706461746554696D6522203A20313735333736343331323132372C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202233386663383065222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A2022E69687E6A1A3E6BC94E7A4BAE58D8FE8AEAE222C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('44e371fdbede4e44a0b3ddf7620c8b54', 1753764337243, NULL, 'api', '开关面板-文档版', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223434653337316664626564653465343461306233646466373632306338623534222C0A20202273637269707422203A2022696D706F7274206C6F673B5C6E5C6E2F2F203136E8BF9BE588B6E8BDAC3130E8BF9BE588B6E695B0E5AD975C6E76617220686578546F496E74203D20686578203D3E207B5C6E202072657475726E20496E74656765722E7061727365496E74286865782C203136293B5C6E7D3B5C6E2F2F20E9A284E8A7A3E7A081EFBC8CE8A7A3E69E90E4B88AE68AA5E79A84E8AEBEE5A487E7BC96E58FB72064657669636549645C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D207B7D5C6E20202020766172207061796C6F6164486578203D207061796C6F61642E746F5570706572436173652829202F2F20E8BDACE4B8BAE5A4A7E586995C6E202020202F2F20E6A0A1E9AA8CE68AA5E69687E995BFE5BAA6E5928CE5B8A7E5A4B45C6E20202020696620287061796C6F61644865782E6C656E6774682829203E3D203138202626207061796C6F61644865782E737562737472696E6728302C203429203D3D3D205C22413541355C2229207B5C6E20202020202020202F2F20E4BB8EE7ACAC35E4BD8DE5BC80E5A78BE58F9634E5AD97E88A82EFBC8838E4B8AAE5AD97E7ACA6EFBC89E4BD9CE4B8BA2064657669636549645C6E2020202020202020726573756C742E6465766963654964203D207061796C6F61644865782E737562737472696E6728342C203132295C6E202020207D5C6E2020202072657475726E20726573756C745C6E7D5C6E5C6E766172206465636F6465203D287061796C6F61642C636F6E7465787429203D3E207B5C6E20206C6F672E696E666F285C22E8BF9BE585A5E7BC96E8A7A3E7A0812C7061796C6F61643D7B7D2C636F6E746578743D7B7D5C222C7061796C6F61642C636F6E74657874295C6E202076617220726573756C74203D205B5D3B5C6E2020766172207061796C6F6164486578203D7061796C6F61642E746F55707065724361736528293B5C6E20207661722070726F706572746965734F626A203D207B205C226D657373616765547970655C223A205C2250524F504552544945535C222C205C2270726F706572746965735C223A207B7D207D3B5C6E2020766172206576656E744F626A203D207B205C226D657373616765547970655C223A205C224556454E545C222C205C226576656E745C223A205C225C222C205C22646174615C223A207B7D207D3B5C6E5C6E20202F2F20E9AA8CE8AF81E5B8A7E5A4B4E5B8A7E5B0BE5C6E2020696620287061796C6F61644865782E737562737472696E6728302C20342920213D205C22413541355C22207C7C207061796C6F61644865782E737562737472696E67287061796C6F61644865782E6C656E6774682829202D20342920213D205C22354135415C2229207B5C6E2020202072657475726E206A736F6E546F537472285B7B205C226572726F725C223A205C22E697A0E69588E5B8A7E6A0BCE5BC8F5C22207D5D293B5C6E20207D5C6E5C6E20202F2F20E68F90E58F96E6A0B8E5BF83E5AD97E6AEB55C6E2020766172206465766963654964203D207061796C6F61644865782E737562737472696E6728342C2038293B202F2F20E8AEBEE5A4874944EFBC8834E5AD97E88A82EFBC895C6E202076617220636D64436F6465203D207061796C6F61644865782E737562737472696E6728382C203130293B202F2F20E591BDE4BBA4E7A081EFBC8831E5AD97E88A82EFBC895C6E202076617220646174614C656E203D20686578546F496E74287061796C6F61644865782E737562737472696E672831302C20313229293B202F2F20E695B0E68DAEE995BFE5BAA65C6E20207661722064617461486578203D207061796C6F61644865782E737562737472696E672831322C203132202B20646174614C656E202A2032293B202F2F20E695B0E68DAEE58CBA5C6E202076617220636865636B73756D203D207061796C6F61644865782E737562737472696E67283132202B20646174614C656E202A20322C203134202B20646174614C656E202A2032293B202F2F20E6A0A1E9AA8CE5928C5C6E5C6E20202F2F20E8AEBEE5A4874944E5AD98E585A5E68980E69C89E5AFB9E8B1A15C6E202070726F706572746965734F626A2E6465766963654964203D2064657669636549643B5C6E20206576656E744F626A2E6465766963654964203D2064657669636549643B5C6E20202F2FE9AA8CE8AF81E696B0E58685E5AEB95C6E202070726F706572746965734F626A2E636F6E746578743D636F6E746578743B5C6E202070726F706572746965734F626A2E746370456E636F6465203D2027484558273B5C6E202070726F706572746965734F626A2E7265706C795061796C6F6164203D202737323732373036333243363736353734363337333731275C6E20202F2F20312E20E5B19EE680A7E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813031EFBC895C6E202069662028636D64436F6465203D3D205C2230315C2220262620646174614C656E203D3D203729207B5C6E202020202F2F20E8A7A3E69E90E5BC80E585B3E78AB6E68081EFBC8830313DE5BC80EFBC8C30303DE585B3EFBC895C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F7765725374617465203D20646174614865782E737562737472696E6728302C203229203D3D205C2230315C22203F205C2230315C22203A205C2230305C223B5C6E202020202F2F20E8A7A3E69E90E794B5E6B581EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E303141EFBC895C6E202020207661722063757272656E74486578203D20646174614865782E737562737472696E6728322C2036293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E63757272656E74203D2028686578546F496E742863757272656E7448657829202A20302E3031292E746F46697865642832293B5C6E202020202F2F20E8A7A3E69E90E794B5E58E8BEFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E3156EFBC895C6E2020202076617220766F6C74616765486578203D20646174614865782E737562737472696E6728362C203130293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E766F6C74616765203D2028686578546F496E7428766F6C7461676548657829202A20302E31292E746F46697865642831293B5C6E202020202F2F20E8A7A3E69E90E58A9FE78E87EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D3157EFBC895C6E2020202076617220706F776572486578203D20646174614865782E737562737472696E672831302C203134293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F776572203D20686578546F496E7428706F776572486578292E746F537472696E6728293B5C6E202020202F2F20E58AA0E585A5E7BB93E69E9CE99B865C6E20202020726573756C742E707573682870726F706572746965734F626A293B5C6E20207D5C6E5C6E20202F2F20322E20E4BA8BE4BBB6E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813032EFBC895C6E202069662028636D64436F6465203D3D205C2230325C2220262620646174614C656E203E3D203329207B5C6E202020202F2F20E4BA8BE4BBB6E7B1BBE59E8BEFBC8830313DE8BF87E8BDBDEFBC8C30323DE8BF87E58E8BEFBC8C30333DE4B88AE7BABFEFBC8C30343DE4B88BE7BABFEFBC895C6E20202020766172206576656E7454797065203D20646174614865782E737562737472696E6728302C2032293B5C6E20202020696620286576656E7454797065203D3D205C2230315C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F7665726C6F61645C223B5C6E2020202020206576656E744F626A2E646174612E6F7665726C6F6164203D20686578546F496E7428646174614865782E737562737472696E6728322C20362929202B205C22575C223B202F2F20E8BF87E8BDBDE58A9FE78E875C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230335C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F6E6C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F6E6C696E65203D205C22E8AEBEE5A487E4B88AE7BABF5C223B5C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230345C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F66666C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F66666C696E65203D205C22E8AEBEE5A487E4B88BE7BABF5C223B5C6E202020207D5C6E20202020726573756C742E70757368286576656E744F626A293B5C6E20207D5C6E5C6E20202F2F20332E20E5938DE5BA94E68AA5E69687EFBC88E591BDE4BBA4E7A0813034EFBC895C6E202069662028636D64436F6465203D3D205C2230345C2220262620646174614C656E203D3D203129207B5C6E20202020766172207265706C794F626A203D207B5C6E2020202020205C226D657373616765547970655C223A205C225245504C595C222C5C6E2020202020205C2266756E6374696F6E5C223A205C227377697463685C222C5C6E2020202020205C22646174615C223A207B205C22726573756C745C223A2064617461486578203D3D205C2230305C22203F205C22737563636573735C22203A205C226661696C5C22207D5C6E202020207D3B5C6E202020207265706C794F626A2E6465766963654964203D2064657669636549643B5C6E20202020726573756C742E70757368287265706C794F626A293B5C6E20207D5C6E5C6E202072657475726E206A736F6E546F53747228726573756C74293B5C6E7D3B5C6E5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020766172206F626A203D20746F4A736F6E287061796C6F6164293B5C6E2020766172206465766963654964203D206F626A2E646174612E64657669636549643B202F2F20E8AEBEE5A4874944EFBC8834E4BD8D3136E8BF9BE588B6EFBC8CE5A6825C22303030315C22EFBC895C6E20207661722066756E63203D206F626A2E66756E6374696F6E3B5C6E202076617220706172616D73203D206F626A2E646174613B5C6E5C6E20202F2F20E68EA7E588B6E5BC80E585B3EFBC8866756E6374696F6E3D737769746368EFBC895C6E20206966202866756E63203D3D205C227377697463685C2229207B5C6E20202020766172207374617465203D20706172616D732E73746174653B202F2F20E79BAEE6A087E78AB6E68081EFBC9A30313DE5BC80EFBC8C30303DE585B35C6E2020202069662028737461746520213D205C2230315C2220262620737461746520213D205C2230305C2229207B5C6E20202020202072657475726E205C225C223B202F2F20E697A0E69588E78AB6E68081EFBC8CE8BF94E59B9EE7A9BA5C6E202020207D5C6E5C6E202020202F2F20E695B0E68DAEE58CBAEFBC9AE68EA7E588B6E7B1BBE59E8B283031292BE79BAEE6A087E78AB6E680815C6E202020207661722064617461486578203D205C2230315C22202B2073746174653B5C6E2020202076617220646174614C656E203D20646174614865782E6C656E6774682829202F20323B202F2F20E695B0E68DAEE995BFE5BAA6EFBC88E5AD97E88A82E695B0EFBC895C6E2020202076617220636D64436F6465203D205C2230335C223B202F2F20E68EA7E588B6E68C87E4BBA4E591BDE4BBA4E7A0815C6E5C6E202020202F2F20E68BBCE68EA5E5AE8CE695B4E68AA5E69687EFBC88E697A0E6A0A1E9AA8CE5928CEFBC895C6E20202020766172206672616D65203D205C22413541355C22202B205C6E202020202020202020202020202020206465766963654964202B205C6E20202020202020202020202020202020636D64436F6465202B205C6E20202020202020202020202020202020496E74656765722E746F486578537472696E6728646174614C656E29202B202F2F20E695B0E68DAEE995BFE5BAA6EFBC8831E4BD8D3136E8BF9BE588B6EFBC895C6E2020202020202020202020202020202064617461486578202B205C6E202020202020202020202020202020205C22354135415C223B5C6E5C6E2020202072657475726E206672616D652E746F55707065724361736528293B202F2F20E8BDACE4B8BAE5A4A7E586993136E8BF9BE588B65C6E20207D5C6E5C6E202072657475726E205C225C223B202F2F20E4B88DE694AFE68C81E79A84E68C87E4BBA45C6E7D3B5C6E5C6E2F2FE9A284E8A7A3E7A081EFBC8CE5BE97E588B064657669636549645C6E72657475726E207072654465636F6465285C224135413530303031303130373031303544433038463030344230354135415C22295C6E2F2FE5B19EE680A7E4B88AE68AA5E68AA5E696875C6E2F2F2072657475726E206465636F64652827413541353030303130313037303130354443303846303034423037413541354127293B5C6E5C6E2F2FE8BF87E8BDBDE4BA8BE4BBB6E68AA5E696875C6E2F2F2072657475726E206465636F6465285C224135413530303031303230333031303442304633354135415C22295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C2264657669636549645C223A205C22303030315C222C5C2266756E6374696F6E5C223A205C227377697463685C222C5C22646174615C223A207B205C2273746174655C223A205C2230315C22207D7D27295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C226D657373616765547970655C223A5C2246554E4354494F4E535C222C5C2266756E6374696F6E5C223A5C227377697463685C222C5C22646174615C223A7B5C2264657669636549645C223A5C2230303031303130375C222C5C2273746174655C223A5C2230315C227D7D2729222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E5BC80E585B3E99DA2E69DBF2DE69687E6A1A3E78988222C0A20202263726561746554696D6522203A20313735333736343330353539372C0A20202275706461746554696D6522203A20313735333736343333373233322C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202233386663383065222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20225B5C6E202020207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B5C6E2020202020202020202020205C22706F77657253746174655C223A205C2230315C222C5C6E2020202020202020202020205C2263757272656E745C223A205C2231352E30305C222C5C6E2020202020202020202020205C22766F6C746167655C223A205C223232382E385C222C5C6E2020202020202020202020205C22706F7765725C223A205C22313230305C225C6E20202020202020207D2C5C6E20202020202020205C2264657669636549645C223A205C22303030315C222C5C6E20202020202020205C22746370456E636F64655C223A205C224845585C222C5C6E20202020202020205C227265706C795061796C6F61645C223A205C22373237323730363332433637363537343633373337315C225C6E202020207D5C6E5D222C0A2020226465736372697074696F6E22203A2022E69687E6A1A3E6BC94E7A4BAE58D8FE8AEAE222C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('44e371fdbede4e44a0b3ddf7620c8b54', 1753764902384, NULL, 'api', '开关面板-文档版', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223434653337316664626564653465343461306233646466373632306338623534222C0A20202273637269707422203A2022696D706F7274206C6F673B5C6E5C6E2F2F203136E8BF9BE588B6E8BDAC3130E8BF9BE588B6E695B0E5AD975C6E76617220686578546F496E74203D20686578203D3E207B5C6E202072657475726E20496E74656765722E7061727365496E74286865782C203136293B5C6E7D3B5C6E2F2F20E9A284E8A7A3E7A081EFBC8CE8A7A3E69E90E4B88AE68AA5E79A84E8AEBEE5A487E7BC96E58FB72064657669636549645C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D207B7D5C6E20202020766172207061796C6F6164486578203D207061796C6F61642E746F5570706572436173652829202F2F20E8BDACE4B8BAE5A4A7E586995C6E202020202F2F20E6A0A1E9AA8CE68AA5E69687E995BFE5BAA6E5928CE5B8A7E5A4B45C6E20202020696620287061796C6F61644865782E6C656E6774682829203E3D203138202626207061796C6F61644865782E737562737472696E6728302C203429203D3D3D205C22413541355C2229207B5C6E20202020202020202F2F20E4BB8EE7ACAC35E4BD8DE5BC80E5A78BE58F9634E5AD97E88A82EFBC8838E4B8AAE5AD97E7ACA6EFBC89E4BD9CE4B8BA2064657669636549645C6E2020202020202020726573756C742E6465766963654964203D207061796C6F61644865782E737562737472696E6728342C203132295C6E202020207D5C6E2020202072657475726E20726573756C745C6E7D5C6E5C6E766172206465636F6465203D287061796C6F61642C636F6E7465787429203D3E207B5C6E20206C6F672E696E666F285C22E8BF9BE585A5E7BC96E8A7A3E7A0812C7061796C6F61643D7B7D2C636F6E746578743D7B7D5C222C7061796C6F61642C636F6E74657874295C6E202076617220726573756C74203D205B5D3B5C6E2020766172207061796C6F6164486578203D7061796C6F61642E746F55707065724361736528293B5C6E20207661722070726F706572746965734F626A203D207B205C226D657373616765547970655C223A205C2250524F504552544945535C222C205C2270726F706572746965735C223A207B7D207D3B5C6E2020766172206576656E744F626A203D207B205C226D657373616765547970655C223A205C224556454E545C222C205C226576656E745C223A205C225C222C205C22646174615C223A207B7D207D3B5C6E5C6E20202F2F20E9AA8CE8AF81E5B8A7E5A4B4E5B8A7E5B0BE5C6E2020696620287061796C6F61644865782E737562737472696E6728302C20342920213D205C22413541355C22207C7C207061796C6F61644865782E737562737472696E67287061796C6F61644865782E6C656E6774682829202D20342920213D205C22354135415C2229207B5C6E2020202072657475726E206A736F6E546F537472285B7B205C226572726F725C223A205C22E697A0E69588E5B8A7E6A0BCE5BC8F5C22207D5D293B5C6E20207D5C6E5C6E20202F2F20E68F90E58F96E6A0B8E5BF83E5AD97E6AEB55C6E2020766172206465766963654964203D207061796C6F61644865782E737562737472696E6728342C2038293B202F2F20E8AEBEE5A4874944EFBC8834E5AD97E88A82EFBC895C6E202076617220636D64436F6465203D207061796C6F61644865782E737562737472696E6728382C203130293B202F2F20E591BDE4BBA4E7A081EFBC8831E5AD97E88A82EFBC895C6E202076617220646174614C656E203D20686578546F496E74287061796C6F61644865782E737562737472696E672831302C20313229293B202F2F20E695B0E68DAEE995BFE5BAA65C6E20207661722064617461486578203D207061796C6F61644865782E737562737472696E672831322C203132202B20646174614C656E202A2032293B202F2F20E695B0E68DAEE58CBA5C6E202076617220636865636B73756D203D207061796C6F61644865782E737562737472696E67283132202B20646174614C656E202A20322C203134202B20646174614C656E202A2032293B202F2F20E6A0A1E9AA8CE5928C5C6E5C6E20202F2F20E8AEBEE5A4874944E5AD98E585A5E68980E69C89E5AFB9E8B1A15C6E202070726F706572746965734F626A2E6465766963654964203D2064657669636549643B5C6E20206576656E744F626A2E6465766963654964203D2064657669636549643B5C6E20202F2FE9AA8CE8AF81E696B0E58685E5AEB95C6E202070726F706572746965734F626A2E636F6E746578743D636F6E746578743B5C6E202070726F706572746965734F626A2E746370456E636F6465203D2027484558273B5C6E202070726F706572746965734F626A2E7265706C795061796C6F6164203D202737323732373036333243363736353734363337333731275C6E20202F2F20312E20E5B19EE680A7E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813031EFBC895C6E202069662028636D64436F6465203D3D205C2230315C2220262620646174614C656E203D3D203729207B5C6E202020202F2F20E8A7A3E69E90E5BC80E585B3E78AB6E68081EFBC8830313DE5BC80EFBC8C30303DE585B3EFBC895C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F7765725374617465203D20646174614865782E737562737472696E6728302C203229203D3D205C2230315C22203F205C2230315C22203A205C2230305C223B5C6E202020202F2F20E8A7A3E69E90E794B5E6B581EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E303141EFBC895C6E202020207661722063757272656E74486578203D20646174614865782E737562737472696E6728322C2036293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E63757272656E74203D2028686578546F496E742863757272656E7448657829202A20302E3031292E746F46697865642832293B5C6E202020202F2F20E8A7A3E69E90E794B5E58E8BEFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E3156EFBC895C6E2020202076617220766F6C74616765486578203D20646174614865782E737562737472696E6728362C203130293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E766F6C74616765203D2028686578546F496E7428766F6C7461676548657829202A20302E31292E746F46697865642831293B5C6E202020202F2F20E8A7A3E69E90E58A9FE78E87EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D3157EFBC895C6E2020202076617220706F776572486578203D20646174614865782E737562737472696E672831302C203134293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F776572203D20686578546F496E7428706F776572486578292E746F537472696E6728293B5C6E202020202F2F20E58AA0E585A5E7BB93E69E9CE99B865C6E20202020726573756C742E707573682870726F706572746965734F626A293B5C6E20207D5C6E5C6E20202F2F20322E20E4BA8BE4BBB6E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813032EFBC895C6E202069662028636D64436F6465203D3D205C2230325C2220262620646174614C656E203E3D203329207B5C6E202020202F2F20E4BA8BE4BBB6E7B1BBE59E8BEFBC8830313DE8BF87E8BDBDEFBC8C30323DE8BF87E58E8BEFBC8C30333DE4B88AE7BABFEFBC8C30343DE4B88BE7BABFEFBC895C6E20202020766172206576656E7454797065203D20646174614865782E737562737472696E6728302C2032293B5C6E20202020696620286576656E7454797065203D3D205C2230315C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F7665726C6F61645C223B5C6E2020202020206576656E744F626A2E646174612E6F7665726C6F6164203D20686578546F496E7428646174614865782E737562737472696E6728322C20362929202B205C22575C223B202F2F20E8BF87E8BDBDE58A9FE78E875C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230335C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F6E6C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F6E6C696E65203D205C22E8AEBEE5A487E4B88AE7BABF5C223B5C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230345C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F66666C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F66666C696E65203D205C22E8AEBEE5A487E4B88BE7BABF5C223B5C6E202020207D5C6E20202020726573756C742E70757368286576656E744F626A293B5C6E20207D5C6E5C6E20202F2F20332E20E5938DE5BA94E68AA5E69687EFBC88E591BDE4BBA4E7A0813034EFBC895C6E202069662028636D64436F6465203D3D205C2230345C2220262620646174614C656E203D3D203129207B5C6E20202020766172207265706C794F626A203D207B5C6E2020202020205C226D657373616765547970655C223A205C225245504C595C222C5C6E2020202020205C2266756E6374696F6E5C223A205C227377697463685C222C5C6E2020202020205C22646174615C223A207B205C22726573756C745C223A2064617461486578203D3D205C2230305C22203F205C22737563636573735C22203A205C226661696C5C22207D5C6E202020207D3B5C6E202020207265706C794F626A2E6465766963654964203D2064657669636549643B5C6E20202020726573756C742E70757368287265706C794F626A293B5C6E20207D5C6E5C6E202072657475726E206A736F6E546F53747228726573756C74293B5C6E7D3B5C6E5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020766172206F626A203D20746F4A736F6E287061796C6F6164293B5C6E2020766172206465766963654964203D206F626A2E646174612E64657669636549643B202F2F20E8AEBEE5A4874944EFBC8834E4BD8D3136E8BF9BE588B6EFBC8CE5A6825C22303030315C22EFBC895C6E20207661722066756E63203D206F626A2E66756E6374696F6E3B5C6E202076617220706172616D73203D206F626A2E646174613B5C6E5C6E20202F2F20E68EA7E588B6E5BC80E585B3EFBC8866756E6374696F6E3D737769746368EFBC895C6E20206966202866756E63203D3D205C227377697463685C2229207B5C6E20202020766172207374617465203D20706172616D732E73746174653B202F2F20E79BAEE6A087E78AB6E68081EFBC9A30313DE5BC80EFBC8C30303DE585B35C6E2020202069662028737461746520213D205C2230315C2220262620737461746520213D205C2230305C2229207B5C6E20202020202072657475726E205C225C223B202F2F20E697A0E69588E78AB6E68081EFBC8CE8BF94E59B9EE7A9BA5C6E202020207D5C6E5C6E202020202F2F20E695B0E68DAEE58CBAEFBC9AE68EA7E588B6E7B1BBE59E8B283031292BE79BAEE6A087E78AB6E680815C6E202020207661722064617461486578203D205C2230315C22202B2073746174653B5C6E2020202076617220646174614C656E203D20646174614865782E6C656E6774682829202F20323B202F2F20E695B0E68DAEE995BFE5BAA6EFBC88E5AD97E88A82E695B0EFBC895C6E2020202076617220636D64436F6465203D205C2230335C223B202F2F20E68EA7E588B6E68C87E4BBA4E591BDE4BBA4E7A0815C6E5C6E202020202F2F20E68BBCE68EA5E5AE8CE695B4E68AA5E69687EFBC88E697A0E6A0A1E9AA8CE5928CEFBC895C6E20202020766172206672616D65203D205C22413541355C22202B205C6E202020202020202020202020202020206465766963654964202B205C6E20202020202020202020202020202020636D64436F6465202B205C6E20202020202020202020202020202020496E74656765722E746F486578537472696E6728646174614C656E29202B202F2F20E695B0E68DAEE995BFE5BAA6EFBC8831E4BD8D3136E8BF9BE588B6EFBC895C6E2020202020202020202020202020202064617461486578202B205C6E202020202020202020202020202020205C22354135415C223B5C6E5C6E2020202072657475726E206672616D652E746F55707065724361736528293B202F2F20E8BDACE4B8BAE5A4A7E586993136E8BF9BE588B65C6E20207D5C6E5C6E202072657475726E205C225C223B202F2F20E4B88DE694AFE68C81E79A84E68C87E4BBA45C6E7D3B5C6E5C6E2F2FE9A284E8A7A3E7A081EFBC8CE5BE97E588B064657669636549645C6E72657475726E207072654465636F6465285C224135413530303031303130373031303544433038463030344230354135415C22295C6E2F2FE5B19EE680A7E4B88AE68AA5E68AA5E696875C6E2F2F2072657475726E206465636F64652827413541353030303130313037303130354443303846303034423037413541354127293B5C6E5C6E2F2FE8BF87E8BDBDE4BA8BE4BBB6E68AA5E696875C6E2F2F2072657475726E206465636F6465285C224135413530303031303230333031303442304633354135415C22295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C2264657669636549645C223A205C22303030315C222C5C2266756E6374696F6E5C223A205C227377697463685C222C5C22646174615C223A207B205C2273746174655C223A205C2230315C22207D7D27295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C226D657373616765547970655C223A5C2246554E4354494F4E535C222C5C2266756E6374696F6E5C223A5C227377697463685C222C5C22646174615C223A7B5C2264657669636549645C223A5C2230303031303130375C222C5C2273746174655C223A5C2230315C227D7D2729222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E5BC80E585B3E99DA2E69DBF2DE69687E6A1A3E78988222C0A20202263726561746554696D6522203A20313735333736343330353539372C0A20202275706461746554696D6522203A20313735333736343930323337352C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202233386663383065222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A2022E69687E6A1A3E6BC94E7A4BAE58D8FE8AEAE222C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('44e371fdbede4e44a0b3ddf7620c8b54', 1753764914652, NULL, 'api', '开关面板-文档版', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223434653337316664626564653465343461306233646466373632306338623534222C0A20202273637269707422203A2022696D706F7274206C6F673B5C6E5C6E2F2F203136E8BF9BE588B6E8BDAC3130E8BF9BE588B6E695B0E5AD975C6E76617220686578546F496E74203D20686578203D3E207B5C6E202072657475726E20496E74656765722E7061727365496E74286865782C203136293B5C6E7D3B5C6E2F2F20E9A284E8A7A3E7A081EFBC8CE8A7A3E69E90E4B88AE68AA5E79A84E8AEBEE5A487E7BC96E58FB72064657669636549645C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D207B7D5C6E20202020766172207061796C6F6164486578203D207061796C6F61642E746F5570706572436173652829202F2F20E8BDACE4B8BAE5A4A7E586995C6E202020202F2F20E6A0A1E9AA8CE68AA5E69687E995BFE5BAA6E5928CE5B8A7E5A4B45C6E20202020696620287061796C6F61644865782E6C656E6774682829203E3D203138202626207061796C6F61644865782E737562737472696E6728302C203429203D3D3D205C22413541355C2229207B5C6E20202020202020202F2F20E4BB8EE7ACAC35E4BD8DE5BC80E5A78BE58F9634E5AD97E88A82EFBC8838E4B8AAE5AD97E7ACA6EFBC89E4BD9CE4B8BA2064657669636549645C6E2020202020202020726573756C742E6465766963654964203D207061796C6F61644865782E737562737472696E6728342C203132295C6E202020207D5C6E2020202072657475726E20726573756C745C6E7D5C6E5C6E766172206465636F6465203D287061796C6F61642C636F6E7465787429203D3E207B5C6E20206C6F672E696E666F285C22E8BF9BE585A5E7BC96E8A7A3E7A0812C7061796C6F61643D7B7D2C636F6E746578743D7B7D5C222C7061796C6F61642C636F6E74657874295C6E202076617220726573756C74203D205B5D3B5C6E2020766172207061796C6F6164486578203D7061796C6F61642E746F55707065724361736528293B5C6E20207661722070726F706572746965734F626A203D207B205C226D657373616765547970655C223A205C2250524F504552544945535C222C205C2270726F706572746965735C223A207B7D207D3B5C6E2020766172206576656E744F626A203D207B205C226D657373616765547970655C223A205C224556454E545C222C205C226576656E745C223A205C225C222C205C22646174615C223A207B7D207D3B5C6E5C6E20202F2F20E9AA8CE8AF81E5B8A7E5A4B4E5B8A7E5B0BE5C6E2020696620287061796C6F61644865782E737562737472696E6728302C20342920213D205C22413541355C22207C7C207061796C6F61644865782E737562737472696E67287061796C6F61644865782E6C656E6774682829202D20342920213D205C22354135415C2229207B5C6E2020202072657475726E206A736F6E546F537472285B7B205C226572726F725C223A205C22E697A0E69588E5B8A7E6A0BCE5BC8F5C22207D5D293B5C6E20207D5C6E5C6E20202F2F20E68F90E58F96E6A0B8E5BF83E5AD97E6AEB55C6E2020766172206465766963654964203D207061796C6F61644865782E737562737472696E6728342C2038293B202F2F20E8AEBEE5A4874944EFBC8834E5AD97E88A82EFBC895C6E202076617220636D64436F6465203D207061796C6F61644865782E737562737472696E6728382C203130293B202F2F20E591BDE4BBA4E7A081EFBC8831E5AD97E88A82EFBC895C6E202076617220646174614C656E203D20686578546F496E74287061796C6F61644865782E737562737472696E672831302C20313229293B202F2F20E695B0E68DAEE995BFE5BAA65C6E20207661722064617461486578203D207061796C6F61644865782E737562737472696E672831322C203132202B20646174614C656E202A2032293B202F2F20E695B0E68DAEE58CBA5C6E202076617220636865636B73756D203D207061796C6F61644865782E737562737472696E67283132202B20646174614C656E202A20322C203134202B20646174614C656E202A2032293B202F2F20E6A0A1E9AA8CE5928C5C6E5C6E20202F2F20E8AEBEE5A4874944E5AD98E585A5E68980E69C89E5AFB9E8B1A15C6E202070726F706572746965734F626A2E6465766963654964203D2064657669636549643B5C6E20206576656E744F626A2E6465766963654964203D2064657669636549643B5C6E20202F2FE9AA8CE8AF81E696B0E58685E5AEB95C6E202070726F706572746965734F626A2E636F6E746578743D636F6E746578743B5C6E202070726F706572746965734F626A2E746370456E636F6465203D2027484558273B5C6E202070726F706572746965734F626A2E7265706C795061796C6F6164203D202737323732373036333243363736353734363337333731275C6E20202F2F20312E20E5B19EE680A7E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813031EFBC895C6E202069662028636D64436F6465203D3D205C2230315C2220262620646174614C656E203D3D203729207B5C6E202020202F2F20E8A7A3E69E90E5BC80E585B3E78AB6E68081EFBC8830313DE5BC80EFBC8C30303DE585B3EFBC895C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F7765725374617465203D20646174614865782E737562737472696E6728302C203229203D3D205C2230315C22203F205C2230315C22203A205C2230305C223B5C6E202020202F2F20E8A7A3E69E90E794B5E6B581EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E303141EFBC895C6E202020207661722063757272656E74486578203D20646174614865782E737562737472696E6728322C2036293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E63757272656E74203D2028686578546F496E742863757272656E7448657829202A20302E3031292E746F46697865642832293B5C6E202020202F2F20E8A7A3E69E90E794B5E58E8BEFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E3156EFBC895C6E2020202076617220766F6C74616765486578203D20646174614865782E737562737472696E6728362C203130293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E766F6C74616765203D2028686578546F496E7428766F6C7461676548657829202A20302E31292E746F46697865642831293B5C6E202020202F2F20E8A7A3E69E90E58A9FE78E87EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D3157EFBC895C6E2020202076617220706F776572486578203D20646174614865782E737562737472696E672831302C203134293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F776572203D20686578546F496E7428706F776572486578292E746F537472696E6728293B5C6E202020202F2F20E58AA0E585A5E7BB93E69E9CE99B865C6E20202020726573756C742E707573682870726F706572746965734F626A293B5C6E20207D5C6E5C6E20202F2F20322E20E4BA8BE4BBB6E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813032EFBC895C6E202069662028636D64436F6465203D3D205C2230325C2220262620646174614C656E203E3D203329207B5C6E202020202F2F20E4BA8BE4BBB6E7B1BBE59E8BEFBC8830313DE8BF87E8BDBDEFBC8C30323DE8BF87E58E8BEFBC8C30333DE4B88AE7BABFEFBC8C30343DE4B88BE7BABFEFBC895C6E20202020766172206576656E7454797065203D20646174614865782E737562737472696E6728302C2032293B5C6E20202020696620286576656E7454797065203D3D205C2230315C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F7665726C6F61645C223B5C6E2020202020206576656E744F626A2E646174612E6F7665726C6F6164203D20686578546F496E7428646174614865782E737562737472696E6728322C20362929202B205C22575C223B202F2F20E8BF87E8BDBDE58A9FE78E875C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230335C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F6E6C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F6E6C696E65203D205C22E8AEBEE5A487E4B88AE7BABF5C223B5C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230345C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F66666C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F66666C696E65203D205C22E8AEBEE5A487E4B88BE7BABF5C223B5C6E202020207D5C6E20202020726573756C742E70757368286576656E744F626A293B5C6E20207D5C6E5C6E20202F2F20332E20E5938DE5BA94E68AA5E69687EFBC88E591BDE4BBA4E7A0813034EFBC895C6E202069662028636D64436F6465203D3D205C2230345C2220262620646174614C656E203D3D203129207B5C6E20202020766172207265706C794F626A203D207B5C6E2020202020205C226D657373616765547970655C223A205C225245504C595C222C5C6E2020202020205C2266756E6374696F6E5C223A205C227377697463685C222C5C6E2020202020205C22646174615C223A207B205C22726573756C745C223A2064617461486578203D3D205C2230305C22203F205C22737563636573735C22203A205C226661696C5C22207D5C6E202020207D3B5C6E202020207265706C794F626A2E6465766963654964203D2064657669636549643B5C6E20202020726573756C742E70757368287265706C794F626A293B5C6E20207D5C6E5C6E202072657475726E206A736F6E546F53747228726573756C74293B5C6E7D3B5C6E5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020766172206F626A203D20746F4A736F6E287061796C6F6164293B5C6E2020766172206465766963654964203D206F626A2E646174612E64657669636549643B202F2F20E8AEBEE5A4874944EFBC8834E4BD8D3136E8BF9BE588B6EFBC8CE5A6825C22303030315C22EFBC895C6E20207661722066756E63203D206F626A2E66756E6374696F6E3B5C6E202076617220706172616D73203D206F626A2E646174613B5C6E5C6E20202F2F20E68EA7E588B6E5BC80E585B3EFBC8866756E6374696F6E3D737769746368EFBC895C6E20206966202866756E63203D3D205C227377697463685C2229207B5C6E20202020766172207374617465203D20706172616D732E73746174653B202F2F20E79BAEE6A087E78AB6E68081EFBC9A30313DE5BC80EFBC8C30303DE585B35C6E2020202069662028737461746520213D205C2230315C2220262620737461746520213D205C2230305C2229207B5C6E20202020202072657475726E205C225C223B202F2F20E697A0E69588E78AB6E68081EFBC8CE8BF94E59B9EE7A9BA5C6E202020207D5C6E5C6E202020202F2F20E695B0E68DAEE58CBAEFBC9AE68EA7E588B6E7B1BBE59E8B283031292BE79BAEE6A087E78AB6E680815C6E202020207661722064617461486578203D205C2230315C22202B2073746174653B5C6E2020202076617220646174614C656E203D20646174614865782E6C656E6774682829202F20323B202F2F20E695B0E68DAEE995BFE5BAA6EFBC88E5AD97E88A82E695B0EFBC895C6E2020202076617220636D64436F6465203D205C2230335C223B202F2F20E68EA7E588B6E68C87E4BBA4E591BDE4BBA4E7A0815C6E5C6E202020202F2F20E68BBCE68EA5E5AE8CE695B4E68AA5E69687EFBC88E697A0E6A0A1E9AA8CE5928CEFBC895C6E20202020766172206672616D65203D205C22413541355C22202B205C6E202020202020202020202020202020206465766963654964202B205C6E20202020202020202020202020202020636D64436F6465202B205C6E20202020202020202020202020202020496E74656765722E746F486578537472696E6728646174614C656E29202B202F2F20E695B0E68DAEE995BFE5BAA6EFBC8831E4BD8D3136E8BF9BE588B6EFBC895C6E2020202020202020202020202020202064617461486578202B205C6E202020202020202020202020202020205C22354135415C223B5C6E5C6E2020202072657475726E206672616D652E746F55707065724361736528293B202F2F20E8BDACE4B8BAE5A4A7E586993136E8BF9BE588B65C6E20207D5C6E5C6E202072657475726E205C225C223B202F2F20E4B88DE694AFE68C81E79A84E68C87E4BBA45C6E7D3B5C6E5C6E2F2FE9A284E8A7A3E7A081EFBC8CE5BE97E588B064657669636549645C6E2F2F2072657475726E207072654465636F6465285C224135413530303031303130373031303544433038463030344230354135415C22295C6E2F2FE5B19EE680A7E4B88AE68AA5E68AA5E696875C6E2F2F2072657475726E206465636F64652827413541353030303130313037303130354443303846303034423037413541354127293B5C6E5C6E2F2FE8BF87E8BDBDE4BA8BE4BBB6E68AA5E696875C6E2F2F2072657475726E206465636F6465285C224135413530303031303230333031303442304633354135415C22295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C2264657669636549645C223A205C22303030315C222C5C2266756E6374696F6E5C223A205C227377697463685C222C5C22646174615C223A207B205C2273746174655C223A205C2230315C22207D7D27295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C226D657373616765547970655C223A5C2246554E4354494F4E535C222C5C2266756E6374696F6E5C223A5C227377697463685C222C5C22646174615C223A7B5C2264657669636549645C223A5C2230303031303130375C222C5C2273746174655C223A5C2230315C227D7D2729222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E5BC80E585B3E99DA2E69DBF2DE69687E6A1A3E78988222C0A20202263726561746554696D6522203A20313735333736343330353539372C0A20202275706461746554696D6522203A20313735333736343931343633382C0A2020226C6F636B22203A202230222C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202233386663383065222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A2022E69687E6A1A3E6BC94E7A4BAE58D8FE8AEAE222C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('44e371fdbede4e44a0b3ddf7620c8b54', 1754144095867, NULL, 'api', '开关面板-文档版-TCP', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223434653337316664626564653465343461306233646466373632306338623534222C0A20202273637269707422203A2022696D706F7274206C6F673B5C6E5C6E2F2F203136E8BF9BE588B6E8BDAC3130E8BF9BE588B6E695B0E5AD975C6E76617220686578546F496E74203D20686578203D3E207B5C6E202072657475726E20496E74656765722E7061727365496E74286865782C203136293B5C6E7D3B5C6E2F2F20E9A284E8A7A3E7A081EFBC8CE8A7A3E69E90E4B88AE68AA5E79A84E8AEBEE5A487E7BC96E58FB72064657669636549645C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D207B7D5C6E20202020766172207061796C6F6164486578203D207061796C6F61642E746F5570706572436173652829202F2F20E8BDACE4B8BAE5A4A7E586995C6E202020202F2F20E6A0A1E9AA8CE68AA5E69687E995BFE5BAA6E5928CE5B8A7E5A4B45C6E20202020696620287061796C6F61644865782E6C656E6774682829203E3D203138202626207061796C6F61644865782E737562737472696E6728302C203429203D3D3D205C22413541355C2229207B5C6E20202020202020202F2F20E4BB8EE7ACAC35E4BD8DE5BC80E5A78BE58F9634E5AD97E88A82EFBC8838E4B8AAE5AD97E7ACA6EFBC89E4BD9CE4B8BA2064657669636549645C6E2020202020202020726573756C742E6465766963654964203D207061796C6F61644865782E737562737472696E6728342C203132295C6E202020207D5C6E2020202072657475726E20726573756C745C6E7D5C6E5C6E766172206465636F6465203D287061796C6F61642C636F6E7465787429203D3E207B5C6E20206C6F672E696E666F285C22E8BF9BE585A5E7BC96E8A7A3E7A0812C7061796C6F61643D7B7D2C636F6E746578743D7B7D5C222C7061796C6F61642C636F6E74657874295C6E202076617220726573756C74203D205B5D3B5C6E2020766172207061796C6F6164486578203D7061796C6F61642E746F55707065724361736528293B5C6E20207661722070726F706572746965734F626A203D207B205C226D657373616765547970655C223A205C2250524F504552544945535C222C205C2270726F706572746965735C223A207B7D207D3B5C6E2020766172206576656E744F626A203D207B205C226D657373616765547970655C223A205C224556454E545C222C205C226576656E745C223A205C225C222C205C22646174615C223A207B7D207D3B5C6E5C6E20202F2F20E9AA8CE8AF81E5B8A7E5A4B4E5B8A7E5B0BE5C6E2020696620287061796C6F61644865782E737562737472696E6728302C20342920213D205C22413541355C22207C7C207061796C6F61644865782E737562737472696E67287061796C6F61644865782E6C656E6774682829202D20342920213D205C22354135415C2229207B5C6E2020202072657475726E206A736F6E546F537472285B7B205C226572726F725C223A205C22E697A0E69588E5B8A7E6A0BCE5BC8F5C22207D5D293B5C6E20207D5C6E5C6E20202F2F20E68F90E58F96E6A0B8E5BF83E5AD97E6AEB55C6E2020766172206465766963654964203D207061796C6F61644865782E737562737472696E6728342C2038293B202F2F20E8AEBEE5A4874944EFBC8834E5AD97E88A82EFBC895C6E202076617220636D64436F6465203D207061796C6F61644865782E737562737472696E6728382C203130293B202F2F20E591BDE4BBA4E7A081EFBC8831E5AD97E88A82EFBC895C6E202076617220646174614C656E203D20686578546F496E74287061796C6F61644865782E737562737472696E672831302C20313229293B202F2F20E695B0E68DAEE995BFE5BAA65C6E20207661722064617461486578203D207061796C6F61644865782E737562737472696E672831322C203132202B20646174614C656E202A2032293B202F2F20E695B0E68DAEE58CBA5C6E202076617220636865636B73756D203D207061796C6F61644865782E737562737472696E67283132202B20646174614C656E202A20322C203134202B20646174614C656E202A2032293B202F2F20E6A0A1E9AA8CE5928C5C6E5C6E20202F2F20E8AEBEE5A4874944E5AD98E585A5E68980E69C89E5AFB9E8B1A15C6E202070726F706572746965734F626A2E6465766963654964203D2064657669636549643B5C6E20206576656E744F626A2E6465766963654964203D2064657669636549643B5C6E20202F2FE9AA8CE8AF81E696B0E58685E5AEB95C6E202070726F706572746965734F626A2E636F6E746578743D636F6E746578743B5C6E202070726F706572746965734F626A2E746370456E636F6465203D2027484558273B5C6E202070726F706572746965734F626A2E7265706C795061796C6F6164203D202737323732373036333243363736353734363337333731275C6E20202F2F20312E20E5B19EE680A7E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813031EFBC895C6E202069662028636D64436F6465203D3D205C2230315C2220262620646174614C656E203D3D203729207B5C6E202020202F2F20E8A7A3E69E90E5BC80E585B3E78AB6E68081EFBC8830313DE5BC80EFBC8C30303DE585B3EFBC895C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F7765725374617465203D20646174614865782E737562737472696E6728302C203229203D3D205C2230315C22203F205C2230315C22203A205C2230305C223B5C6E202020202F2F20E8A7A3E69E90E794B5E6B581EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E303141EFBC895C6E202020207661722063757272656E74486578203D20646174614865782E737562737472696E6728322C2036293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E63757272656E74203D2028686578546F496E742863757272656E7448657829202A20302E3031292E746F46697865642832293B5C6E202020202F2F20E8A7A3E69E90E794B5E58E8BEFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E3156EFBC895C6E2020202076617220766F6C74616765486578203D20646174614865782E737562737472696E6728362C203130293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E766F6C74616765203D2028686578546F496E7428766F6C7461676548657829202A20302E31292E746F46697865642831293B5C6E202020202F2F20E8A7A3E69E90E58A9FE78E87EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D3157EFBC895C6E2020202076617220706F776572486578203D20646174614865782E737562737472696E672831302C203134293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F776572203D20686578546F496E7428706F776572486578292E746F537472696E6728293B5C6E202020202F2F20E58AA0E585A5E7BB93E69E9CE99B865C6E20202020726573756C742E707573682870726F706572746965734F626A293B5C6E20207D5C6E5C6E20202F2F20322E20E4BA8BE4BBB6E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813032EFBC895C6E202069662028636D64436F6465203D3D205C2230325C2220262620646174614C656E203E3D203329207B5C6E202020202F2F20E4BA8BE4BBB6E7B1BBE59E8BEFBC8830313DE8BF87E8BDBDEFBC8C30323DE8BF87E58E8BEFBC8C30333DE4B88AE7BABFEFBC8C30343DE4B88BE7BABFEFBC895C6E20202020766172206576656E7454797065203D20646174614865782E737562737472696E6728302C2032293B5C6E20202020696620286576656E7454797065203D3D205C2230315C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F7665726C6F61645C223B5C6E2020202020206576656E744F626A2E646174612E6F7665726C6F6164203D20686578546F496E7428646174614865782E737562737472696E6728322C20362929202B205C22575C223B202F2F20E8BF87E8BDBDE58A9FE78E875C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230335C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F6E6C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F6E6C696E65203D205C22E8AEBEE5A487E4B88AE7BABF5C223B5C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230345C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F66666C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F66666C696E65203D205C22E8AEBEE5A487E4B88BE7BABF5C223B5C6E202020207D5C6E20202020726573756C742E70757368286576656E744F626A293B5C6E20207D5C6E5C6E20202F2F20332E20E5938DE5BA94E68AA5E69687EFBC88E591BDE4BBA4E7A0813034EFBC895C6E202069662028636D64436F6465203D3D205C2230345C2220262620646174614C656E203D3D203129207B5C6E20202020766172207265706C794F626A203D207B5C6E2020202020205C226D657373616765547970655C223A205C225245504C595C222C5C6E2020202020205C2266756E6374696F6E5C223A205C227377697463685C222C5C6E2020202020205C22646174615C223A207B205C22726573756C745C223A2064617461486578203D3D205C2230305C22203F205C22737563636573735C22203A205C226661696C5C22207D5C6E202020207D3B5C6E202020207265706C794F626A2E6465766963654964203D2064657669636549643B5C6E20202020726573756C742E70757368287265706C794F626A293B5C6E20207D5C6E5C6E202072657475726E206A736F6E546F53747228726573756C74293B5C6E7D3B5C6E5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020766172206F626A203D20746F4A736F6E287061796C6F6164293B5C6E2020766172206465766963654964203D206F626A2E646174612E64657669636549643B202F2F20E8AEBEE5A4874944EFBC8834E4BD8D3136E8BF9BE588B6EFBC8CE5A6825C22303030315C22EFBC895C6E20207661722066756E63203D206F626A2E66756E6374696F6E3B5C6E202076617220706172616D73203D206F626A2E646174613B5C6E5C6E20202F2F20E68EA7E588B6E5BC80E585B3EFBC8866756E6374696F6E3D737769746368EFBC895C6E20206966202866756E63203D3D205C227377697463685C2229207B5C6E20202020766172207374617465203D20706172616D732E73746174653B202F2F20E79BAEE6A087E78AB6E68081EFBC9A30313DE5BC80EFBC8C30303DE585B35C6E2020202069662028737461746520213D205C2230315C2220262620737461746520213D205C2230305C2229207B5C6E20202020202072657475726E205C225C223B202F2F20E697A0E69588E78AB6E68081EFBC8CE8BF94E59B9EE7A9BA5C6E202020207D5C6E5C6E202020202F2F20E695B0E68DAEE58CBAEFBC9AE68EA7E588B6E7B1BBE59E8B283031292BE79BAEE6A087E78AB6E680815C6E202020207661722064617461486578203D205C2230315C22202B2073746174653B5C6E2020202076617220646174614C656E203D20646174614865782E6C656E6774682829202F20323B202F2F20E695B0E68DAEE995BFE5BAA6EFBC88E5AD97E88A82E695B0EFBC895C6E2020202076617220636D64436F6465203D205C2230335C223B202F2F20E68EA7E588B6E68C87E4BBA4E591BDE4BBA4E7A0815C6E5C6E202020202F2F20E68BBCE68EA5E5AE8CE695B4E68AA5E69687EFBC88E697A0E6A0A1E9AA8CE5928CEFBC895C6E20202020766172206672616D65203D205C22413541355C22202B205C6E202020202020202020202020202020206465766963654964202B205C6E20202020202020202020202020202020636D64436F6465202B205C6E20202020202020202020202020202020496E74656765722E746F486578537472696E6728646174614C656E29202B202F2F20E695B0E68DAEE995BFE5BAA6EFBC8831E4BD8D3136E8BF9BE588B6EFBC895C6E2020202020202020202020202020202064617461486578202B205C6E202020202020202020202020202020205C22354135415C223B5C6E5C6E2020202072657475726E206672616D652E746F55707065724361736528293B202F2F20E8BDACE4B8BAE5A4A7E586993136E8BF9BE588B65C6E20207D5C6E5C6E202072657475726E205C225C223B202F2F20E4B88DE694AFE68C81E79A84E68C87E4BBA45C6E7D3B5C6E5C6E2F2FE9A284E8A7A3E7A081EFBC8CE5BE97E588B064657669636549645C6E2F2F2072657475726E207072654465636F6465285C224135413530303031303130373031303544433038463030344230354135415C22295C6E2F2FE5B19EE680A7E4B88AE68AA5E68AA5E696875C6E2F2F2072657475726E206465636F64652827413541353030303130313037303130354443303846303034423037413541354127293B5C6E5C6E2F2FE8BF87E8BDBDE4BA8BE4BBB6E68AA5E696875C6E2F2F2072657475726E206465636F6465285C224135413530303031303230333031303442304633354135415C22295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C2264657669636549645C223A205C22303030315C222C5C2266756E6374696F6E5C223A205C227377697463685C222C5C22646174615C223A207B205C2273746174655C223A205C2230315C22207D7D27295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C226D657373616765547970655C223A5C2246554E4354494F4E535C222C5C2266756E6374696F6E5C223A5C227377697463685C222C5C22646174615C223A7B5C2264657669636549645C223A5C2230303031303130375C222C5C2273746174655C223A5C2230315C227D7D2729222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E5BC80E585B3E99DA2E69DBF2DE69687E6A1A3E789882D544350222C0A20202263726561746554696D6522203A20313735333736343330353539372C0A20202275706461746554696D6522203A20313735343134343039353737372C0A2020226C6F636B22203A202230222C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202233386663383065222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A2022E69687E6A1A3E6BC94E7A4BAE58D8FE8AEAE222C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('44e371fdbede4e44a0b3ddf7620c8b54', 1754144097001, NULL, 'api', '开关面板-文档版-TCP', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223434653337316664626564653465343461306233646466373632306338623534222C0A20202273637269707422203A2022696D706F7274206C6F673B5C6E5C6E2F2F203136E8BF9BE588B6E8BDAC3130E8BF9BE588B6E695B0E5AD975C6E76617220686578546F496E74203D20686578203D3E207B5C6E202072657475726E20496E74656765722E7061727365496E74286865782C203136293B5C6E7D3B5C6E2F2F20E9A284E8A7A3E7A081EFBC8CE8A7A3E69E90E4B88AE68AA5E79A84E8AEBEE5A487E7BC96E58FB72064657669636549645C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D207B7D5C6E20202020766172207061796C6F6164486578203D207061796C6F61642E746F5570706572436173652829202F2F20E8BDACE4B8BAE5A4A7E586995C6E202020202F2F20E6A0A1E9AA8CE68AA5E69687E995BFE5BAA6E5928CE5B8A7E5A4B45C6E20202020696620287061796C6F61644865782E6C656E6774682829203E3D203138202626207061796C6F61644865782E737562737472696E6728302C203429203D3D3D205C22413541355C2229207B5C6E20202020202020202F2F20E4BB8EE7ACAC35E4BD8DE5BC80E5A78BE58F9634E5AD97E88A82EFBC8838E4B8AAE5AD97E7ACA6EFBC89E4BD9CE4B8BA2064657669636549645C6E2020202020202020726573756C742E6465766963654964203D207061796C6F61644865782E737562737472696E6728342C203132295C6E202020207D5C6E2020202072657475726E20726573756C745C6E7D5C6E5C6E766172206465636F6465203D287061796C6F61642C636F6E7465787429203D3E207B5C6E20206C6F672E696E666F285C22E8BF9BE585A5E7BC96E8A7A3E7A0812C7061796C6F61643D7B7D2C636F6E746578743D7B7D5C222C7061796C6F61642C636F6E74657874295C6E202076617220726573756C74203D205B5D3B5C6E2020766172207061796C6F6164486578203D7061796C6F61642E746F55707065724361736528293B5C6E20207661722070726F706572746965734F626A203D207B205C226D657373616765547970655C223A205C2250524F504552544945535C222C205C2270726F706572746965735C223A207B7D207D3B5C6E2020766172206576656E744F626A203D207B205C226D657373616765547970655C223A205C224556454E545C222C205C226576656E745C223A205C225C222C205C22646174615C223A207B7D207D3B5C6E5C6E20202F2F20E9AA8CE8AF81E5B8A7E5A4B4E5B8A7E5B0BE5C6E2020696620287061796C6F61644865782E737562737472696E6728302C20342920213D205C22413541355C22207C7C207061796C6F61644865782E737562737472696E67287061796C6F61644865782E6C656E6774682829202D20342920213D205C22354135415C2229207B5C6E2020202072657475726E206A736F6E546F537472285B7B205C226572726F725C223A205C22E697A0E69588E5B8A7E6A0BCE5BC8F5C22207D5D293B5C6E20207D5C6E5C6E20202F2F20E68F90E58F96E6A0B8E5BF83E5AD97E6AEB55C6E2020766172206465766963654964203D207061796C6F61644865782E737562737472696E6728342C2038293B202F2F20E8AEBEE5A4874944EFBC8834E5AD97E88A82EFBC895C6E202076617220636D64436F6465203D207061796C6F61644865782E737562737472696E6728382C203130293B202F2F20E591BDE4BBA4E7A081EFBC8831E5AD97E88A82EFBC895C6E202076617220646174614C656E203D20686578546F496E74287061796C6F61644865782E737562737472696E672831302C20313229293B202F2F20E695B0E68DAEE995BFE5BAA65C6E20207661722064617461486578203D207061796C6F61644865782E737562737472696E672831322C203132202B20646174614C656E202A2032293B202F2F20E695B0E68DAEE58CBA5C6E202076617220636865636B73756D203D207061796C6F61644865782E737562737472696E67283132202B20646174614C656E202A20322C203134202B20646174614C656E202A2032293B202F2F20E6A0A1E9AA8CE5928C5C6E5C6E20202F2F20E8AEBEE5A4874944E5AD98E585A5E68980E69C89E5AFB9E8B1A15C6E202070726F706572746965734F626A2E6465766963654964203D2064657669636549643B5C6E20206576656E744F626A2E6465766963654964203D2064657669636549643B5C6E20202F2FE9AA8CE8AF81E696B0E58685E5AEB95C6E202070726F706572746965734F626A2E636F6E746578743D636F6E746578743B5C6E202070726F706572746965734F626A2E746370456E636F6465203D2027484558273B5C6E202070726F706572746965734F626A2E7265706C795061796C6F6164203D202737323732373036333243363736353734363337333731275C6E20202F2F20312E20E5B19EE680A7E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813031EFBC895C6E202069662028636D64436F6465203D3D205C2230315C2220262620646174614C656E203D3D203729207B5C6E202020202F2F20E8A7A3E69E90E5BC80E585B3E78AB6E68081EFBC8830313DE5BC80EFBC8C30303DE585B3EFBC895C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F7765725374617465203D20646174614865782E737562737472696E6728302C203229203D3D205C2230315C22203F205C2230315C22203A205C2230305C223B5C6E202020202F2F20E8A7A3E69E90E794B5E6B581EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E303141EFBC895C6E202020207661722063757272656E74486578203D20646174614865782E737562737472696E6728322C2036293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E63757272656E74203D2028686578546F496E742863757272656E7448657829202A20302E3031292E746F46697865642832293B5C6E202020202F2F20E8A7A3E69E90E794B5E58E8BEFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E3156EFBC895C6E2020202076617220766F6C74616765486578203D20646174614865782E737562737472696E6728362C203130293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E766F6C74616765203D2028686578546F496E7428766F6C7461676548657829202A20302E31292E746F46697865642831293B5C6E202020202F2F20E8A7A3E69E90E58A9FE78E87EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D3157EFBC895C6E2020202076617220706F776572486578203D20646174614865782E737562737472696E672831302C203134293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F776572203D20686578546F496E7428706F776572486578292E746F537472696E6728293B5C6E202020202F2F20E58AA0E585A5E7BB93E69E9CE99B865C6E20202020726573756C742E707573682870726F706572746965734F626A293B5C6E20207D5C6E5C6E20202F2F20322E20E4BA8BE4BBB6E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813032EFBC895C6E202069662028636D64436F6465203D3D205C2230325C2220262620646174614C656E203E3D203329207B5C6E202020202F2F20E4BA8BE4BBB6E7B1BBE59E8BEFBC8830313DE8BF87E8BDBDEFBC8C30323DE8BF87E58E8BEFBC8C30333DE4B88AE7BABFEFBC8C30343DE4B88BE7BABFEFBC895C6E20202020766172206576656E7454797065203D20646174614865782E737562737472696E6728302C2032293B5C6E20202020696620286576656E7454797065203D3D205C2230315C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F7665726C6F61645C223B5C6E2020202020206576656E744F626A2E646174612E6F7665726C6F6164203D20686578546F496E7428646174614865782E737562737472696E6728322C20362929202B205C22575C223B202F2F20E8BF87E8BDBDE58A9FE78E875C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230335C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F6E6C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F6E6C696E65203D205C22E8AEBEE5A487E4B88AE7BABF5C223B5C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230345C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F66666C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F66666C696E65203D205C22E8AEBEE5A487E4B88BE7BABF5C223B5C6E202020207D5C6E20202020726573756C742E70757368286576656E744F626A293B5C6E20207D5C6E5C6E20202F2F20332E20E5938DE5BA94E68AA5E69687EFBC88E591BDE4BBA4E7A0813034EFBC895C6E202069662028636D64436F6465203D3D205C2230345C2220262620646174614C656E203D3D203129207B5C6E20202020766172207265706C794F626A203D207B5C6E2020202020205C226D657373616765547970655C223A205C225245504C595C222C5C6E2020202020205C2266756E6374696F6E5C223A205C227377697463685C222C5C6E2020202020205C22646174615C223A207B205C22726573756C745C223A2064617461486578203D3D205C2230305C22203F205C22737563636573735C22203A205C226661696C5C22207D5C6E202020207D3B5C6E202020207265706C794F626A2E6465766963654964203D2064657669636549643B5C6E20202020726573756C742E70757368287265706C794F626A293B5C6E20207D5C6E5C6E202072657475726E206A736F6E546F53747228726573756C74293B5C6E7D3B5C6E5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020766172206F626A203D20746F4A736F6E287061796C6F6164293B5C6E2020766172206465766963654964203D206F626A2E646174612E64657669636549643B202F2F20E8AEBEE5A4874944EFBC8834E4BD8D3136E8BF9BE588B6EFBC8CE5A6825C22303030315C22EFBC895C6E20207661722066756E63203D206F626A2E66756E6374696F6E3B5C6E202076617220706172616D73203D206F626A2E646174613B5C6E5C6E20202F2F20E68EA7E588B6E5BC80E585B3EFBC8866756E6374696F6E3D737769746368EFBC895C6E20206966202866756E63203D3D205C227377697463685C2229207B5C6E20202020766172207374617465203D20706172616D732E73746174653B202F2F20E79BAEE6A087E78AB6E68081EFBC9A30313DE5BC80EFBC8C30303DE585B35C6E2020202069662028737461746520213D205C2230315C2220262620737461746520213D205C2230305C2229207B5C6E20202020202072657475726E205C225C223B202F2F20E697A0E69588E78AB6E68081EFBC8CE8BF94E59B9EE7A9BA5C6E202020207D5C6E5C6E202020202F2F20E695B0E68DAEE58CBAEFBC9AE68EA7E588B6E7B1BBE59E8B283031292BE79BAEE6A087E78AB6E680815C6E202020207661722064617461486578203D205C2230315C22202B2073746174653B5C6E2020202076617220646174614C656E203D20646174614865782E6C656E6774682829202F20323B202F2F20E695B0E68DAEE995BFE5BAA6EFBC88E5AD97E88A82E695B0EFBC895C6E2020202076617220636D64436F6465203D205C2230335C223B202F2F20E68EA7E588B6E68C87E4BBA4E591BDE4BBA4E7A0815C6E5C6E202020202F2F20E68BBCE68EA5E5AE8CE695B4E68AA5E69687EFBC88E697A0E6A0A1E9AA8CE5928CEFBC895C6E20202020766172206672616D65203D205C22413541355C22202B205C6E202020202020202020202020202020206465766963654964202B205C6E20202020202020202020202020202020636D64436F6465202B205C6E20202020202020202020202020202020496E74656765722E746F486578537472696E6728646174614C656E29202B202F2F20E695B0E68DAEE995BFE5BAA6EFBC8831E4BD8D3136E8BF9BE588B6EFBC895C6E2020202020202020202020202020202064617461486578202B205C6E202020202020202020202020202020205C22354135415C223B5C6E5C6E2020202072657475726E206672616D652E746F55707065724361736528293B202F2F20E8BDACE4B8BAE5A4A7E586993136E8BF9BE588B65C6E20207D5C6E5C6E202072657475726E205C225C223B202F2F20E4B88DE694AFE68C81E79A84E68C87E4BBA45C6E7D3B5C6E5C6E2F2FE9A284E8A7A3E7A081EFBC8CE5BE97E588B064657669636549645C6E2F2F2072657475726E207072654465636F6465285C224135413530303031303130373031303544433038463030344230354135415C22295C6E2F2FE5B19EE680A7E4B88AE68AA5E68AA5E696875C6E2F2F2072657475726E206465636F64652827413541353030303130313037303130354443303846303034423037413541354127293B5C6E5C6E2F2FE8BF87E8BDBDE4BA8BE4BBB6E68AA5E696875C6E2F2F2072657475726E206465636F6465285C224135413530303031303230333031303442304633354135415C22295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C2264657669636549645C223A205C22303030315C222C5C2266756E6374696F6E5C223A205C227377697463685C222C5C22646174615C223A207B205C2273746174655C223A205C2230315C22207D7D27295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C226D657373616765547970655C223A5C2246554E4354494F4E535C222C5C2266756E6374696F6E5C223A5C227377697463685C222C5C22646174615C223A7B5C2264657669636549645C223A5C2230303031303130375C222C5C2273746174655C223A5C2230315C227D7D2729222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E5BC80E585B3E99DA2E69DBF2DE69687E6A1A3E789882D544350222C0A20202263726561746554696D6522203A20313735333736343330353539372C0A20202275706461746554696D6522203A20313735343134343039363937392C0A2020226C6F636B22203A202230222C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202233386663383065222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A2022E69687E6A1A3E6BC94E7A4BAE58D8FE8AEAE222C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('44e371fdbede4e44a0b3ddf7620c8b54', 1754144117347, NULL, 'api', '开关面板-文档版-TCP', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223434653337316664626564653465343461306233646466373632306338623534222C0A20202273637269707422203A2022696D706F7274206C6F673B5C6E5C6E2F2F203136E8BF9BE588B6E8BDAC3130E8BF9BE588B6E695B0E5AD975C6E76617220686578546F496E74203D20686578203D3E207B5C6E202072657475726E20496E74656765722E7061727365496E74286865782C203136293B5C6E7D3B5C6E2F2F20E9A284E8A7A3E7A081EFBC8CE8A7A3E69E90E4B88AE68AA5E79A84E8AEBEE5A487E7BC96E58FB72064657669636549645C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D207B7D5C6E20202020766172207061796C6F6164486578203D207061796C6F61642E746F5570706572436173652829202F2F20E8BDACE4B8BAE5A4A7E586995C6E202020202F2F20E6A0A1E9AA8CE68AA5E69687E995BFE5BAA6E5928CE5B8A7E5A4B45C6E20202020696620287061796C6F61644865782E6C656E6774682829203E3D203138202626207061796C6F61644865782E737562737472696E6728302C203429203D3D3D205C22413541355C2229207B5C6E20202020202020202F2F20E4BB8EE7ACAC35E4BD8DE5BC80E5A78BE58F9634E5AD97E88A82EFBC8838E4B8AAE5AD97E7ACA6EFBC89E4BD9CE4B8BA2064657669636549645C6E2020202020202020726573756C742E6465766963654964203D207061796C6F61644865782E737562737472696E6728342C203132295C6E202020207D5C6E2020202072657475726E20726573756C745C6E7D5C6E5C6E766172206465636F6465203D287061796C6F61642C636F6E7465787429203D3E207B5C6E20206C6F672E696E666F285C22E8BF9BE585A5E7BC96E8A7A3E7A0812C7061796C6F61643D7B7D2C636F6E746578743D7B7D5C222C7061796C6F61642C636F6E74657874295C6E202076617220726573756C74203D205B5D3B5C6E2020766172207061796C6F6164486578203D7061796C6F61642E746F55707065724361736528293B5C6E20207661722070726F706572746965734F626A203D207B205C226D657373616765547970655C223A205C2250524F504552544945535C222C205C2270726F706572746965735C223A207B7D207D3B5C6E2020766172206576656E744F626A203D207B205C226D657373616765547970655C223A205C224556454E545C222C205C226576656E745C223A205C225C222C205C22646174615C223A207B7D207D3B5C6E5C6E20202F2F20E9AA8CE8AF81E5B8A7E5A4B4E5B8A7E5B0BE5C6E2020696620287061796C6F61644865782E737562737472696E6728302C20342920213D205C22413541355C22207C7C207061796C6F61644865782E737562737472696E67287061796C6F61644865782E6C656E6774682829202D20342920213D205C22354135415C2229207B5C6E2020202072657475726E206A736F6E546F537472285B7B205C226572726F725C223A205C22E697A0E69588E5B8A7E6A0BCE5BC8F5C22207D5D293B5C6E20207D5C6E5C6E20202F2F20E68F90E58F96E6A0B8E5BF83E5AD97E6AEB55C6E2020766172206465766963654964203D207061796C6F61644865782E737562737472696E6728342C2038293B202F2F20E8AEBEE5A4874944EFBC8834E5AD97E88A82EFBC895C6E202076617220636D64436F6465203D207061796C6F61644865782E737562737472696E6728382C203130293B202F2F20E591BDE4BBA4E7A081EFBC8831E5AD97E88A82EFBC895C6E202076617220646174614C656E203D20686578546F496E74287061796C6F61644865782E737562737472696E672831302C20313229293B202F2F20E695B0E68DAEE995BFE5BAA65C6E20207661722064617461486578203D207061796C6F61644865782E737562737472696E672831322C203132202B20646174614C656E202A2032293B202F2F20E695B0E68DAEE58CBA5C6E202076617220636865636B73756D203D207061796C6F61644865782E737562737472696E67283132202B20646174614C656E202A20322C203134202B20646174614C656E202A2032293B202F2F20E6A0A1E9AA8CE5928C5C6E5C6E20202F2F20E8AEBEE5A4874944E5AD98E585A5E68980E69C89E5AFB9E8B1A15C6E202070726F706572746965734F626A2E6465766963654964203D2064657669636549643B5C6E20206576656E744F626A2E6465766963654964203D2064657669636549643B5C6E20202F2FE9AA8CE8AF81E696B0E58685E5AEB95C6E202070726F706572746965734F626A2E636F6E746578743D636F6E746578743B5C6E202070726F706572746965734F626A2E746370456E636F6465203D2027484558273B5C6E202070726F706572746965734F626A2E7265706C795061796C6F6164203D202737323732373036333243363736353734363337333731275C6E20202F2F20312E20E5B19EE680A7E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813031EFBC895C6E202069662028636D64436F6465203D3D205C2230315C2220262620646174614C656E203D3D203729207B5C6E202020202F2F20E8A7A3E69E90E5BC80E585B3E78AB6E68081EFBC8830313DE5BC80EFBC8C30303DE585B3EFBC895C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F7765725374617465203D20646174614865782E737562737472696E6728302C203229203D3D205C2230315C22203F205C2230315C22203A205C2230305C223B5C6E202020202F2F20E8A7A3E69E90E794B5E6B581EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E303141EFBC895C6E202020207661722063757272656E74486578203D20646174614865782E737562737472696E6728322C2036293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E63757272656E74203D2028686578546F496E742863757272656E7448657829202A20302E3031292E746F46697865642832293B5C6E202020202F2F20E8A7A3E69E90E794B5E58E8BEFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E3156EFBC895C6E2020202076617220766F6C74616765486578203D20646174614865782E737562737472696E6728362C203130293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E766F6C74616765203D2028686578546F496E7428766F6C7461676548657829202A20302E31292E746F46697865642831293B5C6E202020202F2F20E8A7A3E69E90E58A9FE78E87EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D3157EFBC895C6E2020202076617220706F776572486578203D20646174614865782E737562737472696E672831302C203134293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F776572203D20686578546F496E7428706F776572486578292E746F537472696E6728293B5C6E202020202F2F20E58AA0E585A5E7BB93E69E9CE99B865C6E20202020726573756C742E707573682870726F706572746965734F626A293B5C6E20207D5C6E5C6E20202F2F20322E20E4BA8BE4BBB6E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813032EFBC895C6E202069662028636D64436F6465203D3D205C2230325C2220262620646174614C656E203E3D203329207B5C6E202020202F2F20E4BA8BE4BBB6E7B1BBE59E8BEFBC8830313DE8BF87E8BDBDEFBC8C30323DE8BF87E58E8BEFBC8C30333DE4B88AE7BABFEFBC8C30343DE4B88BE7BABFEFBC895C6E20202020766172206576656E7454797065203D20646174614865782E737562737472696E6728302C2032293B5C6E20202020696620286576656E7454797065203D3D205C2230315C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F7665726C6F61645C223B5C6E2020202020206576656E744F626A2E646174612E6F7665726C6F6164203D20686578546F496E7428646174614865782E737562737472696E6728322C20362929202B205C22575C223B202F2F20E8BF87E8BDBDE58A9FE78E875C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230335C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F6E6C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F6E6C696E65203D205C22E8AEBEE5A487E4B88AE7BABF5C223B5C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230345C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F66666C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F66666C696E65203D205C22E8AEBEE5A487E4B88BE7BABF5C223B5C6E202020207D5C6E20202020726573756C742E70757368286576656E744F626A293B5C6E20207D5C6E5C6E20202F2F20332E20E5938DE5BA94E68AA5E69687EFBC88E591BDE4BBA4E7A0813034EFBC895C6E202069662028636D64436F6465203D3D205C2230345C2220262620646174614C656E203D3D203129207B5C6E20202020766172207265706C794F626A203D207B5C6E2020202020205C226D657373616765547970655C223A205C225245504C595C222C5C6E2020202020205C2266756E6374696F6E5C223A205C227377697463685C222C5C6E2020202020205C22646174615C223A207B205C22726573756C745C223A2064617461486578203D3D205C2230305C22203F205C22737563636573735C22203A205C226661696C5C22207D5C6E202020207D3B5C6E202020207265706C794F626A2E6465766963654964203D2064657669636549643B5C6E20202020726573756C742E70757368287265706C794F626A293B5C6E20207D5C6E5C6E202072657475726E206A736F6E546F53747228726573756C74293B5C6E7D3B5C6E5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020766172206F626A203D20746F4A736F6E287061796C6F6164293B5C6E2020766172206465766963654964203D206F626A2E646174612E64657669636549643B202F2F20E8AEBEE5A4874944EFBC8834E4BD8D3136E8BF9BE588B6EFBC8CE5A6825C22303030315C22EFBC895C6E20207661722066756E63203D206F626A2E66756E6374696F6E3B5C6E202076617220706172616D73203D206F626A2E646174613B5C6E5C6E20202F2F20E68EA7E588B6E5BC80E585B3EFBC8866756E6374696F6E3D737769746368EFBC895C6E20206966202866756E63203D3D205C227377697463685C2229207B5C6E20202020766172207374617465203D20706172616D732E73746174653B202F2F20E79BAEE6A087E78AB6E68081EFBC9A30313DE5BC80EFBC8C30303DE585B35C6E2020202069662028737461746520213D205C2230315C2220262620737461746520213D205C2230305C2229207B5C6E20202020202072657475726E205C225C223B202F2F20E697A0E69588E78AB6E68081EFBC8CE8BF94E59B9EE7A9BA5C6E202020207D5C6E5C6E202020202F2F20E695B0E68DAEE58CBAEFBC9AE68EA7E588B6E7B1BBE59E8B283031292BE79BAEE6A087E78AB6E680815C6E202020207661722064617461486578203D205C2230315C22202B2073746174653B5C6E2020202076617220646174614C656E203D20646174614865782E6C656E6774682829202F20323B202F2F20E695B0E68DAEE995BFE5BAA6EFBC88E5AD97E88A82E695B0EFBC895C6E2020202076617220636D64436F6465203D205C2230335C223B202F2F20E68EA7E588B6E68C87E4BBA4E591BDE4BBA4E7A0815C6E5C6E202020202F2F20E68BBCE68EA5E5AE8CE695B4E68AA5E69687EFBC88E697A0E6A0A1E9AA8CE5928CEFBC895C6E20202020766172206672616D65203D205C22413541355C22202B205C6E202020202020202020202020202020206465766963654964202B205C6E20202020202020202020202020202020636D64436F6465202B205C6E20202020202020202020202020202020496E74656765722E746F486578537472696E6728646174614C656E29202B202F2F20E695B0E68DAEE995BFE5BAA6EFBC8831E4BD8D3136E8BF9BE588B6EFBC895C6E2020202020202020202020202020202064617461486578202B205C6E202020202020202020202020202020205C22354135415C223B5C6E5C6E2020202072657475726E206672616D652E746F55707065724361736528293B202F2F20E8BDACE4B8BAE5A4A7E586993136E8BF9BE588B65C6E20207D5C6E5C6E202072657475726E205C225C223B202F2F20E4B88DE694AFE68C81E79A84E68C87E4BBA45C6E7D3B5C6E5C6E2F2FE9A284E8A7A3E7A081EFBC8CE5BE97E588B064657669636549645C6E2F2F2072657475726E207072654465636F6465285C224135413530303031303130373031303544433038463030344230354135415C22295C6E2F2FE5B19EE680A7E4B88AE68AA5E68AA5E696875C6E2F2F2072657475726E206465636F64652827413541353030303130313037303130354443303846303034423037413541354127293B5C6E5C6E2F2FE8BF87E8BDBDE4BA8BE4BBB6E68AA5E696875C6E2F2F2072657475726E206465636F6465285C224135413530303031303230333031303442304633354135415C22295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C2264657669636549645C223A205C22303030315C222C5C2266756E6374696F6E5C223A205C227377697463685C222C5C22646174615C223A207B205C2273746174655C223A205C2230315C22207D7D27295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C226D657373616765547970655C223A5C2246554E4354494F4E535C222C5C2266756E6374696F6E5C223A5C227377697463685C222C5C22646174615C223A7B5C2264657669636549645C223A5C2230303031303130375C222C5C2273746174655C223A5C2230315C227D7D2729222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E5BC80E585B3E99DA2E69DBF2DE69687E6A1A3E789882D544350222C0A20202263726561746554696D6522203A20313735333736343330353539372C0A20202275706461746554696D6522203A20313735343134343131373234332C0A2020226C6F636B22203A202230222C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A202233386663383065222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A2022E69687E6A1A3E6BC94E7A4BAE58D8FE8AEAE222C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('5393bfe75eb64c2182f4308458eadb5e', 1754787304079, NULL, 'api', '单相导轨XA-GXSD8-4G', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223533393362666537356562363463323138326634333038343538656164623565222C0A20202273637269707422203A20222F2F3136E8BF9BE588B64153434949E8BDAC535452494E475C6E7661722068657832737472203D20737472696E67686578203D3E207B5C6E5C6E202020207661722069203D20305C6E2020202076617220617363696964617461203D205C225C225C6E202020207768696C65202869203C20737472696E676865782E6C656E677468282929207B5C6E2020202020202020617363696964617461202B3D2028537472696E672E76616C75654F6628496E74656765722E7061727365496E7428737472696E676865782E737562737472696E6728692C2069202B2032292C2031362929202B205C222C5C22295C6E202020202020202069202B3D20325C6E202020207D5C6E20202020617363696964617461203D206173636969646174612E737562737472696E6728302C206173636969646174612E6C656E6774682829202D2031295C6E2020202072657475726E206173636969546F537472696E6728617363696964617461295C6E7D5C6E2F2FE5A4A7E5B08FE7ABAFE8BDACE68DA25C6E7661722072657665727365537472203D2064617461203D3E207B5C6E20202020766172207244617461203D205C225C225C6E2020202069662028646174612E6C656E6774682829203E3D203029207B5C6E20202020202020206C657420736571203D20646174612E6C656E67746828295C6E20202020202020207768696C652028736571203E203029207B5C6E2020202020202020202020207244617461202B3D20646174612E737562737472696E6728736571202D20322C20736571295C6E202020202020202020202020736571203D20736571202D20325C6E20202020202020207D5C6E202020207D5C6E2020202072657475726E2072446174615C6E7D5C6E2F2FE5928CE6A0A1E9AA8CE8AEA1E7AE975C6E76617220636865636B5F4353203D2073747244617461203D3E207B5C6E202020206C65742069203D20305C6E202020206C657420616363756D203D20305C6E202020207768696C65202869203C20737472446174612E6C656E677468282929207B5C6E2020202020202020616363756D202B3D20496E74656765722E7061727365496E7428737472446174612E737562737472696E6728692C2069202B2032292C203136295C6E202020202020202069202B3D20325C6E202020207D5C6E202020206C6574206C203D20496E74656765722E746F486578537472696E6728616363756D292E6C656E67746828295C6E2020202072657475726E20496E74656765722E746F486578537472696E6728616363756D292E737562737472696E67286C202D20322C206C292E746F55707065724361736528295C6E7D5C6E2F2FE695B0E68DAEE8BDACE68DA220E58092E8BDAC202D33335C6E766172207472616E73666F726D203D20737472203D3E207B5C6E202020206C65742069203D20305C6E202020206C657420726573756C74203D2027275C6E20202020737472203D207265766572736554776F446967697428737472295C6E202020207768696C65202869203C207374722E6C656E677468282929207B5C6E2020202020202020696620287374722E737562737472696E6728692C2032202B206929203D3D202733332729207B5C6E20202020202020202020202069202B3D20325C6E202020202020202020202020726573756C74202B3D20273030275C6E20202020202020207D20656C7365207B5C6E2020202020202020202020206C65742076616C7565203D20496E74656765722E7061727365496E74287374722E737562737472696E6728692C2032202B2069292C20313629202D20307833333B5C6E20202020202020202020202069202B3D20325C6E202020202020202020202020726573756C74202B3D20537472696E672E666F726D6174282725303258272C2076616C7565295C6E20202020202020207D5C6E202020207D5C6E2020202072657475726E20496E74656765722E7061727365496E7428726573756C742C203130295C6E7D5C6E2F2F2B30783333E696B9E6B3955C6E7661722064617461706C7573203D2073747244617461203D3E207B5C6E202020206C6574207344617461203D2027275C6E202020206C65742069203D20305C6E202020206C6574207044617461203D20305C6E202020207768696C65202869203C20737472446174612E6C656E677468282929207B5C6E20202020202020207044617461203D2028496E74656765722E7061727365496E7428737472446174612E737562737472696E6728692C2069202B2032292C20313629202B203078333329202620306231313131313131315C6E20202020202020207344617461202B3D20537472696E672E666F726D6174282725303258272C207044617461295C6E202020202020202069202B3D20325C6E202020207D5C6E2020202072657475726E2073446174615C6E7D5C6E5C6E2F2FE9A284E8A7A3E7A081EFBC8CE8A7A3E69E90E4B88AE68AA5E79A84E8AEBEE5A487E7BC96E58FB7E4BAA7E5938164657669636549645C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D207B7D5C6E202020202F2FE6B3A8E5868CE58C855C6E20202020696620287061796C6F61642E6C656E6774682829203D3D20313229207B5C6E2020202020202020726573756C742E6465766963654964203D207265766572736554776F4469676974287061796C6F6164295C6E202020207D5C6E202020205C6E202020202F2FE794B5E8A1A8E794B5E9878FE4B88AE68AA5E6B688E681AFE9A284E8A7A3E7A0815C6E202020206966287061796C6F61642E6C656E6774682829203D3D203938202626207061796C6F61642E737562737472696E6728302C32292E657175616C732827363827292626207061796C6F61642E737562737472696E67287061796C6F61642E6C656E67746828292D322C7061796C6F61642E6C656E6774682829292E657175616C73282731362729297B5C6E2020202020202020726573756C742E6465766963654964203D2072657665727365537472287061796C6F61642E737562737472696E6728322C20313429295C6E202020207D5C6E2020202072657475726E20726573756C745C6E7D5C6E2F2FE4B88AE8A18CE5A484E790865C6E766172206465636F6465203D20287061796C6F61642C636F6E7465787429203D3E207B5C6E2020202076617220726573756C74203D205B5D5C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D5C6E2020202070726F706572746965734F626A2E70726F706572746965732E6F726967696E616C4D657373616765203D207061796C6F61645C6E5C6E5C6E202020202F2F70726F706572746965734F626A2E70726F706572746965732E736861646F77203D2070446174612E736861646F775C6E20202020726573756C742E707573682870726F706572746965734F626A295C6E202020202F2FE5BF83E8B7B3E58C855C6E20202020696620287061796C6F61642E6C656E6774682829203D3D20313229207B5C6E2020202020202020726573756C742E707573682870726F706572746965734F626A295C6E202020202020202070726F706572746965734F626A2E746370456E636F6465203D2027484558273B5C6E202020202020202070726F706572746965734F626A2E7265706C795061796C6F6164203D202737383638275C6E202020207D20656C7365207B5C6E20202020202020202F2FE68A84E8A1A8E7BB93E69E9C5C6E2020202020202020696620287061796C6F61642E6C656E6774682829203E3D203934202626207061796C6F61642E737562737472696E672831342C20313829203D3D2027363839312729207B5C6E2020202020202020202020202F2FE8A1A8E58FB75C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E6D657465724E6F203D2072657665727365537472287061796C6F61642E737562737472696E6728322C20313429295C6E202020202020202020202020766172206C656E677468203D20496E74656765722E7061727365496E74287061796C6F61642E737562737472696E672831382C203230292C203136295C6E5C6E2020202020202020202020202F2FE680BBE794A8E794B5E9878F5C6E2020202020202020202020206C6574206D44617461203D20287472616E73666F726D287061796C6F61642E737562737472696E672832382C2033362929202A20302E3031292E746F46697865642832295C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E6D6574657244617461203D206D446174612E737562737472696E6728302C206D446174612E6C656E6774682829202D2031295C6E2020202020202020202020202F2FE58F96E5BDB1E5AD90E9878CE79A84E4B88AE6ACA1E8AFBBE695B05C6E2020202020202020202020202F2F20696620287044617461213D6E756C6C20262670446174612E636F6E7461696E734B65792827736861646F77272929207B5C6E2020202020202020202020202F2F20202020206966202870446174612E736861646F772E73746174652E7265706F727465642E636F6E7461696E734B657928276D6574657244617461272929207B5C6E2020202020202020202020202F2F20202020202020202070726F706572746965734F626A2E70726F706572746965732E6C6173744D6574657244617461203D2070446174612E736861646F772E73746174652E7265706F727465642E6D65746572446174615C6E2020202020202020202020202F2F20202020207D5C6E2020202020202020202020202F2F207D5C6E2020202020202020202020202F2F70726F706572746965734F626A2E70726F706572746965732E6D6574657244617461203D20287472616E73666F726D287061796C6F61642E737562737472696E672832382C2033362929202A20302E3031292E746F46697865642832295C6E2020202020202020202020202F2FE794B5E4BBB75C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E6D657465725072696365203D20287472616E73666F726D287061796C6F61642E737562737472696E672833362C2034342929202A20302E30303031292E746F46697865642834295C6E2020202020202020202020202F2FE794B5E58E8B5C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E766F6C74616765203D20287472616E73666F726D287061796C6F61642E737562737472696E672834342C2035322929202A20302E31292E746F46697865642831295C6E2020202020202020202020202F2FE794B5E6B5815C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E63757272656E74203D20287472616E73666F726D287061796C6F61642E737562737472696E672835322C2036302929202A20302E303031292E746F46697865642833295C6E2020202020202020202020202F2FE58A9FE78E875C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E706F776572203D20287472616E73666F726D287061796C6F61642E737562737472696E672836302C2036382929202A20302E31292E746F46697865642831295C6E2020202020202020202020202F2FE8B4ADE794B5E6ACA1E695B05C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E707572636861736573203D207472616E73666F726D287061796C6F61642E737562737472696E672836382C20373629295C6E2020202020202020202020202F2FE9A284E8ADA6E794B5E9878F5C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E7761726E696E67506F776572203D20287472616E73666F726D287061796C6F61642E737562737472696E672837362C2038342929202A20302E3031292E746F46697865642832295C6E2020202020202020202020202F2FE589A9E4BD99E98791E9A29D5C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E72656D61696E696E67416D6F756E74203D20287472616E73666F726D287061796C6F61642E737562737472696E672838342C2039322929202A20302E3031292E746F46697865642832295C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E6F70656E5374617465203D2028496E74656765722E7061727365496E74287061796C6F61642E737562737472696E672839322C203934292C20313629202D203078333329203D3D203237203F20273127203A202730275C6E2020202020202020202020202F2FE696B0E5A29EE69FA5E8AFA2E4BFA1E58FB7E580BCEFBC8CE59CA87265706C79E9878CE99DA2E4B88BE58F915C6E20202020202020202020202070726F706572746965734F626A2E746370456E636F6465203D2027484558273B5C6E20202020202020202020202070726F706572746965734F626A2E7265706C795061796C6F6164203D202737323732373036333243363736353734363337333731275C6E20202020202020207D5C6E20202020202020202F2FE68A84E8A1A8E58886E58C85EFBC8CE7ACACE4B880E983A8E588865C6E2020202020202020696620287061796C6F61642E6C656E6774682829203D3D203634202626207061796C6F61642E737562737472696E672831342C20313829203D3D2027363839312729207B5C6E2020202020202020202020202F2FE8A1A8E58FB75C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E6D657465724E6F203D2072657665727365537472287061796C6F61642E737562737472696E6728322C20313429295C6E202020202020202020202020766172206C656E677468203D20496E74656765722E7061727365496E74287061796C6F61642E737562737472696E672831382C203230292C203136295C6E5C6E2020202020202020202020202F2FE680BBE794A8E794B5E9878F5C6E2020202020202020202020206C6574206D44617461203D20287472616E73666F726D287061796C6F61642E737562737472696E672832382C2033362929202A20302E3031292E746F46697865642832295C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E6D6574657244617461203D206D446174612E737562737472696E6728302C206D446174612E6C656E6774682829202D2031295C6E2020202020202020202020202F2FE58F96E5BDB1E5AD90E9878CE79A84E4B88AE6ACA1E8AFBBE695B05C6E2020202020202020202020202F2F206966202870446174612E636F6E7461696E734B65792827736861646F77272929207B5C6E2020202020202020202020202F2F20202020206966202870446174612E736861646F772E73746174652E7265706F727465642E636F6E7461696E734B657928276D6574657244617461272929207B5C6E2020202020202020202020202F2F20202020202020202070726F706572746965734F626A2E70726F706572746965732E6C6173744D6574657244617461203D2070446174612E736861646F772E73746174652E7265706F727465642E6D65746572446174615C6E2020202020202020202020202F2F20202020207D5C6E2020202020202020202020202F2F207D5C6E2020202020202020202020202F2F70726F706572746965734F626A2E70726F706572746965732E6D6574657244617461203D20287472616E73666F726D287061796C6F61642E737562737472696E672832382C2033362929202A20302E3031292E746F46697865642832295C6E2020202020202020202020202F2FE794B5E4BBB75C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E6D657465725072696365203D20287472616E73666F726D287061796C6F61642E737562737472696E672833362C2034342929202A20302E30303031292E746F46697865642834295C6E2020202020202020202020202F2FE794B5E58E8B5C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E766F6C74616765203D20287472616E73666F726D287061796C6F61642E737562737472696E672834342C2035322929202A20302E31292E746F46697865642831295C6E2020202020202020202020202F2FE794B5E6B5815C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E63757272656E74203D20287472616E73666F726D287061796C6F61642E737562737472696E672835322C2036302929202A20302E303031292E746F46697865642833295C6E2020202020202020202020202F2FE58A9FE78E875C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E706F776572203D20287472616E73666F726D287061796C6F61642E737562737472696E672836302C2036342929202A20302E31292E746F46697865642831295C6E20202020202020207D5C6E20202020202020202F2FE68A84E8A1A8E58886E58C85EFBC8CE7ACACE4BA8CE983A8E588865C6E2020202020202020696620287061796C6F61642E6C656E6774682829203D3D20333429207B5C6E2020202020202020202020202F2F5C6E2020202020202020202020202F2FE8B4ADE794B5E6ACA1E695B05C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E707572636861736573203D207472616E73666F726D287061796C6F61642E737562737472696E6728342C20313229295C6E2020202020202020202020202F2FE9A284E8ADA6E794B5E9878F5C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E7761726E696E67506F776572203D20287472616E73666F726D287061796C6F61642E737562737472696E672831322C2032302929202A20302E3031292E746F46697865642832295C6E2020202020202020202020202F2FE589A9E4BD99E98791E9A29D5C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E72656D61696E696E67416D6F756E74203D20287472616E73666F726D287061796C6F61642E737562737472696E672832302C2032382929202A20302E3031292E746F46697865642832295C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E6F70656E5374617465203D2028496E74656765722E7061727365496E74287061796C6F61642E737562737472696E672832382C203330292C20313629202D203078333329203D3D203237203F20273127203A202730275C6E2020202020202020202020202F2FE696B0E5A29EE69FA5E8AFA2E4BFA1E58FB7E580BCEFBC8CE59CA87265706C79E9878CE99DA2E4B88BE58F915C6E20202020202020202020202070726F706572746965734F626A2E746370456E636F6465203D2027484558273B5C6E20202020202020202020202070726F706572746965734F626A2E7265706C795061796C6F6164203D202737323732373036333243363736353734363337333731275C6E20202020202020207D5C6E20202020202020202F2FE68EA7E588B6E5BC80E59088E997B8E59B9EE5A48DE79A84E4B8A2E695B0E68DAEE5A4B43638E585BCE5AEB9E5A484E790865C6E2020202020202020696620287061796C6F61642E6C656E6774682829203D3D20343829207B5C6E202020202020202020202020696620287061796C6F61642E737562737472696E672831322C203138292E657175616C73282736383943304427292026262028287061796C6F61642E737562737472696E672834322C203434292E657175616C7328273444272929207C7C20287061796C6F61642E737562737472696E672834322C203434292E657175616C73282734452729292929207B5C6E202020202020202020202020202020207061796C6F6164203D2027363827202B207061796C6F61645C6E2020202020202020202020207D5C6E20202020202020207D5C6E5C6E20202020202020202F2FE68EA7E588B6E5BC80E59088E997B8E59B9EE5A48D5C6E2020202020202020696620287061796C6F61642E737562737472696E672831342C20313829203D3D2027363839432729207B5C6E2020202020202020202020206C6574207265706C797377697463684F626A203D207B5C6E202020202020202020202020202020205C226D657373616765547970655C223A205C225245504C595C222C5C6E202020202020202020202020202020205C2266756E6374696F6E5C223A205C227377697463684F6E4F66665C222C5C6E202020202020202020202020202020205C22646174615C223A207B5C6E20202020202020202020202020202020202020205C226F70656E53746174655C223A2028496E74656765722E7061727365496E74287061796C6F61642E737562737472696E672834342C203436292C20313629202D203078333329203D3D203237203F20273127203A202730275C6E202020202020202020202020202020207D5C6E2020202020202020202020207D5C6E5C6E202020202020202020202020726573756C742E70757368287265706C797377697463684F626A295C6E2020202020202020202020202F2FE5908CE6ADA5E4B88AE68AA5E9809AE794B5E696ADE794B5E5B19EE680A75C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E6F70656E5374617465203D207265706C797377697463684F626A2E646174612E6F70656E53746174655C6E2020202020202020202020202F2F70726F706572746965734F626A2E70726F706572746965732E6D6574657244617461203D20287472616E73666F726D287061796C6F61642E737562737472696E672832302C2032382929202A20302E3031292E746F46697865642832295C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E72656D61696E696E67416D6F756E74203D20287472616E73666F726D287061796C6F61642E737562737472696E672832382C2033362929202A20302E3031292E746F46697865642832295C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E707572636861736573203D207472616E73666F726D287061796C6F61642E737562737472696E672833362C20343429295C6E2020202020202020202020202F2FE696B0E5A29EE69FA5E8AFA2E4BFA1E58FB7E580BCEFBC8CE59CA87265706C79E9878CE99DA2E4B88BE58F915C6E20202020202020202020202070726F706572746965734F626A2E746370456E636F6465203D2027484558273B5C6E20202020202020202020202070726F706572746965734F626A2E7265706C795061796C6F6164203D202737323732373036333243363736353734363337333731275C6E20202020202020207D5C6E20202020202020202F2FE6B885E8A1A8E59B9EE5A48D5C6E2020202020202020696620287061796C6F61642E737562737472696E672831342C20313829203D3D2027363839412729207B5C6E2020202020202020202020206C6574207265706C797377697463684F626A203D207B5C6E202020202020202020202020202020205C226D657373616765547970655C223A205C225245504C595C222C5C6E202020202020202020202020202020205C2266756E6374696F6E5C223A205C2272657365745C222C5C6E202020202020202020202020202020205C22646174615C223A207B5C6E20202020202020202020202020202020202020205C22726573756C745C223A2027E8AEBEE7BDAEE68890E58A9F275C6E202020202020202020202020202020207D5C6E2020202020202020202020207D5C6E202020202020202020202020726573756C742E70757368287265706C797377697463684F626A295C6E2020202020202020202020206C6574206D44617461203D20287472616E73666F726D287061796C6F61642E737562737472696E672832382C2033362929202A20302E3031292E746F46697865642832295C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E6D6574657244617461203D206D446174612E737562737472696E6728302C206D446174612E6C656E6774682829202D2031295C6E2020202020202020202020202F2F70726F706572746965734F626A2E70726F706572746965732E6D6574657244617461203D20287472616E73666F726D287061796C6F61642E737562737472696E672832302C2032382929202A20302E3031292E746F46697865642832295C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E72656D61696E696E67416D6F756E74203D20287472616E73666F726D287061796C6F61642E737562737472696E672832382C2033362929202A20302E3031292E746F46697865642832295C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E707572636861736573203D207472616E73666F726D287061796C6F61642E737562737472696E672833362C20343429295C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E6F70656E5374617465203D2028496E74656765722E7061727365496E74287061796C6F61642E737562737472696E672834342C203436292C20313629202D203078333329203D3D203237203F20273127203A202730275C6E20202020202020207D5C6E20202020202020202F2FE8AEBEE7BDAEE99990E580BCE59B9EE5A48D5C6E2020202020202020696620287061796C6F61642E737562737472696E672831342C20323029203D3D20273638383431432729207B5C6E2020202020202020202020206C6574207265706C794C696D69744F626A203D207B5C6E202020202020202020202020202020205C226D657373616765547970655C223A205C225245504C595C222C5C6E202020202020202020202020202020205C2266756E6374696F6E5C223A205C227365744F7665726C6F61644C696D69745C222C5C6E202020202020202020202020202020205C22646174615C223A207B5C6E20202020202020202020202020202020202020205C226F766572566F6C746167654C696D69745C223A205C225C222C5C6E20202020202020202020202020202020202020205C226F7665724375727272656E744C696D69745C223A205C225C225C6E202020202020202020202020202020207D5C6E2020202020202020202020207D5C6E202020202020202020202020726573756C742E70757368287265706C794C696D69744F626A295C6E2020202020202020202020202F2FE59BA4E7A7AFE98791E9A29D5C6E2020202020202020202020202F2F70726F706572746965734F626A2E70726F706572746965732E686F617264416D6F756E74203D205C6E5C6E20202020202020207D5C6E20202020202020202F2FE594AEE794B5E59B9EE5A48D5C6E2020202020202020696620287061796C6F61642E737562737472696E672831342C20323029203D3D20273638383430432729207B5C6E2020202020202020202020206C6574207265706C7952656368617267654F626A203D207B5C6E202020202020202020202020202020205C226D657373616765547970655C223A205C225245504C595C222C5C6E202020202020202020202020202020205C2266756E6374696F6E5C223A205C2272656368617267655C222C5C6E202020202020202020202020202020205C22646174615C223A207B5C6E20202020202020202020202020202020202020205C22726573756C745C223A2027E8AEBEE7BDAEE68890E58A9F275C6E202020202020202020202020202020207D5C6E2020202020202020202020207D5C6E202020202020202020202020726573756C742E70757368287265706C7952656368617267654F626A295C6E2020202020202020202020202F2FE59BA4E7A7AFE98791E9A29D5C6E2020202020202020202020202F2F70726F706572746965734F626A2E70726F706572746965732E686F617264416D6F756E74203D205C6E5C6E20202020202020207D5C6E20202020202020202F2FE6AF94E8BE83E4B88AE6ACA1E8AFBBE695B0E5928CE8BF99E6ACA1E8AFBBE695B0E79A84E5B7AEE9A29D5C6E20202020202020206966202870726F706572746965734F626A2E70726F706572746965732E636F6E7461696E734B657928276C6173744D657465724461746127292026262070726F706572746965734F626A2E70726F706572746965732E636F6E7461696E734B657928276D6574657244617461272929207B5C6E2020202020202020202020206C65742073686F727466616C6C44617461203D20466C6F61742E7061727365466C6F61742870726F706572746965734F626A2E70726F706572746965732E6D657465724461746129202D20466C6F61742E7061727365466C6F61742870726F706572746965734F626A2E70726F706572746965732E6C6173744D6574657244617461295C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E73686F727466616C6C44617461203D20466C6F61742E7061727365466C6F61742873686F727466616C6C446174612E746F4669786564283229295C6E2020202020202020202020206966202870726F706572746965734F626A2E70726F706572746965732E73686F727466616C6C44617461203C203029207B5C6E202020202020202020202020202020206C65742073686F727466616C6C416C61726D4F626A203D207B5C6E20202020202020202020202020202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020202020202020202020202020205C226576656E745C223A205C225C222C5C6E20202020202020202020202020202020202020205C22646174615C223A207B5C6E2020202020202020202020202020202020202020202020205C226C6576656C5C223A205C227761726E5C225C6E20202020202020202020202020202020202020207D5C6E202020202020202020202020202020207D5C6E2020202020202020202020202020202073686F727466616C6C416C61726D4F626A2E6576656E74203D202773686F727466616C6C416C61726D275C6E2020202020202020202020202020202073686F727466616C6C416C61726D4F626A2E646174612E73686F727466616C6C416C61726D203D2027E8AFBBE695B0E58092E6B581E5918AE8ADA6275C6E2020202020202020202020202020202073686F727466616C6C416C61726D4F626A2E646174612E73686F727466616C6C44617461203D2070726F706572746965734F626A2E70726F706572746965732E73686F727466616C6C446174615C6E20202020202020202020202020202020726573756C742E707573682873686F727466616C6C416C61726D4F626A295C6E2020202020202020202020207D5C6E20202020202020207D5C6E20202020202020202F2F435351E695B0E68DAEEFBC8C4943434944E695B0E68DAE5C6E20202020202020202F2A2A5C6E2020202020202020202A20727270632C6765746373712C32325C6E2020202020202020202A20727270632C67657469636369642C38393836303441383130323434303132303135325C6E2020202020202020202A205C6E2020202020202020202A2F5C6E2020202020202020696620287061796C6F61642E6C656E6774682829203E3D2038202626207061796C6F61642E737562737472696E6728302C2038292E657175616C7328273732373237303633272929207B5C6E2020202020202020202020206C6574207244617461203D2068657832737472287061796C6F6164295C6E2020202020202020202020206C657420724172726179203D2072446174612E73706C697428272C27295C6E2020202020202020202020202F2F435351E695B0E68DAE5C6E202020202020202020202020696620287241727261795B305D2E657175616C732827727270632729202626207241727261795B315D2E657175616C732827676574637371272929207B5C6E2020202020202020202020202020202070726F706572746965734F626A2E70726F706572746965732E637371203D207241727261795B325D5C6E2020202020202020202020202020202070726F706572746965734F626A2E70726F706572746965732E7369676E616C4C6576656C203D206373712870726F706572746965734F626A2E70726F706572746965732E637371295C6E2020202020202020202020207D5C6E202020202020202020202020696620287241727261795B305D2E657175616C732827727270632729202626207241727261795B315D2E657175616C7328276765746963636964272929207B5C6E2020202020202020202020202020202070726F706572746965734F626A2E70726F706572746965732E6963636964203D207241727261795B325D5C6E2020202020202020202020207D5C6E5C6E20202020202020207D5C6E202020207D5C6E202020202F2A2F2FE5BC80E5A78BE5AD97E88A825C6E20202020696620287061796C6F61642E737562737472696E6728302C20322920213D202736382729207B5C6E202020205C7472657475726E206A736F6E546F53747228726573756C74295C6E202020207D2A2F5C6E5C6E5C6E2020202072657475726E206A736F6E546F53747228726573756C74295C6E7D5C6E2F2FE4B88BE8A18CE5A484E790865C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E20202020766172206F626A203D20746F4A736F6E287061796C6F6164295C6E202020202F2FE8AFBBE58F96E794B5E8A1A8E794A8E9878F5C6E20202020696620286F626A2E66756E6374696F6E203D3D20276D65746572526561642729207B5C6E2020202020202020696620286F626A2E646174612E6D657465724E6F2E6C656E6774682829203D3D20313229207B5C6E2020202020202020202020206C657420737472203D2027363827202B2072657665727365537472286F626A2E646174612E6D657465724E6F29202B20273638313130343333333543343333275C6E2020202020202020202020206C657420636865636B203D20636865636B5F435328737472295C6E202020202020202020202020737472203D20737472202B20636865636B202B20273136275C6E20202020202020202020202072657475726E207374722E746F4C6F7765724361736528295C6E20202020202020207D5C6E202020207D5C6E202020202F2FE5BC80E585B3E997B85C6E20202020696620286F626A2E66756E6374696F6E203D3D20277377697463684F6E4F66662729207B5C6E2020202020202020696620286F626A2E646174612E6D657465724E6F2E6C656E6774682829203D3D20313229207B5C6E2020202020202020202020202F2F31E4B8BAE59088E997B85C6E2020202020202020202020206C6574207377697463684F6E203D206F626A2E646174612E76616C76654F6E203D3D20273127203F2027344527203A20273444275C6E2020202020202020202020206C657420737472203D2027363827202B2072657665727365537472286F626A2E646174612E6D657465724E6F29202B20273638314331303335333333333333333438393637343527202B207377697463684F6E202B20273333343737373342334134343343275C6E2020202020202020202020206C657420636865636B203D20636865636B5F435328737472295C6E202020202020202020202020737472203D20737472202B20636865636B202B20273136275C6E20202020202020202020202072657475726E207374722E746F4C6F7765724361736528295C6E20202020202020207D5C6E202020207D5C6E202020202F2FE6B885E8A1A828E6B885E999A4E68980E69C89EFBC8CE4BD99E9A29DE38081E680BBE794B5E9878FE38081E8B4ADE794B5E6ACA1E695B0E38081E794B5E4BBB7E585A8E983A8E5889DE5A78BE58C96295C6E20202020696620286F626A2E66756E6374696F6E203D3D202772657365742729207B5C6E2020202020202020696620286F626A2E646174612E6D657465724E6F2E6C656E6774682829203D3D20313229207B5C6E2020202020202020202020206C657420737472203D2027363827202B2072657665727365537472286F626A2E646174612E6D657465724E6F29202B2027363831413039333533333333333333343839363734353335275C6E2020202020202020202020206C657420636865636B203D20636865636B5F435328737472295C6E202020202020202020202020737472203D20737472202B20636865636B202B20273136275C6E20202020202020202020202072657475726E207374722E746F4C6F7765724361736528295C6E20202020202020207D5C6E202020207D5C6E202020202F2FE8B685E99990E580BCE8AEBEE7BDAE5C6E20202020696620286F626A2E66756E6374696F6E203D3D20277365744F7665726C6F61644C696D69742729207B5C6E2020202020202020696620286F626A2E646174612E6D657465724E6F2E6C656E6774682829203D3D20313229207B5C6E2020202020202020202020206C657420737472203D2027363827202B2072657665727365537472286F626A2E646174612E6D657465724E6F29202B202736383034323033363333333333333335333333333333373334303336333333333333333333333733343033363333275C6E2020202020202020202020202F2FE794B5E58E8BE99990E580BCE5A484E790865C6E202020202020202020202020696620286F626A2E646174612E636F6E7461696E734B657928276F766572566F6C746167654C696D69742729202626206F626A2E646174612E6F766572566F6C746167654C696D697420213D204E554C4C29207B5C6E2020202020202020202020202020202069662028466C6F61742E76616C75654F66286F626A2E646174612E6F766572566F6C746167654C696D697429203E203232302E3020262620466C6F61742E76616C75654F66286F626A2E646174612E6F766572566F6C746167654C696D697429203C3D203236302E3029207B5C6E20202020202020202020202020202020202020206C6574206876203D20537472696E672E666F726D6174282725303858272C20496E74656765722E76616C75654F662828466C6F61742E76616C75654F66286F626A2E646174612E6F766572566F6C746167654C696D697429202A203130292E746F466978656428302929295C6E2020202020202020202020202020202020202020737472202B3D20726576657273655374722864617461706C757328687629295C6E202020202020202020202020202020207D5C6E202020202020202020202020202020202F2FE5A682E69E9CE794B5E58E8BE99990E580BCE4B88DE59CA8E88C83E59BB4E58685EFBC8CE8A1A5E9BB98E8AEA4E99990E580BC3236302E30565C6E20202020202020202020202020202020656C7365207B5C6E2020202020202020202020202020202020202020737472202B3D20726576657273655374722864617461706C757328537472696E672E666F726D6174282725303858272C20323630302929295C6E202020202020202020202020202020207D5C6E2020202020202020202020207D5C6E2020202020202020202020202F2FE5A682E69E9CE4B88DE5A1ABE58699E794B5E58E8BE99990E580BCEFBC8CE9BB98E8AEA4323630305C6E202020202020202020202020656C7365207B5C6E20202020202020202020202020202020737472202B3D20726576657273655374722864617461706C757328537472696E672E666F726D6174282725303858272C20323630302929295C6E2020202020202020202020207D5C6E2020202020202020202020202F2FE794B5E6B581E99990E580BCE5A484E790865C6E202020202020202020202020696620286F626A2E646174612E636F6E7461696E734B657928276F7665724375727272656E744C696D69742729202626206F626A2E646174612E6F7665724375727272656E744C696D697420213D204E554C4C29207B5C6E2020202020202020202020202020202069662028466C6F61742E76616C75654F66286F626A2E646174612E6F7665724375727272656E744C696D697429203E20302E30303020262620466C6F61742E76616C75654F66286F626A2E646174612E6F7665724375727272656E744C696D697429203C2038302E30303029207B5C6E20202020202020202020202020202020202020206C6574206849203D20537472696E672E666F726D6174282725303858272C20496E74656765722E76616C75654F662828466C6F61742E76616C75654F66286F626A2E646174612E6F7665724375727272656E744C696D697429202A2031303030292E746F466978656428302929295C6E2020202020202020202020202020202020202020737472202B3D20726576657273655374722864617461706C757328684929295C6E202020202020202020202020202020207D5C6E202020202020202020202020202020202F2FE5A682E69E9CE794B5E6B581E99990E580BCE4B88DE59CA8E88C83E59BB4E58685EFBC8CE8A1A5E9BB98E8AEA4E99990E580BC3830415C6E20202020202020202020202020202020656C7365207B5C6E2020202020202020202020202020202020202020737472202B3D20726576657273655374722864617461706C757328537472696E672E666F726D6174282725303858272C2038303030302929295C6E202020202020202020202020202020207D5C6E2020202020202020202020207D5C6E2020202020202020202020202F2FE5A682E69E9CE4B88DE5A1ABE58699E794B5E6B581E99990E580BCEFBC8CE9BB98E8AEA438303030305C6E202020202020202020202020656C7365207B5C6E20202020202020202020202020202020737472202B3D20726576657273655374722864617461706C757328537472696E672E666F726D6174282725303858272C2038303030302929295C6E2020202020202020202020207D5C6E2020202020202020202020202F2FE58AA0E5808DE78E87EFBC8CE9BB98E8AEA4315C6E202020202020202020202020737472202B3D20273334333333333333275C6E2020202020202020202020206C657420636865636B203D20636865636B5F435328737472295C6E202020202020202020202020737472203D20737472202B20636865636B202B20273136275C6E20202020202020202020202072657475726E207374722E746F4C6F7765724361736528295C6E20202020202020207D5C6E202020207D5C6E202020202F2FE594AEE794B55C6E20202020696620286F626A2E66756E6374696F6E203D3D202772656368617267652729207B5C6E2020202020202020696620286F626A2E646174612E6D657465724E6F2E6C656E6774682829203D3D20313229207B5C6E2020202020202020202020206C657420737472203D2027363827202B2072657665727365537472286F626A2E646174612E6D657465724E6F29202B202736383034313033343333333333333335333333333333275C6E202020202020202020202020737472202B3D20726576657273655374722864617461706C757328537472696E672E666F726D6174282725303858272C2028496E74656765722E76616C75654F66286F626A2E646174612E7265636861726765446174612929202A203130302929295C6E5C6E202020202020202020202020696620286F626A2E646174612E636F6E7461696E734B657928277265636861726765436F756E74272929207B5C6E20202020202020202020202020202020737472202B3D20726576657273655374722864617461706C757328537472696E672E666F726D6174282725303858272C206F626A2E646174612E7265636861726765436F756E742929295C6E2020202020202020202020207D20656C7365207B5C6E20202020202020202020202020202020737472202B3D20273334333333333333275C6E2020202020202020202020207D5C6E5C6E2020202020202020202020206C657420636865636B203D20636865636B5F435328737472295C6E202020202020202020202020737472203D20737472202B20636865636B202B20273136275C6E20202020202020202020202072657475726E207374722E746F4C6F7765724361736528295C6E20202020202020207D5C6E202020207D5C6E202020202F2FE6B58BE8AF955C6E20202020696620286F626A2E66756E6374696F6E203D3D205C22636D645C2229207B5C6E20202020202020206C657420636D6444617461203D206F626A2E646174612E636D64446174615C6E202020202020202072657475726E20636D64446174615C6E202020207D5C6E202020202F2FE8AFBBE58F96E4BFA1E58FB7E5BCBAE5BAA64353515C6E20202020696620286F626A2E66756E6374696F6E203D3D205C226765744353515C2229207B5C6E20202020202020206C657420636D6444617461203D202737323732373036333243363736353734363337333731275C6E202020202020202072657475726E20636D64446174615C6E202020207D5C6E202020202F2FE8AFBBE58F96E789A9E88194E7BD91E58DA149434349445C6E20202020696620286F626A2E66756E6374696F6E203D3D205C2267657449434349445C2229207B5C6E20202020202020206C657420636D6444617461203D20273732373237303633324336373635373436393633363336393634275C6E202020202020202072657475726E20636D64446174615C6E202020207D5C6E7D5C6E5C6E2F2F2072657475726E207072654465636F64652827363839333030323230353235323036383931323533333335633433333638333333333333333333333333333334623536333333336337363733333333623762353333333333333333333333333333333333333333333333333333333334656430313627295C6E2F2F2072657475726E206465636F64652827363831323131313131313131313136383943304433333334333333333333336333333333333433333333333334656373313627295C6E2F2F72657475726E20656E636F646528277B5C226D657373616765547970655C223A5C2246554E4354494F4E535C222C5C2266756E6374696F6E5C223A5C2272656368617267655C222C5C22646174615C223A7B5C226D657465724E6F5C223A5C223230323431313139303234375C222C5C227265636861726765446174615C223A31303030302C5C227265636861726765436F756E745C223A327D7D27295C6E72657475726E206465636F64652827363834373032313931313234323036383931323533333335633433333333333333333333333333333334333337613535333333333333333333333333333333333333333333343333333333333333333333333333333338333333333334653035313627295C6E2F2F72657475726E206465636F646528277B5C227061796C6F61645C223A5C223230323431313139303236315C227D27295C6E2F2F72657475726E2027E58D8EE695B0E789A9E88194E7BD91E59FBAE59CB0EFBC88496F742057617375EFBC89275C6E5C6E2F2FE5B8A6E5BDB1E5AD90E695B0E68DAE5C6E2F2F72657475726E206465636F646528277B5C22736861646F775C223A7B5C226D657461646174615C223A7B5C22646573697265645C223A7B7D2C5C227265706F727465645C223A7B5C227075726368617365735C223A7B5C2274696D657374616D705C223A313734373732363437357D2C5C226F70656E53746174655C223A7B5C2274696D657374616D705C223A313734373732363437357D2C5C226D6574657250726963655C223A7B5C2274696D657374616D705C223A313734373732363437357D2C5C22766F6C746167655C223A7B5C2274696D657374616D705C223A313734373732363437357D2C5C2272656D61696E696E67416D6F756E745C223A7B5C2274696D657374616D705C223A313734373732363437357D2C5C2263757272656E745C223A7B5C2274696D657374616D705C223A313734373732363437357D2C5C227761726E696E67506F7765725C223A7B5C2274696D657374616D705C223A313734373732363437357D2C5C226D657465724E6F5C223A7B5C2274696D657374616D705C223A313734373732363437357D2C5C22706F7765725C223A7B5C2274696D657374616D705C223A313734373732363437357D2C5C226F726967696E616C4D6573736167655C223A7B5C2274696D657374616D705C223A313734373732363732337D2C5C226D65746572446174615C223A7B5C2274696D657374616D705C223A313734373732363437357D7D7D2C5C2276657273696F6E5C223A3331352C5C2273746174655C223A7B5C22646573697265645C223A7B7D2C5C227265706F727465645C223A7B5C227075726368617365735C223A31352C5C226F70656E53746174655C223A5C22315C222C5C226D6574657250726963655C223A5C22312E303030305C222C5C22766F6C746167655C223A5C223232372E395C222C5C2272656D61696E696E67416D6F756E745C223A5C223139393939392E30345C222C5C2263757272656E745C223A5C22302E3030305C222C5C227761726E696E67506F7765725C223A5C22302E30305C222C5C226D657465724E6F5C223A5C223230323431313139303234375C222C5C22706F7765725C223A5C22302E305C222C5C226F726967696E616C4D6573736167655C223A5C22373237323730363332433637363537343633373337315C222C5C226D65746572446174615C223A5C22312E305C227D7D2C5C2274696D657374616D705C223A313734373732363732337D2C5C2270726F647563744B65795C223A5C223637633639663261366230303031613962323261366339615C222C5C2264657669636549645C223A5C223230323431313139303234375C222C5C22696F7449645C223A5C2236333333373235336439333634346263616431353133636133313861353230615C222C5C227061796C6F61645C223A5C2236383437303231393131323432303638393132353333333563343333333333333333333333333333333433333761353533333333333333333333333333333333333333333334333333333333333333333333333333333833333333333465303531365C227D27295C6E5C6E2F2F435351E695B0E68DAE5C6E72657475726E206465636F646528273732373237303633324336373635373436333733373132433332333227295C6E5C6E2F2F4943434944E695B0E68DAE5C6E2F2F2072657475726E206465636F646528277B5C227061796C6F61645C223A5C2237323732373036333243363736353734363936333633363936343243333833393338333633303334343133383331333033323334333433303331333233303331333533325C227D2729222C0A20202267726F7570496422203A20226634626562303864633766653431353762396636336132326130653161343330222C0A2020226E616D6522203A2022E58D95E79BB8E5AFBCE8BDA858412D47585344382D3447222C0A20202263726561746554696D6522203A20313735323830353030383534392C0A20202275706461746554696D6522203A20313735343738373330343035332C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A2022696F74222C0A202022757064617465427922203A2022696F74222C0A2020227061746822203A202261626378617373786E616E6168736D616E222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20225B5C6E202020207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B5C6E2020202020202020202020205C226F726967696E616C4D6573736167655C223A205C2236383132313131313131313131313638394330443333333433333333333333633333333333343333333333333465637331365C222C5C6E2020202020202020202020205C226F70656E53746174655C223A205C22315C222C5C6E2020202020202020202020205C2272656D61696E696E67416D6F756E745C223A205C22392E30305C222C5C6E2020202020202020202020205C227075726368617365735C223A20315C6E20202020202020207D2C5C6E20202020202020205C22746370456E636F64655C223A205C224845585C222C5C6E20202020202020205C227265706C795061796C6F61645C223A205C22373237323730363332433637363537343633373337315C225C6E202020207D2C5C6E202020207B5C6E20202020202020205C226D657373616765547970655C223A205C225245504C595C222C5C6E20202020202020205C2266756E6374696F6E5C223A205C227377697463684F6E4F66665C222C5C6E20202020202020205C22646174615C223A207B5C6E2020202020202020202020205C226F70656E53746174655C223A205C22315C225C6E20202020202020207D5C6E202020207D5C6E5D222C0A2020226465736372697074696F6E22203A2022E8BF99E4B8AAE698AFE4B880E4B8AAE794B5E8A1A8222C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A207B0A20202020226E616D6522203A2022222C0A202020202276616C756522203A2022222C0A20202020226465736372697074696F6E22203A2022222C0A2020202022726571756972656422203A2066616C73652C0A2020202022646174615479706522203A20224F626A656374222C0A20202020227479706522203A206E756C6C2C0A202020202264656661756C7456616C756522203A206E756C6C2C0A202020202276616C69646174655479706522203A2022222C0A20202020226572726F7222203A2022222C0A202020202265787072657373696F6E22203A2022222C0A20202020226368696C6472656E22203A205B207B0A202020202020226E616D6522203A20226465766963654964222C0A2020202020202276616C756522203A2022323032353035323230303933222C0A202020202020226465736372697074696F6E22203A2022222C0A20202020202022726571756972656422203A2066616C73652C0A20202020202022646174615479706522203A2022537472696E67222C0A202020202020227479706522203A206E756C6C2C0A2020202020202264656661756C7456616C756522203A206E756C6C2C0A2020202020202276616C69646174655479706522203A2022222C0A202020202020226572726F7222203A2022222C0A2020202020202265787072657373696F6E22203A2022222C0A202020202020226368696C6472656E22203A205B205D0A202020207D205D0A20207D0A7D, 'iot'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('5393bfe75eb64c2182f4308458eadb5e', 1754787309114, NULL, 'api', '单相导轨XA-GXSD8-4G', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223533393362666537356562363463323138326634333038343538656164623565222C0A20202273637269707422203A20222F2F3136E8BF9BE588B64153434949E8BDAC535452494E475C6E7661722068657832737472203D20737472696E67686578203D3E207B5C6E5C6E202020207661722069203D20305C6E2020202076617220617363696964617461203D205C225C225C6E202020207768696C65202869203C20737472696E676865782E6C656E677468282929207B5C6E2020202020202020617363696964617461202B3D2028537472696E672E76616C75654F6628496E74656765722E7061727365496E7428737472696E676865782E737562737472696E6728692C2069202B2032292C2031362929202B205C222C5C22295C6E202020202020202069202B3D20325C6E202020207D5C6E20202020617363696964617461203D206173636969646174612E737562737472696E6728302C206173636969646174612E6C656E6774682829202D2031295C6E2020202072657475726E206173636969546F537472696E6728617363696964617461295C6E7D5C6E2F2FE5A4A7E5B08FE7ABAFE8BDACE68DA25C6E7661722072657665727365537472203D2064617461203D3E207B5C6E20202020766172207244617461203D205C225C225C6E2020202069662028646174612E6C656E6774682829203E3D203029207B5C6E20202020202020206C657420736571203D20646174612E6C656E67746828295C6E20202020202020207768696C652028736571203E203029207B5C6E2020202020202020202020207244617461202B3D20646174612E737562737472696E6728736571202D20322C20736571295C6E202020202020202020202020736571203D20736571202D20325C6E20202020202020207D5C6E202020207D5C6E2020202072657475726E2072446174615C6E7D5C6E2F2FE5928CE6A0A1E9AA8CE8AEA1E7AE975C6E76617220636865636B5F4353203D2073747244617461203D3E207B5C6E202020206C65742069203D20305C6E202020206C657420616363756D203D20305C6E202020207768696C65202869203C20737472446174612E6C656E677468282929207B5C6E2020202020202020616363756D202B3D20496E74656765722E7061727365496E7428737472446174612E737562737472696E6728692C2069202B2032292C203136295C6E202020202020202069202B3D20325C6E202020207D5C6E202020206C6574206C203D20496E74656765722E746F486578537472696E6728616363756D292E6C656E67746828295C6E2020202072657475726E20496E74656765722E746F486578537472696E6728616363756D292E737562737472696E67286C202D20322C206C292E746F55707065724361736528295C6E7D5C6E2F2FE695B0E68DAEE8BDACE68DA220E58092E8BDAC202D33335C6E766172207472616E73666F726D203D20737472203D3E207B5C6E202020206C65742069203D20305C6E202020206C657420726573756C74203D2027275C6E20202020737472203D207265766572736554776F446967697428737472295C6E202020207768696C65202869203C207374722E6C656E677468282929207B5C6E2020202020202020696620287374722E737562737472696E6728692C2032202B206929203D3D202733332729207B5C6E20202020202020202020202069202B3D20325C6E202020202020202020202020726573756C74202B3D20273030275C6E20202020202020207D20656C7365207B5C6E2020202020202020202020206C65742076616C7565203D20496E74656765722E7061727365496E74287374722E737562737472696E6728692C2032202B2069292C20313629202D20307833333B5C6E20202020202020202020202069202B3D20325C6E202020202020202020202020726573756C74202B3D20537472696E672E666F726D6174282725303258272C2076616C7565295C6E20202020202020207D5C6E202020207D5C6E2020202072657475726E20496E74656765722E7061727365496E7428726573756C742C203130295C6E7D5C6E2F2F2B30783333E696B9E6B3955C6E7661722064617461706C7573203D2073747244617461203D3E207B5C6E202020206C6574207344617461203D2027275C6E202020206C65742069203D20305C6E202020206C6574207044617461203D20305C6E202020207768696C65202869203C20737472446174612E6C656E677468282929207B5C6E20202020202020207044617461203D2028496E74656765722E7061727365496E7428737472446174612E737562737472696E6728692C2069202B2032292C20313629202B203078333329202620306231313131313131315C6E20202020202020207344617461202B3D20537472696E672E666F726D6174282725303258272C207044617461295C6E202020202020202069202B3D20325C6E202020207D5C6E2020202072657475726E2073446174615C6E7D5C6E5C6E2F2FE9A284E8A7A3E7A081EFBC8CE8A7A3E69E90E4B88AE68AA5E79A84E8AEBEE5A487E7BC96E58FB7E4BAA7E5938164657669636549645C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D207B7D5C6E202020202F2FE6B3A8E5868CE58C855C6E20202020696620287061796C6F61642E6C656E6774682829203D3D20313229207B5C6E2020202020202020726573756C742E6465766963654964203D207265766572736554776F4469676974287061796C6F6164295C6E202020207D5C6E202020205C6E202020202F2FE794B5E8A1A8E794B5E9878FE4B88AE68AA5E6B688E681AFE9A284E8A7A3E7A0815C6E202020206966287061796C6F61642E6C656E6774682829203D3D203938202626207061796C6F61642E737562737472696E6728302C32292E657175616C732827363827292626207061796C6F61642E737562737472696E67287061796C6F61642E6C656E67746828292D322C7061796C6F61642E6C656E6774682829292E657175616C73282731362729297B5C6E2020202020202020726573756C742E6465766963654964203D2072657665727365537472287061796C6F61642E737562737472696E6728322C20313429295C6E202020207D5C6E2020202072657475726E20726573756C745C6E7D5C6E2F2FE4B88AE8A18CE5A484E790865C6E766172206465636F6465203D20287061796C6F61642C636F6E7465787429203D3E207B5C6E2020202076617220726573756C74203D205B5D5C6E202020207661722070726F706572746965734F626A203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D5C6E2020202070726F706572746965734F626A2E70726F706572746965732E6F726967696E616C4D657373616765203D207061796C6F61645C6E5C6E5C6E202020202F2F70726F706572746965734F626A2E70726F706572746965732E736861646F77203D2070446174612E736861646F775C6E20202020726573756C742E707573682870726F706572746965734F626A295C6E202020202F2FE5BF83E8B7B3E58C855C6E20202020696620287061796C6F61642E6C656E6774682829203D3D20313229207B5C6E2020202020202020726573756C742E707573682870726F706572746965734F626A295C6E202020202020202070726F706572746965734F626A2E746370456E636F6465203D2027484558273B5C6E202020202020202070726F706572746965734F626A2E7265706C795061796C6F6164203D202737383638275C6E202020207D20656C7365207B5C6E20202020202020202F2FE68A84E8A1A8E7BB93E69E9C5C6E2020202020202020696620287061796C6F61642E6C656E6774682829203E3D203934202626207061796C6F61642E737562737472696E672831342C20313829203D3D2027363839312729207B5C6E2020202020202020202020202F2FE8A1A8E58FB75C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E6D657465724E6F203D2072657665727365537472287061796C6F61642E737562737472696E6728322C20313429295C6E202020202020202020202020766172206C656E677468203D20496E74656765722E7061727365496E74287061796C6F61642E737562737472696E672831382C203230292C203136295C6E5C6E2020202020202020202020202F2FE680BBE794A8E794B5E9878F5C6E2020202020202020202020206C6574206D44617461203D20287472616E73666F726D287061796C6F61642E737562737472696E672832382C2033362929202A20302E3031292E746F46697865642832295C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E6D6574657244617461203D206D446174612E737562737472696E6728302C206D446174612E6C656E6774682829202D2031295C6E2020202020202020202020202F2FE58F96E5BDB1E5AD90E9878CE79A84E4B88AE6ACA1E8AFBBE695B05C6E2020202020202020202020202F2F20696620287044617461213D6E756C6C20262670446174612E636F6E7461696E734B65792827736861646F77272929207B5C6E2020202020202020202020202F2F20202020206966202870446174612E736861646F772E73746174652E7265706F727465642E636F6E7461696E734B657928276D6574657244617461272929207B5C6E2020202020202020202020202F2F20202020202020202070726F706572746965734F626A2E70726F706572746965732E6C6173744D6574657244617461203D2070446174612E736861646F772E73746174652E7265706F727465642E6D65746572446174615C6E2020202020202020202020202F2F20202020207D5C6E2020202020202020202020202F2F207D5C6E2020202020202020202020202F2F70726F706572746965734F626A2E70726F706572746965732E6D6574657244617461203D20287472616E73666F726D287061796C6F61642E737562737472696E672832382C2033362929202A20302E3031292E746F46697865642832295C6E2020202020202020202020202F2FE794B5E4BBB75C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E6D657465725072696365203D20287472616E73666F726D287061796C6F61642E737562737472696E672833362C2034342929202A20302E30303031292E746F46697865642834295C6E2020202020202020202020202F2FE794B5E58E8B5C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E766F6C74616765203D20287472616E73666F726D287061796C6F61642E737562737472696E672834342C2035322929202A20302E31292E746F46697865642831295C6E2020202020202020202020202F2FE794B5E6B5815C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E63757272656E74203D20287472616E73666F726D287061796C6F61642E737562737472696E672835322C2036302929202A20302E303031292E746F46697865642833295C6E2020202020202020202020202F2FE58A9FE78E875C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E706F776572203D20287472616E73666F726D287061796C6F61642E737562737472696E672836302C2036382929202A20302E31292E746F46697865642831295C6E2020202020202020202020202F2FE8B4ADE794B5E6ACA1E695B05C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E707572636861736573203D207472616E73666F726D287061796C6F61642E737562737472696E672836382C20373629295C6E2020202020202020202020202F2FE9A284E8ADA6E794B5E9878F5C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E7761726E696E67506F776572203D20287472616E73666F726D287061796C6F61642E737562737472696E672837362C2038342929202A20302E3031292E746F46697865642832295C6E2020202020202020202020202F2FE589A9E4BD99E98791E9A29D5C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E72656D61696E696E67416D6F756E74203D20287472616E73666F726D287061796C6F61642E737562737472696E672838342C2039322929202A20302E3031292E746F46697865642832295C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E6F70656E5374617465203D2028496E74656765722E7061727365496E74287061796C6F61642E737562737472696E672839322C203934292C20313629202D203078333329203D3D203237203F20273127203A202730275C6E2020202020202020202020202F2FE696B0E5A29EE69FA5E8AFA2E4BFA1E58FB7E580BCEFBC8CE59CA87265706C79E9878CE99DA2E4B88BE58F915C6E20202020202020202020202070726F706572746965734F626A2E746370456E636F6465203D2027484558273B5C6E20202020202020202020202070726F706572746965734F626A2E7265706C795061796C6F6164203D202737323732373036333243363736353734363337333731275C6E20202020202020207D5C6E20202020202020202F2FE68A84E8A1A8E58886E58C85EFBC8CE7ACACE4B880E983A8E588865C6E2020202020202020696620287061796C6F61642E6C656E6774682829203D3D203634202626207061796C6F61642E737562737472696E672831342C20313829203D3D2027363839312729207B5C6E2020202020202020202020202F2FE8A1A8E58FB75C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E6D657465724E6F203D2072657665727365537472287061796C6F61642E737562737472696E6728322C20313429295C6E202020202020202020202020766172206C656E677468203D20496E74656765722E7061727365496E74287061796C6F61642E737562737472696E672831382C203230292C203136295C6E5C6E2020202020202020202020202F2FE680BBE794A8E794B5E9878F5C6E2020202020202020202020206C6574206D44617461203D20287472616E73666F726D287061796C6F61642E737562737472696E672832382C2033362929202A20302E3031292E746F46697865642832295C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E6D6574657244617461203D206D446174612E737562737472696E6728302C206D446174612E6C656E6774682829202D2031295C6E2020202020202020202020202F2FE58F96E5BDB1E5AD90E9878CE79A84E4B88AE6ACA1E8AFBBE695B05C6E2020202020202020202020202F2F206966202870446174612E636F6E7461696E734B65792827736861646F77272929207B5C6E2020202020202020202020202F2F20202020206966202870446174612E736861646F772E73746174652E7265706F727465642E636F6E7461696E734B657928276D6574657244617461272929207B5C6E2020202020202020202020202F2F20202020202020202070726F706572746965734F626A2E70726F706572746965732E6C6173744D6574657244617461203D2070446174612E736861646F772E73746174652E7265706F727465642E6D65746572446174615C6E2020202020202020202020202F2F20202020207D5C6E2020202020202020202020202F2F207D5C6E2020202020202020202020202F2F70726F706572746965734F626A2E70726F706572746965732E6D6574657244617461203D20287472616E73666F726D287061796C6F61642E737562737472696E672832382C2033362929202A20302E3031292E746F46697865642832295C6E2020202020202020202020202F2FE794B5E4BBB75C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E6D657465725072696365203D20287472616E73666F726D287061796C6F61642E737562737472696E672833362C2034342929202A20302E30303031292E746F46697865642834295C6E2020202020202020202020202F2FE794B5E58E8B5C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E766F6C74616765203D20287472616E73666F726D287061796C6F61642E737562737472696E672834342C2035322929202A20302E31292E746F46697865642831295C6E2020202020202020202020202F2FE794B5E6B5815C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E63757272656E74203D20287472616E73666F726D287061796C6F61642E737562737472696E672835322C2036302929202A20302E303031292E746F46697865642833295C6E2020202020202020202020202F2FE58A9FE78E875C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E706F776572203D20287472616E73666F726D287061796C6F61642E737562737472696E672836302C2036342929202A20302E31292E746F46697865642831295C6E20202020202020207D5C6E20202020202020202F2FE68A84E8A1A8E58886E58C85EFBC8CE7ACACE4BA8CE983A8E588865C6E2020202020202020696620287061796C6F61642E6C656E6774682829203D3D20333429207B5C6E2020202020202020202020202F2F5C6E2020202020202020202020202F2FE8B4ADE794B5E6ACA1E695B05C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E707572636861736573203D207472616E73666F726D287061796C6F61642E737562737472696E6728342C20313229295C6E2020202020202020202020202F2FE9A284E8ADA6E794B5E9878F5C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E7761726E696E67506F776572203D20287472616E73666F726D287061796C6F61642E737562737472696E672831322C2032302929202A20302E3031292E746F46697865642832295C6E2020202020202020202020202F2FE589A9E4BD99E98791E9A29D5C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E72656D61696E696E67416D6F756E74203D20287472616E73666F726D287061796C6F61642E737562737472696E672832302C2032382929202A20302E3031292E746F46697865642832295C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E6F70656E5374617465203D2028496E74656765722E7061727365496E74287061796C6F61642E737562737472696E672832382C203330292C20313629202D203078333329203D3D203237203F20273127203A202730275C6E2020202020202020202020202F2FE696B0E5A29EE69FA5E8AFA2E4BFA1E58FB7E580BCEFBC8CE59CA87265706C79E9878CE99DA2E4B88BE58F915C6E20202020202020202020202070726F706572746965734F626A2E746370456E636F6465203D2027484558273B5C6E20202020202020202020202070726F706572746965734F626A2E7265706C795061796C6F6164203D202737323732373036333243363736353734363337333731275C6E20202020202020207D5C6E20202020202020202F2FE68EA7E588B6E5BC80E59088E997B8E59B9EE5A48DE79A84E4B8A2E695B0E68DAEE5A4B43638E585BCE5AEB9E5A484E790865C6E2020202020202020696620287061796C6F61642E6C656E6774682829203D3D20343829207B5C6E202020202020202020202020696620287061796C6F61642E737562737472696E672831322C203138292E657175616C73282736383943304427292026262028287061796C6F61642E737562737472696E672834322C203434292E657175616C7328273444272929207C7C20287061796C6F61642E737562737472696E672834322C203434292E657175616C73282734452729292929207B5C6E202020202020202020202020202020207061796C6F6164203D2027363827202B207061796C6F61645C6E2020202020202020202020207D5C6E20202020202020207D5C6E5C6E20202020202020202F2FE68EA7E588B6E5BC80E59088E997B8E59B9EE5A48D5C6E2020202020202020696620287061796C6F61642E737562737472696E672831342C20313829203D3D2027363839432729207B5C6E2020202020202020202020206C6574207265706C797377697463684F626A203D207B5C6E202020202020202020202020202020205C226D657373616765547970655C223A205C225245504C595C222C5C6E202020202020202020202020202020205C2266756E6374696F6E5C223A205C227377697463684F6E4F66665C222C5C6E202020202020202020202020202020205C22646174615C223A207B5C6E20202020202020202020202020202020202020205C226F70656E53746174655C223A2028496E74656765722E7061727365496E74287061796C6F61642E737562737472696E672834342C203436292C20313629202D203078333329203D3D203237203F20273127203A202730275C6E202020202020202020202020202020207D5C6E2020202020202020202020207D5C6E5C6E202020202020202020202020726573756C742E70757368287265706C797377697463684F626A295C6E2020202020202020202020202F2FE5908CE6ADA5E4B88AE68AA5E9809AE794B5E696ADE794B5E5B19EE680A75C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E6F70656E5374617465203D207265706C797377697463684F626A2E646174612E6F70656E53746174655C6E2020202020202020202020202F2F70726F706572746965734F626A2E70726F706572746965732E6D6574657244617461203D20287472616E73666F726D287061796C6F61642E737562737472696E672832302C2032382929202A20302E3031292E746F46697865642832295C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E72656D61696E696E67416D6F756E74203D20287472616E73666F726D287061796C6F61642E737562737472696E672832382C2033362929202A20302E3031292E746F46697865642832295C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E707572636861736573203D207472616E73666F726D287061796C6F61642E737562737472696E672833362C20343429295C6E2020202020202020202020202F2FE696B0E5A29EE69FA5E8AFA2E4BFA1E58FB7E580BCEFBC8CE59CA87265706C79E9878CE99DA2E4B88BE58F915C6E20202020202020202020202070726F706572746965734F626A2E746370456E636F6465203D2027484558273B5C6E20202020202020202020202070726F706572746965734F626A2E7265706C795061796C6F6164203D202737323732373036333243363736353734363337333731275C6E20202020202020207D5C6E20202020202020202F2FE6B885E8A1A8E59B9EE5A48D5C6E2020202020202020696620287061796C6F61642E737562737472696E672831342C20313829203D3D2027363839412729207B5C6E2020202020202020202020206C6574207265706C797377697463684F626A203D207B5C6E202020202020202020202020202020205C226D657373616765547970655C223A205C225245504C595C222C5C6E202020202020202020202020202020205C2266756E6374696F6E5C223A205C2272657365745C222C5C6E202020202020202020202020202020205C22646174615C223A207B5C6E20202020202020202020202020202020202020205C22726573756C745C223A2027E8AEBEE7BDAEE68890E58A9F275C6E202020202020202020202020202020207D5C6E2020202020202020202020207D5C6E202020202020202020202020726573756C742E70757368287265706C797377697463684F626A295C6E2020202020202020202020206C6574206D44617461203D20287472616E73666F726D287061796C6F61642E737562737472696E672832382C2033362929202A20302E3031292E746F46697865642832295C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E6D6574657244617461203D206D446174612E737562737472696E6728302C206D446174612E6C656E6774682829202D2031295C6E2020202020202020202020202F2F70726F706572746965734F626A2E70726F706572746965732E6D6574657244617461203D20287472616E73666F726D287061796C6F61642E737562737472696E672832302C2032382929202A20302E3031292E746F46697865642832295C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E72656D61696E696E67416D6F756E74203D20287472616E73666F726D287061796C6F61642E737562737472696E672832382C2033362929202A20302E3031292E746F46697865642832295C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E707572636861736573203D207472616E73666F726D287061796C6F61642E737562737472696E672833362C20343429295C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E6F70656E5374617465203D2028496E74656765722E7061727365496E74287061796C6F61642E737562737472696E672834342C203436292C20313629202D203078333329203D3D203237203F20273127203A202730275C6E20202020202020207D5C6E20202020202020202F2FE8AEBEE7BDAEE99990E580BCE59B9EE5A48D5C6E2020202020202020696620287061796C6F61642E737562737472696E672831342C20323029203D3D20273638383431432729207B5C6E2020202020202020202020206C6574207265706C794C696D69744F626A203D207B5C6E202020202020202020202020202020205C226D657373616765547970655C223A205C225245504C595C222C5C6E202020202020202020202020202020205C2266756E6374696F6E5C223A205C227365744F7665726C6F61644C696D69745C222C5C6E202020202020202020202020202020205C22646174615C223A207B5C6E20202020202020202020202020202020202020205C226F766572566F6C746167654C696D69745C223A205C225C222C5C6E20202020202020202020202020202020202020205C226F7665724375727272656E744C696D69745C223A205C225C225C6E202020202020202020202020202020207D5C6E2020202020202020202020207D5C6E202020202020202020202020726573756C742E70757368287265706C794C696D69744F626A295C6E2020202020202020202020202F2FE59BA4E7A7AFE98791E9A29D5C6E2020202020202020202020202F2F70726F706572746965734F626A2E70726F706572746965732E686F617264416D6F756E74203D205C6E5C6E20202020202020207D5C6E20202020202020202F2FE594AEE794B5E59B9EE5A48D5C6E2020202020202020696620287061796C6F61642E737562737472696E672831342C20323029203D3D20273638383430432729207B5C6E2020202020202020202020206C6574207265706C7952656368617267654F626A203D207B5C6E202020202020202020202020202020205C226D657373616765547970655C223A205C225245504C595C222C5C6E202020202020202020202020202020205C2266756E6374696F6E5C223A205C2272656368617267655C222C5C6E202020202020202020202020202020205C22646174615C223A207B5C6E20202020202020202020202020202020202020205C22726573756C745C223A2027E8AEBEE7BDAEE68890E58A9F275C6E202020202020202020202020202020207D5C6E2020202020202020202020207D5C6E202020202020202020202020726573756C742E70757368287265706C7952656368617267654F626A295C6E2020202020202020202020202F2FE59BA4E7A7AFE98791E9A29D5C6E2020202020202020202020202F2F70726F706572746965734F626A2E70726F706572746965732E686F617264416D6F756E74203D205C6E5C6E20202020202020207D5C6E20202020202020202F2FE6AF94E8BE83E4B88AE6ACA1E8AFBBE695B0E5928CE8BF99E6ACA1E8AFBBE695B0E79A84E5B7AEE9A29D5C6E20202020202020206966202870726F706572746965734F626A2E70726F706572746965732E636F6E7461696E734B657928276C6173744D657465724461746127292026262070726F706572746965734F626A2E70726F706572746965732E636F6E7461696E734B657928276D6574657244617461272929207B5C6E2020202020202020202020206C65742073686F727466616C6C44617461203D20466C6F61742E7061727365466C6F61742870726F706572746965734F626A2E70726F706572746965732E6D657465724461746129202D20466C6F61742E7061727365466C6F61742870726F706572746965734F626A2E70726F706572746965732E6C6173744D6574657244617461295C6E20202020202020202020202070726F706572746965734F626A2E70726F706572746965732E73686F727466616C6C44617461203D20466C6F61742E7061727365466C6F61742873686F727466616C6C446174612E746F4669786564283229295C6E2020202020202020202020206966202870726F706572746965734F626A2E70726F706572746965732E73686F727466616C6C44617461203C203029207B5C6E202020202020202020202020202020206C65742073686F727466616C6C416C61726D4F626A203D207B5C6E20202020202020202020202020202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020202020202020202020202020205C226576656E745C223A205C225C222C5C6E20202020202020202020202020202020202020205C22646174615C223A207B5C6E2020202020202020202020202020202020202020202020205C226C6576656C5C223A205C227761726E5C225C6E20202020202020202020202020202020202020207D5C6E202020202020202020202020202020207D5C6E2020202020202020202020202020202073686F727466616C6C416C61726D4F626A2E6576656E74203D202773686F727466616C6C416C61726D275C6E2020202020202020202020202020202073686F727466616C6C416C61726D4F626A2E646174612E73686F727466616C6C416C61726D203D2027E8AFBBE695B0E58092E6B581E5918AE8ADA6275C6E2020202020202020202020202020202073686F727466616C6C416C61726D4F626A2E646174612E73686F727466616C6C44617461203D2070726F706572746965734F626A2E70726F706572746965732E73686F727466616C6C446174615C6E20202020202020202020202020202020726573756C742E707573682873686F727466616C6C416C61726D4F626A295C6E2020202020202020202020207D5C6E20202020202020207D5C6E20202020202020202F2F435351E695B0E68DAEEFBC8C4943434944E695B0E68DAE5C6E20202020202020202F2A2A5C6E2020202020202020202A20727270632C6765746373712C32325C6E2020202020202020202A20727270632C67657469636369642C38393836303441383130323434303132303135325C6E2020202020202020202A205C6E2020202020202020202A2F5C6E2020202020202020696620287061796C6F61642E6C656E6774682829203E3D2038202626207061796C6F61642E737562737472696E6728302C2038292E657175616C7328273732373237303633272929207B5C6E2020202020202020202020206C6574207244617461203D2068657832737472287061796C6F6164295C6E2020202020202020202020206C657420724172726179203D2072446174612E73706C697428272C27295C6E2020202020202020202020202F2F435351E695B0E68DAE5C6E202020202020202020202020696620287241727261795B305D2E657175616C732827727270632729202626207241727261795B315D2E657175616C732827676574637371272929207B5C6E2020202020202020202020202020202070726F706572746965734F626A2E70726F706572746965732E637371203D207241727261795B325D5C6E2020202020202020202020202020202070726F706572746965734F626A2E70726F706572746965732E7369676E616C4C6576656C203D206373712870726F706572746965734F626A2E70726F706572746965732E637371295C6E2020202020202020202020207D5C6E202020202020202020202020696620287241727261795B305D2E657175616C732827727270632729202626207241727261795B315D2E657175616C7328276765746963636964272929207B5C6E2020202020202020202020202020202070726F706572746965734F626A2E70726F706572746965732E6963636964203D207241727261795B325D5C6E2020202020202020202020207D5C6E5C6E20202020202020207D5C6E202020207D5C6E202020202F2A2F2FE5BC80E5A78BE5AD97E88A825C6E20202020696620287061796C6F61642E737562737472696E6728302C20322920213D202736382729207B5C6E202020205C7472657475726E206A736F6E546F53747228726573756C74295C6E202020207D2A2F5C6E5C6E5C6E2020202072657475726E206A736F6E546F53747228726573756C74295C6E7D5C6E2F2FE4B88BE8A18CE5A484E790865C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E20202020766172206F626A203D20746F4A736F6E287061796C6F6164295C6E202020202F2FE8AFBBE58F96E794B5E8A1A8E794A8E9878F5C6E20202020696620286F626A2E66756E6374696F6E203D3D20276D65746572526561642729207B5C6E2020202020202020696620286F626A2E646174612E6D657465724E6F2E6C656E6774682829203D3D20313229207B5C6E2020202020202020202020206C657420737472203D2027363827202B2072657665727365537472286F626A2E646174612E6D657465724E6F29202B20273638313130343333333543343333275C6E2020202020202020202020206C657420636865636B203D20636865636B5F435328737472295C6E202020202020202020202020737472203D20737472202B20636865636B202B20273136275C6E20202020202020202020202072657475726E207374722E746F4C6F7765724361736528295C6E20202020202020207D5C6E202020207D5C6E202020202F2FE5BC80E585B3E997B85C6E20202020696620286F626A2E66756E6374696F6E203D3D20277377697463684F6E4F66662729207B5C6E2020202020202020696620286F626A2E646174612E6D657465724E6F2E6C656E6774682829203D3D20313229207B5C6E2020202020202020202020202F2F31E4B8BAE59088E997B85C6E2020202020202020202020206C6574207377697463684F6E203D206F626A2E646174612E76616C76654F6E203D3D20273127203F2027344527203A20273444275C6E2020202020202020202020206C657420737472203D2027363827202B2072657665727365537472286F626A2E646174612E6D657465724E6F29202B20273638314331303335333333333333333438393637343527202B207377697463684F6E202B20273333343737373342334134343343275C6E2020202020202020202020206C657420636865636B203D20636865636B5F435328737472295C6E202020202020202020202020737472203D20737472202B20636865636B202B20273136275C6E20202020202020202020202072657475726E207374722E746F4C6F7765724361736528295C6E20202020202020207D5C6E202020207D5C6E202020202F2FE6B885E8A1A828E6B885E999A4E68980E69C89EFBC8CE4BD99E9A29DE38081E680BBE794B5E9878FE38081E8B4ADE794B5E6ACA1E695B0E38081E794B5E4BBB7E585A8E983A8E5889DE5A78BE58C96295C6E20202020696620286F626A2E66756E6374696F6E203D3D202772657365742729207B5C6E2020202020202020696620286F626A2E646174612E6D657465724E6F2E6C656E6774682829203D3D20313229207B5C6E2020202020202020202020206C657420737472203D2027363827202B2072657665727365537472286F626A2E646174612E6D657465724E6F29202B2027363831413039333533333333333333343839363734353335275C6E2020202020202020202020206C657420636865636B203D20636865636B5F435328737472295C6E202020202020202020202020737472203D20737472202B20636865636B202B20273136275C6E20202020202020202020202072657475726E207374722E746F4C6F7765724361736528295C6E20202020202020207D5C6E202020207D5C6E202020202F2FE8B685E99990E580BCE8AEBEE7BDAE5C6E20202020696620286F626A2E66756E6374696F6E203D3D20277365744F7665726C6F61644C696D69742729207B5C6E2020202020202020696620286F626A2E646174612E6D657465724E6F2E6C656E6774682829203D3D20313229207B5C6E2020202020202020202020206C657420737472203D2027363827202B2072657665727365537472286F626A2E646174612E6D657465724E6F29202B202736383034323033363333333333333335333333333333373334303336333333333333333333333733343033363333275C6E2020202020202020202020202F2FE794B5E58E8BE99990E580BCE5A484E790865C6E202020202020202020202020696620286F626A2E646174612E636F6E7461696E734B657928276F766572566F6C746167654C696D69742729202626206F626A2E646174612E6F766572566F6C746167654C696D697420213D204E554C4C29207B5C6E2020202020202020202020202020202069662028466C6F61742E76616C75654F66286F626A2E646174612E6F766572566F6C746167654C696D697429203E203232302E3020262620466C6F61742E76616C75654F66286F626A2E646174612E6F766572566F6C746167654C696D697429203C3D203236302E3029207B5C6E20202020202020202020202020202020202020206C6574206876203D20537472696E672E666F726D6174282725303858272C20496E74656765722E76616C75654F662828466C6F61742E76616C75654F66286F626A2E646174612E6F766572566F6C746167654C696D697429202A203130292E746F466978656428302929295C6E2020202020202020202020202020202020202020737472202B3D20726576657273655374722864617461706C757328687629295C6E202020202020202020202020202020207D5C6E202020202020202020202020202020202F2FE5A682E69E9CE794B5E58E8BE99990E580BCE4B88DE59CA8E88C83E59BB4E58685EFBC8CE8A1A5E9BB98E8AEA4E99990E580BC3236302E30565C6E20202020202020202020202020202020656C7365207B5C6E2020202020202020202020202020202020202020737472202B3D20726576657273655374722864617461706C757328537472696E672E666F726D6174282725303858272C20323630302929295C6E202020202020202020202020202020207D5C6E2020202020202020202020207D5C6E2020202020202020202020202F2FE5A682E69E9CE4B88DE5A1ABE58699E794B5E58E8BE99990E580BCEFBC8CE9BB98E8AEA4323630305C6E202020202020202020202020656C7365207B5C6E20202020202020202020202020202020737472202B3D20726576657273655374722864617461706C757328537472696E672E666F726D6174282725303858272C20323630302929295C6E2020202020202020202020207D5C6E2020202020202020202020202F2FE794B5E6B581E99990E580BCE5A484E790865C6E202020202020202020202020696620286F626A2E646174612E636F6E7461696E734B657928276F7665724375727272656E744C696D69742729202626206F626A2E646174612E6F7665724375727272656E744C696D697420213D204E554C4C29207B5C6E2020202020202020202020202020202069662028466C6F61742E76616C75654F66286F626A2E646174612E6F7665724375727272656E744C696D697429203E20302E30303020262620466C6F61742E76616C75654F66286F626A2E646174612E6F7665724375727272656E744C696D697429203C2038302E30303029207B5C6E20202020202020202020202020202020202020206C6574206849203D20537472696E672E666F726D6174282725303858272C20496E74656765722E76616C75654F662828466C6F61742E76616C75654F66286F626A2E646174612E6F7665724375727272656E744C696D697429202A2031303030292E746F466978656428302929295C6E2020202020202020202020202020202020202020737472202B3D20726576657273655374722864617461706C757328684929295C6E202020202020202020202020202020207D5C6E202020202020202020202020202020202F2FE5A682E69E9CE794B5E6B581E99990E580BCE4B88DE59CA8E88C83E59BB4E58685EFBC8CE8A1A5E9BB98E8AEA4E99990E580BC3830415C6E20202020202020202020202020202020656C7365207B5C6E2020202020202020202020202020202020202020737472202B3D20726576657273655374722864617461706C757328537472696E672E666F726D6174282725303858272C2038303030302929295C6E202020202020202020202020202020207D5C6E2020202020202020202020207D5C6E2020202020202020202020202F2FE5A682E69E9CE4B88DE5A1ABE58699E794B5E6B581E99990E580BCEFBC8CE9BB98E8AEA438303030305C6E202020202020202020202020656C7365207B5C6E20202020202020202020202020202020737472202B3D20726576657273655374722864617461706C757328537472696E672E666F726D6174282725303858272C2038303030302929295C6E2020202020202020202020207D5C6E2020202020202020202020202F2FE58AA0E5808DE78E87EFBC8CE9BB98E8AEA4315C6E202020202020202020202020737472202B3D20273334333333333333275C6E2020202020202020202020206C657420636865636B203D20636865636B5F435328737472295C6E202020202020202020202020737472203D20737472202B20636865636B202B20273136275C6E20202020202020202020202072657475726E207374722E746F4C6F7765724361736528295C6E20202020202020207D5C6E202020207D5C6E202020202F2FE594AEE794B55C6E20202020696620286F626A2E66756E6374696F6E203D3D202772656368617267652729207B5C6E2020202020202020696620286F626A2E646174612E6D657465724E6F2E6C656E6774682829203D3D20313229207B5C6E2020202020202020202020206C657420737472203D2027363827202B2072657665727365537472286F626A2E646174612E6D657465724E6F29202B202736383034313033343333333333333335333333333333275C6E202020202020202020202020737472202B3D20726576657273655374722864617461706C757328537472696E672E666F726D6174282725303858272C2028496E74656765722E76616C75654F66286F626A2E646174612E7265636861726765446174612929202A203130302929295C6E5C6E202020202020202020202020696620286F626A2E646174612E636F6E7461696E734B657928277265636861726765436F756E74272929207B5C6E20202020202020202020202020202020737472202B3D20726576657273655374722864617461706C757328537472696E672E666F726D6174282725303858272C206F626A2E646174612E7265636861726765436F756E742929295C6E2020202020202020202020207D20656C7365207B5C6E20202020202020202020202020202020737472202B3D20273334333333333333275C6E2020202020202020202020207D5C6E5C6E2020202020202020202020206C657420636865636B203D20636865636B5F435328737472295C6E202020202020202020202020737472203D20737472202B20636865636B202B20273136275C6E20202020202020202020202072657475726E207374722E746F4C6F7765724361736528295C6E20202020202020207D5C6E202020207D5C6E202020202F2FE6B58BE8AF955C6E20202020696620286F626A2E66756E6374696F6E203D3D205C22636D645C2229207B5C6E20202020202020206C657420636D6444617461203D206F626A2E646174612E636D64446174615C6E202020202020202072657475726E20636D64446174615C6E202020207D5C6E202020202F2FE8AFBBE58F96E4BFA1E58FB7E5BCBAE5BAA64353515C6E20202020696620286F626A2E66756E6374696F6E203D3D205C226765744353515C2229207B5C6E20202020202020206C657420636D6444617461203D202737323732373036333243363736353734363337333731275C6E202020202020202072657475726E20636D64446174615C6E202020207D5C6E202020202F2FE8AFBBE58F96E789A9E88194E7BD91E58DA149434349445C6E20202020696620286F626A2E66756E6374696F6E203D3D205C2267657449434349445C2229207B5C6E20202020202020206C657420636D6444617461203D20273732373237303633324336373635373436393633363336393634275C6E202020202020202072657475726E20636D64446174615C6E202020207D5C6E7D5C6E5C6E2F2F2072657475726E207072654465636F64652827363839333030323230353235323036383931323533333335633433333638333333333333333333333333333334623536333333336337363733333333623762353333333333333333333333333333333333333333333333333333333334656430313627295C6E2F2F2072657475726E206465636F64652827363831323131313131313131313136383943304433333334333333333333336333333333333433333333333334656373313627295C6E2F2F72657475726E20656E636F646528277B5C226D657373616765547970655C223A5C2246554E4354494F4E535C222C5C2266756E6374696F6E5C223A5C2272656368617267655C222C5C22646174615C223A7B5C226D657465724E6F5C223A5C223230323431313139303234375C222C5C227265636861726765446174615C223A31303030302C5C227265636861726765436F756E745C223A327D7D27295C6E72657475726E206465636F64652827363834373032313931313234323036383931323533333335633433333333333333333333333333333334333337613535333333333333333333333333333333333333333333343333333333333333333333333333333338333333333334653035313627295C6E2F2F72657475726E206465636F646528277B5C227061796C6F61645C223A5C223230323431313139303236315C227D27295C6E2F2F72657475726E2027E58D8EE695B0E789A9E88194E7BD91E59FBAE59CB0EFBC88496F742057617375EFBC89275C6E5C6E2F2FE5B8A6E5BDB1E5AD90E695B0E68DAE5C6E2F2F72657475726E206465636F646528277B5C22736861646F775C223A7B5C226D657461646174615C223A7B5C22646573697265645C223A7B7D2C5C227265706F727465645C223A7B5C227075726368617365735C223A7B5C2274696D657374616D705C223A313734373732363437357D2C5C226F70656E53746174655C223A7B5C2274696D657374616D705C223A313734373732363437357D2C5C226D6574657250726963655C223A7B5C2274696D657374616D705C223A313734373732363437357D2C5C22766F6C746167655C223A7B5C2274696D657374616D705C223A313734373732363437357D2C5C2272656D61696E696E67416D6F756E745C223A7B5C2274696D657374616D705C223A313734373732363437357D2C5C2263757272656E745C223A7B5C2274696D657374616D705C223A313734373732363437357D2C5C227761726E696E67506F7765725C223A7B5C2274696D657374616D705C223A313734373732363437357D2C5C226D657465724E6F5C223A7B5C2274696D657374616D705C223A313734373732363437357D2C5C22706F7765725C223A7B5C2274696D657374616D705C223A313734373732363437357D2C5C226F726967696E616C4D6573736167655C223A7B5C2274696D657374616D705C223A313734373732363732337D2C5C226D65746572446174615C223A7B5C2274696D657374616D705C223A313734373732363437357D7D7D2C5C2276657273696F6E5C223A3331352C5C2273746174655C223A7B5C22646573697265645C223A7B7D2C5C227265706F727465645C223A7B5C227075726368617365735C223A31352C5C226F70656E53746174655C223A5C22315C222C5C226D6574657250726963655C223A5C22312E303030305C222C5C22766F6C746167655C223A5C223232372E395C222C5C2272656D61696E696E67416D6F756E745C223A5C223139393939392E30345C222C5C2263757272656E745C223A5C22302E3030305C222C5C227761726E696E67506F7765725C223A5C22302E30305C222C5C226D657465724E6F5C223A5C223230323431313139303234375C222C5C22706F7765725C223A5C22302E305C222C5C226F726967696E616C4D6573736167655C223A5C22373237323730363332433637363537343633373337315C222C5C226D65746572446174615C223A5C22312E305C227D7D2C5C2274696D657374616D705C223A313734373732363732337D2C5C2270726F647563744B65795C223A5C223637633639663261366230303031613962323261366339615C222C5C2264657669636549645C223A5C223230323431313139303234375C222C5C22696F7449645C223A5C2236333333373235336439333634346263616431353133636133313861353230615C222C5C227061796C6F61645C223A5C2236383437303231393131323432303638393132353333333563343333333333333333333333333333333433333761353533333333333333333333333333333333333333333334333333333333333333333333333333333833333333333465303531365C227D27295C6E5C6E2F2F435351E695B0E68DAE5C6E72657475726E206465636F646528273732373237303633324336373635373436333733373132433332333227295C6E5C6E2F2F4943434944E695B0E68DAE5C6E2F2F2072657475726E206465636F646528277B5C227061796C6F61645C223A5C2237323732373036333243363736353734363936333633363936343243333833393338333633303334343133383331333033323334333433303331333233303331333533325C227D2729222C0A20202267726F7570496422203A20226634626562303864633766653431353762396636336132326130653161343330222C0A2020226E616D6522203A2022E58D95E79BB8E5AFBCE8BDA858412D47585344382D3447222C0A20202263726561746554696D6522203A20313735323830353030383534392C0A20202275706461746554696D6522203A20313735343738373330393039302C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A2022696F74222C0A202022757064617465427922203A2022696F74222C0A2020227061746822203A202261626378617373786E616E6168736D616E222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A2022E8BF99E4B8AAE698AFE4B880E4B8AAE794B5E8A1A8222C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'iot'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('6ead3277d72e4740bbe5e2a29c2672f4', 1753764243959, NULL, 'api', '小蘑菇插座', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223665616433323737643732653437343062626535653261323963323637326634222C0A20202273637269707422203A2022696D706F7274206C6F673B5C6E5C6E2F2F203136E8BF9BE588B6E8BDAC3130E8BF9BE588B6E695B0E5AD975C6E76617220686578546F496E74203D20686578203D3E207B5C6E202072657475726E20496E74656765722E7061727365496E74286865782C203136293B5C6E7D3B5C6E2F2F20E9A284E8A7A3E7A081EFBC8CE8A7A3E69E90E4B88AE68AA5E79A84E8AEBEE5A487E7BC96E58FB72064657669636549645C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D207B7D5C6E20202020766172207061796C6F6164486578203D207061796C6F61642E746F5570706572436173652829202F2F20E8BDACE4B8BAE5A4A7E586995C6E202020202F2F20E6A0A1E9AA8CE68AA5E69687E995BFE5BAA6E5928CE5B8A7E5A4B45C6E20202020696620287061796C6F61644865782E6C656E6774682829203E3D203138202626207061796C6F61644865782E737562737472696E6728302C203429203D3D3D205C22413541355C2229207B5C6E20202020202020202F2F20E4BB8EE7ACAC35E4BD8DE5BC80E5A78BE58F9634E5AD97E88A82EFBC8838E4B8AAE5AD97E7ACA6EFBC89E4BD9CE4B8BA2064657669636549645C6E2020202020202020726573756C742E6465766963654964203D207061796C6F61644865782E737562737472696E6728342C203132295C6E202020207D5C6E2020202072657475726E20726573756C745C6E7D5C6E5C6E766172206465636F6465203D287061796C6F61642C636F6E7465787429203D3E207B5C6E20206C6F672E696E666F285C22E8BF9BE585A5E7BC96E8A7A3E7A0812C7061796C6F61643D7B7D2C636F6E746578743D7B7D5C222C7061796C6F61642C636F6E74657874295C6E202076617220726573756C74203D205B5D3B5C6E2020766172207061796C6F6164486578203D7061796C6F61642E746F55707065724361736528293B5C6E20207661722070726F706572746965734F626A203D207B205C226D657373616765547970655C223A205C2250524F504552544945535C222C205C2270726F706572746965735C223A207B7D207D3B5C6E2020766172206576656E744F626A203D207B205C226D657373616765547970655C223A205C224556454E545C222C205C226576656E745C223A205C225C222C205C22646174615C223A207B7D207D3B5C6E5C6E20202F2F20E9AA8CE8AF81E5B8A7E5A4B4E5B8A7E5B0BE5C6E2020696620287061796C6F61644865782E737562737472696E6728302C20342920213D205C22413541355C22207C7C207061796C6F61644865782E737562737472696E67287061796C6F61644865782E6C656E6774682829202D20342920213D205C22354135415C2229207B5C6E2020202072657475726E206A736F6E546F537472285B7B205C226572726F725C223A205C22E697A0E69588E5B8A7E6A0BCE5BC8F5C22207D5D293B5C6E20207D5C6E5C6E20202F2F20E68F90E58F96E6A0B8E5BF83E5AD97E6AEB55C6E2020766172206465766963654964203D207061796C6F61644865782E737562737472696E6728342C2038293B202F2F20E8AEBEE5A4874944EFBC8834E5AD97E88A82EFBC895C6E202076617220636D64436F6465203D207061796C6F61644865782E737562737472696E6728382C203130293B202F2F20E591BDE4BBA4E7A081EFBC8831E5AD97E88A82EFBC895C6E202076617220646174614C656E203D20686578546F496E74287061796C6F61644865782E737562737472696E672831302C20313229293B202F2F20E695B0E68DAEE995BFE5BAA65C6E20207661722064617461486578203D207061796C6F61644865782E737562737472696E672831322C203132202B20646174614C656E202A2032293B202F2F20E695B0E68DAEE58CBA5C6E202076617220636865636B73756D203D207061796C6F61644865782E737562737472696E67283132202B20646174614C656E202A20322C203134202B20646174614C656E202A2032293B202F2F20E6A0A1E9AA8CE5928C5C6E5C6E20202F2F20E8AEBEE5A4874944E5AD98E585A5E68980E69C89E5AFB9E8B1A15C6E202070726F706572746965734F626A2E6465766963654964203D2064657669636549643B5C6E20206576656E744F626A2E6465766963654964203D2064657669636549643B5C6E20202F2FE9AA8CE8AF81E696B0E58685E5AEB95C6E202070726F706572746965734F626A2E636F6E746578743D636F6E746578743B5C6E202070726F706572746965734F626A2E746370456E636F6465203D2027484558273B5C6E202070726F706572746965734F626A2E7265706C795061796C6F6164203D202737323732373036333243363736353734363337333731275C6E20202F2F20312E20E5B19EE680A7E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813031EFBC895C6E202069662028636D64436F6465203D3D205C2230315C2220262620646174614C656E203D3D203729207B5C6E202020202F2F20E8A7A3E69E90E5BC80E585B3E78AB6E68081EFBC8830313DE5BC80EFBC8C30303DE585B3EFBC895C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F7765725374617465203D20646174614865782E737562737472696E6728302C203229203D3D205C2230315C22203F205C2230315C22203A205C2230305C223B5C6E202020202F2F20E8A7A3E69E90E794B5E6B581EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E303141EFBC895C6E202020207661722063757272656E74486578203D20646174614865782E737562737472696E6728322C2036293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E63757272656E74203D2028686578546F496E742863757272656E7448657829202A20302E3031292E746F46697865642832293B5C6E202020202F2F20E8A7A3E69E90E794B5E58E8BEFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E3156EFBC895C6E2020202076617220766F6C74616765486578203D20646174614865782E737562737472696E6728362C203130293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E766F6C74616765203D2028686578546F496E7428766F6C7461676548657829202A20302E31292E746F46697865642831293B5C6E202020202F2F20E8A7A3E69E90E58A9FE78E87EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D3157EFBC895C6E2020202076617220706F776572486578203D20646174614865782E737562737472696E672831302C203134293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F776572203D20686578546F496E7428706F776572486578292E746F537472696E6728293B5C6E202020202F2F20E58AA0E585A5E7BB93E69E9CE99B865C6E20202020726573756C742E707573682870726F706572746965734F626A293B5C6E20207D5C6E5C6E20202F2F20322E20E4BA8BE4BBB6E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813032EFBC895C6E202069662028636D64436F6465203D3D205C2230325C2220262620646174614C656E203E3D203329207B5C6E202020202F2F20E4BA8BE4BBB6E7B1BBE59E8BEFBC8830313DE8BF87E8BDBDEFBC8C30323DE8BF87E58E8BEFBC8C30333DE4B88AE7BABFEFBC8C30343DE4B88BE7BABFEFBC895C6E20202020766172206576656E7454797065203D20646174614865782E737562737472696E6728302C2032293B5C6E20202020696620286576656E7454797065203D3D205C2230315C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F7665726C6F61645C223B5C6E2020202020206576656E744F626A2E646174612E6F7665726C6F6164203D20686578546F496E7428646174614865782E737562737472696E6728322C20362929202B205C22575C223B202F2F20E8BF87E8BDBDE58A9FE78E875C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230335C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F6E6C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F6E6C696E65203D205C22E8AEBEE5A487E4B88AE7BABF5C223B5C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230345C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F66666C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F66666C696E65203D205C22E8AEBEE5A487E4B88BE7BABF5C223B5C6E202020207D5C6E20202020726573756C742E70757368286576656E744F626A293B5C6E20207D5C6E5C6E20202F2F20332E20E5938DE5BA94E68AA5E69687EFBC88E591BDE4BBA4E7A0813034EFBC895C6E202069662028636D64436F6465203D3D205C2230345C2220262620646174614C656E203D3D203129207B5C6E20202020766172207265706C794F626A203D207B5C6E2020202020205C226D657373616765547970655C223A205C225245504C595C222C5C6E2020202020205C2266756E6374696F6E5C223A205C227377697463685C222C5C6E2020202020205C22646174615C223A207B205C22726573756C745C223A2064617461486578203D3D205C2230305C22203F205C22737563636573735C22203A205C226661696C5C22207D5C6E202020207D3B5C6E202020207265706C794F626A2E6465766963654964203D2064657669636549643B5C6E20202020726573756C742E70757368287265706C794F626A293B5C6E20207D5C6E5C6E202072657475726E206A736F6E546F53747228726573756C74293B5C6E7D3B5C6E5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020766172206F626A203D20746F4A736F6E287061796C6F6164293B5C6E2020766172206465766963654964203D206F626A2E646174612E64657669636549643B202F2F20E8AEBEE5A4874944EFBC8834E4BD8D3136E8BF9BE588B6EFBC8CE5A6825C22303030315C22EFBC895C6E20207661722066756E63203D206F626A2E66756E6374696F6E3B5C6E202076617220706172616D73203D206F626A2E646174613B5C6E5C6E20202F2F20E68EA7E588B6E5BC80E585B3EFBC8866756E6374696F6E3D737769746368EFBC895C6E20206966202866756E63203D3D205C227377697463685C2229207B5C6E20202020766172207374617465203D20706172616D732E73746174653B202F2F20E79BAEE6A087E78AB6E68081EFBC9A30313DE5BC80EFBC8C30303DE585B35C6E2020202069662028737461746520213D205C2230315C2220262620737461746520213D205C2230305C2229207B5C6E20202020202072657475726E205C225C223B202F2F20E697A0E69588E78AB6E68081EFBC8CE8BF94E59B9EE7A9BA5C6E202020207D5C6E5C6E202020202F2F20E695B0E68DAEE58CBAEFBC9AE68EA7E588B6E7B1BBE59E8B283031292BE79BAEE6A087E78AB6E680815C6E202020207661722064617461486578203D205C2230315C22202B2073746174653B5C6E2020202076617220646174614C656E203D20646174614865782E6C656E6774682829202F20323B202F2F20E695B0E68DAEE995BFE5BAA6EFBC88E5AD97E88A82E695B0EFBC895C6E2020202076617220636D64436F6465203D205C2230335C223B202F2F20E68EA7E588B6E68C87E4BBA4E591BDE4BBA4E7A0815C6E5C6E202020202F2F20E68BBCE68EA5E5AE8CE695B4E68AA5E69687EFBC88E697A0E6A0A1E9AA8CE5928CEFBC895C6E20202020766172206672616D65203D205C22413541355C22202B205C6E202020202020202020202020202020206465766963654964202B205C6E20202020202020202020202020202020636D64436F6465202B205C6E20202020202020202020202020202020496E74656765722E746F486578537472696E6728646174614C656E29202B202F2F20E695B0E68DAEE995BFE5BAA6EFBC8831E4BD8D3136E8BF9BE588B6EFBC895C6E2020202020202020202020202020202064617461486578202B205C6E202020202020202020202020202020205C22354135415C223B5C6E5C6E2020202072657475726E206672616D652E746F55707065724361736528293B202F2F20E8BDACE4B8BAE5A4A7E586993136E8BF9BE588B65C6E20207D5C6E5C6E202072657475726E205C225C223B202F2F20E4B88DE694AFE68C81E79A84E68C87E4BBA45C6E7D3B5C6E5C6E72657475726E207072654465636F6465285C224135413530303031303130373031303544433038463030344230354135415C22295C6E2F2FE5B19EE680A7E4B88AE68AA5E68AA5E696875C6E2F2F2072657475726E206465636F64652827413541353030303130313037303130354443303846303034423037413541354127293B5C6E5C6E2F2FE8BF87E8BDBDE4BA8BE4BBB6E68AA5E696875C6E2F2F2072657475726E206465636F6465285C224135413530303031303230333031303442304633354135415C22295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C2264657669636549645C223A205C22303030315C222C5C2266756E6374696F6E5C223A205C227377697463685C222C5C22646174615C223A207B205C2273746174655C223A205C2230315C22207D7D27295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C226D657373616765547970655C223A5C2246554E4354494F4E535C222C5C2266756E6374696F6E5C223A5C227377697463685C222C5C22646174615C223A7B5C2264657669636549645C223A5C2230303031303130375C222C5C2273746174655C223A5C2230315C227D7D2729222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E5B08FE89891E88F87E68F92E5BAA7222C0A20202263726561746554696D6522203A20313735333638323439333839382C0A20202275706461746554696D6522203A20313735333736343234333934382C0A2020226C6F636B22203A202230222C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A2022363838333161316633386663313036613864616333633133222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20225B5C6E202020207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B5C6E2020202020202020202020205C22706F77657253746174655C223A205C2230315C222C5C6E2020202020202020202020205C2263757272656E745C223A205C2231352E30305C222C5C6E2020202020202020202020205C22766F6C746167655C223A205C223232382E385C222C5C6E2020202020202020202020205C22706F7765725C223A205C22313230305C225C6E20202020202020207D2C5C6E20202020202020205C2264657669636549645C223A205C22303030315C222C5C6E20202020202020205C22746370456E636F64655C223A205C224845585C222C5C6E20202020202020205C227265706C795061796C6F61645C223A205C22373237323730363332433637363537343633373337315C225C6E202020207D5C6E5D222C0A2020226465736372697074696F6E22203A20224149E887AAE58AA8E7949FE68890E79A84E8A7A3E69E90E5928CE58D8FE8AEAE222C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('6ead3277d72e4740bbe5e2a29c2672f4', 1753764264195, NULL, 'api', '小蘑菇插座', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223665616433323737643732653437343062626535653261323963323637326634222C0A20202273637269707422203A2022696D706F7274206C6F673B5C6E5C6E2F2F203136E8BF9BE588B6E8BDAC3130E8BF9BE588B6E695B0E5AD975C6E76617220686578546F496E74203D20686578203D3E207B5C6E202072657475726E20496E74656765722E7061727365496E74286865782C203136293B5C6E7D3B5C6E2F2F20E9A284E8A7A3E7A081EFBC8CE8A7A3E69E90E4B88AE68AA5E79A84E8AEBEE5A487E7BC96E58FB72064657669636549645C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D207B7D5C6E20202020766172207061796C6F6164486578203D207061796C6F61642E746F5570706572436173652829202F2F20E8BDACE4B8BAE5A4A7E586995C6E202020202F2F20E6A0A1E9AA8CE68AA5E69687E995BFE5BAA6E5928CE5B8A7E5A4B45C6E20202020696620287061796C6F61644865782E6C656E6774682829203E3D203138202626207061796C6F61644865782E737562737472696E6728302C203429203D3D3D205C22413541355C2229207B5C6E20202020202020202F2F20E4BB8EE7ACAC35E4BD8DE5BC80E5A78BE58F9634E5AD97E88A82EFBC8838E4B8AAE5AD97E7ACA6EFBC89E4BD9CE4B8BA2064657669636549645C6E2020202020202020726573756C742E6465766963654964203D207061796C6F61644865782E737562737472696E6728342C203132295C6E202020207D5C6E2020202072657475726E20726573756C745C6E7D5C6E5C6E766172206465636F6465203D287061796C6F61642C636F6E7465787429203D3E207B5C6E20206C6F672E696E666F285C22E8BF9BE585A5E7BC96E8A7A3E7A0812C7061796C6F61643D7B7D2C636F6E746578743D7B7D5C222C7061796C6F61642C636F6E74657874295C6E202076617220726573756C74203D205B5D3B5C6E2020766172207061796C6F6164486578203D7061796C6F61642E746F55707065724361736528293B5C6E20207661722070726F706572746965734F626A203D207B205C226D657373616765547970655C223A205C2250524F504552544945535C222C205C2270726F706572746965735C223A207B7D207D3B5C6E2020766172206576656E744F626A203D207B205C226D657373616765547970655C223A205C224556454E545C222C205C226576656E745C223A205C225C222C205C22646174615C223A207B7D207D3B5C6E5C6E20202F2F20E9AA8CE8AF81E5B8A7E5A4B4E5B8A7E5B0BE5C6E2020696620287061796C6F61644865782E737562737472696E6728302C20342920213D205C22413541355C22207C7C207061796C6F61644865782E737562737472696E67287061796C6F61644865782E6C656E6774682829202D20342920213D205C22354135415C2229207B5C6E2020202072657475726E206A736F6E546F537472285B7B205C226572726F725C223A205C22E697A0E69588E5B8A7E6A0BCE5BC8F5C22207D5D293B5C6E20207D5C6E5C6E20202F2F20E68F90E58F96E6A0B8E5BF83E5AD97E6AEB55C6E2020766172206465766963654964203D207061796C6F61644865782E737562737472696E6728342C2038293B202F2F20E8AEBEE5A4874944EFBC8834E5AD97E88A82EFBC895C6E202076617220636D64436F6465203D207061796C6F61644865782E737562737472696E6728382C203130293B202F2F20E591BDE4BBA4E7A081EFBC8831E5AD97E88A82EFBC895C6E202076617220646174614C656E203D20686578546F496E74287061796C6F61644865782E737562737472696E672831302C20313229293B202F2F20E695B0E68DAEE995BFE5BAA65C6E20207661722064617461486578203D207061796C6F61644865782E737562737472696E672831322C203132202B20646174614C656E202A2032293B202F2F20E695B0E68DAEE58CBA5C6E202076617220636865636B73756D203D207061796C6F61644865782E737562737472696E67283132202B20646174614C656E202A20322C203134202B20646174614C656E202A2032293B202F2F20E6A0A1E9AA8CE5928C5C6E5C6E20202F2F20E8AEBEE5A4874944E5AD98E585A5E68980E69C89E5AFB9E8B1A15C6E202070726F706572746965734F626A2E6465766963654964203D2064657669636549643B5C6E20206576656E744F626A2E6465766963654964203D2064657669636549643B5C6E20202F2FE9AA8CE8AF81E696B0E58685E5AEB95C6E202070726F706572746965734F626A2E636F6E746578743D636F6E746578743B5C6E202070726F706572746965734F626A2E746370456E636F6465203D2027484558273B5C6E202070726F706572746965734F626A2E7265706C795061796C6F6164203D202737323732373036333243363736353734363337333731275C6E20202F2F20312E20E5B19EE680A7E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813031EFBC895C6E202069662028636D64436F6465203D3D205C2230315C2220262620646174614C656E203D3D203729207B5C6E202020202F2F20E8A7A3E69E90E5BC80E585B3E78AB6E68081EFBC8830313DE5BC80EFBC8C30303DE585B3EFBC895C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F7765725374617465203D20646174614865782E737562737472696E6728302C203229203D3D205C2230315C22203F205C2230315C22203A205C2230305C223B5C6E202020202F2F20E8A7A3E69E90E794B5E6B581EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E303141EFBC895C6E202020207661722063757272656E74486578203D20646174614865782E737562737472696E6728322C2036293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E63757272656E74203D2028686578546F496E742863757272656E7448657829202A20302E3031292E746F46697865642832293B5C6E202020202F2F20E8A7A3E69E90E794B5E58E8BEFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E3156EFBC895C6E2020202076617220766F6C74616765486578203D20646174614865782E737562737472696E6728362C203130293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E766F6C74616765203D2028686578546F496E7428766F6C7461676548657829202A20302E31292E746F46697865642831293B5C6E202020202F2F20E8A7A3E69E90E58A9FE78E87EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D3157EFBC895C6E2020202076617220706F776572486578203D20646174614865782E737562737472696E672831302C203134293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F776572203D20686578546F496E7428706F776572486578292E746F537472696E6728293B5C6E202020202F2F20E58AA0E585A5E7BB93E69E9CE99B865C6E20202020726573756C742E707573682870726F706572746965734F626A293B5C6E20207D5C6E5C6E20202F2F20322E20E4BA8BE4BBB6E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813032EFBC895C6E202069662028636D64436F6465203D3D205C2230325C2220262620646174614C656E203E3D203329207B5C6E202020202F2F20E4BA8BE4BBB6E7B1BBE59E8BEFBC8830313DE8BF87E8BDBDEFBC8C30323DE8BF87E58E8BEFBC8C30333DE4B88AE7BABFEFBC8C30343DE4B88BE7BABFEFBC895C6E20202020766172206576656E7454797065203D20646174614865782E737562737472696E6728302C2032293B5C6E20202020696620286576656E7454797065203D3D205C2230315C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F7665726C6F61645C223B5C6E2020202020206576656E744F626A2E646174612E6F7665726C6F6164203D20686578546F496E7428646174614865782E737562737472696E6728322C20362929202B205C22575C223B202F2F20E8BF87E8BDBDE58A9FE78E875C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230335C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F6E6C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F6E6C696E65203D205C22E8AEBEE5A487E4B88AE7BABF5C223B5C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230345C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F66666C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F66666C696E65203D205C22E8AEBEE5A487E4B88BE7BABF5C223B5C6E202020207D5C6E20202020726573756C742E70757368286576656E744F626A293B5C6E20207D5C6E5C6E20202F2F20332E20E5938DE5BA94E68AA5E69687EFBC88E591BDE4BBA4E7A0813034EFBC895C6E202069662028636D64436F6465203D3D205C2230345C2220262620646174614C656E203D3D203129207B5C6E20202020766172207265706C794F626A203D207B5C6E2020202020205C226D657373616765547970655C223A205C225245504C595C222C5C6E2020202020205C2266756E6374696F6E5C223A205C227377697463685C222C5C6E2020202020205C22646174615C223A207B205C22726573756C745C223A2064617461486578203D3D205C2230305C22203F205C22737563636573735C22203A205C226661696C5C22207D5C6E202020207D3B5C6E202020207265706C794F626A2E6465766963654964203D2064657669636549643B5C6E20202020726573756C742E70757368287265706C794F626A293B5C6E20207D5C6E5C6E202072657475726E206A736F6E546F53747228726573756C74293B5C6E7D3B5C6E5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020766172206F626A203D20746F4A736F6E287061796C6F6164293B5C6E2020766172206465766963654964203D206F626A2E646174612E64657669636549643B202F2F20E8AEBEE5A4874944EFBC8834E4BD8D3136E8BF9BE588B6EFBC8CE5A6825C22303030315C22EFBC895C6E20207661722066756E63203D206F626A2E66756E6374696F6E3B5C6E202076617220706172616D73203D206F626A2E646174613B5C6E5C6E20202F2F20E68EA7E588B6E5BC80E585B3EFBC8866756E6374696F6E3D737769746368EFBC895C6E20206966202866756E63203D3D205C227377697463685C2229207B5C6E20202020766172207374617465203D20706172616D732E73746174653B202F2F20E79BAEE6A087E78AB6E68081EFBC9A30313DE5BC80EFBC8C30303DE585B35C6E2020202069662028737461746520213D205C2230315C2220262620737461746520213D205C2230305C2229207B5C6E20202020202072657475726E205C225C223B202F2F20E697A0E69588E78AB6E68081EFBC8CE8BF94E59B9EE7A9BA5C6E202020207D5C6E5C6E202020202F2F20E695B0E68DAEE58CBAEFBC9AE68EA7E588B6E7B1BBE59E8B283031292BE79BAEE6A087E78AB6E680815C6E202020207661722064617461486578203D205C2230315C22202B2073746174653B5C6E2020202076617220646174614C656E203D20646174614865782E6C656E6774682829202F20323B202F2F20E695B0E68DAEE995BFE5BAA6EFBC88E5AD97E88A82E695B0EFBC895C6E2020202076617220636D64436F6465203D205C2230335C223B202F2F20E68EA7E588B6E68C87E4BBA4E591BDE4BBA4E7A0815C6E5C6E202020202F2F20E68BBCE68EA5E5AE8CE695B4E68AA5E69687EFBC88E697A0E6A0A1E9AA8CE5928CEFBC895C6E20202020766172206672616D65203D205C22413541355C22202B205C6E202020202020202020202020202020206465766963654964202B205C6E20202020202020202020202020202020636D64436F6465202B205C6E20202020202020202020202020202020496E74656765722E746F486578537472696E6728646174614C656E29202B202F2F20E695B0E68DAEE995BFE5BAA6EFBC8831E4BD8D3136E8BF9BE588B6EFBC895C6E2020202020202020202020202020202064617461486578202B205C6E202020202020202020202020202020205C22354135415C223B5C6E5C6E2020202072657475726E206672616D652E746F55707065724361736528293B202F2F20E8BDACE4B8BAE5A4A7E586993136E8BF9BE588B65C6E20207D5C6E5C6E202072657475726E205C225C223B202F2F20E4B88DE694AFE68C81E79A84E68C87E4BBA45C6E7D3B5C6E5C6E2F2F2072657475726E207072654465636F6465285C224135413530303031303130373031303544433038463030344230354135415C22295C6E2F2FE5B19EE680A7E4B88AE68AA5E68AA5E696875C6E72657475726E206465636F64652827413541353030303130313037303130354443303846303034423037413541354127293B5C6E5C6E2F2FE8BF87E8BDBDE4BA8BE4BBB6E68AA5E696875C6E2F2F2072657475726E206465636F6465285C224135413530303031303230333031303442304633354135415C22295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C2264657669636549645C223A205C22303030315C222C5C2266756E6374696F6E5C223A205C227377697463685C222C5C22646174615C223A207B205C2273746174655C223A205C2230315C22207D7D27295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C226D657373616765547970655C223A5C2246554E4354494F4E535C222C5C2266756E6374696F6E5C223A5C227377697463685C222C5C22646174615C223A7B5C2264657669636549645C223A5C2230303031303130375C222C5C2273746174655C223A5C2230315C227D7D2729222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E5B08FE89891E88F87E68F92E5BAA7222C0A20202263726561746554696D6522203A20313735333638323439333839382C0A20202275706461746554696D6522203A20313735333736343236343138302C0A2020226C6F636B22203A202230222C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A2022363838333161316633386663313036613864616333633133222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20227B5C6E202020205C2264657669636549645C223A205C2230303031303130375C225C6E7D222C0A2020226465736372697074696F6E22203A20224149E887AAE58AA8E7949FE68890E79A84E8A7A3E69E90E5928CE58D8FE8AEAE222C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('6ead3277d72e4740bbe5e2a29c2672f4', 1755239952196, NULL, 'api', '小蘑菇插座', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223665616433323737643732653437343062626535653261323963323637326634222C0A20202273637269707422203A2022696D706F7274206C6F673B5C6E5C6E2F2F203136E8BF9BE588B6E8BDAC3130E8BF9BE588B6E695B0E5AD975C6E76617220686578546F496E74203D20686578203D3E207B5C6E202072657475726E20496E74656765722E7061727365496E74286865782C203136293B5C6E7D3B5C6E2F2F20E9A284E8A7A3E7A081EFBC8CE8A7A3E69E90E4B88AE68AA5E79A84E8AEBEE5A487E7BC96E58FB72064657669636549645C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D207B7D5C6E20202020766172207061796C6F6164486578203D207061796C6F61642E746F5570706572436173652829202F2F20E8BDACE4B8BAE5A4A7E586995C6E202020202F2F20E6A0A1E9AA8CE68AA5E69687E995BFE5BAA6E5928CE5B8A7E5A4B45C6E20202020696620287061796C6F61644865782E6C656E6774682829203E3D203138202626207061796C6F61644865782E737562737472696E6728302C203429203D3D3D205C22413541355C2229207B5C6E20202020202020202F2F20E4BB8EE7ACAC35E4BD8DE5BC80E5A78BE58F9634E5AD97E88A82EFBC8838E4B8AAE5AD97E7ACA6EFBC89E4BD9CE4B8BA2064657669636549645C6E2020202020202020726573756C742E6465766963654964203D207061796C6F61644865782E737562737472696E6728342C203132295C6E202020207D5C6E2020202072657475726E20726573756C745C6E7D5C6E5C6E766172206465636F6465203D287061796C6F61642C636F6E7465787429203D3E207B5C6E20206C6F672E696E666F285C22E8BF9BE585A5E7BC96E8A7A3E7A0812C7061796C6F61643D7B7D2C636F6E746578743D7B7D5C222C7061796C6F61642C636F6E74657874295C6E202076617220726573756C74203D205B5D3B5C6E2020766172207061796C6F6164486578203D7061796C6F61642E746F55707065724361736528293B5C6E20207661722070726F706572746965734F626A203D207B205C226D657373616765547970655C223A205C2250524F504552544945535C222C205C2270726F706572746965735C223A207B7D207D3B5C6E2020766172206576656E744F626A203D207B205C226D657373616765547970655C223A205C224556454E545C222C205C226576656E745C223A205C225C222C205C22646174615C223A207B7D207D3B5C6E5C6E20202F2F20E9AA8CE8AF81E5B8A7E5A4B4E5B8A7E5B0BE5C6E2020696620287061796C6F61644865782E737562737472696E6728302C20342920213D205C22413541355C22207C7C207061796C6F61644865782E737562737472696E67287061796C6F61644865782E6C656E6774682829202D20342920213D205C22354135415C2229207B5C6E2020202072657475726E206A736F6E546F537472285B7B205C226572726F725C223A205C22E697A0E69588E5B8A7E6A0BCE5BC8F5C22207D5D293B5C6E20207D5C6E5C6E20202F2F20E68F90E58F96E6A0B8E5BF83E5AD97E6AEB55C6E2020766172206465766963654964203D207061796C6F61644865782E737562737472696E6728342C2038293B202F2F20E8AEBEE5A4874944EFBC8834E5AD97E88A82EFBC895C6E202076617220636D64436F6465203D207061796C6F61644865782E737562737472696E6728382C203130293B202F2F20E591BDE4BBA4E7A081EFBC8831E5AD97E88A82EFBC895C6E202076617220646174614C656E203D20686578546F496E74287061796C6F61644865782E737562737472696E672831302C20313229293B202F2F20E695B0E68DAEE995BFE5BAA65C6E20207661722064617461486578203D207061796C6F61644865782E737562737472696E672831322C203132202B20646174614C656E202A2032293B202F2F20E695B0E68DAEE58CBA5C6E202076617220636865636B73756D203D207061796C6F61644865782E737562737472696E67283132202B20646174614C656E202A20322C203134202B20646174614C656E202A2032293B202F2F20E6A0A1E9AA8CE5928C5C6E5C6E20202F2F20E8AEBEE5A4874944E5AD98E585A5E68980E69C89E5AFB9E8B1A15C6E202070726F706572746965734F626A2E6465766963654964203D2064657669636549643B5C6E20206576656E744F626A2E6465766963654964203D2064657669636549643B5C6E20202F2FE9AA8CE8AF81E696B0E58685E5AEB95C6E202070726F706572746965734F626A2E636F6E746578743D636F6E746578743B5C6E202070726F706572746965734F626A2E746370456E636F6465203D2027484558273B5C6E202070726F706572746965734F626A2E7265706C795061796C6F6164203D202737323732373036333243363736353734363337333731275C6E20202F2F20312E20E5B19EE680A7E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813031EFBC895C6E202069662028636D64436F6465203D3D205C2230315C2220262620646174614C656E203D3D203729207B5C6E202020202F2F20E8A7A3E69E90E5BC80E585B3E78AB6E68081EFBC8830313DE5BC80EFBC8C30303DE585B3EFBC895C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F7765725374617465203D20646174614865782E737562737472696E6728302C203229203D3D205C2230315C22203F205C2230315C22203A205C2230305C223B5C6E202020202F2F20E8A7A3E69E90E794B5E6B581EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E303141EFBC895C6E202020207661722063757272656E74486578203D20646174614865782E737562737472696E6728322C2036293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E63757272656E74203D2028686578546F496E742863757272656E7448657829202A20302E3031292E746F46697865642832293B5C6E202020202F2F20E8A7A3E69E90E794B5E58E8BEFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E3156EFBC895C6E2020202076617220766F6C74616765486578203D20646174614865782E737562737472696E6728362C203130293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E766F6C74616765203D2028686578546F496E7428766F6C7461676548657829202A20302E31292E746F46697865642831293B5C6E202020202F2F20E8A7A3E69E90E58A9FE78E87EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D3157EFBC895C6E2020202076617220706F776572486578203D20646174614865782E737562737472696E672831302C203134293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F776572203D20686578546F496E7428706F776572486578292E746F537472696E6728293B5C6E202020202F2F20E58AA0E585A5E7BB93E69E9CE99B865C6E20202020726573756C742E707573682870726F706572746965734F626A293B5C6E20207D5C6E5C6E20202F2F20322E20E4BA8BE4BBB6E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813032EFBC895C6E202069662028636D64436F6465203D3D205C2230325C2220262620646174614C656E203E3D203329207B5C6E202020202F2F20E4BA8BE4BBB6E7B1BBE59E8BEFBC8830313DE8BF87E8BDBDEFBC8C30323DE8BF87E58E8BEFBC8C30333DE4B88AE7BABFEFBC8C30343DE4B88BE7BABFEFBC895C6E20202020766172206576656E7454797065203D20646174614865782E737562737472696E6728302C2032293B5C6E20202020696620286576656E7454797065203D3D205C2230315C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F7665726C6F61645C223B5C6E2020202020206576656E744F626A2E646174612E6F7665726C6F6164203D20686578546F496E7428646174614865782E737562737472696E6728322C20362929202B205C22575C223B202F2F20E8BF87E8BDBDE58A9FE78E875C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230335C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F6E6C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F6E6C696E65203D205C22E8AEBEE5A487E4B88AE7BABF5C223B5C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230345C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F66666C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F66666C696E65203D205C22E8AEBEE5A487E4B88BE7BABF5C223B5C6E202020207D5C6E20202020726573756C742E70757368286576656E744F626A293B5C6E20207D5C6E5C6E20202F2F20332E20E5938DE5BA94E68AA5E69687EFBC88E591BDE4BBA4E7A0813034EFBC895C6E202069662028636D64436F6465203D3D205C2230345C2220262620646174614C656E203D3D203129207B5C6E20202020766172207265706C794F626A203D207B5C6E2020202020205C226D657373616765547970655C223A205C225245504C595C222C5C6E2020202020205C2266756E6374696F6E5C223A205C227377697463685C222C5C6E2020202020205C22646174615C223A207B205C22726573756C745C223A2064617461486578203D3D205C2230305C22203F205C22737563636573735C22203A205C226661696C5C22207D5C6E202020207D3B5C6E202020207265706C794F626A2E6465766963654964203D2064657669636549643B5C6E20202020726573756C742E70757368287265706C794F626A293B5C6E20207D5C6E5C6E202072657475726E206A736F6E546F53747228726573756C74293B5C6E7D3B5C6E5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020766172206F626A203D20746F4A736F6E287061796C6F6164293B5C6E2020766172206465766963654964203D206F626A2E646174612E64657669636549643B202F2F20E8AEBEE5A4874944EFBC8834E4BD8D3136E8BF9BE588B6EFBC8CE5A6825C22303030315C22EFBC895C6E20207661722066756E63203D206F626A2E66756E6374696F6E3B5C6E202076617220706172616D73203D206F626A2E646174613B5C6E5C6E20202F2F20E68EA7E588B6E5BC80E585B3EFBC8866756E6374696F6E3D737769746368EFBC895C6E20206966202866756E63203D3D205C227377697463685C2229207B5C6E20202020766172207374617465203D20706172616D732E73746174653B202F2F20E79BAEE6A087E78AB6E68081EFBC9A30313DE5BC80EFBC8C30303DE585B35C6E2020202069662028737461746520213D205C2230315C2220262620737461746520213D205C2230305C2229207B5C6E20202020202072657475726E205C225C223B202F2F20E697A0E69588E78AB6E68081EFBC8CE8BF94E59B9EE7A9BA5C6E202020207D5C6E5C6E202020202F2F20E695B0E68DAEE58CBAEFBC9AE68EA7E588B6E7B1BBE59E8B283031292BE79BAEE6A087E78AB6E680815C6E202020207661722064617461486578203D205C2230315C22202B2073746174653B5C6E2020202076617220646174614C656E203D20646174614865782E6C656E6774682829202F20323B202F2F20E695B0E68DAEE995BFE5BAA6EFBC88E5AD97E88A82E695B0EFBC895C6E2020202076617220636D64436F6465203D205C2230335C223B202F2F20E68EA7E588B6E68C87E4BBA4E591BDE4BBA4E7A0815C6E5C6E202020202F2F20E68BBCE68EA5E5AE8CE695B4E68AA5E69687EFBC88E697A0E6A0A1E9AA8CE5928CEFBC895C6E20202020766172206672616D65203D205C22413541355C22202B205C6E202020202020202020202020202020206465766963654964202B205C6E20202020202020202020202020202020636D64436F6465202B205C6E20202020202020202020202020202020496E74656765722E746F486578537472696E6728646174614C656E29202B202F2F20E695B0E68DAEE995BFE5BAA6EFBC8831E4BD8D3136E8BF9BE588B6EFBC895C6E2020202020202020202020202020202064617461486578202B205C6E202020202020202020202020202020205C22354135415C223B5C6E5C6E2020202072657475726E206672616D652E746F55707065724361736528293B202F2F20E8BDACE4B8BAE5A4A7E586993136E8BF9BE588B65C6E20207D5C6E5C6E202072657475726E205C225C223B202F2F20E4B88DE694AFE68C81E79A84E68C87E4BBA45C6E7D3B5C6E5C6E2F2F2072657475726E207072654465636F6465285C224135413530303031303130373031303544433038463030344230354135415C22295C6E2F2FE5B19EE680A7E4B88AE68AA5E68AA5E696875C6E72657475726E206465636F64652827413541353030303130313037303130354443303846303034423037413541354127293B5C6E5C6E2F2FE8BF87E8BDBDE4BA8BE4BBB6E68AA5E696875C6E2F2F2072657475726E206465636F6465285C224135413530303031303230333031303442304633354135415C22295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C2264657669636549645C223A205C22303030315C222C5C2266756E6374696F6E5C223A205C227377697463685C222C5C22646174615C223A207B205C2273746174655C223A205C2230315C22207D7D27295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C226D657373616765547970655C223A5C2246554E4354494F4E535C222C5C2266756E6374696F6E5C223A5C227377697463685C222C5C22646174615C223A7B5C2264657669636549645C223A5C2230303031303130375C222C5C2273746174655C223A5C2230315C227D7D2729222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E5B08FE89891E88F87E68F92E5BAA7222C0A20202263726561746554696D6522203A20313735333638323439333839382C0A20202275706461746554696D6522203A20313735353233393935323137382C0A2020226C6F636B22203A202230222C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A2022363838333161316633386663313036613864616333633133222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20227B5C6E202020205C2264657669636549645C223A205C2230303031303130375C225C6E7D222C0A2020226465736372697074696F6E22203A20224149E887AAE58AA8E7949FE68890E79A84E8A7A3E69E90E5928CE58D8FE8AEAE222C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('7a98d2939f3344ab8641d4d667c2c262', 1755090411542, NULL, 'api-group', '123', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20223761393864323933396633333434616238363431643464363637633263323632222C0A2020226E616D6522203A2022313233222C0A2020227479706522203A2022617069222C0A202022706172656E74496422203A202230222C0A2020227061746822203A20223132222C0A20202263726561746554696D6522203A20313735353039303431313531322C0A20202275706461746554696D6522203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A206E756C6C2C0A202022706174687322203A205B205D2C0A2020226F7074696F6E7322203A205B205D0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('b5723ec5a8e24bdaa647e60a1dc82638', 1754039119888, NULL, 'api', '小蘑菇插座', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20226235373233656335613865323462646161363437653630613164633832363338222C0A20202273637269707422203A2022696D706F7274206C6F673B5C6E5C6E2F2F203136E8BF9BE588B6E8BDAC3130E8BF9BE588B6E695B0E5AD975C6E76617220686578546F496E74203D20686578203D3E207B5C6E202072657475726E20496E74656765722E7061727365496E74286865782C203136293B5C6E7D3B5C6E2F2F20E9A284E8A7A3E7A081EFBC8CE8A7A3E69E90E4B88AE68AA5E79A84E8AEBEE5A487E7BC96E58FB72064657669636549645C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D207B7D5C6E20202020766172207061796C6F6164486578203D207061796C6F61642E746F5570706572436173652829202F2F20E8BDACE4B8BAE5A4A7E586995C6E202020202F2F20E6A0A1E9AA8CE68AA5E69687E995BFE5BAA6E5928CE5B8A7E5A4B45C6E20202020696620287061796C6F61644865782E6C656E6774682829203E3D203138202626207061796C6F61644865782E737562737472696E6728302C203429203D3D3D205C22413541355C2229207B5C6E20202020202020202F2F20E4BB8EE7ACAC35E4BD8DE5BC80E5A78BE58F9634E5AD97E88A82EFBC8838E4B8AAE5AD97E7ACA6EFBC89E4BD9CE4B8BA2064657669636549645C6E2020202020202020726573756C742E6465766963654964203D207061796C6F61644865782E737562737472696E6728342C203132295C6E202020207D5C6E2020202072657475726E20726573756C745C6E7D5C6E5C6E766172206465636F6465203D287061796C6F61642C636F6E7465787429203D3E207B5C6E20206C6F672E696E666F285C22E8BF9BE585A5E7BC96E8A7A3E7A0812C7061796C6F61643D7B7D2C636F6E746578743D7B7D5C222C7061796C6F61642C636F6E74657874295C6E202076617220726573756C74203D205B5D3B5C6E2020766172207061796C6F6164486578203D7061796C6F61642E746F55707065724361736528293B5C6E20207661722070726F706572746965734F626A203D207B205C226D657373616765547970655C223A205C2250524F504552544945535C222C205C2270726F706572746965735C223A207B7D207D3B5C6E2020766172206576656E744F626A203D207B205C226D657373616765547970655C223A205C224556454E545C222C205C226576656E745C223A205C225C222C205C22646174615C223A207B7D207D3B5C6E5C6E20202F2F20E9AA8CE8AF81E5B8A7E5A4B4E5B8A7E5B0BE5C6E2020696620287061796C6F61644865782E737562737472696E6728302C20342920213D205C22413541355C22207C7C207061796C6F61644865782E737562737472696E67287061796C6F61644865782E6C656E6774682829202D20342920213D205C22354135415C2229207B5C6E2020202072657475726E206A736F6E546F537472285B7B205C226572726F725C223A205C22E697A0E69588E5B8A7E6A0BCE5BC8F5C22207D5D293B5C6E20207D5C6E5C6E20202F2F20E68F90E58F96E6A0B8E5BF83E5AD97E6AEB55C6E2020766172206465766963654964203D207061796C6F61644865782E737562737472696E6728342C2038293B202F2F20E8AEBEE5A4874944EFBC8834E5AD97E88A82EFBC895C6E202076617220636D64436F6465203D207061796C6F61644865782E737562737472696E6728382C203130293B202F2F20E591BDE4BBA4E7A081EFBC8831E5AD97E88A82EFBC895C6E202076617220646174614C656E203D20686578546F496E74287061796C6F61644865782E737562737472696E672831302C20313229293B202F2F20E695B0E68DAEE995BFE5BAA65C6E20207661722064617461486578203D207061796C6F61644865782E737562737472696E672831322C203132202B20646174614C656E202A2032293B202F2F20E695B0E68DAEE58CBA5C6E202076617220636865636B73756D203D207061796C6F61644865782E737562737472696E67283132202B20646174614C656E202A20322C203134202B20646174614C656E202A2032293B202F2F20E6A0A1E9AA8CE5928C5C6E5C6E20202F2F20E8AEBEE5A4874944E5AD98E585A5E68980E69C89E5AFB9E8B1A15C6E202070726F706572746965734F626A2E6465766963654964203D2064657669636549643B5C6E20206576656E744F626A2E6465766963654964203D2064657669636549643B5C6E20202F2FE9AA8CE8AF81E696B0E58685E5AEB95C6E202070726F706572746965734F626A2E636F6E746578743D636F6E746578743B5C6E202070726F706572746965734F626A2E746370456E636F6465203D2027484558273B5C6E202070726F706572746965734F626A2E7265706C795061796C6F6164203D202737323732373036333243363736353734363337333731275C6E20202F2F20312E20E5B19EE680A7E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813031EFBC895C6E202069662028636D64436F6465203D3D205C2230315C2220262620646174614C656E203D3D203729207B5C6E202020202F2F20E8A7A3E69E90E5BC80E585B3E78AB6E68081EFBC8830313DE5BC80EFBC8C30303DE585B3EFBC895C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F7765725374617465203D20646174614865782E737562737472696E6728302C203229203D3D205C2230315C22203F205C2230315C22203A205C2230305C223B5C6E202020202F2F20E8A7A3E69E90E794B5E6B581EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E303141EFBC895C6E202020207661722063757272656E74486578203D20646174614865782E737562737472696E6728322C2036293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E63757272656E74203D2028686578546F496E742863757272656E7448657829202A20302E3031292E746F46697865642832293B5C6E202020202F2F20E8A7A3E69E90E794B5E58E8BEFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E3156EFBC895C6E2020202076617220766F6C74616765486578203D20646174614865782E737562737472696E6728362C203130293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E766F6C74616765203D2028686578546F496E7428766F6C7461676548657829202A20302E31292E746F46697865642831293B5C6E202020202F2F20E8A7A3E69E90E58A9FE78E87EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D3157EFBC895C6E2020202076617220706F776572486578203D20646174614865782E737562737472696E672831302C203134293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F776572203D20686578546F496E7428706F776572486578292E746F537472696E6728293B5C6E202020202F2F20E58AA0E585A5E7BB93E69E9CE99B865C6E20202020726573756C742E707573682870726F706572746965734F626A293B5C6E20207D5C6E5C6E20202F2F20322E20E4BA8BE4BBB6E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813032EFBC895C6E202069662028636D64436F6465203D3D205C2230325C2220262620646174614C656E203E3D203329207B5C6E202020202F2F20E4BA8BE4BBB6E7B1BBE59E8BEFBC8830313DE8BF87E8BDBDEFBC8C30323DE8BF87E58E8BEFBC8C30333DE4B88AE7BABFEFBC8C30343DE4B88BE7BABFEFBC895C6E20202020766172206576656E7454797065203D20646174614865782E737562737472696E6728302C2032293B5C6E20202020696620286576656E7454797065203D3D205C2230315C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F7665726C6F61645C223B5C6E2020202020206576656E744F626A2E646174612E6F7665726C6F6164203D20686578546F496E7428646174614865782E737562737472696E6728322C20362929202B205C22575C223B202F2F20E8BF87E8BDBDE58A9FE78E875C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230335C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F6E6C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F6E6C696E65203D205C22E8AEBEE5A487E4B88AE7BABF5C223B5C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230345C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F66666C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F66666C696E65203D205C22E8AEBEE5A487E4B88BE7BABF5C223B5C6E202020207D5C6E20202020726573756C742E70757368286576656E744F626A293B5C6E20207D5C6E5C6E20202F2F20332E20E5938DE5BA94E68AA5E69687EFBC88E591BDE4BBA4E7A0813034EFBC895C6E202069662028636D64436F6465203D3D205C2230345C2220262620646174614C656E203D3D203129207B5C6E20202020766172207265706C794F626A203D207B5C6E2020202020205C226D657373616765547970655C223A205C225245504C595C222C5C6E2020202020205C2266756E6374696F6E5C223A205C227377697463685C222C5C6E2020202020205C22646174615C223A207B205C22726573756C745C223A2064617461486578203D3D205C2230305C22203F205C22737563636573735C22203A205C226661696C5C22207D5C6E202020207D3B5C6E202020207265706C794F626A2E6465766963654964203D2064657669636549643B5C6E20202020726573756C742E70757368287265706C794F626A293B5C6E20207D5C6E5C6E202072657475726E206A736F6E546F53747228726573756C74293B5C6E7D3B5C6E5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020766172206F626A203D20746F4A736F6E287061796C6F6164293B5C6E2020766172206465766963654964203D206F626A2E646174612E64657669636549643B202F2F20E8AEBEE5A4874944EFBC8834E4BD8D3136E8BF9BE588B6EFBC8CE5A6825C22303030315C22EFBC895C6E20207661722066756E63203D206F626A2E66756E6374696F6E3B5C6E202076617220706172616D73203D206F626A2E646174613B5C6E5C6E20202F2F20E68EA7E588B6E5BC80E585B3EFBC8866756E6374696F6E3D737769746368EFBC895C6E20206966202866756E63203D3D205C227377697463685C2229207B5C6E20202020766172207374617465203D20706172616D732E73746174653B202F2F20E79BAEE6A087E78AB6E68081EFBC9A30313DE5BC80EFBC8C30303DE585B35C6E2020202069662028737461746520213D205C2230315C2220262620737461746520213D205C2230305C2229207B5C6E20202020202072657475726E205C225C223B202F2F20E697A0E69588E78AB6E68081EFBC8CE8BF94E59B9EE7A9BA5C6E202020207D5C6E5C6E202020202F2F20E695B0E68DAEE58CBAEFBC9AE68EA7E588B6E7B1BBE59E8B283031292BE79BAEE6A087E78AB6E680815C6E202020207661722064617461486578203D205C2230315C22202B2073746174653B5C6E2020202076617220646174614C656E203D20646174614865782E6C656E6774682829202F20323B202F2F20E695B0E68DAEE995BFE5BAA6EFBC88E5AD97E88A82E695B0EFBC895C6E2020202076617220636D64436F6465203D205C2230335C223B202F2F20E68EA7E588B6E68C87E4BBA4E591BDE4BBA4E7A0815C6E5C6E202020202F2F20E68BBCE68EA5E5AE8CE695B4E68AA5E69687EFBC88E697A0E6A0A1E9AA8CE5928CEFBC895C6E20202020766172206672616D65203D205C22413541355C22202B205C6E202020202020202020202020202020206465766963654964202B205C6E20202020202020202020202020202020636D64436F6465202B205C6E20202020202020202020202020202020496E74656765722E746F486578537472696E6728646174614C656E29202B202F2F20E695B0E68DAEE995BFE5BAA6EFBC8831E4BD8D3136E8BF9BE588B6EFBC895C6E2020202020202020202020202020202064617461486578202B205C6E202020202020202020202020202020205C22354135415C223B5C6E5C6E2020202072657475726E206672616D652E746F55707065724361736528293B202F2F20E8BDACE4B8BAE5A4A7E586993136E8BF9BE588B65C6E20207D5C6E5C6E202072657475726E205C225C223B202F2F20E4B88DE694AFE68C81E79A84E68C87E4BBA45C6E7D3B5C6E5C6E2F2F2072657475726E207072654465636F6465285C224135413530303031303130373031303544433038463030344230354135415C22295C6E2F2FE5B19EE680A7E4B88AE68AA5E68AA5E696875C6E72657475726E206465636F64652827413541353030303130313038303130354443303846303034423037413541354127293B5C6E5C6E2F2FE8BF87E8BDBDE4BA8BE4BBB6E68AA5E696875C6E2F2F2072657475726E206465636F6465285C224135413530303031303230333031303442304633354135415C22295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C2264657669636549645C223A205C22303030315C222C5C2266756E6374696F6E5C223A205C227377697463685C222C5C22646174615C223A207B205C2273746174655C223A205C2230315C22207D7D27295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C226D657373616765547970655C223A5C2246554E4354494F4E535C222C5C2266756E6374696F6E5C223A5C227377697463685C222C5C22646174615C223A7B5C2264657669636549645C223A5C2230303031303130375C222C5C2273746174655C223A5C2230315C227D7D2729222C0A20202267726F7570496422203A20226634626562303864633766653431353762396636336132326130653161343330222C0A2020226E616D6522203A2022E5B08FE89891E88F87E68F92E5BAA7222C0A20202263726561746554696D6522203A20313735333432333334343432382C0A20202275706461746554696D6522203A20313735343033393131393836342C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A2022696F74222C0A202022757064617465427922203A2022696F74222C0A2020227061746822203A2022363838333161316633386663313036613864616333633133222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20225B5C6E202020207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B5C6E2020202020202020202020205C22706F77657253746174655C223A205C2230315C222C5C6E2020202020202020202020205C2263757272656E745C223A205C2231352E30305C222C5C6E2020202020202020202020205C22766F6C746167655C223A205C223232382E385C222C5C6E2020202020202020202020205C22706F7765725C223A205C22313230305C225C6E20202020202020207D2C5C6E20202020202020205C2264657669636549645C223A205C22303030315C222C5C6E20202020202020205C22746370456E636F64655C223A205C224845585C222C5C6E20202020202020205C227265706C795061796C6F61645C223A205C22373237323730363332433637363537343633373337315C225C6E202020207D5C6E5D222C0A2020226465736372697074696F6E22203A20224149E887AAE58AA8E7949FE68890E79A84E8A7A3E69E90E5928CE58D8FE8AEAE222C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'iot'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('b5723ec5a8e24bdaa647e60a1dc82638', 1754039125577, NULL, 'api', '小蘑菇插座', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20226235373233656335613865323462646161363437653630613164633832363338222C0A20202273637269707422203A2022696D706F7274206C6F673B5C6E5C6E2F2F203136E8BF9BE588B6E8BDAC3130E8BF9BE588B6E695B0E5AD975C6E76617220686578546F496E74203D20686578203D3E207B5C6E202072657475726E20496E74656765722E7061727365496E74286865782C203136293B5C6E7D3B5C6E2F2F20E9A284E8A7A3E7A081EFBC8CE8A7A3E69E90E4B88AE68AA5E79A84E8AEBEE5A487E7BC96E58FB72064657669636549645C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D207B7D5C6E20202020766172207061796C6F6164486578203D207061796C6F61642E746F5570706572436173652829202F2F20E8BDACE4B8BAE5A4A7E586995C6E202020202F2F20E6A0A1E9AA8CE68AA5E69687E995BFE5BAA6E5928CE5B8A7E5A4B45C6E20202020696620287061796C6F61644865782E6C656E6774682829203E3D203138202626207061796C6F61644865782E737562737472696E6728302C203429203D3D3D205C22413541355C2229207B5C6E20202020202020202F2F20E4BB8EE7ACAC35E4BD8DE5BC80E5A78BE58F9634E5AD97E88A82EFBC8838E4B8AAE5AD97E7ACA6EFBC89E4BD9CE4B8BA2064657669636549645C6E2020202020202020726573756C742E6465766963654964203D207061796C6F61644865782E737562737472696E6728342C203132295C6E202020207D5C6E2020202072657475726E20726573756C745C6E7D5C6E5C6E766172206465636F6465203D287061796C6F61642C636F6E7465787429203D3E207B5C6E20206C6F672E696E666F285C22E8BF9BE585A5E7BC96E8A7A3E7A0812C7061796C6F61643D7B7D2C636F6E746578743D7B7D5C222C7061796C6F61642C636F6E74657874295C6E202076617220726573756C74203D205B5D3B5C6E2020766172207061796C6F6164486578203D7061796C6F61642E746F55707065724361736528293B5C6E20207661722070726F706572746965734F626A203D207B205C226D657373616765547970655C223A205C2250524F504552544945535C222C205C2270726F706572746965735C223A207B7D207D3B5C6E2020766172206576656E744F626A203D207B205C226D657373616765547970655C223A205C224556454E545C222C205C226576656E745C223A205C225C222C205C22646174615C223A207B7D207D3B5C6E5C6E20202F2F20E9AA8CE8AF81E5B8A7E5A4B4E5B8A7E5B0BE5C6E2020696620287061796C6F61644865782E737562737472696E6728302C20342920213D205C22413541355C22207C7C207061796C6F61644865782E737562737472696E67287061796C6F61644865782E6C656E6774682829202D20342920213D205C22354135415C2229207B5C6E2020202072657475726E206A736F6E546F537472285B7B205C226572726F725C223A205C22E697A0E69588E5B8A7E6A0BCE5BC8F5C22207D5D293B5C6E20207D5C6E5C6E20202F2F20E68F90E58F96E6A0B8E5BF83E5AD97E6AEB55C6E2020766172206465766963654964203D207061796C6F61644865782E737562737472696E6728342C2038293B202F2F20E8AEBEE5A4874944EFBC8834E5AD97E88A82EFBC895C6E202076617220636D64436F6465203D207061796C6F61644865782E737562737472696E6728382C203130293B202F2F20E591BDE4BBA4E7A081EFBC8831E5AD97E88A82EFBC895C6E202076617220646174614C656E203D20686578546F496E74287061796C6F61644865782E737562737472696E672831302C20313229293B202F2F20E695B0E68DAEE995BFE5BAA65C6E20207661722064617461486578203D207061796C6F61644865782E737562737472696E672831322C203132202B20646174614C656E202A2032293B202F2F20E695B0E68DAEE58CBA5C6E202076617220636865636B73756D203D207061796C6F61644865782E737562737472696E67283132202B20646174614C656E202A20322C203134202B20646174614C656E202A2032293B202F2F20E6A0A1E9AA8CE5928C5C6E5C6E20202F2F20E8AEBEE5A4874944E5AD98E585A5E68980E69C89E5AFB9E8B1A15C6E202070726F706572746965734F626A2E6465766963654964203D2064657669636549643B5C6E20206576656E744F626A2E6465766963654964203D2064657669636549643B5C6E20202F2FE9AA8CE8AF81E696B0E58685E5AEB95C6E202070726F706572746965734F626A2E636F6E746578743D636F6E746578743B5C6E202070726F706572746965734F626A2E746370456E636F6465203D2027484558273B5C6E202070726F706572746965734F626A2E7265706C795061796C6F6164203D202737323732373036333243363736353734363337333731275C6E20202F2F20312E20E5B19EE680A7E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813031EFBC895C6E202069662028636D64436F6465203D3D205C2230315C2220262620646174614C656E203D3D203729207B5C6E202020202F2F20E8A7A3E69E90E5BC80E585B3E78AB6E68081EFBC8830313DE5BC80EFBC8C30303DE585B3EFBC895C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F7765725374617465203D20646174614865782E737562737472696E6728302C203229203D3D205C2230315C22203F205C2230315C22203A205C2230305C223B5C6E202020202F2F20E8A7A3E69E90E794B5E6B581EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E303141EFBC895C6E202020207661722063757272656E74486578203D20646174614865782E737562737472696E6728322C2036293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E63757272656E74203D2028686578546F496E742863757272656E7448657829202A20302E3031292E746F46697865642832293B5C6E202020202F2F20E8A7A3E69E90E794B5E58E8BEFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E3156EFBC895C6E2020202076617220766F6C74616765486578203D20646174614865782E737562737472696E6728362C203130293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E766F6C74616765203D2028686578546F496E7428766F6C7461676548657829202A20302E31292E746F46697865642831293B5C6E202020202F2F20E8A7A3E69E90E58A9FE78E87EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D3157EFBC895C6E2020202076617220706F776572486578203D20646174614865782E737562737472696E672831302C203134293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F776572203D20686578546F496E7428706F776572486578292E746F537472696E6728293B5C6E202020202F2F20E58AA0E585A5E7BB93E69E9CE99B865C6E20202020726573756C742E707573682870726F706572746965734F626A293B5C6E20207D5C6E5C6E20202F2F20322E20E4BA8BE4BBB6E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813032EFBC895C6E202069662028636D64436F6465203D3D205C2230325C2220262620646174614C656E203E3D203329207B5C6E202020202F2F20E4BA8BE4BBB6E7B1BBE59E8BEFBC8830313DE8BF87E8BDBDEFBC8C30323DE8BF87E58E8BEFBC8C30333DE4B88AE7BABFEFBC8C30343DE4B88BE7BABFEFBC895C6E20202020766172206576656E7454797065203D20646174614865782E737562737472696E6728302C2032293B5C6E20202020696620286576656E7454797065203D3D205C2230315C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F7665726C6F61645C223B5C6E2020202020206576656E744F626A2E646174612E6F7665726C6F6164203D20686578546F496E7428646174614865782E737562737472696E6728322C20362929202B205C22575C223B202F2F20E8BF87E8BDBDE58A9FE78E875C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230335C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F6E6C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F6E6C696E65203D205C22E8AEBEE5A487E4B88AE7BABF5C223B5C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230345C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F66666C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F66666C696E65203D205C22E8AEBEE5A487E4B88BE7BABF5C223B5C6E202020207D5C6E20202020726573756C742E70757368286576656E744F626A293B5C6E20207D5C6E5C6E20202F2F20332E20E5938DE5BA94E68AA5E69687EFBC88E591BDE4BBA4E7A0813034EFBC895C6E202069662028636D64436F6465203D3D205C2230345C2220262620646174614C656E203D3D203129207B5C6E20202020766172207265706C794F626A203D207B5C6E2020202020205C226D657373616765547970655C223A205C225245504C595C222C5C6E2020202020205C2266756E6374696F6E5C223A205C227377697463685C222C5C6E2020202020205C22646174615C223A207B205C22726573756C745C223A2064617461486578203D3D205C2230305C22203F205C22737563636573735C22203A205C226661696C5C22207D5C6E202020207D3B5C6E202020207265706C794F626A2E6465766963654964203D2064657669636549643B5C6E20202020726573756C742E70757368287265706C794F626A293B5C6E20207D5C6E5C6E202072657475726E206A736F6E546F53747228726573756C74293B5C6E7D3B5C6E5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020766172206F626A203D20746F4A736F6E287061796C6F6164293B5C6E2020766172206465766963654964203D206F626A2E646174612E64657669636549643B202F2F20E8AEBEE5A4874944EFBC8834E4BD8D3136E8BF9BE588B6EFBC8CE5A6825C22303030315C22EFBC895C6E20207661722066756E63203D206F626A2E66756E6374696F6E3B5C6E202076617220706172616D73203D206F626A2E646174613B5C6E5C6E20202F2F20E68EA7E588B6E5BC80E585B3EFBC8866756E6374696F6E3D737769746368EFBC895C6E20206966202866756E63203D3D205C227377697463685C2229207B5C6E20202020766172207374617465203D20706172616D732E73746174653B202F2F20E79BAEE6A087E78AB6E68081EFBC9A30313DE5BC80EFBC8C30303DE585B35C6E2020202069662028737461746520213D205C2230315C2220262620737461746520213D205C2230305C2229207B5C6E20202020202072657475726E205C225C223B202F2F20E697A0E69588E78AB6E68081EFBC8CE8BF94E59B9EE7A9BA5C6E202020207D5C6E5C6E202020202F2F20E695B0E68DAEE58CBAEFBC9AE68EA7E588B6E7B1BBE59E8B283031292BE79BAEE6A087E78AB6E680815C6E202020207661722064617461486578203D205C2230315C22202B2073746174653B5C6E2020202076617220646174614C656E203D20646174614865782E6C656E6774682829202F20323B202F2F20E695B0E68DAEE995BFE5BAA6EFBC88E5AD97E88A82E695B0EFBC895C6E2020202076617220636D64436F6465203D205C2230335C223B202F2F20E68EA7E588B6E68C87E4BBA4E591BDE4BBA4E7A0815C6E5C6E202020202F2F20E68BBCE68EA5E5AE8CE695B4E68AA5E69687EFBC88E697A0E6A0A1E9AA8CE5928CEFBC895C6E20202020766172206672616D65203D205C22413541355C22202B205C6E202020202020202020202020202020206465766963654964202B205C6E20202020202020202020202020202020636D64436F6465202B205C6E20202020202020202020202020202020496E74656765722E746F486578537472696E6728646174614C656E29202B202F2F20E695B0E68DAEE995BFE5BAA6EFBC8831E4BD8D3136E8BF9BE588B6EFBC895C6E2020202020202020202020202020202064617461486578202B205C6E202020202020202020202020202020205C22354135415C223B5C6E5C6E2020202072657475726E206672616D652E746F55707065724361736528293B202F2F20E8BDACE4B8BAE5A4A7E586993136E8BF9BE588B65C6E20207D5C6E5C6E202072657475726E205C225C223B202F2F20E4B88DE694AFE68C81E79A84E68C87E4BBA45C6E7D3B5C6E5C6E2F2F2072657475726E207072654465636F6465285C224135413530303031303130373031303544433038463030344230354135415C22295C6E2F2FE5B19EE680A7E4B88AE68AA5E68AA5E696875C6E72657475726E206465636F64652827413541353030303130313037303130354443303846303034423037413541354127293B5C6E5C6E2F2FE8BF87E8BDBDE4BA8BE4BBB6E68AA5E696875C6E2F2F2072657475726E206465636F6465285C224135413530303031303230333031303442304633354135415C22295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C2264657669636549645C223A205C22303030315C222C5C2266756E6374696F6E5C223A205C227377697463685C222C5C22646174615C223A207B205C2273746174655C223A205C2230315C22207D7D27295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C226D657373616765547970655C223A5C2246554E4354494F4E535C222C5C2266756E6374696F6E5C223A5C227377697463685C222C5C22646174615C223A7B5C2264657669636549645C223A5C2230303031303130375C222C5C2273746174655C223A5C2230315C227D7D2729222C0A20202267726F7570496422203A20226634626562303864633766653431353762396636336132326130653161343330222C0A2020226E616D6522203A2022E5B08FE89891E88F87E68F92E5BAA7222C0A20202263726561746554696D6522203A20313735333432333334343432382C0A20202275706461746554696D6522203A20313735343033393132353535302C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A2022696F74222C0A202022757064617465427922203A2022696F74222C0A2020227061746822203A2022363838333161316633386663313036613864616333633133222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20225B5D222C0A2020226465736372697074696F6E22203A20224149E887AAE58AA8E7949FE68890E79A84E8A7A3E69E90E5928CE58D8FE8AEAE222C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'iot'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('b5723ec5a8e24bdaa647e60a1dc82638', 1754039132600, NULL, 'api', '小蘑菇插座', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20226235373233656335613865323462646161363437653630613164633832363338222C0A20202273637269707422203A2022696D706F7274206C6F673B5C6E5C6E2F2F203136E8BF9BE588B6E8BDAC3130E8BF9BE588B6E695B0E5AD975C6E76617220686578546F496E74203D20686578203D3E207B5C6E202072657475726E20496E74656765722E7061727365496E74286865782C203136293B5C6E7D3B5C6E2F2F20E9A284E8A7A3E7A081EFBC8CE8A7A3E69E90E4B88AE68AA5E79A84E8AEBEE5A487E7BC96E58FB72064657669636549645C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D207B7D5C6E20202020766172207061796C6F6164486578203D207061796C6F61642E746F5570706572436173652829202F2F20E8BDACE4B8BAE5A4A7E586995C6E202020202F2F20E6A0A1E9AA8CE68AA5E69687E995BFE5BAA6E5928CE5B8A7E5A4B45C6E20202020696620287061796C6F61644865782E6C656E6774682829203E3D203138202626207061796C6F61644865782E737562737472696E6728302C203429203D3D3D205C22413541355C2229207B5C6E20202020202020202F2F20E4BB8EE7ACAC35E4BD8DE5BC80E5A78BE58F9634E5AD97E88A82EFBC8838E4B8AAE5AD97E7ACA6EFBC89E4BD9CE4B8BA2064657669636549645C6E2020202020202020726573756C742E6465766963654964203D207061796C6F61644865782E737562737472696E6728342C203132295C6E202020207D5C6E2020202072657475726E20726573756C745C6E7D5C6E5C6E766172206465636F6465203D287061796C6F61642C636F6E7465787429203D3E207B5C6E20206C6F672E696E666F285C22E8BF9BE585A5E7BC96E8A7A3E7A0812C7061796C6F61643D7B7D2C636F6E746578743D7B7D5C222C7061796C6F61642C636F6E74657874295C6E202076617220726573756C74203D205B5D3B5C6E2020766172207061796C6F6164486578203D7061796C6F61642E746F55707065724361736528293B5C6E20207661722070726F706572746965734F626A203D207B205C226D657373616765547970655C223A205C2250524F504552544945535C222C205C2270726F706572746965735C223A207B7D207D3B5C6E2020766172206576656E744F626A203D207B205C226D657373616765547970655C223A205C224556454E545C222C205C226576656E745C223A205C225C222C205C22646174615C223A207B7D207D3B5C6E5C6E20202F2F20E9AA8CE8AF81E5B8A7E5A4B4E5B8A7E5B0BE5C6E2020696620287061796C6F61644865782E737562737472696E6728302C20342920213D205C22413541355C22207C7C207061796C6F61644865782E737562737472696E67287061796C6F61644865782E6C656E6774682829202D20342920213D205C22354135415C2229207B5C6E2020202072657475726E206A736F6E546F537472285B7B205C226572726F725C223A205C22E697A0E69588E5B8A7E6A0BCE5BC8F5C22207D5D293B5C6E20207D5C6E5C6E20202F2F20E68F90E58F96E6A0B8E5BF83E5AD97E6AEB55C6E2020766172206465766963654964203D207061796C6F61644865782E737562737472696E6728342C2038293B202F2F20E8AEBEE5A4874944EFBC8834E5AD97E88A82EFBC895C6E202076617220636D64436F6465203D207061796C6F61644865782E737562737472696E6728382C203130293B202F2F20E591BDE4BBA4E7A081EFBC8831E5AD97E88A82EFBC895C6E202076617220646174614C656E203D20686578546F496E74287061796C6F61644865782E737562737472696E672831302C20313229293B202F2F20E695B0E68DAEE995BFE5BAA65C6E20207661722064617461486578203D207061796C6F61644865782E737562737472696E672831322C203132202B20646174614C656E202A2032293B202F2F20E695B0E68DAEE58CBA5C6E202076617220636865636B73756D203D207061796C6F61644865782E737562737472696E67283132202B20646174614C656E202A20322C203134202B20646174614C656E202A2032293B202F2F20E6A0A1E9AA8CE5928C5C6E5C6E20202F2F20E8AEBEE5A4874944E5AD98E585A5E68980E69C89E5AFB9E8B1A15C6E202070726F706572746965734F626A2E6465766963654964203D2064657669636549643B5C6E20206576656E744F626A2E6465766963654964203D2064657669636549643B5C6E20202F2FE9AA8CE8AF81E696B0E58685E5AEB95C6E202070726F706572746965734F626A2E636F6E746578743D636F6E746578743B5C6E202070726F706572746965734F626A2E746370456E636F6465203D2027484558273B5C6E202070726F706572746965734F626A2E7265706C795061796C6F6164203D202737323732373036333243363736353734363337333731275C6E20202F2F20312E20E5B19EE680A7E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813031EFBC895C6E202069662028636D64436F6465203D3D205C2230315C2220262620646174614C656E203D3D203729207B5C6E202020202F2F20E8A7A3E69E90E5BC80E585B3E78AB6E68081EFBC8830313DE5BC80EFBC8C30303DE585B3EFBC895C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F7765725374617465203D20646174614865782E737562737472696E6728302C203229203D3D205C2230315C22203F205C2230315C22203A205C2230305C223B5C6E202020202F2F20E8A7A3E69E90E794B5E6B581EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E303141EFBC895C6E202020207661722063757272656E74486578203D20646174614865782E737562737472696E6728322C2036293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E63757272656E74203D2028686578546F496E742863757272656E7448657829202A20302E3031292E746F46697865642832293B5C6E202020202F2F20E8A7A3E69E90E794B5E58E8BEFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E3156EFBC895C6E2020202076617220766F6C74616765486578203D20646174614865782E737562737472696E6728362C203130293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E766F6C74616765203D2028686578546F496E7428766F6C7461676548657829202A20302E31292E746F46697865642831293B5C6E202020202F2F20E8A7A3E69E90E58A9FE78E87EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D3157EFBC895C6E2020202076617220706F776572486578203D20646174614865782E737562737472696E672831302C203134293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F776572203D20686578546F496E7428706F776572486578292E746F537472696E6728293B5C6E202020202F2F20E58AA0E585A5E7BB93E69E9CE99B865C6E20202020726573756C742E707573682870726F706572746965734F626A293B5C6E20207D5C6E5C6E20202F2F20322E20E4BA8BE4BBB6E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813032EFBC895C6E202069662028636D64436F6465203D3D205C2230325C2220262620646174614C656E203E3D203329207B5C6E202020202F2F20E4BA8BE4BBB6E7B1BBE59E8BEFBC8830313DE8BF87E8BDBDEFBC8C30323DE8BF87E58E8BEFBC8C30333DE4B88AE7BABFEFBC8C30343DE4B88BE7BABFEFBC895C6E20202020766172206576656E7454797065203D20646174614865782E737562737472696E6728302C2032293B5C6E20202020696620286576656E7454797065203D3D205C2230315C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F7665726C6F61645C223B5C6E2020202020206576656E744F626A2E646174612E6F7665726C6F6164203D20686578546F496E7428646174614865782E737562737472696E6728322C20362929202B205C22575C223B202F2F20E8BF87E8BDBDE58A9FE78E875C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230335C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F6E6C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F6E6C696E65203D205C22E8AEBEE5A487E4B88AE7BABF5C223B5C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230345C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F66666C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F66666C696E65203D205C22E8AEBEE5A487E4B88BE7BABF5C223B5C6E202020207D5C6E20202020726573756C742E70757368286576656E744F626A293B5C6E20207D5C6E5C6E20202F2F20332E20E5938DE5BA94E68AA5E69687EFBC88E591BDE4BBA4E7A0813034EFBC895C6E202069662028636D64436F6465203D3D205C2230345C2220262620646174614C656E203D3D203129207B5C6E20202020766172207265706C794F626A203D207B5C6E2020202020205C226D657373616765547970655C223A205C225245504C595C222C5C6E2020202020205C2266756E6374696F6E5C223A205C227377697463685C222C5C6E2020202020205C22646174615C223A207B205C22726573756C745C223A2064617461486578203D3D205C2230305C22203F205C22737563636573735C22203A205C226661696C5C22207D5C6E202020207D3B5C6E202020207265706C794F626A2E6465766963654964203D2064657669636549643B5C6E20202020726573756C742E70757368287265706C794F626A293B5C6E20207D5C6E5C6E202072657475726E206A736F6E546F53747228726573756C74293B5C6E7D3B5C6E5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020766172206F626A203D20746F4A736F6E287061796C6F6164293B5C6E2020766172206465766963654964203D206F626A2E646174612E64657669636549643B202F2F20E8AEBEE5A4874944EFBC8834E4BD8D3136E8BF9BE588B6EFBC8CE5A6825C22303030315C22EFBC895C6E20207661722066756E63203D206F626A2E66756E6374696F6E3B5C6E202076617220706172616D73203D206F626A2E646174613B5C6E5C6E20202F2F20E68EA7E588B6E5BC80E585B3EFBC8866756E6374696F6E3D737769746368EFBC895C6E20206966202866756E63203D3D205C227377697463685C2229207B5C6E20202020766172207374617465203D20706172616D732E73746174653B202F2F20E79BAEE6A087E78AB6E68081EFBC9A30313DE5BC80EFBC8C30303DE585B35C6E2020202069662028737461746520213D205C2230315C2220262620737461746520213D205C2230305C2229207B5C6E20202020202072657475726E205C225C223B202F2F20E697A0E69588E78AB6E68081EFBC8CE8BF94E59B9EE7A9BA5C6E202020207D5C6E5C6E202020202F2F20E695B0E68DAEE58CBAEFBC9AE68EA7E588B6E7B1BBE59E8B283031292BE79BAEE6A087E78AB6E680815C6E202020207661722064617461486578203D205C2230315C22202B2073746174653B5C6E2020202076617220646174614C656E203D20646174614865782E6C656E6774682829202F20323B202F2F20E695B0E68DAEE995BFE5BAA6EFBC88E5AD97E88A82E695B0EFBC895C6E2020202076617220636D64436F6465203D205C2230335C223B202F2F20E68EA7E588B6E68C87E4BBA4E591BDE4BBA4E7A0815C6E5C6E202020202F2F20E68BBCE68EA5E5AE8CE695B4E68AA5E69687EFBC88E697A0E6A0A1E9AA8CE5928CEFBC895C6E20202020766172206672616D65203D205C22413541355C22202B205C6E202020202020202020202020202020206465766963654964202B205C6E20202020202020202020202020202020636D64436F6465202B205C6E20202020202020202020202020202020496E74656765722E746F486578537472696E6728646174614C656E29202B202F2F20E695B0E68DAEE995BFE5BAA6EFBC8831E4BD8D3136E8BF9BE588B6EFBC895C6E2020202020202020202020202020202064617461486578202B205C6E202020202020202020202020202020205C22354135415C223B5C6E5C6E2020202072657475726E206672616D652E746F55707065724361736528293B202F2F20E8BDACE4B8BAE5A4A7E586993136E8BF9BE588B65C6E20207D5C6E5C6E202072657475726E205C225C223B202F2F20E4B88DE694AFE68C81E79A84E68C87E4BBA45C6E7D3B5C6E5C6E2F2F2072657475726E207072654465636F6465285C224135413530303031303130373031303544433038463030344230354135415C22295C6E2F2FE5B19EE680A7E4B88AE68AA5E68AA5E696875C6E72657475726E206465636F64652827413541353030303130313038303130354443303846303034423037413541354127293B5C6E5C6E2F2FE8BF87E8BDBDE4BA8BE4BBB6E68AA5E696875C6E2F2F2072657475726E206465636F6465285C224135413530303031303230333031303442304633354135415C22295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C2264657669636549645C223A205C22303030315C222C5C2266756E6374696F6E5C223A205C227377697463685C222C5C22646174615C223A207B205C2273746174655C223A205C2230315C22207D7D27295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C226D657373616765547970655C223A5C2246554E4354494F4E535C222C5C2266756E6374696F6E5C223A5C227377697463685C222C5C22646174615C223A7B5C2264657669636549645C223A5C2230303031303130375C222C5C2273746174655C223A5C2230315C227D7D2729222C0A20202267726F7570496422203A20226634626562303864633766653431353762396636336132326130653161343330222C0A2020226E616D6522203A2022E5B08FE89891E88F87E68F92E5BAA7222C0A20202263726561746554696D6522203A20313735333432333334343432382C0A20202275706461746554696D6522203A20313735343033393133323537352C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A2022696F74222C0A202022757064617465427922203A2022696F74222C0A2020227061746822203A2022363838333161316633386663313036613864616333633133222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20225B5C6E202020207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B5C6E2020202020202020202020205C22706F77657253746174655C223A205C2230315C222C5C6E2020202020202020202020205C2263757272656E745C223A205C2231352E30305C222C5C6E2020202020202020202020205C22766F6C746167655C223A205C223232382E385C222C5C6E2020202020202020202020205C22706F7765725C223A205C22313230305C225C6E20202020202020207D2C5C6E20202020202020205C2264657669636549645C223A205C22303030315C222C5C6E20202020202020205C22746370456E636F64655C223A205C224845585C222C5C6E20202020202020205C227265706C795061796C6F61645C223A205C22373237323730363332433637363537343633373337315C225C6E202020207D5C6E5D222C0A2020226465736372697074696F6E22203A20224149E887AAE58AA8E7949FE68890E79A84E8A7A3E69E90E5928CE58D8FE8AEAE222C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'iot'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('b5723ec5a8e24bdaa647e60a1dc82638', 1754039136271, NULL, 'api', '小蘑菇插座', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20226235373233656335613865323462646161363437653630613164633832363338222C0A20202273637269707422203A2022696D706F7274206C6F673B5C6E5C6E2F2F203136E8BF9BE588B6E8BDAC3130E8BF9BE588B6E695B0E5AD975C6E76617220686578546F496E74203D20686578203D3E207B5C6E202072657475726E20496E74656765722E7061727365496E74286865782C203136293B5C6E7D3B5C6E2F2F20E9A284E8A7A3E7A081EFBC8CE8A7A3E69E90E4B88AE68AA5E79A84E8AEBEE5A487E7BC96E58FB72064657669636549645C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D207B7D5C6E20202020766172207061796C6F6164486578203D207061796C6F61642E746F5570706572436173652829202F2F20E8BDACE4B8BAE5A4A7E586995C6E202020202F2F20E6A0A1E9AA8CE68AA5E69687E995BFE5BAA6E5928CE5B8A7E5A4B45C6E20202020696620287061796C6F61644865782E6C656E6774682829203E3D203138202626207061796C6F61644865782E737562737472696E6728302C203429203D3D3D205C22413541355C2229207B5C6E20202020202020202F2F20E4BB8EE7ACAC35E4BD8DE5BC80E5A78BE58F9634E5AD97E88A82EFBC8838E4B8AAE5AD97E7ACA6EFBC89E4BD9CE4B8BA2064657669636549645C6E2020202020202020726573756C742E6465766963654964203D207061796C6F61644865782E737562737472696E6728342C203132295C6E202020207D5C6E2020202072657475726E20726573756C745C6E7D5C6E5C6E766172206465636F6465203D287061796C6F61642C636F6E7465787429203D3E207B5C6E20206C6F672E696E666F285C22E8BF9BE585A5E7BC96E8A7A3E7A0812C7061796C6F61643D7B7D2C636F6E746578743D7B7D5C222C7061796C6F61642C636F6E74657874295C6E202076617220726573756C74203D205B5D3B5C6E2020766172207061796C6F6164486578203D7061796C6F61642E746F55707065724361736528293B5C6E20207661722070726F706572746965734F626A203D207B205C226D657373616765547970655C223A205C2250524F504552544945535C222C205C2270726F706572746965735C223A207B7D207D3B5C6E2020766172206576656E744F626A203D207B205C226D657373616765547970655C223A205C224556454E545C222C205C226576656E745C223A205C225C222C205C22646174615C223A207B7D207D3B5C6E5C6E20202F2F20E9AA8CE8AF81E5B8A7E5A4B4E5B8A7E5B0BE5C6E2020696620287061796C6F61644865782E737562737472696E6728302C20342920213D205C22413541355C22207C7C207061796C6F61644865782E737562737472696E67287061796C6F61644865782E6C656E6774682829202D20342920213D205C22354135415C2229207B5C6E2020202072657475726E206A736F6E546F537472285B7B205C226572726F725C223A205C22E697A0E69588E5B8A7E6A0BCE5BC8F5C22207D5D293B5C6E20207D5C6E5C6E20202F2F20E68F90E58F96E6A0B8E5BF83E5AD97E6AEB55C6E2020766172206465766963654964203D207061796C6F61644865782E737562737472696E6728342C2038293B202F2F20E8AEBEE5A4874944EFBC8834E5AD97E88A82EFBC895C6E202076617220636D64436F6465203D207061796C6F61644865782E737562737472696E6728382C203130293B202F2F20E591BDE4BBA4E7A081EFBC8831E5AD97E88A82EFBC895C6E202076617220646174614C656E203D20686578546F496E74287061796C6F61644865782E737562737472696E672831302C20313229293B202F2F20E695B0E68DAEE995BFE5BAA65C6E20207661722064617461486578203D207061796C6F61644865782E737562737472696E672831322C203132202B20646174614C656E202A2032293B202F2F20E695B0E68DAEE58CBA5C6E202076617220636865636B73756D203D207061796C6F61644865782E737562737472696E67283132202B20646174614C656E202A20322C203134202B20646174614C656E202A2032293B202F2F20E6A0A1E9AA8CE5928C5C6E5C6E20202F2F20E8AEBEE5A4874944E5AD98E585A5E68980E69C89E5AFB9E8B1A15C6E202070726F706572746965734F626A2E6465766963654964203D2064657669636549643B5C6E20206576656E744F626A2E6465766963654964203D2064657669636549643B5C6E20202F2FE9AA8CE8AF81E696B0E58685E5AEB95C6E202070726F706572746965734F626A2E636F6E746578743D636F6E746578743B5C6E202070726F706572746965734F626A2E746370456E636F6465203D2027484558273B5C6E202070726F706572746965734F626A2E7265706C795061796C6F6164203D202737323732373036333243363736353734363337333731275C6E20202F2F20312E20E5B19EE680A7E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813031EFBC895C6E202069662028636D64436F6465203D3D205C2230315C2220262620646174614C656E203D3D203729207B5C6E202020202F2F20E8A7A3E69E90E5BC80E585B3E78AB6E68081EFBC8830313DE5BC80EFBC8C30303DE585B3EFBC895C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F7765725374617465203D20646174614865782E737562737472696E6728302C203229203D3D205C2230315C22203F205C2230315C22203A205C2230305C223B5C6E202020202F2F20E8A7A3E69E90E794B5E6B581EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E303141EFBC895C6E202020207661722063757272656E74486578203D20646174614865782E737562737472696E6728322C2036293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E63757272656E74203D2028686578546F496E742863757272656E7448657829202A20302E3031292E746F46697865642832293B5C6E202020202F2F20E8A7A3E69E90E794B5E58E8BEFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E3156EFBC895C6E2020202076617220766F6C74616765486578203D20646174614865782E737562737472696E6728362C203130293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E766F6C74616765203D2028686578546F496E7428766F6C7461676548657829202A20302E31292E746F46697865642831293B5C6E202020202F2F20E8A7A3E69E90E58A9FE78E87EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D3157EFBC895C6E2020202076617220706F776572486578203D20646174614865782E737562737472696E672831302C203134293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F776572203D20686578546F496E7428706F776572486578292E746F537472696E6728293B5C6E202020202F2F20E58AA0E585A5E7BB93E69E9CE99B865C6E20202020726573756C742E707573682870726F706572746965734F626A293B5C6E20207D5C6E5C6E20202F2F20322E20E4BA8BE4BBB6E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813032EFBC895C6E202069662028636D64436F6465203D3D205C2230325C2220262620646174614C656E203E3D203329207B5C6E202020202F2F20E4BA8BE4BBB6E7B1BBE59E8BEFBC8830313DE8BF87E8BDBDEFBC8C30323DE8BF87E58E8BEFBC8C30333DE4B88AE7BABFEFBC8C30343DE4B88BE7BABFEFBC895C6E20202020766172206576656E7454797065203D20646174614865782E737562737472696E6728302C2032293B5C6E20202020696620286576656E7454797065203D3D205C2230315C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F7665726C6F61645C223B5C6E2020202020206576656E744F626A2E646174612E6F7665726C6F6164203D20686578546F496E7428646174614865782E737562737472696E6728322C20362929202B205C22575C223B202F2F20E8BF87E8BDBDE58A9FE78E875C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230335C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F6E6C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F6E6C696E65203D205C22E8AEBEE5A487E4B88AE7BABF5C223B5C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230345C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F66666C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F66666C696E65203D205C22E8AEBEE5A487E4B88BE7BABF5C223B5C6E202020207D5C6E20202020726573756C742E70757368286576656E744F626A293B5C6E20207D5C6E5C6E20202F2F20332E20E5938DE5BA94E68AA5E69687EFBC88E591BDE4BBA4E7A0813034EFBC895C6E202069662028636D64436F6465203D3D205C2230345C2220262620646174614C656E203D3D203129207B5C6E20202020766172207265706C794F626A203D207B5C6E2020202020205C226D657373616765547970655C223A205C225245504C595C222C5C6E2020202020205C2266756E6374696F6E5C223A205C227377697463685C222C5C6E2020202020205C22646174615C223A207B205C22726573756C745C223A2064617461486578203D3D205C2230305C22203F205C22737563636573735C22203A205C226661696C5C22207D5C6E202020207D3B5C6E202020207265706C794F626A2E6465766963654964203D2064657669636549643B5C6E20202020726573756C742E70757368287265706C794F626A293B5C6E20207D5C6E5C6E202072657475726E206A736F6E546F53747228726573756C74293B5C6E7D3B5C6E5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020766172206F626A203D20746F4A736F6E287061796C6F6164293B5C6E2020766172206465766963654964203D206F626A2E646174612E64657669636549643B202F2F20E8AEBEE5A4874944EFBC8834E4BD8D3136E8BF9BE588B6EFBC8CE5A6825C22303030315C22EFBC895C6E20207661722066756E63203D206F626A2E66756E6374696F6E3B5C6E202076617220706172616D73203D206F626A2E646174613B5C6E5C6E20202F2F20E68EA7E588B6E5BC80E585B3EFBC8866756E6374696F6E3D737769746368EFBC895C6E20206966202866756E63203D3D205C227377697463685C2229207B5C6E20202020766172207374617465203D20706172616D732E73746174653B202F2F20E79BAEE6A087E78AB6E68081EFBC9A30313DE5BC80EFBC8C30303DE585B35C6E2020202069662028737461746520213D205C2230315C2220262620737461746520213D205C2230305C2229207B5C6E20202020202072657475726E205C225C223B202F2F20E697A0E69588E78AB6E68081EFBC8CE8BF94E59B9EE7A9BA5C6E202020207D5C6E5C6E202020202F2F20E695B0E68DAEE58CBAEFBC9AE68EA7E588B6E7B1BBE59E8B283031292BE79BAEE6A087E78AB6E680815C6E202020207661722064617461486578203D205C2230315C22202B2073746174653B5C6E2020202076617220646174614C656E203D20646174614865782E6C656E6774682829202F20323B202F2F20E695B0E68DAEE995BFE5BAA6EFBC88E5AD97E88A82E695B0EFBC895C6E2020202076617220636D64436F6465203D205C2230335C223B202F2F20E68EA7E588B6E68C87E4BBA4E591BDE4BBA4E7A0815C6E5C6E202020202F2F20E68BBCE68EA5E5AE8CE695B4E68AA5E69687EFBC88E697A0E6A0A1E9AA8CE5928CEFBC895C6E20202020766172206672616D65203D205C22413541355C22202B205C6E202020202020202020202020202020206465766963654964202B205C6E20202020202020202020202020202020636D64436F6465202B205C6E20202020202020202020202020202020496E74656765722E746F486578537472696E6728646174614C656E29202B202F2F20E695B0E68DAEE995BFE5BAA6EFBC8831E4BD8D3136E8BF9BE588B6EFBC895C6E2020202020202020202020202020202064617461486578202B205C6E202020202020202020202020202020205C22354135415C223B5C6E5C6E2020202072657475726E206672616D652E746F55707065724361736528293B202F2F20E8BDACE4B8BAE5A4A7E586993136E8BF9BE588B65C6E20207D5C6E5C6E202072657475726E205C225C223B202F2F20E4B88DE694AFE68C81E79A84E68C87E4BBA45C6E7D3B5C6E5C6E2F2F2072657475726E207072654465636F6465285C224135413530303031303130373031303544433038463030344230354135415C22295C6E2F2FE5B19EE680A7E4B88AE68AA5E68AA5E696875C6E72657475726E206465636F64652827413541353030303130313037303130354443303846303034423037413541354127293B5C6E5C6E2F2FE8BF87E8BDBDE4BA8BE4BBB6E68AA5E696875C6E2F2F2072657475726E206465636F6465285C224135413530303031303230333031303442304633354135415C22295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C2264657669636549645C223A205C22303030315C222C5C2266756E6374696F6E5C223A205C227377697463685C222C5C22646174615C223A207B205C2273746174655C223A205C2230315C22207D7D27295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C226D657373616765547970655C223A5C2246554E4354494F4E535C222C5C2266756E6374696F6E5C223A5C227377697463685C222C5C22646174615C223A7B5C2264657669636549645C223A5C2230303031303130375C222C5C2273746174655C223A5C2230315C227D7D2729222C0A20202267726F7570496422203A20226634626562303864633766653431353762396636336132326130653161343330222C0A2020226E616D6522203A2022E5B08FE89891E88F87E68F92E5BAA7222C0A20202263726561746554696D6522203A20313735333432333334343432382C0A20202275706461746554696D6522203A20313735343033393133363235302C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A2022696F74222C0A202022757064617465427922203A2022696F74222C0A2020227061746822203A2022363838333161316633386663313036613864616333633133222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20225B5D222C0A2020226465736372697074696F6E22203A20224149E887AAE58AA8E7949FE68890E79A84E8A7A3E69E90E5928CE58D8FE8AEAE222C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'iot'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('b5723ec5a8e24bdaa647e60a1dc82638', 1754039158106, NULL, 'api', '小蘑菇插座', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20226235373233656335613865323462646161363437653630613164633832363338222C0A20202273637269707422203A2022696D706F7274206C6F673B5C6E5C6E2F2F203136E8BF9BE588B6E8BDAC3130E8BF9BE588B6E695B0E5AD975C6E76617220686578546F496E74203D20686578203D3E207B5C6E202072657475726E20496E74656765722E7061727365496E74286865782C203136293B5C6E7D3B5C6E2F2F20E9A284E8A7A3E7A081EFBC8CE8A7A3E69E90E4B88AE68AA5E79A84E8AEBEE5A487E7BC96E58FB72064657669636549645C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D207B7D5C6E20202020766172207061796C6F6164486578203D207061796C6F61642E746F5570706572436173652829202F2F20E8BDACE4B8BAE5A4A7E586995C6E202020202F2F20E6A0A1E9AA8CE68AA5E69687E995BFE5BAA6E5928CE5B8A7E5A4B45C6E20202020696620287061796C6F61644865782E6C656E6774682829203E3D203138202626207061796C6F61644865782E737562737472696E6728302C203429203D3D3D205C22413541355C2229207B5C6E20202020202020202F2F20E4BB8EE7ACAC35E4BD8DE5BC80E5A78BE58F9634E5AD97E88A82EFBC8838E4B8AAE5AD97E7ACA6EFBC89E4BD9CE4B8BA2064657669636549645C6E2020202020202020726573756C742E6465766963654964203D207061796C6F61644865782E737562737472696E6728342C203132295C6E202020207D5C6E2020202072657475726E20726573756C745C6E7D5C6E5C6E766172206465636F6465203D287061796C6F61642C636F6E7465787429203D3E207B5C6E20206C6F672E696E666F285C22E8BF9BE585A5E7BC96E8A7A3E7A0812C7061796C6F61643D7B7D2C636F6E746578743D7B7D5C222C7061796C6F61642C636F6E74657874295C6E202076617220726573756C74203D205B5D3B5C6E2020766172207061796C6F6164486578203D7061796C6F61642E746F55707065724361736528293B5C6E20207661722070726F706572746965734F626A203D207B205C226D657373616765547970655C223A205C2250524F504552544945535C222C205C2270726F706572746965735C223A207B7D207D3B5C6E2020766172206576656E744F626A203D207B205C226D657373616765547970655C223A205C224556454E545C222C205C226576656E745C223A205C225C222C205C22646174615C223A207B7D207D3B5C6E5C6E20202F2F20E9AA8CE8AF81E5B8A7E5A4B4E5B8A7E5B0BE5C6E2020696620287061796C6F61644865782E737562737472696E6728302C20342920213D205C22413541355C22207C7C207061796C6F61644865782E737562737472696E67287061796C6F61644865782E6C656E6774682829202D20342920213D205C22354135415C2229207B5C6E2020202072657475726E206A736F6E546F537472285B7B205C226572726F725C223A205C22E697A0E69588E5B8A7E6A0BCE5BC8F5C22207D5D293B5C6E20207D5C6E5C6E20202F2F20E68F90E58F96E6A0B8E5BF83E5AD97E6AEB55C6E2020766172206465766963654964203D207061796C6F61644865782E737562737472696E6728342C2038293B202F2F20E8AEBEE5A4874944EFBC8834E5AD97E88A82EFBC895C6E202076617220636D64436F6465203D207061796C6F61644865782E737562737472696E6728382C203130293B202F2F20E591BDE4BBA4E7A081EFBC8831E5AD97E88A82EFBC895C6E202076617220646174614C656E203D20686578546F496E74287061796C6F61644865782E737562737472696E672831302C20313229293B202F2F20E695B0E68DAEE995BFE5BAA65C6E20207661722064617461486578203D207061796C6F61644865782E737562737472696E672831322C203132202B20646174614C656E202A2032293B202F2F20E695B0E68DAEE58CBA5C6E202076617220636865636B73756D203D207061796C6F61644865782E737562737472696E67283132202B20646174614C656E202A20322C203134202B20646174614C656E202A2032293B202F2F20E6A0A1E9AA8CE5928C5C6E5C6E20202F2F20E8AEBEE5A4874944E5AD98E585A5E68980E69C89E5AFB9E8B1A15C6E202070726F706572746965734F626A2E6465766963654964203D2064657669636549643B5C6E20206576656E744F626A2E6465766963654964203D2064657669636549643B5C6E20202F2FE9AA8CE8AF81E696B0E58685E5AEB95C6E202070726F706572746965734F626A2E636F6E746578743D636F6E746578743B5C6E202070726F706572746965734F626A2E746370456E636F6465203D2027484558273B5C6E202070726F706572746965734F626A2E7265706C795061796C6F6164203D202737323732373036333243363736353734363337333731275C6E20202F2F20312E20E5B19EE680A7E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813031EFBC895C6E202069662028636D64436F6465203D3D205C2230315C2220262620646174614C656E203D3D203729207B5C6E202020202F2F20E8A7A3E69E90E5BC80E585B3E78AB6E68081EFBC8830313DE5BC80EFBC8C30303DE585B3EFBC895C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F7765725374617465203D20646174614865782E737562737472696E6728302C203229203D3D205C2230315C22203F205C2230315C22203A205C2230305C223B5C6E202020202F2F20E8A7A3E69E90E794B5E6B581EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E303141EFBC895C6E202020207661722063757272656E74486578203D20646174614865782E737562737472696E6728322C2036293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E63757272656E74203D2028686578546F496E742863757272656E7448657829202A20302E3031292E746F46697865642832293B5C6E202020202F2F20E8A7A3E69E90E794B5E58E8BEFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E3156EFBC895C6E2020202076617220766F6C74616765486578203D20646174614865782E737562737472696E6728362C203130293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E766F6C74616765203D2028686578546F496E7428766F6C7461676548657829202A20302E31292E746F46697865642831293B5C6E202020202F2F20E8A7A3E69E90E58A9FE78E87EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D3157EFBC895C6E2020202076617220706F776572486578203D20646174614865782E737562737472696E672831302C203134293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F776572203D20686578546F496E7428706F776572486578292E746F537472696E6728293B5C6E202020202F2F20E58AA0E585A5E7BB93E69E9CE99B865C6E20202020726573756C742E707573682870726F706572746965734F626A293B5C6E20207D5C6E5C6E20202F2F20322E20E4BA8BE4BBB6E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813032EFBC895C6E202069662028636D64436F6465203D3D205C2230325C2220262620646174614C656E203E3D203329207B5C6E202020202F2F20E4BA8BE4BBB6E7B1BBE59E8BEFBC8830313DE8BF87E8BDBDEFBC8C30323DE8BF87E58E8BEFBC8C30333DE4B88AE7BABFEFBC8C30343DE4B88BE7BABFEFBC895C6E20202020766172206576656E7454797065203D20646174614865782E737562737472696E6728302C2032293B5C6E20202020696620286576656E7454797065203D3D205C2230315C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F7665726C6F61645C223B5C6E2020202020206576656E744F626A2E646174612E6F7665726C6F6164203D20686578546F496E7428646174614865782E737562737472696E6728322C20362929202B205C22575C223B202F2F20E8BF87E8BDBDE58A9FE78E875C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230335C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F6E6C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F6E6C696E65203D205C22E8AEBEE5A487E4B88AE7BABF5C223B5C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230345C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F66666C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F66666C696E65203D205C22E8AEBEE5A487E4B88BE7BABF5C223B5C6E202020207D5C6E20202020726573756C742E70757368286576656E744F626A293B5C6E20207D5C6E5C6E20202F2F20332E20E5938DE5BA94E68AA5E69687EFBC88E591BDE4BBA4E7A0813034EFBC895C6E202069662028636D64436F6465203D3D205C2230345C2220262620646174614C656E203D3D203129207B5C6E20202020766172207265706C794F626A203D207B5C6E2020202020205C226D657373616765547970655C223A205C225245504C595C222C5C6E2020202020205C2266756E6374696F6E5C223A205C227377697463685C222C5C6E2020202020205C22646174615C223A207B205C22726573756C745C223A2064617461486578203D3D205C2230305C22203F205C22737563636573735C22203A205C226661696C5C22207D5C6E202020207D3B5C6E202020207265706C794F626A2E6465766963654964203D2064657669636549643B5C6E20202020726573756C742E70757368287265706C794F626A293B5C6E20207D5C6E5C6E202072657475726E206A736F6E546F53747228726573756C74293B5C6E7D3B5C6E5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020766172206F626A203D20746F4A736F6E287061796C6F6164293B5C6E2020766172206465766963654964203D206F626A2E646174612E64657669636549643B202F2F20E8AEBEE5A4874944EFBC8834E4BD8D3136E8BF9BE588B6EFBC8CE5A6825C22303030315C22EFBC895C6E20207661722066756E63203D206F626A2E66756E6374696F6E3B5C6E202076617220706172616D73203D206F626A2E646174613B5C6E5C6E20202F2F20E68EA7E588B6E5BC80E585B3EFBC8866756E6374696F6E3D737769746368EFBC895C6E20206966202866756E63203D3D205C227377697463685C2229207B5C6E20202020766172207374617465203D20706172616D732E73746174653B202F2F20E79BAEE6A087E78AB6E68081EFBC9A30313DE5BC80EFBC8C30303DE585B35C6E2020202069662028737461746520213D205C2230315C2220262620737461746520213D205C2230305C2229207B5C6E20202020202072657475726E205C225C223B202F2F20E697A0E69588E78AB6E68081EFBC8CE8BF94E59B9EE7A9BA5C6E202020207D5C6E5C6E202020202F2F20E695B0E68DAEE58CBAEFBC9AE68EA7E588B6E7B1BBE59E8B283031292BE79BAEE6A087E78AB6E680815C6E202020207661722064617461486578203D205C2230315C22202B2073746174653B5C6E2020202076617220646174614C656E203D20646174614865782E6C656E6774682829202F20323B202F2F20E695B0E68DAEE995BFE5BAA6EFBC88E5AD97E88A82E695B0EFBC895C6E2020202076617220636D64436F6465203D205C2230335C223B202F2F20E68EA7E588B6E68C87E4BBA4E591BDE4BBA4E7A0815C6E5C6E202020202F2F20E68BBCE68EA5E5AE8CE695B4E68AA5E69687EFBC88E697A0E6A0A1E9AA8CE5928CEFBC895C6E20202020766172206672616D65203D205C22413541355C22202B205C6E202020202020202020202020202020206465766963654964202B205C6E20202020202020202020202020202020636D64436F6465202B205C6E20202020202020202020202020202020496E74656765722E746F486578537472696E6728646174614C656E29202B202F2F20E695B0E68DAEE995BFE5BAA6EFBC8831E4BD8D3136E8BF9BE588B6EFBC895C6E2020202020202020202020202020202064617461486578202B205C6E202020202020202020202020202020205C22354135415C223B5C6E5C6E2020202072657475726E206672616D652E746F55707065724361736528293B202F2F20E8BDACE4B8BAE5A4A7E586993136E8BF9BE588B65C6E20207D5C6E5C6E202072657475726E205C225C223B202F2F20E4B88DE694AFE68C81E79A84E68C87E4BBA45C6E7D3B5C6E5C6E2F2F2072657475726E207072654465636F6465285C224135413530303031303130373031303544433038463030344230354135415C22295C6E2F2FE5B19EE680A7E4B88AE68AA5E68AA5E696875C6E72657475726E206465636F6465282741354135303030313031303837303130354443303846303034423037413541354127293B5C6E5C6E2F2FE8BF87E8BDBDE4BA8BE4BBB6E68AA5E696875C6E2F2F2072657475726E206465636F6465285C224135413530303031303230333031303442304633354135415C22295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C2264657669636549645C223A205C22303030315C222C5C2266756E6374696F6E5C223A205C227377697463685C222C5C22646174615C223A207B205C2273746174655C223A205C2230315C22207D7D27295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C226D657373616765547970655C223A5C2246554E4354494F4E535C222C5C2266756E6374696F6E5C223A5C227377697463685C222C5C22646174615C223A7B5C2264657669636549645C223A5C2230303031303130375C222C5C2273746174655C223A5C2230315C227D7D2729222C0A20202267726F7570496422203A20226634626562303864633766653431353762396636336132326130653161343330222C0A2020226E616D6522203A2022E5B08FE89891E88F87E68F92E5BAA7222C0A20202263726561746554696D6522203A20313735333432333334343432382C0A20202275706461746554696D6522203A20313735343033393135383038312C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A2022696F74222C0A202022757064617465427922203A2022696F74222C0A2020227061746822203A2022363838333161316633386663313036613864616333633133222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20225B5C6E202020207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B5C6E2020202020202020202020205C22706F77657253746174655C223A205C2230315C222C5C6E2020202020202020202020205C2263757272656E745C223A205C2231352E30305C222C5C6E2020202020202020202020205C22766F6C746167655C223A205C223232382E385C222C5C6E2020202020202020202020205C22706F7765725C223A205C22313230305C225C6E20202020202020207D2C5C6E20202020202020205C2264657669636549645C223A205C22303030315C222C5C6E20202020202020205C22746370456E636F64655C223A205C224845585C222C5C6E20202020202020205C227265706C795061796C6F61645C223A205C22373237323730363332433637363537343633373337315C225C6E202020207D5C6E5D222C0A2020226465736372697074696F6E22203A20224149E887AAE58AA8E7949FE68890E79A84E8A7A3E69E90E5928CE58D8FE8AEAE222C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'iot'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('b5723ec5a8e24bdaa647e60a1dc82638', 1754039162333, NULL, 'api', '小蘑菇插座', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20226235373233656335613865323462646161363437653630613164633832363338222C0A20202273637269707422203A2022696D706F7274206C6F673B5C6E5C6E2F2F203136E8BF9BE588B6E8BDAC3130E8BF9BE588B6E695B0E5AD975C6E76617220686578546F496E74203D20686578203D3E207B5C6E202072657475726E20496E74656765722E7061727365496E74286865782C203136293B5C6E7D3B5C6E2F2F20E9A284E8A7A3E7A081EFBC8CE8A7A3E69E90E4B88AE68AA5E79A84E8AEBEE5A487E7BC96E58FB72064657669636549645C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D207B7D5C6E20202020766172207061796C6F6164486578203D207061796C6F61642E746F5570706572436173652829202F2F20E8BDACE4B8BAE5A4A7E586995C6E202020202F2F20E6A0A1E9AA8CE68AA5E69687E995BFE5BAA6E5928CE5B8A7E5A4B45C6E20202020696620287061796C6F61644865782E6C656E6774682829203E3D203138202626207061796C6F61644865782E737562737472696E6728302C203429203D3D3D205C22413541355C2229207B5C6E20202020202020202F2F20E4BB8EE7ACAC35E4BD8DE5BC80E5A78BE58F9634E5AD97E88A82EFBC8838E4B8AAE5AD97E7ACA6EFBC89E4BD9CE4B8BA2064657669636549645C6E2020202020202020726573756C742E6465766963654964203D207061796C6F61644865782E737562737472696E6728342C203132295C6E202020207D5C6E2020202072657475726E20726573756C745C6E7D5C6E5C6E766172206465636F6465203D287061796C6F61642C636F6E7465787429203D3E207B5C6E20206C6F672E696E666F285C22E8BF9BE585A5E7BC96E8A7A3E7A0812C7061796C6F61643D7B7D2C636F6E746578743D7B7D5C222C7061796C6F61642C636F6E74657874295C6E202076617220726573756C74203D205B5D3B5C6E2020766172207061796C6F6164486578203D7061796C6F61642E746F55707065724361736528293B5C6E20207661722070726F706572746965734F626A203D207B205C226D657373616765547970655C223A205C2250524F504552544945535C222C205C2270726F706572746965735C223A207B7D207D3B5C6E2020766172206576656E744F626A203D207B205C226D657373616765547970655C223A205C224556454E545C222C205C226576656E745C223A205C225C222C205C22646174615C223A207B7D207D3B5C6E5C6E20202F2F20E9AA8CE8AF81E5B8A7E5A4B4E5B8A7E5B0BE5C6E2020696620287061796C6F61644865782E737562737472696E6728302C20342920213D205C22413541355C22207C7C207061796C6F61644865782E737562737472696E67287061796C6F61644865782E6C656E6774682829202D20342920213D205C22354135415C2229207B5C6E2020202072657475726E206A736F6E546F537472285B7B205C226572726F725C223A205C22E697A0E69588E5B8A7E6A0BCE5BC8F5C22207D5D293B5C6E20207D5C6E5C6E20202F2F20E68F90E58F96E6A0B8E5BF83E5AD97E6AEB55C6E2020766172206465766963654964203D207061796C6F61644865782E737562737472696E6728342C2038293B202F2F20E8AEBEE5A4874944EFBC8834E5AD97E88A82EFBC895C6E202076617220636D64436F6465203D207061796C6F61644865782E737562737472696E6728382C203130293B202F2F20E591BDE4BBA4E7A081EFBC8831E5AD97E88A82EFBC895C6E202076617220646174614C656E203D20686578546F496E74287061796C6F61644865782E737562737472696E672831302C20313229293B202F2F20E695B0E68DAEE995BFE5BAA65C6E20207661722064617461486578203D207061796C6F61644865782E737562737472696E672831322C203132202B20646174614C656E202A2032293B202F2F20E695B0E68DAEE58CBA5C6E202076617220636865636B73756D203D207061796C6F61644865782E737562737472696E67283132202B20646174614C656E202A20322C203134202B20646174614C656E202A2032293B202F2F20E6A0A1E9AA8CE5928C5C6E5C6E20202F2F20E8AEBEE5A4874944E5AD98E585A5E68980E69C89E5AFB9E8B1A15C6E202070726F706572746965734F626A2E6465766963654964203D2064657669636549643B5C6E20206576656E744F626A2E6465766963654964203D2064657669636549643B5C6E20202F2FE9AA8CE8AF81E696B0E58685E5AEB95C6E202070726F706572746965734F626A2E636F6E746578743D636F6E746578743B5C6E202070726F706572746965734F626A2E746370456E636F6465203D2027484558273B5C6E202070726F706572746965734F626A2E7265706C795061796C6F6164203D202737323732373036333243363736353734363337333731275C6E20202F2F20312E20E5B19EE680A7E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813031EFBC895C6E202069662028636D64436F6465203D3D205C2230315C2220262620646174614C656E203D3D203729207B5C6E202020202F2F20E8A7A3E69E90E5BC80E585B3E78AB6E68081EFBC8830313DE5BC80EFBC8C30303DE585B3EFBC895C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F7765725374617465203D20646174614865782E737562737472696E6728302C203229203D3D205C2230315C22203F205C2230315C22203A205C2230305C223B5C6E202020202F2F20E8A7A3E69E90E794B5E6B581EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E303141EFBC895C6E202020207661722063757272656E74486578203D20646174614865782E737562737472696E6728322C2036293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E63757272656E74203D2028686578546F496E742863757272656E7448657829202A20302E3031292E746F46697865642832293B5C6E202020202F2F20E8A7A3E69E90E794B5E58E8BEFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E3156EFBC895C6E2020202076617220766F6C74616765486578203D20646174614865782E737562737472696E6728362C203130293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E766F6C74616765203D2028686578546F496E7428766F6C7461676548657829202A20302E31292E746F46697865642831293B5C6E202020202F2F20E8A7A3E69E90E58A9FE78E87EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D3157EFBC895C6E2020202076617220706F776572486578203D20646174614865782E737562737472696E672831302C203134293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F776572203D20686578546F496E7428706F776572486578292E746F537472696E6728293B5C6E202020202F2F20E58AA0E585A5E7BB93E69E9CE99B865C6E20202020726573756C742E707573682870726F706572746965734F626A293B5C6E20207D5C6E5C6E20202F2F20322E20E4BA8BE4BBB6E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813032EFBC895C6E202069662028636D64436F6465203D3D205C2230325C2220262620646174614C656E203E3D203329207B5C6E202020202F2F20E4BA8BE4BBB6E7B1BBE59E8BEFBC8830313DE8BF87E8BDBDEFBC8C30323DE8BF87E58E8BEFBC8C30333DE4B88AE7BABFEFBC8C30343DE4B88BE7BABFEFBC895C6E20202020766172206576656E7454797065203D20646174614865782E737562737472696E6728302C2032293B5C6E20202020696620286576656E7454797065203D3D205C2230315C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F7665726C6F61645C223B5C6E2020202020206576656E744F626A2E646174612E6F7665726C6F6164203D20686578546F496E7428646174614865782E737562737472696E6728322C20362929202B205C22575C223B202F2F20E8BF87E8BDBDE58A9FE78E875C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230335C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F6E6C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F6E6C696E65203D205C22E8AEBEE5A487E4B88AE7BABF5C223B5C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230345C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F66666C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F66666C696E65203D205C22E8AEBEE5A487E4B88BE7BABF5C223B5C6E202020207D5C6E20202020726573756C742E70757368286576656E744F626A293B5C6E20207D5C6E5C6E20202F2F20332E20E5938DE5BA94E68AA5E69687EFBC88E591BDE4BBA4E7A0813034EFBC895C6E202069662028636D64436F6465203D3D205C2230345C2220262620646174614C656E203D3D203129207B5C6E20202020766172207265706C794F626A203D207B5C6E2020202020205C226D657373616765547970655C223A205C225245504C595C222C5C6E2020202020205C2266756E6374696F6E5C223A205C227377697463685C222C5C6E2020202020205C22646174615C223A207B205C22726573756C745C223A2064617461486578203D3D205C2230305C22203F205C22737563636573735C22203A205C226661696C5C22207D5C6E202020207D3B5C6E202020207265706C794F626A2E6465766963654964203D2064657669636549643B5C6E20202020726573756C742E70757368287265706C794F626A293B5C6E20207D5C6E5C6E202072657475726E206A736F6E546F53747228726573756C74293B5C6E7D3B5C6E5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020766172206F626A203D20746F4A736F6E287061796C6F6164293B5C6E2020766172206465766963654964203D206F626A2E646174612E64657669636549643B202F2F20E8AEBEE5A4874944EFBC8834E4BD8D3136E8BF9BE588B6EFBC8CE5A6825C22303030315C22EFBC895C6E20207661722066756E63203D206F626A2E66756E6374696F6E3B5C6E202076617220706172616D73203D206F626A2E646174613B5C6E5C6E20202F2F20E68EA7E588B6E5BC80E585B3EFBC8866756E6374696F6E3D737769746368EFBC895C6E20206966202866756E63203D3D205C227377697463685C2229207B5C6E20202020766172207374617465203D20706172616D732E73746174653B202F2F20E79BAEE6A087E78AB6E68081EFBC9A30313DE5BC80EFBC8C30303DE585B35C6E2020202069662028737461746520213D205C2230315C2220262620737461746520213D205C2230305C2229207B5C6E20202020202072657475726E205C225C223B202F2F20E697A0E69588E78AB6E68081EFBC8CE8BF94E59B9EE7A9BA5C6E202020207D5C6E5C6E202020202F2F20E695B0E68DAEE58CBAEFBC9AE68EA7E588B6E7B1BBE59E8B283031292BE79BAEE6A087E78AB6E680815C6E202020207661722064617461486578203D205C2230315C22202B2073746174653B5C6E2020202076617220646174614C656E203D20646174614865782E6C656E6774682829202F20323B202F2F20E695B0E68DAEE995BFE5BAA6EFBC88E5AD97E88A82E695B0EFBC895C6E2020202076617220636D64436F6465203D205C2230335C223B202F2F20E68EA7E588B6E68C87E4BBA4E591BDE4BBA4E7A0815C6E5C6E202020202F2F20E68BBCE68EA5E5AE8CE695B4E68AA5E69687EFBC88E697A0E6A0A1E9AA8CE5928CEFBC895C6E20202020766172206672616D65203D205C22413541355C22202B205C6E202020202020202020202020202020206465766963654964202B205C6E20202020202020202020202020202020636D64436F6465202B205C6E20202020202020202020202020202020496E74656765722E746F486578537472696E6728646174614C656E29202B202F2F20E695B0E68DAEE995BFE5BAA6EFBC8831E4BD8D3136E8BF9BE588B6EFBC895C6E2020202020202020202020202020202064617461486578202B205C6E202020202020202020202020202020205C22354135415C223B5C6E5C6E2020202072657475726E206672616D652E746F55707065724361736528293B202F2F20E8BDACE4B8BAE5A4A7E586993136E8BF9BE588B65C6E20207D5C6E5C6E202072657475726E205C225C223B202F2F20E4B88DE694AFE68C81E79A84E68C87E4BBA45C6E7D3B5C6E5C6E2F2F2072657475726E207072654465636F6465285C224135413530303031303130373031303544433038463030344230354135415C22295C6E2F2FE5B19EE680A7E4B88AE68AA5E68AA5E696875C6E72657475726E206465636F64652827413541353030303130313037303130354443303846303034423037413541354127293B5C6E5C6E2F2FE8BF87E8BDBDE4BA8BE4BBB6E68AA5E696875C6E2F2F2072657475726E206465636F6465285C224135413530303031303230333031303442304633354135415C22295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C2264657669636549645C223A205C22303030315C222C5C2266756E6374696F6E5C223A205C227377697463685C222C5C22646174615C223A207B205C2273746174655C223A205C2230315C22207D7D27295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C226D657373616765547970655C223A5C2246554E4354494F4E535C222C5C2266756E6374696F6E5C223A5C227377697463685C222C5C22646174615C223A7B5C2264657669636549645C223A5C2230303031303130375C222C5C2273746174655C223A5C2230315C227D7D2729222C0A20202267726F7570496422203A20226634626562303864633766653431353762396636336132326130653161343330222C0A2020226E616D6522203A2022E5B08FE89891E88F87E68F92E5BAA7222C0A20202263726561746554696D6522203A20313735333432333334343432382C0A20202275706461746554696D6522203A20313735343033393136323330372C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A2022696F74222C0A202022757064617465427922203A2022696F74222C0A2020227061746822203A2022363838333161316633386663313036613864616333633133222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20225B5D222C0A2020226465736372697074696F6E22203A20224149E887AAE58AA8E7949FE68890E79A84E8A7A3E69E90E5928CE58D8FE8AEAE222C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'iot'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('b5723ec5a8e24bdaa647e60a1dc82638', 1754039182069, NULL, 'api', '小蘑菇插座', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20226235373233656335613865323462646161363437653630613164633832363338222C0A20202273637269707422203A2022696D706F7274206C6F673B5C6E5C6E2F2F203136E8BF9BE588B6E8BDAC3130E8BF9BE588B6E695B0E5AD975C6E76617220686578546F496E74203D20686578203D3E207B5C6E202072657475726E20496E74656765722E7061727365496E74286865782C203136293B5C6E7D3B5C6E2F2F20E9A284E8A7A3E7A081EFBC8CE8A7A3E69E90E4B88AE68AA5E79A84E8AEBEE5A487E7BC96E58FB72064657669636549645C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D207B7D5C6E20202020766172207061796C6F6164486578203D207061796C6F61642E746F5570706572436173652829202F2F20E8BDACE4B8BAE5A4A7E586995C6E202020202F2F20E6A0A1E9AA8CE68AA5E69687E995BFE5BAA6E5928CE5B8A7E5A4B45C6E20202020696620287061796C6F61644865782E6C656E6774682829203E3D203138202626207061796C6F61644865782E737562737472696E6728302C203429203D3D3D205C22413541355C2229207B5C6E20202020202020202F2F20E4BB8EE7ACAC35E4BD8DE5BC80E5A78BE58F9634E5AD97E88A82EFBC8838E4B8AAE5AD97E7ACA6EFBC89E4BD9CE4B8BA2064657669636549645C6E2020202020202020726573756C742E6465766963654964203D207061796C6F61644865782E737562737472696E6728342C203132295C6E202020207D5C6E2020202072657475726E20726573756C745C6E7D5C6E5C6E766172206465636F6465203D287061796C6F61642C636F6E7465787429203D3E207B5C6E20206C6F672E696E666F285C22E8BF9BE585A5E7BC96E8A7A3E7A0812C7061796C6F61643D7B7D2C636F6E746578743D7B7D5C222C7061796C6F61642C636F6E74657874295C6E202076617220726573756C74203D205B5D3B5C6E2020766172207061796C6F6164486578203D7061796C6F61642E746F55707065724361736528293B5C6E20207661722070726F706572746965734F626A203D207B205C226D657373616765547970655C223A205C2250524F504552544945535C222C205C2270726F706572746965735C223A207B7D207D3B5C6E2020766172206576656E744F626A203D207B205C226D657373616765547970655C223A205C224556454E545C222C205C226576656E745C223A205C225C222C205C22646174615C223A207B7D207D3B5C6E5C6E20202F2F20E9AA8CE8AF81E5B8A7E5A4B4E5B8A7E5B0BE5C6E2020696620287061796C6F61644865782E737562737472696E6728302C20342920213D205C22413541355C22207C7C207061796C6F61644865782E737562737472696E67287061796C6F61644865782E6C656E6774682829202D20342920213D205C22354135415C2229207B5C6E2020202072657475726E206A736F6E546F537472285B7B205C226572726F725C223A205C22E697A0E69588E5B8A7E6A0BCE5BC8F5C22207D5D293B5C6E20207D5C6E5C6E20202F2F20E68F90E58F96E6A0B8E5BF83E5AD97E6AEB55C6E2020766172206465766963654964203D207061796C6F61644865782E737562737472696E6728342C2038293B202F2F20E8AEBEE5A4874944EFBC8834E5AD97E88A82EFBC895C6E202076617220636D64436F6465203D207061796C6F61644865782E737562737472696E6728382C203130293B202F2F20E591BDE4BBA4E7A081EFBC8831E5AD97E88A82EFBC895C6E202076617220646174614C656E203D20686578546F496E74287061796C6F61644865782E737562737472696E672831302C20313229293B202F2F20E695B0E68DAEE995BFE5BAA65C6E20207661722064617461486578203D207061796C6F61644865782E737562737472696E672831322C203132202B20646174614C656E202A2032293B202F2F20E695B0E68DAEE58CBA5C6E202076617220636865636B73756D203D207061796C6F61644865782E737562737472696E67283132202B20646174614C656E202A20322C203134202B20646174614C656E202A2032293B202F2F20E6A0A1E9AA8CE5928C5C6E5C6E20202F2F20E8AEBEE5A4874944E5AD98E585A5E68980E69C89E5AFB9E8B1A15C6E202070726F706572746965734F626A2E6465766963654964203D2064657669636549643B5C6E20206576656E744F626A2E6465766963654964203D2064657669636549643B5C6E20202F2FE9AA8CE8AF81E696B0E58685E5AEB95C6E202070726F706572746965734F626A2E636F6E746578743D636F6E746578743B5C6E202070726F706572746965734F626A2E746370456E636F6465203D2027484558273B5C6E202070726F706572746965734F626A2E7265706C795061796C6F6164203D202737323732373036333243363736353734363337333731275C6E20202F2F20312E20E5B19EE680A7E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813031EFBC895C6E202069662028636D64436F6465203D3D205C2230315C2220262620646174614C656E203D3D203729207B5C6E202020202F2F20E8A7A3E69E90E5BC80E585B3E78AB6E68081EFBC8830313DE5BC80EFBC8C30303DE585B3EFBC895C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F7765725374617465203D20646174614865782E737562737472696E6728302C203229203D3D205C2230315C22203F205C2230315C22203A205C2230305C223B5C6E202020202F2F20E8A7A3E69E90E794B5E6B581EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E303141EFBC895C6E202020207661722063757272656E74486578203D20646174614865782E737562737472696E6728322C2036293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E63757272656E74203D2028686578546F496E742863757272656E7448657829202A20302E3031292E746F46697865642832293B5C6E202020202F2F20E8A7A3E69E90E794B5E58E8BEFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E3156EFBC895C6E2020202076617220766F6C74616765486578203D20646174614865782E737562737472696E6728362C203130293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E766F6C74616765203D2028686578546F496E7428766F6C7461676548657829202A20302E31292E746F46697865642831293B5C6E202020202F2F20E8A7A3E69E90E58A9FE78E87EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D3157EFBC895C6E2020202076617220706F776572486578203D20646174614865782E737562737472696E672831302C203134293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F776572203D20686578546F496E7428706F776572486578292E746F537472696E6728293B5C6E202020202F2F20E58AA0E585A5E7BB93E69E9CE99B865C6E20202020726573756C742E707573682870726F706572746965734F626A293B5C6E20207D5C6E5C6E20202F2F20322E20E4BA8BE4BBB6E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813032EFBC895C6E202069662028636D64436F6465203D3D205C2230325C2220262620646174614C656E203E3D203329207B5C6E202020202F2F20E4BA8BE4BBB6E7B1BBE59E8BEFBC8830313DE8BF87E8BDBDEFBC8C30323DE8BF87E58E8BEFBC8C30333DE4B88AE7BABFEFBC8C30343DE4B88BE7BABFEFBC895C6E20202020766172206576656E7454797065203D20646174614865782E737562737472696E6728302C2032293B5C6E20202020696620286576656E7454797065203D3D205C2230315C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F7665726C6F61645C223B5C6E2020202020206576656E744F626A2E646174612E6F7665726C6F6164203D20686578546F496E7428646174614865782E737562737472696E6728322C20362929202B205C22575C223B202F2F20E8BF87E8BDBDE58A9FE78E875C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230335C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F6E6C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F6E6C696E65203D205C22E8AEBEE5A487E4B88AE7BABF5C223B5C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230345C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F66666C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F66666C696E65203D205C22E8AEBEE5A487E4B88BE7BABF5C223B5C6E202020207D5C6E20202020726573756C742E70757368286576656E744F626A293B5C6E20207D5C6E5C6E20202F2F20332E20E5938DE5BA94E68AA5E69687EFBC88E591BDE4BBA4E7A0813034EFBC895C6E202069662028636D64436F6465203D3D205C2230345C2220262620646174614C656E203D3D203129207B5C6E20202020766172207265706C794F626A203D207B5C6E2020202020205C226D657373616765547970655C223A205C225245504C595C222C5C6E2020202020205C2266756E6374696F6E5C223A205C227377697463685C222C5C6E2020202020205C22646174615C223A207B205C22726573756C745C223A2064617461486578203D3D205C2230305C22203F205C22737563636573735C22203A205C226661696C5C22207D5C6E202020207D3B5C6E202020207265706C794F626A2E6465766963654964203D2064657669636549643B5C6E20202020726573756C742E70757368287265706C794F626A293B5C6E20207D5C6E5C6E202072657475726E206A736F6E546F53747228726573756C74293B5C6E7D3B5C6E5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020766172206F626A203D20746F4A736F6E287061796C6F6164293B5C6E2020766172206465766963654964203D206F626A2E646174612E64657669636549643B202F2F20E8AEBEE5A4874944EFBC8834E4BD8D3136E8BF9BE588B6EFBC8CE5A6825C22303030315C22EFBC895C6E20207661722066756E63203D206F626A2E66756E6374696F6E3B5C6E202076617220706172616D73203D206F626A2E646174613B5C6E5C6E20202F2F20E68EA7E588B6E5BC80E585B3EFBC8866756E6374696F6E3D737769746368EFBC895C6E20206966202866756E63203D3D205C227377697463685C2229207B5C6E20202020766172207374617465203D20706172616D732E73746174653B202F2F20E79BAEE6A087E78AB6E68081EFBC9A30313DE5BC80EFBC8C30303DE585B35C6E2020202069662028737461746520213D205C2230315C2220262620737461746520213D205C2230305C2229207B5C6E20202020202072657475726E205C225C223B202F2F20E697A0E69588E78AB6E68081EFBC8CE8BF94E59B9EE7A9BA5C6E202020207D5C6E5C6E202020202F2F20E695B0E68DAEE58CBAEFBC9AE68EA7E588B6E7B1BBE59E8B283031292BE79BAEE6A087E78AB6E680815C6E202020207661722064617461486578203D205C2230315C22202B2073746174653B5C6E2020202076617220646174614C656E203D20646174614865782E6C656E6774682829202F20323B202F2F20E695B0E68DAEE995BFE5BAA6EFBC88E5AD97E88A82E695B0EFBC895C6E2020202076617220636D64436F6465203D205C2230335C223B202F2F20E68EA7E588B6E68C87E4BBA4E591BDE4BBA4E7A0815C6E5C6E202020202F2F20E68BBCE68EA5E5AE8CE695B4E68AA5E69687EFBC88E697A0E6A0A1E9AA8CE5928CEFBC895C6E20202020766172206672616D65203D205C22413541355C22202B205C6E202020202020202020202020202020206465766963654964202B205C6E20202020202020202020202020202020636D64436F6465202B205C6E20202020202020202020202020202020496E74656765722E746F486578537472696E6728646174614C656E29202B202F2F20E695B0E68DAEE995BFE5BAA6EFBC8831E4BD8D3136E8BF9BE588B6EFBC895C6E2020202020202020202020202020202064617461486578202B205C6E202020202020202020202020202020205C22354135415C223B5C6E5C6E2020202072657475726E206672616D652E746F55707065724361736528293B202F2F20E8BDACE4B8BAE5A4A7E586993136E8BF9BE588B65C6E20207D5C6E5C6E202072657475726E205C225C223B202F2F20E4B88DE694AFE68C81E79A84E68C87E4BBA45C6E7D3B5C6E5C6E2F2F2072657475726E207072654465636F6465285C224135413530303031303130373031303544433038463030344230354135415C22295C6E2F2FE5B19EE680A7E4B88AE68AA5E68AA5E696875C6E72657475726E206465636F64652827413541353030303130313038303130354443303846303034423037413541354127293B5C6E5C6E2F2FE8BF87E8BDBDE4BA8BE4BBB6E68AA5E696875C6E2F2F2072657475726E206465636F6465285C224135413530303031303230333031303442304633354135415C22295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C2264657669636549645C223A205C22303030315C222C5C2266756E6374696F6E5C223A205C227377697463685C222C5C22646174615C223A207B205C2273746174655C223A205C2230315C22207D7D27295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C226D657373616765547970655C223A5C2246554E4354494F4E535C222C5C2266756E6374696F6E5C223A5C227377697463685C222C5C22646174615C223A7B5C2264657669636549645C223A5C2230303031303130375C222C5C2273746174655C223A5C2230315C227D7D2729222C0A20202267726F7570496422203A20226634626562303864633766653431353762396636336132326130653161343330222C0A2020226E616D6522203A2022E5B08FE89891E88F87E68F92E5BAA7222C0A20202263726561746554696D6522203A20313735333432333334343432382C0A20202275706461746554696D6522203A20313735343033393138323034362C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A2022696F74222C0A202022757064617465427922203A2022696F74222C0A2020227061746822203A2022363838333161316633386663313036613864616333633133222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20225B5C6E202020207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B5C6E2020202020202020202020205C22706F77657253746174655C223A205C2230315C222C5C6E2020202020202020202020205C2263757272656E745C223A205C2231352E30305C222C5C6E2020202020202020202020205C22766F6C746167655C223A205C223232382E385C222C5C6E2020202020202020202020205C22706F7765725C223A205C22313230305C225C6E20202020202020207D2C5C6E20202020202020205C2264657669636549645C223A205C22303030315C222C5C6E20202020202020205C22746370456E636F64655C223A205C224845585C222C5C6E20202020202020205C227265706C795061796C6F61645C223A205C22373237323730363332433637363537343633373337315C225C6E202020207D5C6E5D222C0A2020226465736372697074696F6E22203A20224149E887AAE58AA8E7949FE68890E79A84E8A7A3E69E90E5928CE58D8FE8AEAE222C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'iot'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('b5723ec5a8e24bdaa647e60a1dc82638', 1754039332364, NULL, 'api', '小蘑菇插座', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20226235373233656335613865323462646161363437653630613164633832363338222C0A20202273637269707422203A2022696D706F7274206C6F673B5C6E5C6E2F2F203136E8BF9BE588B6E8BDAC3130E8BF9BE588B6E695B0E5AD975C6E76617220686578546F496E74203D20686578203D3E207B5C6E202072657475726E20496E74656765722E7061727365496E74286865782C203136293B5C6E7D3B5C6E2F2F20E9A284E8A7A3E7A081EFBC8CE8A7A3E69E90E4B88AE68AA5E79A84E8AEBEE5A487E7BC96E58FB72064657669636549645C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D207B7D5C6E20202020766172207061796C6F6164486578203D207061796C6F61642E746F5570706572436173652829202F2F20E8BDACE4B8BAE5A4A7E586995C6E202020202F2F20E6A0A1E9AA8CE68AA5E69687E995BFE5BAA6E5928CE5B8A7E5A4B45C6E20202020696620287061796C6F61644865782E6C656E6774682829203E3D203138202626207061796C6F61644865782E737562737472696E6728302C203429203D3D3D205C22413541355C2229207B5C6E20202020202020202F2F20E4BB8EE7ACAC35E4BD8DE5BC80E5A78BE58F9634E5AD97E88A82EFBC8838E4B8AAE5AD97E7ACA6EFBC89E4BD9CE4B8BA2064657669636549645C6E2020202020202020726573756C742E6465766963654964203D207061796C6F61644865782E737562737472696E6728342C203132295C6E202020207D5C6E2020202072657475726E20726573756C745C6E7D5C6E5C6E766172206465636F6465203D287061796C6F61642C636F6E7465787429203D3E207B5C6E20206C6F672E696E666F285C22E8BF9BE585A5E7BC96E8A7A3E7A0812C7061796C6F61643D7B7D2C636F6E746578743D7B7D5C222C7061796C6F61642C636F6E74657874295C6E202076617220726573756C74203D205B5D3B5C6E2020766172207061796C6F6164486578203D7061796C6F61642E746F55707065724361736528293B5C6E20207661722070726F706572746965734F626A203D207B205C226D657373616765547970655C223A205C2250524F504552544945535C222C205C2270726F706572746965735C223A207B7D207D3B5C6E2020766172206576656E744F626A203D207B205C226D657373616765547970655C223A205C224556454E545C222C205C226576656E745C223A205C225C222C205C22646174615C223A207B7D207D3B5C6E5C6E20202F2F20E9AA8CE8AF81E5B8A7E5A4B4E5B8A7E5B0BE5C6E2020696620287061796C6F61644865782E737562737472696E6728302C20342920213D205C22413541355C22207C7C207061796C6F61644865782E737562737472696E67287061796C6F61644865782E6C656E6774682829202D20342920213D205C22354135415C2229207B5C6E2020202072657475726E206A736F6E546F537472285B7B205C226572726F725C223A205C22E697A0E69588E5B8A7E6A0BCE5BC8F5C22207D5D293B5C6E20207D5C6E5C6E20202F2F20E68F90E58F96E6A0B8E5BF83E5AD97E6AEB55C6E2020766172206465766963654964203D207061796C6F61644865782E737562737472696E6728342C2038293B202F2F20E8AEBEE5A4874944EFBC8834E5AD97E88A82EFBC895C6E202076617220636D64436F6465203D207061796C6F61644865782E737562737472696E6728382C203130293B202F2F20E591BDE4BBA4E7A081EFBC8831E5AD97E88A82EFBC895C6E202076617220646174614C656E203D20686578546F496E74287061796C6F61644865782E737562737472696E672831302C20313229293B202F2F20E695B0E68DAEE995BFE5BAA65C6E20207661722064617461486578203D207061796C6F61644865782E737562737472696E672831322C203132202B20646174614C656E202A2032293B202F2F20E695B0E68DAEE58CBA5C6E202076617220636865636B73756D203D207061796C6F61644865782E737562737472696E67283132202B20646174614C656E202A20322C203134202B20646174614C656E202A2032293B202F2F20E6A0A1E9AA8CE5928C5C6E5C6E20202F2F20E8AEBEE5A4874944E5AD98E585A5E68980E69C89E5AFB9E8B1A15C6E202070726F706572746965734F626A2E6465766963654964203D2064657669636549643B5C6E20206576656E744F626A2E6465766963654964203D2064657669636549643B5C6E20202F2FE9AA8CE8AF81E696B0E58685E5AEB95C6E202070726F706572746965734F626A2E636F6E746578743D636F6E746578743B5C6E202070726F706572746965734F626A2E746370456E636F6465203D2027484558273B5C6E202070726F706572746965734F626A2E7265706C795061796C6F6164203D202737323732373036333243363736353734363337333731275C6E20202F2F20312E20E5B19EE680A7E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813031EFBC895C6E202069662028636D64436F6465203D3D205C2230315C2220262620646174614C656E203D3D203729207B5C6E202020202F2F20E8A7A3E69E90E5BC80E585B3E78AB6E68081EFBC8830313DE5BC80EFBC8C30303DE585B3EFBC895C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F7765725374617465203D20646174614865782E737562737472696E6728302C203229203D3D205C2230315C22203F205C2230315C22203A205C2230305C223B5C6E202020202F2F20E8A7A3E69E90E794B5E6B581EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E303141EFBC895C6E202020207661722063757272656E74486578203D20646174614865782E737562737472696E6728322C2036293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E63757272656E74203D2028686578546F496E742863757272656E7448657829202A20302E3031292E746F46697865642832293B5C6E202020202F2F20E8A7A3E69E90E794B5E58E8BEFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D302E3156EFBC895C6E2020202076617220766F6C74616765486578203D20646174614865782E737562737472696E6728362C203130293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E766F6C74616765203D2028686578546F496E7428766F6C7461676548657829202A20302E31292E746F46697865642831293B5C6E202020202F2F20E8A7A3E69E90E58A9FE78E87EFBC8832E5AD97E88A82EFBC8CE58D95E4BD8D3157EFBC895C6E2020202076617220706F776572486578203D20646174614865782E737562737472696E672831302C203134293B5C6E2020202070726F706572746965734F626A2E70726F706572746965732E706F776572203D20686578546F496E7428706F776572486578292E746F537472696E6728293B5C6E202020202F2F20E58AA0E585A5E7BB93E69E9CE99B865C6E20202020726573756C742E707573682870726F706572746965734F626A293B5C6E20207D5C6E5C6E20202F2F20322E20E4BA8BE4BBB6E4B88AE68AA5EFBC88E591BDE4BBA4E7A0813032EFBC895C6E202069662028636D64436F6465203D3D205C2230325C2220262620646174614C656E203E3D203329207B5C6E202020202F2F20E4BA8BE4BBB6E7B1BBE59E8BEFBC8830313DE8BF87E8BDBDEFBC8C30323DE8BF87E58E8BEFBC8C30333DE4B88AE7BABFEFBC8C30343DE4B88BE7BABFEFBC895C6E20202020766172206576656E7454797065203D20646174614865782E737562737472696E6728302C2032293B5C6E20202020696620286576656E7454797065203D3D205C2230315C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F7665726C6F61645C223B5C6E2020202020206576656E744F626A2E646174612E6F7665726C6F6164203D20686578546F496E7428646174614865782E737562737472696E6728322C20362929202B205C22575C223B202F2F20E8BF87E8BDBDE58A9FE78E875C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230335C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F6E6C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F6E6C696E65203D205C22E8AEBEE5A487E4B88AE7BABF5C223B5C6E202020207D5C6E20202020696620286576656E7454797065203D3D205C2230345C2229207B5C6E2020202020206576656E744F626A2E6576656E74203D205C226F66666C696E655C223B5C6E2020202020206576656E744F626A2E646174612E6F66666C696E65203D205C22E8AEBEE5A487E4B88BE7BABF5C223B5C6E202020207D5C6E20202020726573756C742E70757368286576656E744F626A293B5C6E20207D5C6E5C6E20202F2F20332E20E5938DE5BA94E68AA5E69687EFBC88E591BDE4BBA4E7A0813034EFBC895C6E202069662028636D64436F6465203D3D205C2230345C2220262620646174614C656E203D3D203129207B5C6E20202020766172207265706C794F626A203D207B5C6E2020202020205C226D657373616765547970655C223A205C225245504C595C222C5C6E2020202020205C2266756E6374696F6E5C223A205C227377697463685C222C5C6E2020202020205C22646174615C223A207B205C22726573756C745C223A2064617461486578203D3D205C2230305C22203F205C22737563636573735C22203A205C226661696C5C22207D5C6E202020207D3B5C6E202020207265706C794F626A2E6465766963654964203D2064657669636549643B5C6E20202020726573756C742E70757368287265706C794F626A293B5C6E20207D5C6E5C6E202072657475726E206A736F6E546F53747228726573756C74293B5C6E7D3B5C6E5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020766172206F626A203D20746F4A736F6E287061796C6F6164293B5C6E2020766172206465766963654964203D206F626A2E646174612E64657669636549643B202F2F20E8AEBEE5A4874944EFBC8834E4BD8D3136E8BF9BE588B6EFBC8CE5A6825C22303030315C22EFBC895C6E20207661722066756E63203D206F626A2E66756E6374696F6E3B5C6E202076617220706172616D73203D206F626A2E646174613B5C6E5C6E20202F2F20E68EA7E588B6E5BC80E585B3EFBC8866756E6374696F6E3D737769746368EFBC895C6E20206966202866756E63203D3D205C227377697463685C2229207B5C6E20202020766172207374617465203D20706172616D732E73746174653B202F2F20E79BAEE6A087E78AB6E68081EFBC9A30313DE5BC80EFBC8C30303DE585B35C6E2020202069662028737461746520213D205C2230315C2220262620737461746520213D205C2230305C2229207B5C6E20202020202072657475726E205C225C223B202F2F20E697A0E69588E78AB6E68081EFBC8CE8BF94E59B9EE7A9BA5C6E202020207D5C6E5C6E202020202F2F20E695B0E68DAEE58CBAEFBC9AE68EA7E588B6E7B1BBE59E8B283031292BE79BAEE6A087E78AB6E680815C6E202020207661722064617461486578203D205C2230315C22202B2073746174653B5C6E2020202076617220646174614C656E203D20646174614865782E6C656E6774682829202F20323B202F2F20E695B0E68DAEE995BFE5BAA6EFBC88E5AD97E88A82E695B0EFBC895C6E2020202076617220636D64436F6465203D205C2230335C223B202F2F20E68EA7E588B6E68C87E4BBA4E591BDE4BBA4E7A0815C6E5C6E202020202F2F20E68BBCE68EA5E5AE8CE695B4E68AA5E69687EFBC88E697A0E6A0A1E9AA8CE5928CEFBC895C6E20202020766172206672616D65203D205C22413541355C22202B205C6E202020202020202020202020202020206465766963654964202B205C6E20202020202020202020202020202020636D64436F6465202B205C6E20202020202020202020202020202020496E74656765722E746F486578537472696E6728646174614C656E29202B202F2F20E695B0E68DAEE995BFE5BAA6EFBC8831E4BD8D3136E8BF9BE588B6EFBC895C6E2020202020202020202020202020202064617461486578202B205C6E202020202020202020202020202020205C22354135415C223B5C6E5C6E2020202072657475726E206672616D652E746F55707065724361736528293B202F2F20E8BDACE4B8BAE5A4A7E586993136E8BF9BE588B65C6E20207D5C6E5C6E202072657475726E205C225C223B202F2F20E4B88DE694AFE68C81E79A84E68C87E4BBA45C6E7D3B5C6E5C6E2F2F2072657475726E207072654465636F6465285C224135413530303031303130373031303544433038463030344230354135415C22295C6E2F2FE5B19EE680A7E4B88AE68AA5E68AA5E696875C6E72657475726E206465636F6465282741354135303030323031303730313033453830394334303544433541354127293B5C6E5C6E2F2FE8BF87E8BDBDE4BA8BE4BBB6E68AA5E696875C6E2F2F2072657475726E206465636F6465285C224135413530303031303230333031303442304633354135415C22295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C2264657669636549645C223A205C22303030315C222C5C2266756E6374696F6E5C223A205C227377697463685C222C5C22646174615C223A207B205C2273746174655C223A205C2230315C22207D7D27295C6E5C6E5C6E2F2F2072657475726E20656E636F646528277B5C226D657373616765547970655C223A5C2246554E4354494F4E535C222C5C2266756E6374696F6E5C223A5C227377697463685C222C5C22646174615C223A7B5C2264657669636549645C223A5C2230303031303130375C222C5C2273746174655C223A5C2230315C227D7D2729222C0A20202267726F7570496422203A20226634626562303864633766653431353762396636336132326130653161343330222C0A2020226E616D6522203A2022E5B08FE89891E88F87E68F92E5BAA7222C0A20202263726561746554696D6522203A20313735333432333334343432382C0A20202275706461746554696D6522203A20313735343033393333323333332C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A2022696F74222C0A202022757064617465427922203A2022696F74222C0A2020227061746822203A2022363838333161316633386663313036613864616333633133222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A20225B5D222C0A2020226465736372697074696F6E22203A20224149E887AAE58AA8E7949FE68890E79A84E8A7A3E69E90E5928CE58D8FE8AEAE222C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'iot'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('bea746cb74484886b5ea0d1efc678636', 1755154048575, NULL, 'api-group', '测试分组', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20226265613734366362373434383438383662356561306431656663363738363336222C0A2020226E616D6522203A2022E6B58BE8AF95E58886E7BB84222C0A2020227479706522203A2022617069222C0A202022706172656E74496422203A202230222C0A2020227061746822203A20222F7465737470726F746F636F6C222C0A20202263726561746554696D6522203A20313735353135343034383534382C0A20202275706461746554696D6522203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A206E756C6C2C0A202022706174687322203A205B205D2C0A2020226F7074696F6E7322203A205B205D0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('e3857faf66c04d9499c4d1e6a4406036', 1754144167840, NULL, 'api', '开关面板-MQTT-doc编写', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20226533383537666166363663303464393439396334643165366134343036303336222C0A20202273637269707422203A20222F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F70657274696573203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E707573682870726F70657274696573293B5C6E202020205C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E2F2F2072657475726E206465636F6465285C225C22293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E5BC80E585B3E99DA2E69DBF2D4D5154542D646F63E7BC96E58699222C0A20202263726561746554696D6522203A20313735343134343136373831342C0A20202275706461746554696D6522203A206E756C6C2C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A206E756C6C2C0A2020227061746822203A2022363838636439326664623965303135383837326634616139222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A2022E5BC80E585B3E99DA2E69DBF2D4D5154542D646F63E7BC96E58699222C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('e3857faf66c04d9499c4d1e6a4406036', 1754144175957, NULL, 'api', '开关面板-MQTT-doc编写', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20226533383537666166363663303464393439396334643165366134343036303336222C0A20202273637269707422203A2022696D706F7274206C6F675C6E2F2A2A5C6E202A20E9A284E8A7A3E7A081EFBC9AE68F90E58F96E8AEBEE5A487E8BAABE4BBBDE6A087E8AF865C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E58FAFE883BDE698AFE4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B4F626A6563747D207B64657669636549642C2070726F647563744B65797D5C6E202A2F5C6E766172207072654465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D207B5C6E20202020202020205C2264657669636549645C223A205C225C222C5C6E20202020202020205C2270726F647563744B65795C223A205C225C225C6E202020207D3B5C6E202020202F2F20544F444FEFBC9AE8A7A3E69E90E8AEBEE5A487E6A087E8AF865C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E5C6E2F2A2A5C6E202A20E8A7A3E7A081EFBC9AE8AEBEE5A487E695B0E68DAEE8BDACE5B9B3E58FB0E6A0BCE5BC8F5C6E202A2040706172616D207B537472696E677D207061796C6F616420E8AEBEE5A487E58E9FE5A78BE68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A204072657475726E73207B41727261797D20E5B9B3E58FB0E6A087E58786E6B688E681AFE695B0E7BB84EFBC8CE6AF8FE4B8AAE58583E7B4A0E7BB93E69E84EFBC9A5C6E202A2020205B5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C2250524F504552544945535C222C202F2F20E5B19EE680A7E7B1BBE59E8B5C6E202A2020202020202070726F706572746965733A207B7D202F2F20E8A7A3E69E90E5908EE79A84E5B19EE680A7E994AEE580BCE5AFB9EFBC88E6A0B9E68DAEE789A9E6A8A1E59E8BE58AA8E68081E8B083E695B4EFBC895C6E202A20202020207D2C5C6E202A20202020207B5C6E202A202020202020206D657373616765547970653A205C224556454E545C222C202F2F20E4BA8BE4BBB6E7B1BBE59E8B5C6E202A202020202020206576656E743A205C225C222C202F2F20E4BA8BE4BBB6E5908DE7A7B05C6E202A20202020202020646174613A207B7D202F2F20E4BA8BE4BBB6E58F82E695B05C6E202A20202020207D5C6E202A2020205D5C6E202A2F5C6E766172206465636F6465203D207061796C6F6164203D3E207B5C6E20202020766172207273203D205B5D3B5C6E202020202F2F20E5B19EE680A75C6E202020207661722070726F70657274696573203D207B5C6E20202020202020205C226D657373616765547970655C223A205C2250524F504552544945535C222C5C6E20202020202020205C2270726F706572746965735C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E707573682870726F70657274696573293B5C6E202020205C6E202020202F2F20E4BA8BE4BBB65C6E20202020766172206576656E74203D207B5C6E20202020202020205C226D657373616765547970655C223A205C224556454E545C222C5C6E20202020202020205C226576656E745C223A205C225C222C5C6E20202020202020205C22646174615C223A207B7D5C6E202020207D3B5C6E202020202F2F2072732E70757368286576656E74293B5C6E202020205C6E2020202072657475726E2072733B5C6E7D3B5C6E5C6E2F2F20E8B083E8AF95E7A4BAE4BE8BEFBC88E6ADA3E5BC8FE4BDBFE794A8E8AFB7E588A0E999A4E68896E6B3A8E9878AEFBC895C6E2F2F72657475726E207072654465636F6465285C225C22293B5C6E2F2F2072657475726E20656E636F6465287B7D293B5C6E2F2F2072657475726E206465636F6465285C225C22293B222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E5BC80E585B3E99DA2E69DBF2D4D5154542D646F63E7BC96E58699222C0A20202263726561746554696D6522203A20313735343134343136373831342C0A20202275706461746554696D6522203A20313735343134343137353933372C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A2022363838636439326664623965303135383837326634616139222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A2022E5BC80E585B3E99DA2E69DBF2D4D5154542D646F63E7BC96E58699222C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('e3857faf66c04d9499c4d1e6a4406036', 1754144187774, NULL, 'api', '开关面板-MQTT-doc编写', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20226533383537666166363663303464393439396334643165366134343036303336222C0A20202273637269707422203A2022696D706F7274206C6F675C6E5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E2020202076617220726573756C74203D205C225C223B5C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E20726573756C743B5C6E7D3B5C6E222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E5BC80E585B3E99DA2E69DBF2D4D5154542D646F63E7BC96E58699222C0A20202263726561746554696D6522203A20313735343134343136373831342C0A20202275706461746554696D6522203A20313735343134343138373734392C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A2022363838636439326664623965303135383837326634616139222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A2022E5BC80E585B3E99DA2E69DBF2D4D5154542D646F63E7BC96E58699222C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('e3857faf66c04d9499c4d1e6a4406036', 1754144224834, NULL, 'api', '开关面板-MQTT-doc编写', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20226533383537666166363663303464393439396334643165366134343036303336222C0A20202273637269707422203A2022696D706F7274206C6F675C6E5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E202020206C6F672E696E666F285C22E5BC80E585B3E99DA2E69DBF2D4D5154542D646F63E7BC96E586993D7B7D5C222C7061796C6F6164295C6E202020202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E2020202072657475726E207061796C6F61643B5C6E7D3B5C6E222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E5BC80E585B3E99DA2E69DBF2D4D5154542D646F63E7BC96E58699222C0A20202263726561746554696D6522203A20313735343134343136373831342C0A20202275706461746554696D6522203A20313735343134343232343739322C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A2022363838636439326664623965303135383837326634616139222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A2022E5BC80E585B3E99DA2E69DBF2D4D5154542D646F63E7BC96E58699222C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('e3857faf66c04d9499c4d1e6a4406036', 1754209302790, NULL, 'api', '开关面板-MQTT-doc编写', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20226533383537666166363663303464393439396334643165366134343036303336222C0A20202273637269707422203A2022696D706F7274206C6F675C6E5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E20202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E202072657475726E207061796C6F61643B5C6E7D3B5C6E222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E5BC80E585B3E99DA2E69DBF2D4D5154542D646F63E7BC96E58699222C0A20202263726561746554696D6522203A20313735343134343136373831342C0A20202275706461746554696D6522203A20313735343230393330323737342C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A2022363838636439326664623965303135383837326634616139222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A2022E5BC80E585B3E99DA2E69DBF2D4D5154542D646F63E7BC96E58699222C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -INSERT INTO `protocol_file_backup` (`id`, `create_date`, `tag`, `type`, `name`, `content`, `create_by`) VALUES ('e3857faf66c04d9499c4d1e6a4406036', 1754209859668, NULL, 'api', '开关面板-MQTT-doc编写', 0x7B0A20202270726F7065727469657322203A207B207D2C0A202022696422203A20226533383537666166363663303464393439396334643165366134343036303336222C0A20202273637269707422203A2022696D706F7274206C6F675C6E5C6E5C6E2F2A2A5C6E202A20E7BC96E7A081EFBC9AE5B9B3E58FB0E68C87E4BBA4E8BDACE8AEBEE5A487E6A0BCE5BC8F5C6E202A2040706172616D207B4F626A6563747D207061796C6F616420E5B9B3E58FB0E68C87E4BBA45C6E202A204072657475726E73207B537472696E677D20E8AEBEE5A487E58FAFE8AF86E588ABE79A84E68AA5E69687EFBC88E4BA8CE8BF9BE588B6E380814A534F4EE380813136E8BF9BE588B6E5AD97E7ACA6E4B8B2E7AD89EFBC895C6E202A2F5C6E76617220656E636F6465203D207061796C6F6164203D3E207B5C6E20207661722072733D746F4A736F6E287061796C6F6164293B5C6E202072732E696F743D27E6BC94E7A4BA696F74275C6E202072732E72616E646F6D4E756D3D72616E646F6D5369676E28293B5C6E20202F2F20544F444FEFBC9AE5AE9EE78EB0E7BC96E7A081E980BBE8BE915C6E202072657475726E2072733B5C6E7D3B5C6E222C0A20202267726F7570496422203A20223737623539393936353439643436333861383538383866376564643831333164222C0A2020226E616D6522203A2022E5BC80E585B3E99DA2E69DBF2D4D5154542D646F63E7BC96E58699222C0A20202263726561746554696D6522203A20313735343134343136373831342C0A20202275706461746554696D6522203A20313735343230393835393633362C0A2020226C6F636B22203A206E756C6C2C0A202022637265617465427922203A202274657374222C0A202022757064617465427922203A202274657374222C0A2020227061746822203A2022363838636439326664623965303135383837326634616139222C0A2020226D6574686F6422203A2022504F5354222C0A202022706172616D657465727322203A205B205D2C0A2020226F7074696F6E7322203A205B205D2C0A20202272657175657374426F647922203A206E756C6C2C0A2020226865616465727322203A205B205D2C0A202022706174687322203A205B205D2C0A202022726573706F6E7365426F647922203A206E756C6C2C0A2020226465736372697074696F6E22203A2022E5BC80E585B3E99DA2E69DBF2D4D5154542D646F63E7BC96E58699222C0A20202272657175657374426F6479446566696E6974696F6E22203A206E756C6C2C0A202022726573706F6E7365426F6479446566696E6974696F6E22203A206E756C6C0A7D, 'test'); -COMMIT; - --- ---------------------------- --- Table structure for qrtz_blob_triggers --- ---------------------------- -DROP TABLE IF EXISTS `qrtz_blob_triggers`; -CREATE TABLE `qrtz_blob_triggers` ( - `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '调度名称', - `trigger_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 'qrtz_triggers表trigger_name的外键', - `trigger_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 'qrtz_triggers表trigger_group的外键', - `blob_data` blob COMMENT '存放持久化Trigger对象', - PRIMARY KEY (`sched_name`,`trigger_name`,`trigger_group`) USING BTREE, - CONSTRAINT `qrtz_blob_triggers_ibfk_1` FOREIGN KEY (`sched_name`, `trigger_name`, `trigger_group`) REFERENCES `qrtz_triggers` (`sched_name`, `trigger_name`, `trigger_group`) ON DELETE RESTRICT ON UPDATE RESTRICT -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='Blob类型的触发器表'; - --- ---------------------------- --- Records of qrtz_blob_triggers --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for qrtz_calendars --- ---------------------------- -DROP TABLE IF EXISTS `qrtz_calendars`; -CREATE TABLE `qrtz_calendars` ( - `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '调度名称', - `calendar_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '日历名称', - `calendar` blob NOT NULL COMMENT '存放持久化calendar对象', - PRIMARY KEY (`sched_name`,`calendar_name`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='日历信息表'; - --- ---------------------------- --- Records of qrtz_calendars --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for qrtz_cron_triggers --- ---------------------------- -DROP TABLE IF EXISTS `qrtz_cron_triggers`; -CREATE TABLE `qrtz_cron_triggers` ( - `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '调度名称', - `trigger_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 'qrtz_triggers表trigger_name的外键', - `trigger_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 'qrtz_triggers表trigger_group的外键', - `cron_expression` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 'cron表达式', - `time_zone_id` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '时区', - PRIMARY KEY (`sched_name`,`trigger_name`,`trigger_group`) USING BTREE, - CONSTRAINT `qrtz_cron_triggers_ibfk_1` FOREIGN KEY (`sched_name`, `trigger_name`, `trigger_group`) REFERENCES `qrtz_triggers` (`sched_name`, `trigger_name`, `trigger_group`) ON DELETE RESTRICT ON UPDATE RESTRICT -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='Cron类型的触发器表'; - --- ---------------------------- --- Records of qrtz_cron_triggers --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for qrtz_fired_triggers --- ---------------------------- -DROP TABLE IF EXISTS `qrtz_fired_triggers`; -CREATE TABLE `qrtz_fired_triggers` ( - `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '调度名称', - `entry_id` varchar(95) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '调度器实例id', - `trigger_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 'qrtz_triggers表trigger_name的外键', - `trigger_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 'qrtz_triggers表trigger_group的外键', - `instance_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '调度器实例名', - `fired_time` bigint NOT NULL COMMENT '触发的时间', - `sched_time` bigint NOT NULL COMMENT '定时器制定的时间', - `priority` int NOT NULL COMMENT '优先级', - `state` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '状态', - `job_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '任务名称', - `job_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '任务组名', - `is_nonconcurrent` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '是否并发', - `requests_recovery` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '是否接受恢复执行', - PRIMARY KEY (`sched_name`,`entry_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='已触发的触发器表'; - --- ---------------------------- --- Records of qrtz_fired_triggers --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for qrtz_job_details --- ---------------------------- -DROP TABLE IF EXISTS `qrtz_job_details`; -CREATE TABLE `qrtz_job_details` ( - `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '调度名称', - `job_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '任务名称', - `job_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '任务组名', - `description` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '相关介绍', - `job_class_name` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '执行任务类名称', - `is_durable` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '是否持久化', - `is_nonconcurrent` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '是否并发', - `is_update_data` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '是否更新数据', - `requests_recovery` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '是否接受恢复执行', - `job_data` blob COMMENT '存放持久化job对象', - PRIMARY KEY (`sched_name`,`job_name`,`job_group`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='任务详细信息表'; - --- ---------------------------- --- Records of qrtz_job_details --- ---------------------------- -BEGIN; -INSERT INTO `qrtz_job_details` (`sched_name`, `job_name`, `job_group`, `description`, `job_class_name`, `is_durable`, `is_nonconcurrent`, `is_update_data`, `requests_recovery`, `job_data`) VALUES ('RuoyiScheduler', 'TASK_CLASS_NAME50', 'DEFAULT', NULL, 'com.ruoyi.quartz.util.QuartzDisallowConcurrentExecution', '0', '1', '0', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C7708000000100000000174000F5441534B5F50524F504552544945537372001E636F6D2E72756F79692E71756172747A2E646F6D61696E2E5379734A6F6200000000000000010200084C000A636F6E63757272656E747400124C6A6176612F6C616E672F537472696E673B4C000E63726F6E45787072657373696F6E71007E00094C000C696E766F6B6554617267657471007E00094C00086A6F6247726F757071007E00094C00056A6F6249647400104C6A6176612F6C616E672F4C6F6E673B4C00076A6F624E616D6571007E00094C000D6D697366697265506F6C69637971007E00094C000673746174757371007E000978720027636F6D2E72756F79692E636F6D6D6F6E2E636F72652E646F6D61696E2E42617365456E7469747900000000000000010200074C0008637265617465427971007E00094C000A63726561746554696D657400104C6A6176612F7574696C2F446174653B4C0006706172616D7371007E00034C000672656D61726B71007E00094C000B73656172636856616C756571007E00094C0008757064617465427971007E00094C000A75706461746554696D6571007E000C787074000561646D696E7372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017BA5B7A46878707400007070707400013174000C3020302036202A202A203F207400246465766963654F6E6C696E65486973746F72795461736B2E73617665282764617465272974000744454641554C547372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B02000078700000000000000032740021E8AEBEE5A487E59CA8E7BABFE78AB6E68081E4BF9DE5AD98EFBC88E697A5EFBC8974000133740001307800); -INSERT INTO `qrtz_job_details` (`sched_name`, `job_name`, `job_group`, `description`, `job_class_name`, `is_durable`, `is_nonconcurrent`, `is_update_data`, `requests_recovery`, `job_data`) VALUES ('RuoyiScheduler', 'TASK_CLASS_NAME52', 'DEFAULT', NULL, 'com.ruoyi.quartz.util.QuartzDisallowConcurrentExecution', '0', '1', '0', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C7708000000100000000174000F5441534B5F50524F504552544945537372001E636F6D2E72756F79692E71756172747A2E646F6D61696E2E5379734A6F6200000000000000010200084C000A636F6E63757272656E747400124C6A6176612F6C616E672F537472696E673B4C000E63726F6E45787072657373696F6E71007E00094C000C696E766F6B6554617267657471007E00094C00086A6F6247726F757071007E00094C00056A6F6249647400104C6A6176612F6C616E672F4C6F6E673B4C00076A6F624E616D6571007E00094C000D6D697366697265506F6C69637971007E00094C000673746174757371007E000978720027636F6D2E72756F79692E636F6D6D6F6E2E636F72652E646F6D61696E2E42617365456E7469747900000000000000010200074C0008637265617465427971007E00094C000A63726561746554696D657400104C6A6176612F7574696C2F446174653B4C0006706172616D7371007E00034C000672656D61726B71007E00094C000B73656172636856616C756571007E00094C0008757064617465427971007E00094C000A75706461746554696D6571007E000C787074000561646D696E7372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017BA5CA9BE078707400007070707400013174000C302030203230204C202A203F7400256465766963654F6E6C696E65486973746F72795461736B2E7361766528276D6F6E7468272974000744454641554C547372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B02000078700000000000000034740021E8AEBEE5A487E59CA8E7BABFE78AB6E68081E4BF9DE5AD98EFBC88E69C88EFBC8974000131740001307800); -INSERT INTO `qrtz_job_details` (`sched_name`, `job_name`, `job_group`, `description`, `job_class_name`, `is_durable`, `is_nonconcurrent`, `is_update_data`, `requests_recovery`, `job_data`) VALUES ('RuoyiScheduler', 'TASK_CLASS_NAME53', 'DEFAULT', NULL, 'com.ruoyi.quartz.util.QuartzDisallowConcurrentExecution', '0', '1', '0', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C7708000000100000000174000F5441534B5F50524F504552544945537372001E636F6D2E72756F79692E71756172747A2E646F6D61696E2E5379734A6F6200000000000000010200084C000A636F6E63757272656E747400124C6A6176612F6C616E672F537472696E673B4C000E63726F6E45787072657373696F6E71007E00094C000C696E766F6B6554617267657471007E00094C00086A6F6247726F757071007E00094C00056A6F6249647400104C6A6176612F6C616E672F4C6F6E673B4C00076A6F624E616D6571007E00094C000D6D697366697265506F6C69637971007E00094C000673746174757371007E000978720027636F6D2E72756F79692E636F6D6D6F6E2E636F72652E646F6D61696E2E42617365456E7469747900000000000000010200074C0008637265617465427971007E00094C000A63726561746554696D657400104C6A6176612F7574696C2F446174653B4C0006706172616D7371007E00034C000672656D61726B71007E00094C000B73656172636856616C756571007E00094C0008757064617465427971007E00094C000A75706461746554696D6571007E000C787074000561646D696E7372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017D122632A878707400007070707400013174000D302030202A2F32202A202A203F7400296465766963654F6E6C696E6553746174655461736B2E7570646174654F6E6C696E655374617465282974000744454641554C547372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B02000078700000000000000035740018E8AEBEE5A487E59CA8E7BABFE78AB6E68081E588A4E696AD74000131740001307800); -INSERT INTO `qrtz_job_details` (`sched_name`, `job_name`, `job_group`, `description`, `job_class_name`, `is_durable`, `is_nonconcurrent`, `is_update_data`, `requests_recovery`, `job_data`) VALUES ('UnivScheduler', 'TASK_CLASS_NAME11', '场景联动功能下发', NULL, 'cn.universal.quartz.util.QuartzDisallowConcurrentExecution', '0', '1', '0', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C7708000000100000000174000F5441534B5F50524F5045525449455373720021636E2E756E6976657273616C2E71756172747A2E646F6D61696E2E5379734A6F62000000000000000102000E4C000A636F6E63757272656E747400124C6A6176612F6C616E672F537472696E673B4C0008637265617465427971007E00094C000A63726561746554696D657400104C6A6176612F7574696C2F446174653B4C000E63726F6E45787072657373696F6E71007E00094C000C696E766F6B6554617267657471007E00094C00086A6F6247726F757071007E00094C00056A6F6249647400104C6A6176612F6C616E672F4C6F6E673B4C00076A6F624E616D6571007E00094C000D6D697366697265506F6C69637971007E00094C0006706172616D7371007E00034C000672656D61726B71007E00094C000673746174757371007E00094C0008757064617465427971007E00094C000A75706461746554696D6571007E000A787074000131740003696F747372000E6A6176612E7574696C2E44617465686A81014B59741903000078707708000001983653EF5C7874000F3020313020392C3136202A202A203F7400257363656E654C696E6B616765536572766963652E66756E6374696F6E446F776E2836344C29740018E59CBAE699AFE88194E58AA8E58A9FE883BDE4B88BE58F917372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000000000000B74000A7363656E6549643A3634740001337371007E00053F400000000000007708000000100000000078707400013071007E000E71007E00107800); -COMMIT; - --- ---------------------------- --- Table structure for qrtz_locks --- ---------------------------- -DROP TABLE IF EXISTS `qrtz_locks`; -CREATE TABLE `qrtz_locks` ( - `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '调度名称', - `lock_name` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '悲观锁名称', - PRIMARY KEY (`sched_name`,`lock_name`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='存储的悲观锁信息表'; - --- ---------------------------- --- Records of qrtz_locks --- ---------------------------- -BEGIN; -INSERT INTO `qrtz_locks` (`sched_name`, `lock_name`) VALUES ('UnivScheduler', 'STATE_ACCESS'); -INSERT INTO `qrtz_locks` (`sched_name`, `lock_name`) VALUES ('UnivScheduler', 'TRIGGER_ACCESS'); -COMMIT; - --- ---------------------------- --- Table structure for qrtz_paused_trigger_grps --- ---------------------------- -DROP TABLE IF EXISTS `qrtz_paused_trigger_grps`; -CREATE TABLE `qrtz_paused_trigger_grps` ( - `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '调度名称', - `trigger_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 'qrtz_triggers表trigger_group的外键', - PRIMARY KEY (`sched_name`,`trigger_group`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='暂停的触发器表'; - --- ---------------------------- --- Records of qrtz_paused_trigger_grps --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for qrtz_scheduler_state --- ---------------------------- -DROP TABLE IF EXISTS `qrtz_scheduler_state`; -CREATE TABLE `qrtz_scheduler_state` ( - `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '调度名称', - `instance_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '实例名称', - `last_checkin_time` bigint NOT NULL COMMENT '上次检查时间', - `checkin_interval` bigint NOT NULL COMMENT '检查间隔时间', - PRIMARY KEY (`sched_name`,`instance_name`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='调度器状态表'; - --- ---------------------------- --- Records of qrtz_scheduler_state --- ---------------------------- -BEGIN; -INSERT INTO `qrtz_scheduler_state` (`sched_name`, `instance_name`, `last_checkin_time`, `checkin_interval`) VALUES ('UnivScheduler', 'aleo1756302349868', 1756349454192, 150000); -COMMIT; - --- ---------------------------- --- Table structure for qrtz_simple_triggers --- ---------------------------- -DROP TABLE IF EXISTS `qrtz_simple_triggers`; -CREATE TABLE `qrtz_simple_triggers` ( - `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '调度名称', - `trigger_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 'qrtz_triggers表trigger_name的外键', - `trigger_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 'qrtz_triggers表trigger_group的外键', - `repeat_count` bigint NOT NULL COMMENT '重复的次数统计', - `repeat_interval` bigint NOT NULL COMMENT '重复的间隔时间', - `times_triggered` bigint NOT NULL COMMENT '已经触发的次数', - PRIMARY KEY (`sched_name`,`trigger_name`,`trigger_group`) USING BTREE, - CONSTRAINT `qrtz_simple_triggers_ibfk_1` FOREIGN KEY (`sched_name`, `trigger_name`, `trigger_group`) REFERENCES `qrtz_triggers` (`sched_name`, `trigger_name`, `trigger_group`) ON DELETE RESTRICT ON UPDATE RESTRICT -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='简单触发器的信息表'; - --- ---------------------------- --- Records of qrtz_simple_triggers --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for qrtz_simprop_triggers --- ---------------------------- -DROP TABLE IF EXISTS `qrtz_simprop_triggers`; -CREATE TABLE `qrtz_simprop_triggers` ( - `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '调度名称', - `trigger_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 'qrtz_triggers表trigger_name的外键', - `trigger_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 'qrtz_triggers表trigger_group的外键', - `str_prop_1` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'String类型的trigger的第一个参数', - `str_prop_2` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'String类型的trigger的第二个参数', - `str_prop_3` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'String类型的trigger的第三个参数', - `int_prop_1` int DEFAULT NULL COMMENT 'int类型的trigger的第一个参数', - `int_prop_2` int DEFAULT NULL COMMENT 'int类型的trigger的第二个参数', - `long_prop_1` bigint DEFAULT NULL COMMENT 'long类型的trigger的第一个参数', - `long_prop_2` bigint DEFAULT NULL COMMENT 'long类型的trigger的第二个参数', - `dec_prop_1` decimal(13,4) DEFAULT NULL COMMENT 'decimal类型的trigger的第一个参数', - `dec_prop_2` decimal(13,4) DEFAULT NULL COMMENT 'decimal类型的trigger的第二个参数', - `bool_prop_1` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'Boolean类型的trigger的第一个参数', - `bool_prop_2` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'Boolean类型的trigger的第二个参数', - PRIMARY KEY (`sched_name`,`trigger_name`,`trigger_group`) USING BTREE, - CONSTRAINT `qrtz_simprop_triggers_ibfk_1` FOREIGN KEY (`sched_name`, `trigger_name`, `trigger_group`) REFERENCES `qrtz_triggers` (`sched_name`, `trigger_name`, `trigger_group`) ON DELETE RESTRICT ON UPDATE RESTRICT -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='同步机制的行锁表'; - --- ---------------------------- --- Records of qrtz_simprop_triggers --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for qrtz_triggers --- ---------------------------- -DROP TABLE IF EXISTS `qrtz_triggers`; -CREATE TABLE `qrtz_triggers` ( - `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '调度名称', - `trigger_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '触发器的名字', - `trigger_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '触发器所属组的名字', - `job_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 'qrtz_job_details表job_name的外键', - `job_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 'qrtz_job_details表job_group的外键', - `description` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '相关介绍', - `next_fire_time` bigint DEFAULT NULL COMMENT '上一次触发时间(毫秒)', - `prev_fire_time` bigint DEFAULT NULL COMMENT '下一次触发时间(默认为-1表示不触发)', - `priority` int DEFAULT NULL COMMENT '优先级', - `trigger_state` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '触发器状态', - `trigger_type` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '触发器的类型', - `start_time` bigint NOT NULL COMMENT '开始时间', - `end_time` bigint DEFAULT NULL COMMENT '结束时间', - `calendar_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '日程表名称', - `misfire_instr` smallint DEFAULT NULL COMMENT '补偿执行的策略', - `job_data` blob COMMENT '存放持久化job对象', - PRIMARY KEY (`sched_name`,`trigger_name`,`trigger_group`) USING BTREE, - KEY `sched_name` (`sched_name`,`job_name`,`job_group`) USING BTREE, - CONSTRAINT `qrtz_triggers_ibfk_1` FOREIGN KEY (`sched_name`, `job_name`, `job_group`) REFERENCES `qrtz_job_details` (`sched_name`, `job_name`, `job_group`) ON DELETE RESTRICT ON UPDATE RESTRICT -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='触发器详细信息表'; - --- ---------------------------- --- Records of qrtz_triggers --- ---------------------------- -BEGIN; -INSERT INTO `qrtz_triggers` (`sched_name`, `trigger_name`, `trigger_group`, `job_name`, `job_group`, `description`, `next_fire_time`, `prev_fire_time`, `priority`, `trigger_state`, `trigger_type`, `start_time`, `end_time`, `calendar_name`, `misfire_instr`, `job_data`) VALUES ('RuoyiScheduler', 'TASK_CLASS_NAME50', 'DEFAULT', 'TASK_CLASS_NAME50', 'DEFAULT', NULL, 1640296800000, -1, 5, 'WAITING', 'CRON', 1640244959000, 0, NULL, 2, ''); -INSERT INTO `qrtz_triggers` (`sched_name`, `trigger_name`, `trigger_group`, `job_name`, `job_group`, `description`, `next_fire_time`, `prev_fire_time`, `priority`, `trigger_state`, `trigger_type`, `start_time`, `end_time`, `calendar_name`, `misfire_instr`, `job_data`) VALUES ('RuoyiScheduler', 'TASK_CLASS_NAME52', 'DEFAULT', 'TASK_CLASS_NAME52', 'DEFAULT', NULL, 1640952000000, -1, 5, 'WAITING', 'CRON', 1640244959000, 0, NULL, -1, ''); -INSERT INTO `qrtz_triggers` (`sched_name`, `trigger_name`, `trigger_group`, `job_name`, `job_group`, `description`, `next_fire_time`, `prev_fire_time`, `priority`, `trigger_state`, `trigger_type`, `start_time`, `end_time`, `calendar_name`, `misfire_instr`, `job_data`) VALUES ('RuoyiScheduler', 'TASK_CLASS_NAME53', 'DEFAULT', 'TASK_CLASS_NAME53', 'DEFAULT', NULL, 1640246400000, -1, 5, 'WAITING', 'CRON', 1640244959000, 0, NULL, -1, ''); -INSERT INTO `qrtz_triggers` (`sched_name`, `trigger_name`, `trigger_group`, `job_name`, `job_group`, `description`, `next_fire_time`, `prev_fire_time`, `priority`, `trigger_state`, `trigger_type`, `start_time`, `end_time`, `calendar_name`, `misfire_instr`, `job_data`) VALUES ('UnivScheduler', 'TASK_CLASS_NAME11', '场景联动功能下发', 'TASK_CLASS_NAME11', '场景联动功能下发', NULL, 1753319400000, 1753258200000, 5, 'WAITING', 'CRON', 1753258127000, 0, NULL, 2, ''); -COMMIT; - --- ---------------------------- --- Table structure for rule_model --- ---------------------------- -DROP TABLE IF EXISTS `rule_model`; -CREATE TABLE `rule_model` ( - `id` bigint NOT NULL COMMENT 'id', - `rule_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '规则名称', - `data_level` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '数据级别', - `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '描述', - `status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '状态', - `product_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '产品KEY', - `config` json DEFAULT NULL COMMENT '规则配置', - `creator_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '创建人', - `create_time` datetime DEFAULT NULL COMMENT '创建时间', - `update_time` datetime DEFAULT NULL COMMENT '更新时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='规则模型'; - --- ---------------------------- --- Records of rule_model --- ---------------------------- -BEGIN; -INSERT INTO `rule_model` (`id`, `rule_name`, `data_level`, `description`, `status`, `product_key`, `config`, `creator_id`, `create_time`, `update_time`) VALUES (1938517288869347328, '模拟设备', 'product', '123', 'run', '681c0775c2dc427d0480ab5f', '{\"appId\": \"*\", \"fields\": \"*\", \"targets\": [{\"id\": \"54d669a6-0c1a-46db-99ba-563d78ff8209\", \"url\": \"http://127.0.0.1:9092/test/echo\", \"type\": \"http\"}]}', 'test', '2025-06-27 16:38:32', '2025-08-06 19:06:04'); -INSERT INTO `rule_model` (`id`, `rule_name`, `data_level`, `description`, `status`, `product_key`, `config`, `creator_id`, `create_time`, `update_time`) VALUES (1951455958190497792, '数据转发', 'group', NULL, 'run', NULL, '{\"appId\": \"*\", \"fields\": \"*\", \"targets\": [{\"id\": \"057dbea2-2b5c-4303-af0b-2f080f5c1b56\", \"url\": \"http://127.0.0.1:9092/test/echo\", \"type\": \"http\"}]}', 'iot', '2025-08-02 09:32:11', '2025-08-06 21:40:25'); -COMMIT; - --- ---------------------------- --- Table structure for rule_model_instance --- ---------------------------- -DROP TABLE IF EXISTS `rule_model_instance`; -CREATE TABLE `rule_model_instance` ( - `id` bigint NOT NULL COMMENT 'id', - `model_id` bigint DEFAULT NULL COMMENT '模型id', - `relation_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '关联类型', - `relation_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '关联id', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='规则实例'; - --- ---------------------------- --- Records of rule_model_instance --- ---------------------------- -BEGIN; -INSERT INTO `rule_model_instance` (`id`, `model_id`, `relation_type`, `relation_id`) VALUES (1485428032639234048, 1485419002550185984, 'device', '9f0faba72b5d47718cd9353041e97d40'); -INSERT INTO `rule_model_instance` (`id`, `model_id`, `relation_type`, `relation_id`) VALUES (1486157429939785728, 1483700361927532544, 'device', '4858f039e4b44fe0987c330392f65815'); -INSERT INTO `rule_model_instance` (`id`, `model_id`, `relation_type`, `relation_id`) VALUES (1486157429943980032, 1483700361927532544, 'device', 'd125e66e026349bf9a52ac19b126cff2'); -INSERT INTO `rule_model_instance` (`id`, `model_id`, `relation_type`, `relation_id`) VALUES (1493045086909276160, 1486153439457988608, 'product', 'HBkRhKSj'); -INSERT INTO `rule_model_instance` (`id`, `model_id`, `relation_type`, `relation_id`) VALUES (1493098852232671232, 1491677415030571008, 'group', '1491675370504503296'); -INSERT INTO `rule_model_instance` (`id`, `model_id`, `relation_type`, `relation_id`) VALUES (1493493945724760064, 1493493945519239168, 'product', 'test'); -INSERT INTO `rule_model_instance` (`id`, `model_id`, `relation_type`, `relation_id`) VALUES (1493496334934536192, 1493496334917758976, 'product', 'test'); -INSERT INTO `rule_model_instance` (`id`, `model_id`, `relation_type`, `relation_id`) VALUES (1493754343145287680, 1493754343090761728, 'product', 'test'); -INSERT INTO `rule_model_instance` (`id`, `model_id`, `relation_type`, `relation_id`) VALUES (1493785487857373184, 1493785487672823808, 'product', 'HBkRhKSj'); -INSERT INTO `rule_model_instance` (`id`, `model_id`, `relation_type`, `relation_id`) VALUES (1493905699827015680, 1493830716295647232, 'product', 'HBkRhKSj'); -INSERT INTO `rule_model_instance` (`id`, `model_id`, `relation_type`, `relation_id`) VALUES (1496786018855018496, 1496786018825658368, 'product', 'HBkRhKSj'); -INSERT INTO `rule_model_instance` (`id`, `model_id`, `relation_type`, `relation_id`) VALUES (1499592722411155456, 1499592722356629504, 'product', 'HBkRhKSj'); -INSERT INTO `rule_model_instance` (`id`, `model_id`, `relation_type`, `relation_id`) VALUES (1499636471300337664, 1499636471229034496, 'product', '1111'); -INSERT INTO `rule_model_instance` (`id`, `model_id`, `relation_type`, `relation_id`) VALUES (1499636605828444160, 1499636605807472640, 'product', '1111'); -INSERT INTO `rule_model_instance` (`id`, `model_id`, `relation_type`, `relation_id`) VALUES (1600323699565502464, 1497109632061964288, 'product', 'HBkRhKSj'); -INSERT INTO `rule_model_instance` (`id`, `model_id`, `relation_type`, `relation_id`) VALUES (1600828170421497856, 1554365384672628736, 'product', '62e8aaa9cd68f383e4c18d87'); -INSERT INTO `rule_model_instance` (`id`, `model_id`, `relation_type`, `relation_id`) VALUES (1602134252485971968, 1600781613110226944, 'product', '632ad1abcd6868ad76930e19'); -INSERT INTO `rule_model_instance` (`id`, `model_id`, `relation_type`, `relation_id`) VALUES (1610462666376708096, 1610458620202942464, 'group', '1610458307660185600'); -INSERT INTO `rule_model_instance` (`id`, `model_id`, `relation_type`, `relation_id`) VALUES (1610468879919316992, 1610467431496122368, 'product', '15104868'); -INSERT INTO `rule_model_instance` (`id`, `model_id`, `relation_type`, `relation_id`) VALUES (1691642130799837184, 1508625094050508800, 'device', '4aaabeb0d3504d3ca39d8184b1844e55'); -INSERT INTO `rule_model_instance` (`id`, `model_id`, `relation_type`, `relation_id`) VALUES (1692461242133778432, 1692461241966006272, 'group', '1481967386374025216'); -INSERT INTO `rule_model_instance` (`id`, `model_id`, `relation_type`, `relation_id`) VALUES (1748168860993400832, 1742787987305517056, 'product', '658940dc59765da0afc52cc7'); -INSERT INTO `rule_model_instance` (`id`, `model_id`, `relation_type`, `relation_id`) VALUES (1759858576130158592, 1759858576100798464, 'product', '65d1bba259767f6aa55801a6'); -INSERT INTO `rule_model_instance` (`id`, `model_id`, `relation_type`, `relation_id`) VALUES (1927703560096690176, 1927703559882780672, 'product', '682d6ed9e4b0262696ffe0b3'); -INSERT INTO `rule_model_instance` (`id`, `model_id`, `relation_type`, `relation_id`) VALUES (1940388729789284352, 1938517288869347328, 'product', '681c0775c2dc427d0480ab5f'); -INSERT INTO `rule_model_instance` (`id`, `model_id`, `relation_type`, `relation_id`) VALUES (1953088632411811840, 1951455958190497792, 'group', '1950770676340260864'); -COMMIT; - --- ---------------------------- --- Table structure for scene_linkage --- ---------------------------- -DROP TABLE IF EXISTS `scene_linkage`; -CREATE TABLE `scene_linkage` ( - `id` bigint NOT NULL AUTO_INCREMENT, - `scene_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '场景名称', - `touch` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT 'one' COMMENT '触发条件 all.全部 one.任意一个', - `trigger_condition` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '触发条件', - `exec_action` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '执行动作', - `sleep_cycle` int DEFAULT NULL COMMENT '沉默周期', - `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `create_time` datetime DEFAULT NULL, - `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `update_time` datetime DEFAULT NULL, - `status` tinyint DEFAULT '0' COMMENT '0启用 1停用', - `dev_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '设备id', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=66 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='场景联动'; - --- ---------------------------- --- Records of scene_linkage --- ---------------------------- -BEGIN; -INSERT INTO `scene_linkage` (`id`, `scene_name`, `touch`, `trigger_condition`, `exec_action`, `sleep_cycle`, `create_by`, `create_time`, `update_by`, `update_time`, `status`, `dev_id`) VALUES (63, '联动', 'one', '[{\"trigger\":\"device\",\"type\":\"event\",\"deviceId\":\"ov00014117\",\"deviceName\":\"ov00014117\",\"modelId\":\"batteryRestore\",\"filters\":[]}]', '[{\"trigger\":\"notice\",\"filters\":[],\"noticeTemplateId\":\"3\",\"noticeTemplateName\":\"Aleo的验证模版\"},{\"trigger\":\"device\",\"type\":\"functions\",\"deviceId\":\"ov0001411\",\"deviceName\":\"ov0001411\",\"modelId\":\"switchControl\",\"filters\":[],\"execData\":[{\"id\":\"open\",\"name\":\"开关控制\",\"params\":\"0\"}]},{\"trigger\":\"notice\",\"filters\":[],\"noticeTemplateId\":\"5\",\"noticeTemplateName\":\"广丰机房消息推送\"}]', 7200, 'test', '2025-06-27 16:27:38', 'test', '2025-08-04 22:55:19', 0, NULL); -INSERT INTO `scene_linkage` (`id`, `scene_name`, `touch`, `trigger_condition`, `exec_action`, `sleep_cycle`, `create_by`, `create_time`, `update_by`, `update_time`, `status`, `dev_id`) VALUES (65, '01', 'one', '[{\"trigger\":\"manual\",\"filters\":[]}]', '[{\"trigger\":\"device\",\"type\":\"functions\",\"deviceId\":\"ov00014117\",\"deviceName\":\"潜江雅园1号楼底商店铺\",\"modelId\":\"switchControl\",\"filters\":[],\"execData\":[{\"id\":\"open\",\"name\":\"开关控制\",\"params\":\"0\"}]}]', 5, 'test', '2025-08-26 11:16:30', 'test', '2025-08-26 11:16:30', 0, NULL); -COMMIT; - --- ---------------------------- --- Table structure for support_map_areas --- ---------------------------- -DROP TABLE IF EXISTS `support_map_areas`; -CREATE TABLE `support_map_areas` ( - `id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'id', - `pid` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '父id', - `name` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '地址', - `full_name` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '详细地址', - `deep` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '深度', - `location` geometry NOT NULL COMMENT '核心点坐标', - `polygon` geometry NOT NULL COMMENT '范围坐标', - PRIMARY KEY (`id`) USING BTREE, - KEY `pid_index` (`pid`) USING BTREE, - SPATIAL KEY `sp_index` (`polygon`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- ---------------------------- --- Records of support_map_areas --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for sys_config --- ---------------------------- -DROP TABLE IF EXISTS `sys_config`; -CREATE TABLE `sys_config` ( - `config_id` int NOT NULL AUTO_INCREMENT COMMENT '参数主键', - `config_name` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '参数名称', - `config_key` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '参数键名', - `config_value` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '参数键值', - `config_type` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT 'N' COMMENT '系统内置(Y是 N否)', - `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '创建者', - `create_time` datetime DEFAULT NULL COMMENT '创建时间', - `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '更新者', - `update_time` datetime DEFAULT NULL COMMENT '更新时间', - `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '备注', - PRIMARY KEY (`config_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb3 COMMENT='参数配置表'; - --- ---------------------------- --- Records of sys_config --- ---------------------------- -BEGIN; -INSERT INTO `sys_config` (`config_id`, `config_name`, `config_key`, `config_value`, `config_type`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1, '主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-blue', 'Y', 'admin', '2021-08-06 15:21:15', '', NULL, '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow'); -INSERT INTO `sys_config` (`config_id`, `config_name`, `config_key`, `config_value`, `config_type`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2, '用户管理-账号初始密码', 'sys.user.initPassword', '123456', 'Y', 'admin', '2021-08-06 15:21:15', '', NULL, '初始化密码 123456'); -INSERT INTO `sys_config` (`config_id`, `config_name`, `config_key`, `config_value`, `config_type`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (3, '主框架页-侧边栏主题', 'sys.index.sideTheme', 'theme-dark', 'Y', 'admin', '2021-08-06 15:21:15', 'admin', '2021-09-09 15:01:46', '深色主题theme-dark,浅色主题theme-light'); -INSERT INTO `sys_config` (`config_id`, `config_name`, `config_key`, `config_value`, `config_type`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (4, '账号自助-验证码开关', 'sys.account.captchaOnOff', 'false', 'Y', 'admin', '2021-08-06 15:21:15', '', '2021-12-30 09:22:06', '是否开启登录验证码功能(true开启,false关闭)'); -INSERT INTO `sys_config` (`config_id`, `config_name`, `config_key`, `config_value`, `config_type`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (10, 'OSS云存储服务商', 'sys.oss.cloudStorageService', 'minio', 'Y', 'admin', '2021-08-06 15:21:45', '', NULL, 'OSS云存储服务商(qiniu:七牛云, aliyun:阿里云, qcloud:腾讯云, minio: Minio)'); -INSERT INTO `sys_config` (`config_id`, `config_name`, `config_key`, `config_value`, `config_type`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (11, 'OSS预览列表资源开关', 'sys.oss.previewListResource', 'true', 'Y', 'admin', '2021-08-06 15:21:45', '', NULL, 'true:开启, false:关闭'); -INSERT INTO `sys_config` (`config_id`, `config_name`, `config_key`, `config_value`, `config_type`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (12, '授权', 'directUrl', 'ddd', 'Y', 'admin', '2021-10-21 18:33:45', NULL, NULL, NULL); -INSERT INTO `sys_config` (`config_id`, `config_name`, `config_key`, `config_value`, `config_type`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (13, '修改密码周期(天)', 'updatePasswordCycle', '90', 'Y', 'admin', '2021-11-02 14:37:25', NULL, NULL, NULL); -COMMIT; - --- ---------------------------- --- Table structure for sys_dict_data --- ---------------------------- -DROP TABLE IF EXISTS `sys_dict_data`; -CREATE TABLE `sys_dict_data` ( - `dict_code` bigint NOT NULL AUTO_INCREMENT COMMENT '字典编码', - `dict_sort` int DEFAULT '0' COMMENT '字典排序', - `dict_label` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '字典标签', - `dict_value` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '字典键值', - `dict_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '字典类型', - `css_class` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '样式属性(其他样式扩展)', - `list_class` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '表格回显样式', - `is_default` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT 'N' COMMENT '是否默认(Y是 N否)', - `status` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '0' COMMENT '状态(0正常 1停用)', - `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '创建者', - `create_time` datetime DEFAULT NULL COMMENT '创建时间', - `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '更新者', - `update_time` datetime DEFAULT NULL COMMENT '更新时间', - `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '备注', - PRIMARY KEY (`dict_code`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=580 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='字典数据表'; - --- ---------------------------- --- Records of sys_dict_data --- ---------------------------- -BEGIN; -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (197, 0, '正常', '0', 'sys_normal_disable', NULL, NULL, NULL, '0', 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (198, 1, '停用', '1', 'sys_normal_disable', NULL, NULL, NULL, '0', 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (199, 0, '显示', '0', 'sys_show_hide', NULL, NULL, NULL, '0', 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (200, 1, '隐藏', '1', 'sys_show_hide', NULL, NULL, NULL, '0', 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (201, 0, '是', 'Y', 'sys_yes_no', NULL, NULL, NULL, '0', 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (202, 1, '否', 'N', 'sys_yes_no', NULL, NULL, NULL, '0', 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (203, 0, '成功', '0', 'sys_common_status', NULL, NULL, NULL, '0', 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (204, 1, '失败', '1', 'sys_common_status', NULL, NULL, NULL, '0', 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (205, 0, '离线', 'false', 'dev_instance_state', NULL, NULL, NULL, '0', 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (206, 1, '在线', 'true', 'dev_instance_state', NULL, NULL, NULL, '0', 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (217, 0, '操作人', 'operator', 'product_configuration_ctwing', NULL, NULL, NULL, '0', 'iot', '2021-12-29 14:00:04', 'iot', '2022-08-24 14:45:23', '{\"remark\":\"天翼物联默认账户\",\"type\":\"string\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (218, 0, '产品ID', 'productId', 'product_configuration_ctwing', NULL, NULL, NULL, '0', 'iot', '2021-12-29 14:01:40', 'iot', '2022-08-24 14:45:16', '{\"remark\":\"电信产品ID\",\"type\":\"string\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (219, 0, '设备指令缓存时长', 'ttl', 'product_configuration_ctwing', NULL, NULL, NULL, '0', 'iot', '2021-12-29 14:02:30', 'iot', '2022-08-24 14:45:05', '{\"remark\":\"设备指令缓存时长\",\"type\":\"string\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (220, 0, '指令下发数据类型', 'dataType', 'product_configuration_ctwing', NULL, NULL, NULL, '0', 'iot', '2021-12-29 14:06:45', 'iot', '2022-08-24 14:44:54', '{\"remark\":\"下发指令数据类型:1-字符串,2-16进制\",\"type\":\"string\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (221, 0, '指令下发数据方案', 'downParaType', 'product_configuration_ctwing', NULL, NULL, NULL, '0', 'iot', '2021-12-29 14:12:35', 'iot', '2023-05-08 11:37:50', '{\"remark\":\"0:TCP和LWM2M,透传1:MQTT、LWM2M协议非透传profile:有编解码的指令下发\",\"type\":\"string\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (222, 0, '是否透传', 'passThrough', 'product_configuration_ctwing', NULL, NULL, NULL, '0', 'iot', '2021-12-29 14:13:42', 'iot', '2022-08-24 14:44:04', '{\"remark\":\"TRUE|FALSE\",\"type\":\"boolean\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (223, 0, '产品Master-APIKey', 'masterKey', 'product_configuration_ctwing', NULL, NULL, NULL, '0', 'iot', '2021-12-29 14:14:56', 'iot', '2022-08-24 14:43:51', '{\"remark\":\"天翼物联Master-APIkey\",\"type\":\"string\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (224, 0, '发布', '0', 'product_state', NULL, NULL, NULL, '0', 'iot', '2021-12-30 09:33:52', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (226, 1, '停用', '1', 'product_state', NULL, NULL, NULL, '0', 'iot', '2021-12-30 09:34:21', 'iot', '2021-12-30 10:43:32', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (227, 0, '正常', '0', 'application_delete_status', NULL, NULL, NULL, '0', 'iot', '2021-12-30 13:49:44', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (228, 1, '删除', '1', 'application_delete_status', NULL, NULL, NULL, '0', 'iot', '2021-12-30 13:51:19', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (229, 0, '已发布', '1', 'protocol_state', NULL, NULL, NULL, '0', 'iot', '2022-01-06 14:19:09', 'iot', '2022-01-06 14:22:03', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (230, 1, '未发布', '0', 'protocol_state', NULL, NULL, NULL, '0', 'iot', '2022-01-06 14:19:18', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (231, 0, 'jar', 'jar', 'protocol_type', NULL, NULL, NULL, '1', 'iot', '2022-01-06 14:23:43', 'iot', '2025-07-13 11:35:08', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (232, 1, 'jscript', 'jscript', 'protocol_type', NULL, NULL, NULL, '0', 'iot', '2022-01-06 14:24:23', 'iot', '2022-01-06 14:34:41', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (233, 0, '设备', 'device', 'tsl_source', NULL, NULL, NULL, '0', 'iot', '2022-01-06 16:12:20', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (234, 0, '手动', 'manual', 'tsl_source', NULL, NULL, NULL, '0', 'iot', '2022-01-06 16:14:19', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (235, 0, '规则', 'rule', 'tsl_source', NULL, NULL, NULL, '0', 'iot', '2022-01-06 16:14:25', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (236, 0, 'MQTT', 'MQTT', 'connection_protocol', NULL, NULL, NULL, '0', 'iot', '2022-01-12 14:50:36', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (237, 1, 'UDP', 'UDP', 'connection_protocol', NULL, NULL, NULL, '0', 'iot', '2022-01-12 14:50:58', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (238, 2, 'CoAp', 'CoAp', 'connection_protocol', NULL, NULL, NULL, '0', 'iot', '2022-01-12 14:51:11', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (239, 3, 'TCP', 'TCP', 'connection_protocol', NULL, NULL, NULL, '0', 'iot', '2022-01-12 14:51:25', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (240, 4, 'HTTP', 'HTTP', 'connection_protocol', NULL, NULL, NULL, '0', 'iot', '2022-01-12 14:51:32', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (241, 5, 'HTTPS', 'HTTPS', 'connection_protocol', NULL, NULL, NULL, '0', 'iot', '2022-01-12 14:51:42', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (242, 0, 'int', 'int(整数型)', 'model_basic_data', NULL, NULL, NULL, '0', 'iot', '2022-01-24 16:37:04', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (243, 1, 'long', 'long(长整类型)', 'model_basic_data', NULL, NULL, NULL, '0', 'iot', '2022-01-24 16:37:29', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (244, 2, 'float', 'float(单精度浮点型)', 'model_basic_data', NULL, NULL, NULL, '0', 'iot', '2022-01-24 16:37:57', 'iot', '2022-01-24 16:50:47', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (245, 3, 'double', 'double(双精度浮点型)', 'model_basic_data', NULL, NULL, NULL, '0', 'iot', '2022-01-24 16:38:12', 'iot', '2022-01-24 16:51:00', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (246, 4, 'boolean', 'boolean(布尔型)', 'model_basic_data', NULL, NULL, NULL, '0', 'iot', '2022-01-24 16:39:01', 'iot', '2022-01-24 16:51:20', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (247, 5, 'string', 'string(字符串)', 'model_basic_data', NULL, NULL, NULL, '0', 'iot', '2022-01-24 16:39:29', 'iot', '2022-01-24 16:51:31', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (248, 6, 'text', 'text(文本)', 'model_basic_data', NULL, NULL, NULL, '0', 'iot', '2022-01-24 16:39:36', 'iot', '2022-01-24 16:51:37', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (249, 0, 'date', 'date(时间型)', 'model_other_data', NULL, NULL, NULL, '0', 'iot', '2022-01-24 16:42:18', 'iot', '2022-01-24 16:51:57', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (250, 1, 'array', 'array(数组)', 'model_other_data', NULL, NULL, NULL, '0', 'iot', '2022-01-24 16:42:26', 'iot', '2022-01-24 16:52:14', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (251, 2, 'enum', 'enum(枚举)', 'model_other_data', NULL, NULL, NULL, '0', 'iot', '2022-01-24 16:42:56', 'iot', '2022-01-24 16:52:21', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (252, 3, 'object', 'object(结构体)', 'model_other_data', NULL, NULL, NULL, '0', 'iot', '2022-01-24 16:43:08', 'iot', '2022-01-24 16:52:30', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (253, 4, 'geoPoint', 'geoPoint(地理位置)', 'model_other_data', NULL, NULL, NULL, '0', 'iot', '2022-01-24 16:43:27', 'iot', '2022-01-24 16:52:45', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (254, 5, 'file', 'file(文件)', 'model_other_data', NULL, NULL, NULL, '0', 'iot', '2022-01-24 16:43:41', 'iot', '2022-01-24 16:52:52', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (255, 6, 'password', 'password(密码)', 'model_other_data', NULL, NULL, NULL, '0', 'iot', '2022-01-24 16:43:50', 'iot', '2022-01-24 16:52:58', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (256, 7, 'geoShape', 'geoShape(地理形状)', 'model_other_data', NULL, NULL, NULL, '0', 'iot', '2022-01-24 16:44:43', 'iot', '2022-01-24 16:53:13', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (257, 0, 'utc', 'String类型的UTC时间戳(毫秒)', 'model_data_type', NULL, NULL, NULL, '0', 'iot', '2022-01-24 17:27:24', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (258, 1, 'yyyyMMddHHmmss', 'yyyy-MM-dd HH:mm:ss', 'model_data_type', NULL, NULL, NULL, '0', 'iot', '2022-01-24 17:28:55', 'iot', '2022-01-24 17:29:26', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (259, 0, 'url', 'URL(链接)', 'model_file_type', NULL, NULL, NULL, '0', 'iot', '2022-01-24 17:29:54', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (260, 1, 'base64', 'Base64(Base64编码)', 'model_file_type', NULL, NULL, NULL, '0', 'iot', '2022-01-24 17:30:27', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (261, 2, 'binary', 'Binary(二进制)', 'model_file_type', NULL, NULL, NULL, '0', 'iot', '2022-01-24 17:30:54', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (262, 0, 'often_used_unit', '常用单位', 'model_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-24 18:22:59', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (263, 1, 'measurement_unit', '计量单位', 'model_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-24 18:23:22', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (264, 2, 'area_unit', '面积单位', 'model_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-24 18:23:56', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (265, 3, 'time_unit', '时间单位', 'model_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-24 18:24:12', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (266, 4, 'volume_unit', '体积单位', 'model_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-24 18:24:32', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (267, 5, 'flow_unit', '流量单位', 'model_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-24 18:24:53', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (268, 6, 'capacity_unit', '容积单位', 'model_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-24 18:25:13', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (269, 7, 'mass_unit', '质量单位', 'model_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-24 18:25:30', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (270, 8, 'pressure_unit', '压力单位', 'model_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-24 18:25:49', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (271, 9, 'temperature_unit', '温度单位', 'model_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-24 18:26:05', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (272, 10, 'energy_unit', '能量单位', 'model_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-24 18:26:24', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (275, 11, 'power_unit', '功率单位', 'model_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-24 18:29:45', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (276, 12, 'angle_unit', '角度单位', 'model_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-24 18:30:02', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (277, 13, 'frequency_unit', '频率单位', 'model_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-24 18:30:19', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (278, 14, 'speed_unit', '速度单位', 'model_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-24 18:30:31', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (279, 15, 'electricity_unit', '电单位', 'model_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-24 18:30:47', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (280, 0, '%', '百分比 %', 'often_used_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-24 18:39:33', 'iot', '2022-01-24 18:42:33', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (281, 1, '次', '次 count', 'often_used_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-24 18:39:45', 'iot', '2022-08-09 16:34:02', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (282, 2, 'r/min', '转每分钟 r/min', 'often_used_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-24 18:40:16', 'iot', '2022-01-24 18:41:21', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (283, 4, '℃', '摄氏度 ℃', 'often_used_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-24 18:41:14', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (284, 5, 'dBm', '信号强度 dBm', 'often_used_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-24 18:41:51', 'iot', '2022-01-24 18:42:44', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (285, 6, 'kj', '千焦 kj', 'often_used_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-24 18:42:01', 'iot', '2022-01-24 18:42:47', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (286, 7, 'ppm', '百万分率 ppm', 'often_used_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-24 18:42:10', 'iot', '2022-01-24 18:42:52', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (287, 3, 'db', '分贝 db', 'often_used_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-24 18:42:19', 'iot', '2022-01-24 18:43:31', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (288, 0, 'nm', '纳米 nm', 'measurement_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:48:42', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (289, 0, 'μm', '微米 μm', 'measurement_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:49:00', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (290, 0, 'mm', '毫米 mm', 'measurement_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:49:09', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (291, 0, 'cm', '厘米 cm', 'measurement_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:49:17', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (292, 0, 'm', '米 m', 'measurement_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:49:26', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (293, 0, 'km', '千米 km', 'measurement_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:49:34', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (297, 0, 'mm²', '平方毫米 mm²', 'area_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:51:04', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (298, 0, 'cm²', '平方厘米 cm²', 'area_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:51:12', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (299, 0, 'm²', '平方米 m²', 'area_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:51:22', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (300, 0, 'km²', '平方千米 km²', 'area_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:51:31', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (301, 0, 'hm²', '公顷 hm²', 'area_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:51:41', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (302, 0, 'd', '天 d', 'time_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:51:57', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (303, 0, 'h', '小时 h', 'time_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:52:05', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (304, 0, 'min', '分钟 min', 'time_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:52:14', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (305, 0, 's', '秒 s', 'time_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:52:23', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (306, 0, 'ms', '毫秒 ms', 'time_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:52:33', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (307, 0, 'μs', '微秒 μs', 'time_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:52:42', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (308, 0, 'ns', '纳秒 ns', 'time_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:52:56', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (309, 0, 'mm³', '立方毫米 mm³', 'volume_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:53:13', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (310, 0, 'cm³', '立方厘米 cm³', 'volume_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:53:21', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (311, 0, 'm³', '立方米 m³', 'volume_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:53:31', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (312, 0, 'km³', '立方千米 km³', 'volume_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:53:39', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (313, 0, 'm³/s', '立方米每秒 m³/s', 'flow_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:53:55', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (314, 0, 'km³/s', '立方千米每秒 km³/s', 'flow_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:54:05', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (315, 0, 'cm³/s', '立方厘米每秒 cm³/s', 'flow_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:54:14', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (316, 0, 'l/s', '升每秒 l/s', 'flow_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:54:22', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (317, 0, 'm³/h', '立方米每小时 m³/h', 'flow_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:54:39', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (318, 0, 'km³/h', '立方千米每小时 km³/h', 'flow_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:54:47', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (319, 0, 'cm³/h', '立方厘米每小时 cm³/h', 'flow_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:54:56', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (320, 0, 'l/h', '升每小时 l/h', 'flow_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:55:08', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (321, 0, 'mL', '毫升 mL', 'capacity_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:55:21', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (322, 0, 'L', '升 L', 'capacity_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:55:29', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (323, 0, 'mg', '毫克 mg', 'mass_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:55:44', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (324, 0, 'g', '克 g', 'mass_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:55:52', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (325, 0, 'kg', '千克 kg', 'mass_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:56:04', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (326, 0, 't', '吨 t', 'mass_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:56:13', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (327, 0, 'Pa', '帕斯卡 Pa', 'pressure_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:56:29', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (328, 0, 'kPa', '千帕斯卡 kPa', 'pressure_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:56:38', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (329, 0, 'N', '牛顿 N', 'pressure_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:56:46', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (330, 0, 'N.m', '牛·米 N.m', 'pressure_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:56:55', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (331, 0, 'K', '开尔文 K', 'temperature_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:57:10', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (332, 0, '℃', '摄氏度 ℃', 'temperature_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:57:18', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (333, 0, '℉', '华氏度 ℉', 'temperature_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:57:41', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (334, 0, 'J', '焦耳 J', 'energy_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:57:54', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (335, 0, 'cal', '卡 cal', 'energy_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:58:03', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (336, 0, 'W', '瓦特 W', 'power_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:58:18', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (337, 0, 'kW', '千瓦特 kW', 'power_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:58:25', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (338, 0, 'rad', '弧度 rad', 'angle_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:58:40', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (339, 0, '°', '度 °', 'angle_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:58:48', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (340, 0, '′', '[角]分 ′', 'angle_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:58:57', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (341, 0, '″', '[角]秒 ', 'angle_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:59:07', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (342, 0, 'Hz', '赫兹 Hz', 'frequency_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:59:18', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (343, 0, 'MHz', '兆赫兹 MHz', 'frequency_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:59:27', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (344, 0, 'GHz', 'G赫兹 GHz', 'frequency_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:59:34', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (345, 0, 'm/s', '米每秒 m/s', 'speed_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:59:47', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (346, 0, 'km/h', '千米每小时 km/h', 'speed_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 09:59:55', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (347, 0, 'kn', '节 kn', 'speed_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 10:00:06', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (348, 0, 'V', '伏特 V', 'electricity_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 10:00:24', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (349, 0, 'kV', '千伏 kV', 'electricity_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 10:00:31', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (350, 0, 'mV', '毫伏 mV', 'electricity_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 10:00:38', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (351, 0, 'μV', '微伏 μV', 'electricity_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 10:00:45', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (352, 0, 'A', '安培 A', 'electricity_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 10:00:53', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (353, 0, 'mA', '毫安 mA', 'electricity_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 10:01:00', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (354, 0, 'μA', '微安 μA', 'electricity_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 10:01:08', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (355, 0, 'nA', '纳安 nA', 'electricity_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 10:01:15', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (356, 0, 'Ω', '欧姆 Ω', 'electricity_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 10:01:23', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (357, 0, 'KΩ', '千欧 KΩ', 'electricity_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 10:01:31', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (358, 0, 'MΩ', '兆欧 MΩ', 'electricity_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 10:01:39', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (359, 0, 'eV', '电子伏 ', 'electricity_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 10:01:47', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (360, 0, 'kW·h', '千瓦·时 kW·h', 'electricity_unit', NULL, NULL, NULL, '0', 'iot', '2022-01-25 10:01:55', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (361, 0, '通知', 'notice', 'alarm_level', NULL, NULL, NULL, '0', 'iot', '2022-01-25 18:59:20', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (362, 0, '紧急', 'urgent', 'alarm_level', NULL, NULL, NULL, '0', 'iot', '2022-01-25 18:59:27', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (363, 0, '主要', 'primary', 'alarm_level', NULL, NULL, NULL, '0', 'iot', '2022-01-25 18:59:37', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (364, 0, '严重', 'serious', 'alarm_level', NULL, NULL, NULL, '0', 'iot', '2022-01-25 18:59:45', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (365, 0, '设备', 'DEVICE', 'instance_node', NULL, NULL, NULL, '0', 'iot', '2022-01-26 11:03:35', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (366, 1, '网关', 'GATEWAY', 'instance_node', NULL, NULL, NULL, '0', 'iot', '2022-01-26 11:04:43', 'iot', '2022-01-26 11:05:01', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (367, 2, '网关子设备', 'GATEWAY_SUB_DEVICE', 'instance_node', NULL, NULL, NULL, '0', 'iot', '2022-01-26 11:05:54', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (368, 3, '数据采集终端', 'DTU', 'instance_node', NULL, NULL, NULL, '0', 'iot', '2022-01-26 11:06:10', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (369, 4, '数据采集终端子设备', 'DTU_SUB_DEVICE', 'instance_node', NULL, NULL, NULL, '0', 'iot', '2022-01-26 11:06:26', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (370, 0, '属性上报', 'PROPERTIES', 'data_type', NULL, NULL, NULL, '0', 'iot', '2022-01-26 14:35:51', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (371, 1, '事件上报', 'EVENT', 'data_type', NULL, NULL, NULL, '0', 'iot', '2022-01-26 14:36:03', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (372, 2, '功能调用', 'FUNCTIONS', 'data_type', NULL, NULL, NULL, '0', 'iot', '2022-01-26 14:36:16', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (373, 3, '功能回复', 'REPLY', 'data_type', NULL, NULL, NULL, '0', 'iot', '2022-01-26 14:36:27', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (374, 0, 'NB-IoT', 'NB-IoT', 'transport_protocol', NULL, NULL, NULL, '0', 'iot', '2022-01-27 10:24:14', 'iot', '2022-01-27 10:26:08', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (375, 1, 'LoRa', 'LoRa', 'transport_protocol', NULL, NULL, NULL, '0', 'iot', '2022-01-27 10:24:26', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (376, 2, 'Wi-Fi', 'Wi-Fi', 'transport_protocol', NULL, NULL, NULL, '0', 'iot', '2022-01-27 10:25:01', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (377, 3, 'RS485', 'RS485', 'transport_protocol', NULL, NULL, NULL, '0', 'iot', '2022-01-27 10:25:31', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (378, 4, 'RS232', 'RS232', 'transport_protocol', NULL, NULL, NULL, '0', 'iot', '2022-01-27 10:25:39', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (379, 5, '4G LTE Cat.1', '4G LTE Cat.1', 'transport_protocol', NULL, NULL, NULL, '0', 'iot', '2022-01-27 10:25:48', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (380, 6, '有线', '有线', 'transport_protocol', NULL, NULL, NULL, '0', 'iot', '2022-01-27 10:26:02', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (381, 7, 'MQTT', 'MQTT', 'transport_protocol', NULL, NULL, NULL, '0', 'iot', '2022-01-27 10:26:18', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (382, 0, '离线判定时间​', 'offlineThreshold', 'product_configuration_public', NULL, NULL, NULL, '0', 'iot', '2022-02-07 15:33:03', 'iot', '2025-07-28 23:02:59', '{\"remark\":\"设备最后一次通信时间超过阈值,则判定离线;默认12(单位:小时)\",\"type\":\"int\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (383, 0, '保留原始数据', 'requirePayload', 'product_configuration_public', NULL, NULL, NULL, '0', 'iot', '2022-02-08 13:33:15', 'iot', '2025-07-27 13:25:44', '{\"remark\":\"布尔类型;默认false\",\"type\":\"boolean\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (388, 1, '天翼物联', 'ctaiot', 'third_platform', NULL, NULL, NULL, '0', 'iot', '2022-02-14 16:22:29', 'iot', '2025-08-09 20:34:35', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (389, 0, '移动OneNet', 'onenet', 'third_platform', NULL, NULL, NULL, '1', 'iot', '2022-02-14 16:22:53', 'iot', '2025-07-11 09:39:25', '移动新版OneNet'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (420, 0, '云云对接', 'http', 'third_platform', NULL, NULL, NULL, '0', 'iot', '2022-03-17 12:11:54', 'iot', '2022-03-24 13:41:16', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (445, 3, 'magic', 'magic', 'protocol_type', NULL, NULL, NULL, '0', 'iot', '2022-06-08 17:03:01', 'iot', '2022-06-08 17:13:21', '内置大量函数封装'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (446, 0, '第三方指令接收URL', 'thirdDownUrl', 'product_configuration_http', NULL, NULL, NULL, '0', 'iot', '2022-07-13 11:33:21', 'iot', '2025-07-27 14:00:59', '{\"remark\":\"将通过这个URL下发指令,如没有可不填\",\"type\":\"string\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (447, 0, '支持南向云对接', 'thirdDownSupport', 'product_configuration_http', NULL, NULL, NULL, '0', 'iot', '2022-07-13 11:34:26', 'iot', '2022-08-25 09:31:55', '{\"remark\":\"基于物模型将功能参数传给第三方平台,完成功能调用\",\"type\":\"boolean\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (448, 3, '设备SN解析', 'snDecode', 'product_configuration_public', NULL, NULL, NULL, '0', 'iot', '2022-07-14 11:39:24', 'iot', '2022-08-22 20:30:05', '{\"remark\":\"设备sn解析\",\"type\":\"string\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (449, 0, 'NB_IMEI', 'imei', 'device_common_property', NULL, NULL, NULL, '0', 'iot', '2022-08-02 11:35:17', 'iot', NULL, 'NB部分设备功能调用需要'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (450, 0, '表号', 'meterNo', 'device_common_property', NULL, NULL, NULL, '0', 'iot', '2022-08-02 11:35:33', 'iot', NULL, '水电表'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (451, 0, '设备序列号', 'deviceId', 'device_common_property', NULL, NULL, NULL, '0', 'iot', '2022-08-02 11:35:48', 'iot', NULL, '暂时大华设备需要'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (452, 0, '新增', '1', 'sys_oper_type', NULL, NULL, NULL, '0', 'iot', '2022-08-02 14:07:03', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (453, 1, '修改', '2', 'sys_oper_type', NULL, NULL, NULL, '0', 'iot', '2022-08-02 14:07:14', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (454, 3, '删除', '3', 'sys_oper_type', NULL, NULL, NULL, '0', 'iot', '2022-08-02 14:07:25', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (455, 4, '授权', '4', 'sys_oper_type', NULL, NULL, NULL, '0', 'iot', '2022-08-02 14:07:32', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (456, 5, '导出', '5', 'sys_oper_type', NULL, NULL, NULL, '0', 'iot', '2022-08-02 14:07:43', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (457, 6, '导入', '6', 'sys_oper_type', NULL, NULL, NULL, '0', 'iot', '2022-08-02 14:07:50', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (458, 0, '定位设备', 'isGps', 'product_configuration_public', NULL, NULL, NULL, '0', 'iot', '2022-08-05 16:02:53', 'iot', '2025-07-27 13:14:59', '{\"remark\":\"布尔类型;默认false\",\"type\":\"boolean\",\"default\":false}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (459, 0, '是否保存功能下发参数', 'saveFunctionParam', 'product_configuration_public', NULL, NULL, NULL, '0', 'iot', '2022-08-17 14:23:46', 'iot', '2022-08-22 20:29:01', '{\"remark\":\"是否保存功能下发参数\",\"type\":\"boolean\",\"default\":true}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (460, 0, '指令下行转16进制', 'encodeHex', 'product_configuration_public', NULL, NULL, NULL, '1', 'iot', '2022-08-17 17:22:45', 'iot', '2022-08-19 08:34:35', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (461, 7, '解码数据类型', 'decoderType', 'product_configuration_tcp', NULL, NULL, NULL, '0', 'iot', '2022-08-22 15:03:30', 'iot', '2025-07-28 22:26:25', '{\"remark\":\"解码数据类型\",\"type\":\"select\",\"url\":\"tcp_data_conver_format\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (462, 0, '字符串(utf-8)', 'STRING', 'tcp_data_conver_format', NULL, NULL, NULL, '0', 'iot', '2022-08-22 15:06:31', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (463, 1, '十六进制', 'HEX', 'tcp_data_conver_format', NULL, NULL, NULL, '0', 'iot', '2022-08-22 15:06:48', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (464, 0, 'TCP', 'tcp', 'third_platform', NULL, NULL, NULL, '0', 'iot', '2022-08-22 15:19:43', 'iot', '2025-07-11 09:42:51', '4G,5G,WiFi'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (467, 14, '空闲间隔时长', 'idleInterval', 'product_configuration_tcp', NULL, NULL, NULL, '0', 'iot', '2022-08-23 14:49:15', 'iot', '2022-08-23 20:50:18', '{\"remark\":\"空闲间隔时长\",\"type\":\"int\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (468, 13, '发送超时时长', 'sendTimeout', 'product_configuration_tcp', NULL, NULL, NULL, '0', 'iot', '2022-08-23 14:50:57', 'iot', '2022-08-23 20:50:13', '{\"remark\":\"发送超时时长\",\"type\":\"int\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (469, 12, '读取超时时长', 'readTimeout', 'product_configuration_tcp', NULL, NULL, NULL, '0', 'iot', '2022-08-23 14:51:22', 'iot', '2022-08-23 20:50:08', '{\"remark\":\"读取超时时长\",\"type\":\"int\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (470, 0, '是否启用', 'enabled', 'product_configuration_tcp', NULL, NULL, NULL, '0', 'iot', '2022-08-23 14:51:36', 'iot', '2022-08-24 11:02:11', '{\"remark\":\"是否启用\",\"type\":\"boolean\",\"hide\":\"false\",\"default\":false}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (473, 11, '写(idle)检测时长', 'writerIdleTime', 'product_configuration_tcp', NULL, NULL, NULL, '0', 'iot', '2022-08-23 15:03:04', 'iot', '2022-09-22 10:02:39', '{\"remark\":\"writerIdleTime(s)\",\"type\":\"int\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (474, 10, '读(idle)检测时长', 'readerIdleTime', 'product_configuration_tcp', NULL, NULL, NULL, '0', 'iot', '2022-08-23 15:03:17', 'iot', '2022-09-22 10:00:43', '{\"remark\":\"readerIdleTime(s)\",\"type\":\"int\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (475, 9, '读写(allIdle)检测时长', 'allIdleTime', 'product_configuration_tcp', NULL, NULL, NULL, '0', 'iot', '2022-08-23 15:03:39', 'iot', '2022-09-22 10:03:10', '{\"remark\":\"allIdle(s)\",\"type\":\"int\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (476, 8, '解析器类型', 'parserType', 'product_configuration_tcp', NULL, NULL, NULL, '0', 'iot', '2022-08-23 15:05:53', 'iot', '2022-08-23 20:49:47', '{\"remark\":\"解析器\",\"type\":\"select\",\"url\":\"tcp_parser_type\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (477, 0, '不处理', 'DIRECT', 'tcp_parser_type', NULL, NULL, NULL, '0', 'iot', '2022-08-23 15:09:16', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (478, 0, '固定长度', 'FIXED_LENGTH', 'tcp_parser_type', NULL, NULL, NULL, '0', 'iot', '2022-08-23 15:09:45', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (479, 0, '分隔符', 'DELIMITED', 'tcp_parser_type', NULL, NULL, NULL, '0', 'iot', '2022-08-23 15:09:54', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (483, 15, '分隔符(分隔符解析器)', 'delimited', 'product_configuration_tcp', NULL, NULL, NULL, '0', 'iot', '2022-08-23 21:26:53', 'iot', '2022-08-23 21:28:43', '{\"remark\":\"分隔符(分隔符解析器)\",\"type\":\"string\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (484, 16, '分隔的最大长度(分隔符解析器)', 'delimitedMaxlength', 'product_configuration_tcp', NULL, NULL, NULL, '0', 'iot', '2022-08-23 21:27:28', 'iot', '2022-08-23 21:28:53', '{\"remark\":\"分隔的最大长度(分隔符解析器)\",\"type\":\"int\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (485, 17, '固定长度(固定长度解析器)', 'fixedLength', 'product_configuration_tcp', NULL, NULL, NULL, '0', 'iot', '2022-08-23 21:28:03', 'iot', '2022-08-23 21:29:01', '{\"remark\":\"固定长度(固定长度解析器)\",\"type\":\"int\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (488, 0, '所有', 'ALL', 'subscribe_message_type', NULL, NULL, NULL, '0', 'iot', '2022-09-13 14:22:56', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (489, 1, '事件', 'EVENT', 'subscribe_message_type', NULL, NULL, NULL, '0', 'iot', '2022-09-13 14:23:08', 'iot', '2022-09-13 14:23:27', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (490, 2, '属性', 'PROPERTIES', 'subscribe_message_type', NULL, NULL, NULL, '0', 'iot', '2022-09-13 14:23:39', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (491, 3, '服务调用', 'FUNCTIONS', 'subscribe_message_type', NULL, NULL, NULL, '0', 'iot', '2022-09-13 14:23:52', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (492, 4, '指令回复', 'REPLY', 'subscribe_message_type', NULL, NULL, NULL, '0', 'iot', '2022-09-13 14:24:07', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (493, 0, '产品', 'PRODUCT', 'subscribe_level', NULL, NULL, NULL, '0', 'iot', '2022-09-13 14:25:32', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (494, 1, '设备', 'DEVICE', 'subscribe_level', NULL, NULL, NULL, '0', 'iot', '2022-09-13 14:25:44', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (496, 0, 'MQTT', 'mqtt', 'third_platform', NULL, NULL, NULL, '0', 'iot', '2022-09-21 16:44:41', 'iot', '2025-07-11 09:42:06', '内置和外部部署MQTT'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (497, 0, '指令下行主题', 'downTopic', 'product_configuration_mqtt', NULL, NULL, NULL, '0', 'iot', '2022-09-29 10:02:04', 'iot', '2022-09-29 10:02:47', '{\"remark\":\"指令下行主题\",\"type\":\"string\",\"hide\":\"false\",\"default\":\"\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (498, 0, '解码带入设备影子', 'requireUpShadow', 'product_configuration_public', NULL, NULL, NULL, '0', 'iot', '2022-10-12 09:01:31', 'iot', '2025-07-27 13:28:08', '{\"remark\":\"上行报文是否附加影子\",\"type\":\"boolean\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (499, 3, '下发缓存', 'onlyCache', 'product_configuration_tcp', NULL, NULL, NULL, '0', 'iot', '2022-10-18 14:03:54', 'iot', NULL, '{\"remark\":\"无论设备是否在线,是否下发指令总是缓存;true-是;false-否\",\"type\":\"boolean\",\"hide\":\"false\",\"default\":false}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (500, 0, '消息头附带长度', 'FIELD_LENGTH', 'tcp_parser_type', NULL, NULL, NULL, '0', 'iot', '2022-10-19 14:04:23', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (501, 18, '长度域小端在前', 'byteOrderLittle', 'product_configuration_tcp', NULL, NULL, NULL, '0', 'iot', '2022-10-20 14:57:42', 'iot', '2022-10-20 15:20:08', '{\"remark\":\"长度域小端在前\",\"type\":\"boolean\",\"default\":\"true\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (502, 19, '最大包长度', 'maxFrameLength', 'product_configuration_tcp', NULL, NULL, NULL, '0', 'iot', '2022-10-20 15:00:27', 'iot', '2022-10-20 15:19:37', '{\"remark\":\"最大包长度\",\"type\":\"int\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (503, 20, '长度域偏移位', 'lengthFieldOffset', 'product_configuration_tcp', NULL, NULL, NULL, '0', 'iot', '2022-10-20 15:01:52', 'iot', '2022-10-20 15:19:40', '{\"remark\":\"长度域偏移位\",\"type\":\"int\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (504, 21, '长度域所占字节', 'lengthFieldLength', 'product_configuration_tcp', NULL, NULL, NULL, '0', 'iot', '2022-10-20 15:02:50', 'iot', '2022-10-20 15:19:43', '{\"remark\":\"长度域所占字节\",\"type\":\"int\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (505, 22, '数据长度偏移量', 'lengthAdjustment', 'product_configuration_tcp', NULL, NULL, NULL, '0', 'iot', '2022-10-20 15:04:59', 'iot', '2022-10-20 15:19:46', '{\"remark\":\"数据长度偏移量\",\"type\":\"int\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (506, 23, '跳过字节数', 'initialBytesToStrip', 'product_configuration_tcp', NULL, NULL, NULL, '0', 'iot', '2022-10-20 15:05:29', 'iot', '2022-10-20 15:19:49', '{\"remark\":\"跳过字节数\",\"type\":\"int\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (507, 24, '数据超长异常', 'failFast', 'product_configuration_tcp', NULL, NULL, NULL, '0', 'iot', '2022-10-20 15:06:24', 'iot', '2022-10-20 15:20:01', '{\"remark\":\"数据超长异常\",\"type\":\"boolean\",\"default\":\"true\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (509, 0, '永远通过预解码获取设备序列号', 'alwaysPreDecode', 'product_configuration_tcp', NULL, NULL, NULL, '0', 'iot', '2022-11-10 14:17:30', 'iot', '2022-11-10 14:19:11', '{\"remark\":\"永远预解码\",\"type\":\"boolean\",\"default\":\"false\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (511, 0, 'KB', '流量(KB)', 'flow_unit', NULL, NULL, NULL, '0', 'iot', '2022-12-09 14:53:33', 'iot', '2022-12-09 14:54:07', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (512, 0, 'GB', '流量(Gb)', 'flow_unit', NULL, NULL, NULL, '0', 'iot', '2022-12-09 14:54:01', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (513, 0, 'MB', '流量(Mb)', 'flow_unit', NULL, NULL, NULL, '0', 'iot', '2022-12-09 14:54:21', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (520, 99, '设备消息保存时间', 'logMaxStorage', 'product_configuration_public', NULL, NULL, NULL, '0', 'iot', '2023-02-15 12:28:56', 'iot', '2023-02-15 13:26:46', '{\"remark\":\"单位(天),默认180天\",\"type\":\"int\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (521, 8, '蓝牙', 'Bluetooth', 'transport_protocol', NULL, NULL, NULL, '0', 'iot', '2023-02-16 15:46:01', 'iot', '2023-02-17 08:45:51', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (522, 0, '💉医疗', 'yiliao', 'product_tags', NULL, NULL, NULL, '0', 'iot', '2023-04-03 15:10:11', 'iot', '2025-06-23 19:08:27', ''); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (523, 1, '♻️环保', 'huanbao', 'product_tags', NULL, NULL, NULL, '0', 'iot', '2023-04-03 16:11:40', 'iot', '2025-06-23 19:08:35', NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (524, 0, '指令预缓存', 'preStore', 'product_configuration_tcp', NULL, NULL, NULL, '0', 'iot', '2023-04-13 11:16:54', 'iot', '2023-04-13 11:20:01', '{\"remark\":\"tcp连接假死时,缓存指令\",\"type\":\"boolean\",\"default\":\"false\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (525, 99, '自动注册新设备​', 'allowInsert', 'product_configuration_public', NULL, NULL, NULL, '0', 'iot', '2023-04-13 16:34:03', 'iot', '2025-07-27 13:26:00', '{\"remark\":\"消息上行时设备不存在时直接新增。布尔类型;默认false\",\"type\":\"boolean\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (526, 0, '换行符', 'LINE_BREAK', 'tcp_parser_type', NULL, NULL, NULL, '0', 'iot', '2023-04-21 15:35:09', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (527, 16, '换行最大长度', 'lineMaxLength', 'product_configuration_tcp', NULL, NULL, NULL, '0', 'iot', '2023-04-21 15:36:35', 'iot', '2023-04-21 15:49:44', '{\"remark\":\"换行的最大长度(换行符解析器)\",\"type\":\"int\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (528, 0, 'pinsu', '14.29.243.72,125.210.48.0/24', 'whitelist', NULL, NULL, NULL, '0', 'iot', '2023-08-11 14:10:45', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (529, 0, 'fuxing', '118.31.57.184', 'whitelist', NULL, NULL, NULL, '0', 'iot', '2023-08-11 14:56:19', 'iot', NULL, '测试'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (531, 0, 'xitang', '47.105.53.60', 'whitelist', NULL, NULL, NULL, '0', 'iot', '2023-08-24 16:12:41', 'iot', NULL, '溪堂上报ip白名单'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (532, 0, 'haikang', '125.210.48.247', 'whitelist', NULL, NULL, NULL, '0', 'iot', '2023-08-24 16:15:11', 'iot', NULL, '海康上行ip白名单'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (533, 0, 'onenet', '183.230.102.85,183.230.40.120,183.230.102.86,183.230.40.121,183.230.102.83,183.230.102.84', 'whitelist', NULL, NULL, NULL, '0', 'iot', '2023-08-24 16:15:11', 'iot', NULL, '移动(明文)上行ip白名单'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (534, 0, 'lechen', '118.31.73.7,118.31.36.102,118.31.35.226,118.31.73.146,118.31.6.178,121.196.220.229', 'whitelist', NULL, NULL, NULL, '0', 'iot', '2023-08-24 16:15:11', 'iot', NULL, '乐橙上行ip白名单'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (549, 0, '养老', 'yanglao', 'product_tags', NULL, NULL, NULL, '0', 'iot', '2025-06-23 19:08:20', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (550, 0, '断开自动重连', 'autoReconnect', 'mqtt_parser_type', NULL, NULL, NULL, '0', 'iot', '2025-07-06 11:01:04', 'iot', NULL, '{\"remark\":\"断开重连\",\"type\":\"boolean\",\"default\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (551, 22, '保持会话', 'cleanSession', 'mqtt_parser_type', NULL, NULL, NULL, '0', 'iot', '2025-07-06 11:04:59', 'iot', '2025-07-06 11:18:03', '{\"remark\":\"true表示每次新的会话,客户端断开自动销毁。false表示使用固定的clientID保持持久会话\",\"type\":\"boolean\",\"default\":\"false\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (552, 5, '客户端前缀', 'clientIdPrefix', 'mqtt_parser_type', NULL, NULL, NULL, '0', 'iot', '2025-07-06 11:06:11', 'iot', '2025-07-06 11:19:04', '{\"remark\":\"与cleanSession对应,如果false,程序会每次用相同的clientId\",\"type\":\"boolean\",\"hide\":\"true\",\"default\":false}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (553, 0, '消息质量', 'qos', 'mqtt_parser_type', NULL, NULL, NULL, '0', 'iot', '2025-07-06 11:09:13', 'iot', NULL, '{\"remark\":\"qos:0-最多1次(可能丢);1-至少1次(可重复);2-恰好一次(不丢失且不重复)\",\"type\":\"int\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (554, 0, '服务地址', 'host', 'mqtt_parser_type', NULL, NULL, NULL, '0', 'iot', '2025-07-06 11:10:09', 'iot', '2025-07-06 11:11:15', '{\"remark\":\"broker地址:tcp://127.0.0.1:1883\",\"type\":\"string\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (555, 0, '心跳机制', 'keepAliveInterval', 'mqtt_parser_type', NULL, NULL, NULL, '0', 'iot', '2025-07-06 11:11:01', 'iot', NULL, '{\"remark\":\"心跳检测(s)\",\"type\":\"int\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (556, 2, '服务密码', 'password', 'mqtt_parser_type', NULL, NULL, NULL, '0', 'iot', '2025-07-06 11:12:01', 'iot', '2025-07-06 11:17:53', '{\"remark\":\"MQTT密码\",\"type\":\"string\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (557, 15, '开启ssl', 'ssl', 'mqtt_parser_type', NULL, NULL, NULL, '0', 'iot', '2025-07-06 11:12:39', 'iot', '2025-07-06 11:15:21', '{\"remark\":\"是否启用ssl\",\"type\":\"boolean\",\"hide\":\"false\",\"default\":false}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (558, 17, 'sslCertPath', 'SSL证书路径', 'mqtt_parser_type', NULL, NULL, NULL, '0', 'iot', '2025-07-06 11:14:17', 'iot', '2025-07-06 11:16:09', '{\"remark\":\"证书cert\",\"type\":\"string\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (559, 18, 'SSL密钥路径', 'sslKeyPath', 'mqtt_parser_type', NULL, NULL, NULL, '0', 'iot', '2025-07-06 11:15:04', 'iot', NULL, '{\"remark\":\"证书key\",\"type\":\"string\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (560, 16, 'CA证书路径', 'sslCaPath', 'mqtt_parser_type', NULL, NULL, NULL, '0', 'iot', '2025-07-06 11:15:35', 'iot', NULL, '{\"remark\":\"证书Ca\",\"type\":\"string\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (561, 14, '连接超时', 'connectTimeout', 'mqtt_parser_type', NULL, NULL, NULL, '0', 'iot', '2025-07-06 11:16:42', 'iot', NULL, '{\"remark\":\"默认30s\",\"type\":\"int\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (562, 1, '鉴权用户', 'username', 'mqtt_parser_type', NULL, NULL, NULL, '0', 'iot', '2025-07-06 11:17:41', 'iot', NULL, '{\"remark\":\"username\",\"type\":\"string\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (563, 99, '订阅主题', 'subscribeTopics', 'mqtt_parser_type', NULL, NULL, NULL, '0', 'iot', '2025-07-06 11:20:56', 'iot', NULL, '{\"remark\":\"订阅主题\",\"type\":\"json\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (564, 99, '组件类型', 'networkType', 'mqtt_parser_type', NULL, NULL, NULL, '0', 'iot', '2025-07-06 11:21:51', 'iot', '2025-07-06 11:21:57', 'MQTT_CLIENT,MQTT_SERVER'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (565, 1, '推送消息头', 'AuthHeader', 'product_configuration_http', NULL, NULL, NULL, '0', 'iot', '2025-07-11 09:52:17', 'iot', '2025-07-11 09:53:15', '{\"remark\":\"推送http携带AuthHeader\",\"type\":\"string\"} '); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (566, 0, '推送密钥', 'AuthToken', 'product_configuration_http', NULL, NULL, NULL, '0', 'iot', '2025-07-11 09:52:31', 'iot', '2025-07-11 09:53:05', '{\"remark\":\"推送http携带AuthToken\",\"type\":\"string\"} '); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (569, 0, '推送地址', 'url', 'app_push_http', NULL, NULL, NULL, '0', 'iot', '2025-07-12 10:09:47', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (570, 0, '推送请求头', 'header', 'app_push_http', NULL, NULL, NULL, '0', 'iot', '2025-07-12 10:11:07', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (571, 0, '推送密钥', 'secret', 'app_push_http', NULL, NULL, NULL, '0', 'iot', '2025-07-12 10:11:34', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (572, 0, '访问地址', 'url', 'app_push_mqtt', NULL, NULL, NULL, '0', 'iot', '2025-07-12 10:15:18', 'iot', NULL, 'tcp://127.0.0.1:1883'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (573, 0, '账号', 'username', 'app_push_mqtt', NULL, NULL, NULL, '0', 'iot', '2025-07-12 10:15:35', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (574, 0, '密码', 'password', 'app_push_mqtt', NULL, NULL, NULL, '0', 'iot', '2025-07-12 10:15:48', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (575, 0, '客户端ID', 'clientId', 'app_push_mqtt', NULL, NULL, NULL, '0', 'iot', '2025-07-12 10:18:48', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (576, 0, '订阅主题', 'topic', 'app_push_mqtt', NULL, NULL, NULL, '0', 'iot', '2025-07-12 10:19:08', 'iot', NULL, NULL); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (577, 7, '编码数据类型', 'encoderType', 'product_configuration_tcp', NULL, NULL, NULL, '0', 'iot', '2025-07-26 22:52:52', NULL, NULL, '{\"remark\":\"解码数据类型\",\"type\":\"select\",\"url\":\"tcp_data_conver_format\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (578, 0, '允许IP地址', 'host', 'network_tcp_config', NULL, NULL, NULL, '0', 'iot', '2025-07-27 19:08:37', 'iot', '2025-07-27 19:09:37', '{\"remark\":\"允许设备的IP地址\",\"type\":\"string\",\"default\":\"0.0.0.0\",\"hide\":\"false\"}'); -INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (579, 0, '绑定端口', 'port', 'network_tcp_config', NULL, NULL, NULL, '0', 'iot', '2025-07-27 19:10:33', NULL, NULL, '{\"remark\":\"绑定端口\",\"type\":\"int\",\"hide\":\"false\"}'); -COMMIT; - --- ---------------------------- --- Table structure for sys_dict_type --- ---------------------------- -DROP TABLE IF EXISTS `sys_dict_type`; -CREATE TABLE `sys_dict_type` ( - `dict_id` bigint NOT NULL AUTO_INCREMENT COMMENT '字典主键', - `dict_name` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '字典名称', - `dict_type` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '字典类型', - `status` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '0' COMMENT '状态(0正常 1停用)', - `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '创建者', - `create_time` datetime DEFAULT NULL COMMENT '创建时间', - `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '更新者', - `update_time` datetime DEFAULT NULL COMMENT '更新时间', - `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '备注', - PRIMARY KEY (`dict_id`) USING BTREE, - UNIQUE KEY `dict_type` (`dict_type`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=190 DEFAULT CHARSET=utf8mb3 COMMENT='字典类型表'; - --- ---------------------------- --- Records of sys_dict_type --- ---------------------------- -BEGIN; -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (118, '通用状态', 'sys_normal_disable', '0', 'iot', '2021-12-27 09:24:34', 'iot', '2021-12-27 09:24:34', NULL); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (119, '菜单状态', 'sys_show_hide', '0', 'iot', '2021-12-27 09:24:34', 'iot', NULL, NULL); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (120, '系统是否', 'sys_yes_no', '0', 'iot', '2021-12-27 09:24:34', 'iot', NULL, NULL); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (121, '系统状态', 'sys_common_status', '0', 'iot', '2021-12-27 09:24:34', 'iot', NULL, NULL); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (122, '设备状态', 'dev_instance_state', '0', 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (124, '天翼物联配置字段', 'product_configuration_ctwing', '0', 'iot', '2021-12-29 13:55:27', 'iot', '2022-01-13 13:53:39', '电信NB平台的字典'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (125, '产品状态', 'product_state', '0', 'iot', '2021-12-30 09:33:13', 'iot', NULL, ''); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (126, '应用删除状态', 'application_delete_status', '0', 'iot', '2021-12-30 13:49:22', 'iot', NULL, NULL); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (127, '协议状态', 'protocol_state', '0', 'iot', '2022-01-06 14:18:55', 'iot', NULL, NULL); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (128, '协议类型', 'protocol_type', '0', 'iot', '2022-01-06 14:23:34', 'iot', NULL, NULL); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (129, '属性值来源', 'tsl_source', '0', 'iot', '2022-01-06 16:11:41', 'iot', '2025-08-15 11:48:27', '物模型属性值来源'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (130, '连接协议', 'connection_protocol', '0', 'iot', '2022-01-12 14:50:12', 'iot', NULL, NULL); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (131, '物模型数据基本类型', 'model_basic_data', '0', 'iot', '2022-01-24 16:34:16', 'iot', NULL, '物模型数据基本类型'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (132, '物模型数据其他类型', 'model_other_data', '0', 'iot', '2022-01-24 16:34:53', 'iot', NULL, '物模型数据其他类型'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (133, '物模型单位类型', 'model_unit', '0', 'iot', '2022-01-24 16:54:46', 'iot', '2022-01-24 18:31:13', '物模型单位类型'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (134, '物模型时间类型', 'model_data_type', '0', 'iot', '2022-01-24 16:55:11', 'iot', '2022-01-24 18:31:22', '物模型时间类型'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (135, '物模型文件类型', 'model_file_type', '0', 'iot', '2022-01-24 16:55:32', 'iot', '2022-01-24 18:31:28', '物模型文件类型'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (136, '物模型常用单位', 'often_used_unit', '0', 'iot', '2022-01-24 18:31:45', 'iot', '2022-01-24 18:32:14', '物模型常用单位'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (137, '物模型计量单位', 'measurement_unit', '0', 'iot', '2022-01-24 18:32:30', 'iot', NULL, '物模型计量单位'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (138, '物模型面积单位', 'area_unit', '0', 'iot', '2022-01-24 18:32:56', 'iot', NULL, '物模型面积单位'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (139, '物模型时间单位', 'time_unit', '0', 'iot', '2022-01-24 18:33:17', 'iot', NULL, '物模型时间单位'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (140, '物模型体积单位', 'volume_unit', '0', 'iot', '2022-01-24 18:33:31', 'iot', NULL, '物模型体积单位'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (141, '物模型流量单位', 'flow_unit', '0', 'iot', '2022-01-24 18:33:42', 'iot', '2022-01-24 18:35:18', '物模型流量单位'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (142, '物模型容积单位', 'capacity_unit', '0', 'iot', '2022-01-24 18:33:49', 'iot', '2022-01-24 18:36:25', '物模型容积单位'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (143, '物模型质量单位', 'mass_unit', '0', 'iot', '2022-01-24 18:33:56', 'iot', '2022-01-24 18:36:29', '物模型质量单位'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (144, '物模型压力单位', 'pressure_unit', '0', 'iot', '2022-01-24 18:34:02', 'iot', '2022-01-24 18:37:00', '物模型压力单位'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (145, '物模型温度单位', 'temperature_unit', '0', 'iot', '2022-01-24 18:34:10', 'iot', '2022-01-24 18:36:56', '物模型温度单位'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (146, '物模型能量单位', 'energy_unit', '0', 'iot', '2022-01-24 18:34:17', 'iot', '2022-01-24 18:36:52', '物模型能量单位'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (147, '物模型功率单位', 'power_unit', '0', 'iot', '2022-01-24 18:34:24', 'iot', '2022-01-24 18:36:49', '物模型功率单位'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (148, '物模型角度单位', 'angle_unit', '0', 'iot', '2022-01-24 18:34:30', 'iot', '2022-01-24 18:36:45', '物模型角度单位'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (149, '物模型频率单位', 'frequency_unit', '0', 'iot', '2022-01-24 18:34:37', 'iot', '2022-01-24 18:36:41', '物模型频率单位'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (150, '物模型速度单位', 'speed_unit', '0', 'iot', '2022-01-24 18:34:43', 'iot', '2022-01-24 18:36:37', '物模型速度单位'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (151, '物模型电单位', 'electricity_unit', '0', 'iot', '2022-01-24 18:34:50', 'iot', '2022-01-24 18:36:33', '物模型电单位'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (152, '告警等级', 'alarm_level', '0', 'iot', '2022-01-25 18:58:55', 'iot', NULL, NULL); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (153, '设备节点', 'instance_node', '0', 'iot', '2022-01-26 11:01:44', 'iot', '2022-01-26 11:02:12', '产品表中设备节点'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (154, '数据类型', 'data_type', '0', 'iot', '2022-01-26 14:30:06', 'iot', '2022-01-26 14:32:39', '数据上行、下行类型'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (155, '传输协议', 'transport_protocol', '0', 'iot', '2022-01-27 10:23:53', 'iot', NULL, NULL); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (156, '产品公共配置字段', 'product_configuration_public', '0', 'iot', '2022-02-07 15:32:07', 'iot', NULL, '产品公共配置字段'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (157, '接入方式', 'third_platform', '0', 'iot', '2022-02-14 16:17:45', 'iot', '2025-08-09 20:34:10', '第三方接入平台,包括电信动等'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (170, '云云对接配置字段', 'product_configuration_http', '0', 'iot', '2022-07-13 11:20:08', 'iot', NULL, NULL); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (171, '设备公共字段 ', 'device_common_property', '0', 'iot', '2022-08-02 11:34:31', 'iot', NULL, 'imei,deviceId,meterNo'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (173, '操作类型', 'sys_oper_type', '0', 'iot', '2022-08-02 14:06:31', 'iot', NULL, NULL); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (174, 'tcp配置字段', 'product_configuration_tcp', '0', 'iot', '2022-08-22 15:02:17', 'iot', NULL, 'tcp配置字段'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (175, 'tcp数据转换格式', 'tcp_data_conver_format', '0', 'iot', '2022-08-22 15:05:25', 'iot', '2022-08-23 15:08:48', NULL); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (176, 'tcp解析器类型', 'tcp_parser_type', '0', 'iot', '2022-08-23 15:08:38', 'iot', NULL, NULL); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (177, '订阅消息类型', 'subscribe_message_type', '0', 'iot', '2022-09-13 14:21:45', 'iot', '2022-09-13 14:32:24', NULL); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (178, '订阅级别', 'subscribe_level', '0', 'iot', '2022-09-13 14:22:32', 'iot', '2022-09-13 14:32:34', NULL); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (179, 'mqtt对接配置', 'product_configuration_mqtt', '0', 'iot', '2022-09-29 10:00:01', 'iot', '2022-09-29 10:01:06', NULL); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (182, '产品标签', 'product_tags', '0', 'iot', '2023-04-03 15:07:19', 'iot', NULL, NULL); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (183, '接口IP白名单', 'whitelist', '0', 'iot', '2023-08-11 10:36:04', 'iot', '2023-08-11 14:08:21', 'web接口白名单'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (186, 'MQTT配置字段', 'mqtt_parser_type', '0', 'iot', '2025-07-06 10:58:33', 'iot', NULL, 'network的mqtt配置信息'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (187, 'HTTP推送配置', 'app_push_http', '0', 'iot', '2025-07-12 10:06:39', 'iot', '2025-07-12 10:13:06', 'http推送配置'); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (188, 'mqtt推送配置', 'app_push_mqtt', '0', 'iot', '2025-07-12 10:14:33', 'iot', NULL, NULL); -INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (189, '网络TCP组件配置', 'network_tcp_config', '0', 'iot', '2025-07-27 19:07:12', NULL, NULL, NULL); -COMMIT; - --- ---------------------------- --- Table structure for sys_job --- ---------------------------- -DROP TABLE IF EXISTS `sys_job`; -CREATE TABLE `sys_job` ( - `job_id` bigint NOT NULL AUTO_INCREMENT COMMENT '任务ID', - `job_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '任务名称', - `job_group` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'DEFAULT' COMMENT '任务组名', - `invoke_target` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '调用目标字符串', - `cron_expression` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT 'cron执行表达式', - `misfire_policy` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '3' COMMENT '计划执行错误策略(1立即执行 2执行一次 3放弃执行)', - `concurrent` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '1' COMMENT '是否并发执行(0允许 1禁止)', - `status` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '0' COMMENT '状态(0正常 1暂停)', - `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '创建者', - `create_time` datetime DEFAULT NULL COMMENT '创建时间', - `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '更新者', - `update_time` datetime DEFAULT NULL COMMENT '更新时间', - `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '备注信息', - PRIMARY KEY (`job_id`,`job_name`,`job_group`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb3 COMMENT='定时任务调度表'; - --- ---------------------------- --- Records of sys_job --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for sys_job_log --- ---------------------------- -DROP TABLE IF EXISTS `sys_job_log`; -CREATE TABLE `sys_job_log` ( - `job_log_id` bigint NOT NULL AUTO_INCREMENT COMMENT '日志ID', - `job_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '任务名称', - `job_group` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '任务组名', - `invoke_target` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '调用目标字符串', - `status` tinyint NOT NULL COMMENT '执行状态(0成功 1失败)', - `job_message` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '任务信息', - `exception_info` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '异常信息', - `start_time` datetime DEFAULT NULL COMMENT '开始时间', - `create_time` datetime DEFAULT NULL COMMENT '创建时间', - PRIMARY KEY (`job_log_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='定时任务日志表'; - --- ---------------------------- --- Records of sys_job_log --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for sys_logininfor --- ---------------------------- -DROP TABLE IF EXISTS `sys_logininfor`; -CREATE TABLE `sys_logininfor` ( - `info_id` bigint NOT NULL AUTO_INCREMENT COMMENT '访问ID', - `user_name` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '用户账号', - `ipaddr` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '登录IP地址', - `login_location` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '登录地点', - `browser` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '浏览器类型', - `os` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '操作系统', - `status` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '0' COMMENT '登录状态(0成功 1失败)', - `msg` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '提示消息', - `login_time` datetime DEFAULT NULL COMMENT '访问时间', - PRIMARY KEY (`info_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=72 DEFAULT CHARSET=utf8mb3 COMMENT='系统访问记录'; - --- ---------------------------- --- Records of sys_logininfor --- ---------------------------- -BEGIN; -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1, 'test', '127.0.0.1', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-12 22:39:10'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (2, 'iot', '113.215.103.83', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-12 22:47:53'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (3, 'test', '127.0.0.1', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-12 22:54:28'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (4, 'iot', '113.215.103.83', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-12 23:09:36'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (5, 'iot', '113.215.103.83', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-12 23:34:40'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (6, 'iot', '113.215.103.83', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-12 23:38:13'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (7, 'test', '113.215.103.83', NULL, 'MSEdge', 'iPhone', '0', '验证码登录成功', '2025-08-13 05:59:40'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (8, 'iot', '58.100.228.247', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-13 09:06:41'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (9, 'iot', '58.100.228.247', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-13 09:41:50'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (10, 'iot', '58.100.228.247', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-13 11:08:43'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (11, 'iot', '58.100.228.247', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-13 20:01:34'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (12, 'test', '58.100.228.247', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-13 20:52:53'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (13, 'iot', '58.100.228.247', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-13 20:58:02'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (14, 'iot', '58.100.228.247', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-15 10:39:35'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (15, 'test', '58.100.228.247', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-15 14:07:18'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (16, 'test', '58.100.228.247', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-15 14:25:49'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (17, 'iot', '58.100.228.247', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-15 15:20:32'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (18, 'iot', '58.100.228.247', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-15 15:26:15'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (19, 'iot', '58.100.228.247', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-15 15:29:28'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (20, 'iot', '58.100.228.247', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-15 15:36:09'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (21, 'iot', '113.215.103.83', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-15 23:18:43'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (22, 'iot', '113.215.103.83', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-15 23:27:51'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (23, 'iot', '113.215.103.83', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-15 23:32:38'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (24, 'iot', '113.215.103.83', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-15 23:39:06'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (25, 'iot', '113.215.103.83', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-16 10:03:33'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (26, 'iot', '113.215.103.83', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-16 22:04:20'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (27, 'test', '127.0.0.1', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-16 22:06:52'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (28, 'test', '127.0.0.1', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-17 13:33:26'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (29, 'test', '127.0.0.1', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-17 16:04:30'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (30, 'iot', '127.0.0.1', NULL, 'Chrome', 'Windows 10 or Windows Server 2016', '0', '验证码登录成功', '2025-08-17 16:22:37'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (31, 'test', '113.215.103.83', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-17 16:25:30'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (32, 'iot', '113.215.103.83', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-17 16:30:55'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (33, 'test', '113.215.103.83', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-17 16:33:38'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (34, 'iot', '113.215.103.83', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-17 16:35:35'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (35, 'test', '113.215.103.83', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-17 16:36:26'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (36, 'iot', '113.215.103.83', NULL, 'MSEdge', 'OSX', '1', '用户名或密码错误', '2025-08-17 16:40:06'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (37, 'iot', '113.215.103.83', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-17 16:40:12'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (38, 'liulihai', '113.248.40.184', NULL, 'Chrome', 'OSX', '1', '用户名或密码错误', '2025-08-18 11:28:19'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (39, 'iot', '30.22.168.190', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-20 09:21:02'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (40, 'iot', '115.209.55.250', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-21 18:25:13'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (41, 'iot', '115.209.55.250', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-21 18:34:55'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (42, 'iot', '125.85.127.165', NULL, 'Chrome', 'Windows 10 or Windows Server 2016', '0', '验证码登录成功', '2025-08-23 10:05:38'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (43, 'iot', '125.85.127.165', NULL, 'Chrome', 'OSX', '0', '验证码登录成功', '2025-08-23 19:01:00'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (44, 'test', '113.215.103.83', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-23 19:30:34'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (45, 'iot', '125.85.127.165', NULL, 'Chrome', 'OSX', '0', '验证码登录成功', '2025-08-24 08:55:30'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (46, 'test', '112.24.73.38', NULL, 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '验证码登录成功', '2025-08-24 18:34:05'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (47, 'test', '49.88.127.121', NULL, 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '验证码登录成功', '2025-08-25 15:14:41'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (48, 'iot', '58.100.228.246', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-25 17:39:35'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (49, 'iot', '113.215.176.47', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-25 20:50:26'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (50, 'test', '113.245.15.72', NULL, 'Chrome', 'Windows 10 or Windows Server 2016', '1', '用户名或密码错误', '2025-08-25 22:14:24'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (51, 'test', '113.245.15.72', NULL, 'Chrome', 'Windows 10 or Windows Server 2016', '0', '验证码登录成功', '2025-08-25 22:14:36'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (52, 'test', '111.160.8.98', NULL, 'MSEdge', 'Linux', '0', '验证码登录成功', '2025-08-26 08:53:29'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (53, 'iot', '58.100.228.246', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-26 10:10:20'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (54, 'test', '223.160.203.241', NULL, 'MSEdge', 'Android', '0', '验证码登录成功', '2025-08-26 10:28:16'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (55, 'test', '222.75.162.82', NULL, 'Chrome', 'Windows 10 or Windows Server 2016', '0', '验证码登录成功', '2025-08-26 11:13:24'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (56, 'iot', '58.100.228.246', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-26 12:46:03'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (57, 'test', '111.160.8.102', NULL, 'MSEdge', 'Linux', '0', '验证码登录成功', '2025-08-26 14:09:58'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (58, 'test', '219.145.104.253', NULL, 'Firefox', 'Windows 10 or Windows Server 2016', '0', '验证码登录成功', '2025-08-26 14:52:42'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (59, 'test', '111.160.8.98', NULL, 'Chrome', 'Windows 10 or Windows Server 2016', '0', '验证码登录成功', '2025-08-26 15:11:36'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (60, 'test', '111.160.8.98', NULL, 'MSEdge', 'Linux', '0', '验证码登录成功', '2025-08-26 15:16:27'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (61, 'iot', '113.215.176.47', NULL, 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '验证码登录成功', '2025-08-26 20:15:25'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (62, 'iot', '113.215.176.47', NULL, 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '验证码登录成功', '2025-08-26 20:46:25'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (63, 'iot', '113.215.176.47', NULL, 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '验证码登录成功', '2025-08-26 21:01:41'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (64, 'iot', '113.215.176.47', NULL, 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '验证码登录成功', '2025-08-26 21:23:38'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (65, 'test', '219.145.104.253', NULL, 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '验证码登录成功', '2025-08-27 08:16:52'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (66, 'test', '219.145.104.253', NULL, 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '验证码登录成功', '2025-08-27 09:53:19'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (67, 'test', '113.215.176.47', NULL, 'MSEdge', 'Android', '0', '验证码登录成功', '2025-08-27 22:33:27'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (68, 'test', '125.120.78.252', NULL, 'Chrome', 'Android', '0', '验证码登录成功', '2025-08-28 02:49:07'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (69, 'iot', '113.215.176.47', NULL, 'MSEdge', 'Android', '0', '验证码登录成功', '2025-08-28 07:43:04'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (70, 'iot', '58.100.228.246', NULL, 'MSEdge', 'OSX', '0', '验证码登录成功', '2025-08-28 09:22:24'); -INSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (71, 'test', '124.64.23.72', NULL, 'Chrome', 'OSX', '0', '验证码登录成功', '2025-08-28 10:26:39'); -COMMIT; - --- ---------------------------- --- Table structure for sys_menu --- ---------------------------- -DROP TABLE IF EXISTS `sys_menu`; -CREATE TABLE `sys_menu` ( - `menu_id` bigint NOT NULL AUTO_INCREMENT COMMENT '菜单ID', - `menu_name` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '菜单名称', - `parent_id` bigint DEFAULT '0' COMMENT '父菜单ID', - `order_num` int DEFAULT '0' COMMENT '显示顺序', - `path` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '路由地址', - `component` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '组件路径', - `is_frame` int DEFAULT '1' COMMENT '是否为外链(0是 1否)', - `is_cache` int DEFAULT '0' COMMENT '是否缓存(0缓存 1不缓存)', - `menu_type` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '菜单类型(M目录 C菜单 F按钮)', - `visible` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '0' COMMENT '菜单状态(0显示 1隐藏)', - `status` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '0' COMMENT '菜单状态(0正常 1停用)', - `perms` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '权限标识', - `icon` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '#' COMMENT '菜单图标', - `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '创建者', - `create_time` datetime DEFAULT NULL COMMENT '创建时间', - `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '更新者', - `update_time` datetime DEFAULT NULL COMMENT '更新时间', - `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '备注', - PRIMARY KEY (`menu_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=1251 DEFAULT CHARSET=utf8mb3 COMMENT='菜单权限表'; - --- ---------------------------- --- Records of sys_menu --- ---------------------------- -BEGIN; -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1, '系统管理', 0, 1, 'system', NULL, 1, 0, 'M', '0', '0', '', 'database', 'iot', '2021-12-21 15:51:34', 'iot', NULL, '系统管理目录'); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (100, '用户管理', 1, 1, 'user', 'system/user/index', 1, 0, 'C', '0', '0', 'system:user:list', 'user', 'iot', '2021-12-21 15:51:34', '', NULL, '用户管理菜单'); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (101, '角色管理', 1, 2, 'role', 'system/role/index', 1, 0, 'C', '0', '0', 'system:role:list', 'peoples', 'iot', '2021-12-21 15:51:34', '', NULL, '角色管理菜单'); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (102, '菜单管理', 1, 3, 'menu', 'system/menu/index', 1, 0, 'C', '0', '0', 'system:menu:list', 'color', 'iot', '2021-12-21 15:51:34', 'iot', NULL, '菜单管理菜单'); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (105, '字典管理', 1, 6, 'dict', 'system/dict/index', 1, 0, 'C', '0', '0', 'system:dict:list', 'dict', 'iot', '2021-12-21 15:51:34', '', NULL, '字典管理菜单'); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (106, '参数设置', 1, 7, 'config', 'system/config/index', 1, 0, 'C', '0', '0', 'system:config:list', 'edit', 'iot', '2021-12-21 15:51:34', '', NULL, '参数设置菜单'); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (115, '代码生成', 1, 2, 'gen', 'tool/gen/index', 1, 0, 'C', '0', '0', 'tool:gen:list', 'code', 'iot', '2021-12-21 15:51:35', 'iot', NULL, '代码生成菜单'); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1001, '用户查询', 100, 1, '', '', 1, 0, 'F', '0', '0', 'system:user:query', '#', 'iot', '2021-12-21 15:51:35', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1002, '用户新增', 100, 2, '', '', 1, 0, 'F', '0', '0', 'system:user:add', '#', 'iot', '2021-12-21 15:51:35', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1003, '用户修改', 100, 3, '', '', 1, 0, 'F', '0', '0', 'system:user:edit', '#', 'iot', '2021-12-21 15:51:35', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1004, '用户删除', 100, 4, '', '', 1, 0, 'F', '0', '0', 'system:user:remove', '#', 'iot', '2021-12-21 15:51:35', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1005, '用户导出', 100, 5, '', '', 1, 0, 'F', '0', '0', 'system:user:export', '#', 'iot', '2021-12-21 15:51:35', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1006, '用户导入', 100, 6, '', '', 1, 0, 'F', '0', '0', 'system:user:import', '#', 'iot', '2021-12-21 15:51:35', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1007, '重置密码', 100, 7, '', '', 1, 0, 'F', '0', '0', 'system:user:resetPwd', '#', 'iot', '2021-12-21 15:51:35', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1008, '角色查询', 101, 1, '', '', 1, 0, 'F', '0', '0', 'system:role:query', '#', 'iot', '2021-12-21 15:51:35', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1009, '角色新增', 101, 2, '', '', 1, 0, 'F', '0', '0', 'system:role:add', '#', 'iot', '2021-12-21 15:51:35', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1010, '角色修改', 101, 3, '', '', 1, 0, 'F', '0', '0', 'system:role:edit', '#', 'iot', '2021-12-21 15:51:35', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1011, '角色删除', 101, 4, '', '', 1, 0, 'F', '0', '0', 'system:role:remove', '#', 'iot', '2021-12-21 15:51:35', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1012, '角色导出', 101, 5, '', '', 1, 0, 'F', '0', '0', 'system:role:export', '#', 'iot', '2021-12-21 15:51:35', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1013, '菜单查询', 102, 1, '', '', 1, 0, 'F', '0', '0', 'system:menu:query', '#', 'iot', '2021-12-21 15:51:35', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1014, '菜单新增', 102, 2, '', '', 1, 0, 'F', '0', '0', 'system:menu:add', '#', 'iot', '2021-12-21 15:51:35', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1015, '菜单修改', 102, 3, '', '', 1, 0, 'F', '0', '0', 'system:menu:edit', '#', 'iot', '2021-12-21 15:51:35', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1016, '菜单删除', 102, 4, '', '', 1, 0, 'F', '0', '0', 'system:menu:remove', '#', 'iot', '2021-12-21 15:51:35', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1026, '字典查询', 105, 1, '#', '', 1, 0, 'F', '0', '0', 'system:dict:query', '#', 'iot', '2021-12-21 15:51:36', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1027, '字典新增', 105, 2, '#', '', 1, 0, 'F', '0', '0', 'system:dict:add', '#', 'iot', '2021-12-21 15:51:36', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1028, '字典修改', 105, 3, '#', '', 1, 0, 'F', '0', '0', 'system:dict:edit', '#', 'iot', '2021-12-21 15:51:36', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1029, '字典删除', 105, 4, '#', '', 1, 0, 'F', '0', '0', 'system:dict:remove', '#', 'iot', '2021-12-21 15:51:36', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1030, '字典导出', 105, 5, '#', '', 1, 0, 'F', '0', '0', 'system:dict:export', '#', 'iot', '2021-12-21 15:51:36', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1031, '参数查询', 106, 1, '#', '', 1, 0, 'F', '0', '0', 'system:config:query', '#', 'iot', '2021-12-21 15:51:36', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1032, '参数新增', 106, 2, '#', '', 1, 0, 'F', '0', '0', 'system:config:add', '#', 'iot', '2021-12-21 15:51:36', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1033, '参数修改', 106, 3, '#', '', 1, 0, 'F', '0', '0', 'system:config:edit', '#', 'iot', '2021-12-21 15:51:36', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1034, '参数删除', 106, 4, '#', '', 1, 0, 'F', '0', '0', 'system:config:remove', '#', 'iot', '2021-12-21 15:51:36', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1035, '参数导出', 106, 5, '#', '', 1, 0, 'F', '0', '0', 'system:config:export', '#', 'iot', '2021-12-21 15:51:36', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1055, '生成查询', 115, 1, '#', '', 1, 0, 'F', '0', '0', 'tool:gen:query', '#', 'iot', '2021-12-21 15:51:36', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1056, '生成修改', 115, 2, '#', '', 1, 0, 'F', '0', '0', 'tool:gen:edit', '#', 'iot', '2021-12-21 15:51:36', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1057, '生成删除', 115, 3, '#', '', 1, 0, 'F', '0', '0', 'tool:gen:remove', '#', 'iot', '2021-12-21 15:51:36', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1058, '导入代码', 115, 2, '#', '', 1, 0, 'F', '0', '0', 'tool:gen:import', '#', 'iot', '2021-12-21 15:51:36', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1059, '预览代码', 115, 4, '#', '', 1, 0, 'F', '0', '0', 'tool:gen:preview', '#', 'iot', '2021-12-21 15:51:36', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1060, '生成代码', 115, 5, '#', '', 1, 0, 'F', '0', '0', 'tool:gen:code', '#', 'iot', '2021-12-21 15:51:36', '', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1081, '规则引擎', 0, 20, 'rule', NULL, 1, 0, 'M', '0', '0', '', 'cluster', 'iot', NULL, 'root', NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1082, '数据转发', 1081, 3, 'flow', 'rule/flow/index', 1, 0, 'C', '0', '0', '', 'box-plot', 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1093, '产品开发', 0, 2, 'product', NULL, 1, 0, 'M', '0', '0', NULL, 'windows', 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1095, '产品管理', 1093, 0, 'product', 'system/product/index', 1, 0, 'C', '0', '0', 'tool:product:list', 'gateway', 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1096, '产品分类', 1093, 1, 'sort', 'system/sort/index', 1, 0, 'C', '0', '0', 'tool:sort:list', 'appstore', 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1097, '设备管理', 0, 3, 'iot', NULL, 1, 0, 'M', '0', '0', NULL, 'deployment-unit', 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1098, '设备列表', 1097, 0, 'device', 'system/instance/index', 1, 0, 'C', '0', '0', 'tool:instance:list', 'bars', 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1099, '设备群组', 1097, 1, 'group', 'system/instance/group/index', 1, 0, 'C', '0', '0', 'tool:instance:group:list', 'database', 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1100, '协议管理', 1093, 2, 'protocol', 'system/protocol/index', 1, 0, 'C', '0', '0', 'protocol:protocol:list', 'box-plot', 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1101, '协议查询', 1100, 0, NULL, NULL, 1, 0, 'F', '0', '0', 'protocol:protocol:query', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1102, '协议新增', 1100, 1, NULL, NULL, 1, 0, 'F', '0', '0', 'protocol:protocol:add', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1103, '协议修改', 1100, 2, NULL, NULL, 1, 0, 'F', '0', '0', 'protocol:protocol:edit', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1104, '协议删除', 1100, 3, NULL, NULL, 1, 0, 'F', '0', '0', 'protocol:protocol:remove', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1105, '协议导出', 1100, 4, NULL, NULL, 1, 0, 'F', '0', '0', 'protocol:protocol:export', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1106, '调试', 1100, 5, NULL, NULL, 1, 0, 'F', '0', '0', 'protocol:protocol:codec', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1107, '应用开发', 1156, 1, 'applicationList', 'application/index', 1, 0, 'C', '0', '0', 'application:application:list', 'codepen-circle', 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1108, '用户应用信息查询', 1107, 1, NULL, NULL, 1, 0, 'F', '0', '0', 'application:application:query', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1109, '用户应用信息新增', 1107, 2, NULL, NULL, 1, 0, 'F', '0', '0', 'application:application:add', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1110, '用户应用信息修改', 1107, 3, NULL, NULL, 1, 0, 'F', '0', '0', 'application:application:edit', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1111, '用户应用信息删除', 1107, 4, NULL, NULL, 1, 0, 'F', '0', '0', 'application:application:remove', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1112, '用户应用信息导出', 1107, 5, NULL, NULL, 1, 0, 'F', '0', '0', 'application:application:export', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1113, '应用绑定', 1107, 6, NULL, NULL, 1, 0, 'F', '0', '0', 'application:application:bind', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1114, '应用解绑', 1107, 7, NULL, NULL, 1, 0, 'F', '0', '0', 'application:application:unbind', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1115, '重置密钥', 1107, 8, NULL, NULL, 1, 0, 'F', '0', '0', 'application:application:resetSecret', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1116, '产品配置', 1095, 0, NULL, NULL, 1, 0, 'F', '0', '0', 'system:product:config', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1117, '产品详情', 1095, 1, NULL, NULL, 1, 0, 'F', '0', '0', 'system:product:query', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1118, '产品新增', 1095, 2, NULL, NULL, 1, 0, 'F', '0', '0', 'system:product:add', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1119, '产品修改', 1095, 3, NULL, NULL, 1, 0, 'F', '0', '0', 'system:product:edit', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1120, '产品删除', 1095, 4, NULL, NULL, 1, 0, 'F', '0', '0', 'system:product:remove', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1121, '设备新增', 1098, 0, NULL, NULL, 1, 0, 'F', '0', '0', 'system:instance:add', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1122, '设备修改', 1098, 1, NULL, NULL, 1, 0, 'F', '0', '0', 'system:instance:edit', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1123, '设备删除', 1098, 2, NULL, NULL, 1, 0, 'F', '0', '0', 'system:instance:remove', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1124, '设备详情', 1098, 4, NULL, NULL, 1, 0, 'F', '0', '0', 'system:instance:query', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1125, '物模型修改', 1095, 5, NULL, NULL, 1, 0, 'F', '0', '0', 'system:metadata:edit', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1126, '物模型导入', 1095, 6, NULL, NULL, 1, 0, 'F', '0', '0', 'system:metadata:export', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1127, '物模型新增', 1095, 7, NULL, NULL, 1, 0, 'F', '0', '0', 'system:metadata:add', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1128, '物模型删除', 1095, 8, NULL, NULL, 1, 0, 'F', '0', '0', 'system:metadata:delete', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1130, '详情', 1082, 1, NULL, NULL, 1, 0, 'F', '0', '0', 'rule:flow:detail', '#', 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1131, '修改状态', 1082, 2, NULL, NULL, 1, 0, 'F', '0', '0', 'rule:flow:status', '#', 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1132, '删除', 1082, 3, NULL, NULL, 1, 0, 'F', '0', '0', 'rule:flow:del', '#', 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1133, '新增', 1082, 0, NULL, NULL, 1, 0, 'F', '0', '0', 'rule:flow:add', '#', 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1140, '场景联动', 1081, 1, 'linkage', 'rule/linkage/index', 1, 0, 'C', '0', '0', 'rule:linkage:list', 'file-sync', 'iot', '2022-03-01 10:26:39', 'iot', NULL, '场景联动菜单'); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1141, '场景联动查询', 1140, 1, '#', '', 1, 0, 'F', '0', '0', 'rule:linkage:query', '#', 'iot', '2022-03-01 10:26:39', 'zhuqy', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1142, '场景联动新增', 1140, 2, '#', '', 1, 0, 'F', '0', '0', 'rule:linkage:add', '#', 'iot', '2022-03-01 10:26:39', 'zhuqy', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1143, '场景联动修改', 1140, 3, '#', '', 1, 0, 'F', '0', '0', 'rule:linkage:edit', '#', 'iot', '2022-03-01 10:26:39', 'zhuqy', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1144, '场景联动删除', 1140, 4, '#', '', 1, 0, 'F', '0', '0', 'rule:linkage:remove', '#', 'iot', '2022-03-01 10:26:39', 'zhuqy', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1145, '场景联动导出', 1140, 5, '#', '', 1, 0, 'F', '0', '0', 'rule:linkage:export', '#', 'iot', '2022-03-01 10:26:39', 'zhuqy', NULL, ''); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1153, '设备详情跳转', 1107, 9, NULL, NULL, 1, 0, 'F', '0', '0', 'application:application:details', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1156, '北向应用', 0, 5, 'app', NULL, 1, 0, 'M', '0', '0', NULL, 'codepen-circle', 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1157, '应用详情', 1107, 5, NULL, NULL, 1, 0, 'F', '0', '0', 'application:application:bindShow', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1158, '手动触发', 1140, 6, NULL, NULL, 1, 0, 'F', '0', '0', 'rule:linkage:exec', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1172, '日志管理', 1, 8, 'monitor', NULL, 1, 0, 'M', '0', '0', NULL, 'color', 'iot', NULL, 'root', NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1174, '登录日志', 1172, 1, 'logininfor', 'monitor/logininfor/index', 1, 1, 'C', '0', '0', 'system:logininfor:list', 'bug', 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1175, '操作日志', 1172, 2, 'operlog', 'monitor/operlog/index', 1, 1, 'C', '0', '0', 'system:operlog:list', 'build', 'iot', NULL, 'root', NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1176, '产品导出', 1095, 9, NULL, NULL, 1, 0, 'F', '0', '0', 'system:product:export', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1177, '产品导入', 1095, 10, NULL, NULL, 1, 0, 'F', '0', '0', 'system:product:import', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1178, '设备导入 ', 1095, 11, NULL, NULL, 1, 0, 'F', '0', '0', 'product:device:import', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1179, '批量指令', 1156, 2, 'batchCommand', 'system/instance/config/index', 1, 0, 'C', '0', '0', 'tool:instance:config:list', 'fast-forward', 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1181, '批量配置', 1179, 0, NULL, NULL, 1, 0, 'F', '0', '0', 'device:batch:config', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1182, '批量历史', 1179, 1, NULL, NULL, 1, 0, 'F', '0', '0', 'device:batch:history', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1184, '国标视频', 0, 4, 'gb', NULL, 1, 0, 'M', '1', '1', NULL, 'instagram', 'iot', NULL, 'liulihai', NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1185, '视频列表', 1184, 1, 'camera', 'gb/camera/index', 1, 0, 'C', '0', '0', 'gb:camera:index', 'branches', 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1186, '第三方应用', 1184, 10, 'thridApplication', 'gb/application/index', 1, 0, 'C', '0', '0', 'gb:thridApplication:index', 'cascader', 'iot', NULL, 'wjj', NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1187, '新增', 1185, 1, NULL, NULL, 1, 0, 'F', '0', '0', 'gb:camera:add', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1188, '删除', 1185, 6, NULL, NULL, 1, 0, 'F', '0', '0', 'gb:camera:delete', NULL, 'iot', NULL, 'wjj', NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1189, '修改', 1185, 11, NULL, NULL, 1, 0, 'F', '0', '0', 'gb:camera:edit', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1190, '查看', 1185, 16, NULL, NULL, 1, 0, 'F', '0', '0', 'gb:camera:view', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1191, '导入', 1185, 21, NULL, NULL, 1, 0, 'F', '0', '0', 'gb:camera:import', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1192, '导出', 1185, 26, NULL, NULL, 1, 0, 'F', '0', '0', 'gb:camera:export', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1193, '工作台', 0, 0, 'index', 'Index', 1, 1, 'M', '0', '0', '', 'ie', 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1194, '网络组件', 0, 4, 'network', NULL, 1, 0, 'M', '0', '0', NULL, 'wifi', 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1195, 'MQTT服务', 1194, 1, 'mqtt', 'MqttNetwork', 1, 1, 'C', '0', '0', 'tool:mqtt:list', 'tree', 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1196, 'TCP服务', 1194, 2, 'tcp', 'TcpNetwork', 1, 1, 'C', '0', '0', 'tool:tcp:list', 'tree', 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1197, '新增', 1195, 1, NULL, NULL, 1, 0, 'F', '0', '0', 'network:mqtt:add', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1198, '编辑', 1195, 2, NULL, NULL, 1, 0, 'F', '0', '0', 'network:mqtt:edit', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1199, '删除', 1195, 3, NULL, NULL, 1, 0, 'F', '0', '0', 'network:mqtt:del', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1200, '导出', 1195, 4, NULL, NULL, 1, 0, 'F', '0', '0', 'network:mqtt:export', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1201, '新增', 1196, 1, NULL, NULL, 1, 0, 'F', '0', '0', 'network:tcp:add', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1202, '编辑', 1196, 2, NULL, NULL, 1, 0, 'F', '0', '0', 'network:tcp:edit', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1203, '删除', 1196, 3, NULL, NULL, 1, 0, 'F', '0', '0', 'network:tcp:del', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1204, '导出', 1196, 4, NULL, NULL, 1, 0, 'F', '0', '0', 'network:tcp:export', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1205, '启动', 1195, 6, NULL, NULL, 1, 0, 'F', '0', '0', 'network:mqtt:start', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1206, '暂停', 1195, 7, NULL, NULL, 1, 0, 'F', '0', '0', 'network:mqtt:stop', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1207, '重启', 1195, 8, NULL, NULL, 1, 0, 'F', '0', '0', 'network:mqtt:restart', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1208, '启动', 1196, 6, NULL, NULL, 1, 0, 'F', '0', '0', 'network:tcp:start', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1209, '暂停', 1196, 7, NULL, NULL, 1, 0, 'F', '0', '0', 'network:tcp:stop', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1210, '重启', 1196, 8, NULL, NULL, 1, 0, 'F', '0', '0', 'network:tcp:restart', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1211, '通知管理', 0, 6, 'noticeManager', NULL, 1, 0, 'M', '0', '0', NULL, 'guide', 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1212, '通知渠道', 1211, 1, 'channel', 'NoticeChannel', 1, 0, 'C', '0', '0', 'notice:channel:list', 'cascader', 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1213, '新增', 1212, 1, NULL, NULL, 1, 0, 'F', '0', '0', 'notice:channel:add', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1214, '编辑', 1212, 2, NULL, NULL, 1, 0, 'F', '0', '0', 'notice:channel:edit', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1215, '详情', 1212, 3, NULL, NULL, 1, 0, 'F', '0', '0', 'notice:channel:detail', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1216, '删除', 1212, 4, NULL, NULL, 1, 0, 'F', '0', '0', 'notice:channel:del', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1217, '通知模版', 1211, 2, 'noticeTemplate', 'NoticeTemplate', 1, 0, 'C', '0', '0', 'notice:template:list', 'dict', 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1218, '新增', 1217, 1, NULL, NULL, 1, 0, 'F', '0', '0', 'notice:template:add', NULL, 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1219, '编辑', 1217, 2, NULL, NULL, 1, 0, 'F', '0', '0', 'notice:template:edit', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1220, '详情', 1217, 3, NULL, NULL, 1, 0, 'F', '0', '0', 'notice:template:detail', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1221, '删除', 1217, 4, NULL, NULL, 1, 0, 'F', '0', '0', 'notice:template:del', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1227, '执行流程', 1140, 4, NULL, NULL, 1, 0, 'F', '0', '0', 'rule:visual:execute', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1228, '启用/禁用流程', 1140, 5, NULL, NULL, 1, 0, 'F', '0', '0', 'rule:visual:status', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1229, '删除流程', 1140, 6, NULL, NULL, 1, 0, 'F', '0', '0', 'rule:visual:del', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1230, '流程编排', 0, 99, 'nodeRed', NULL, 1, 0, 'M', '1', '1', NULL, 'documentation', 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1231, '流程设计', 1230, 1, 'design', 'NodeRedFlowDesigner', 1, 0, 'C', '0', '0', 'nodered:flow:design', 'code', 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1232, '保存', 1231, 1, NULL, NULL, 1, 0, 'F', '0', '0', 'nodered:flow:design', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1233, '部署', 1231, 2, NULL, NULL, 1, 0, 'F', '0', '0', 'nodered:flow:deploy', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1234, '流程列表', 1230, 2, 'flowList', 'NodeRedFlowList', 1, 0, 'C', '0', '0', 'nodered:flow:list', 'button', 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1235, '新建', 1234, 1, NULL, NULL, 1, 0, 'F', '0', '0', 'nodered:flow:create', NULL, 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1236, '编辑', 1234, 2, NULL, NULL, 1, 0, 'F', '0', '0', 'nodered:flow:edit', NULL, 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1237, '部署', 1234, 3, NULL, NULL, 1, 0, 'F', '0', '0', 'nodered:flow:deploy', NULL, 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1238, '删除', 1234, 4, NULL, NULL, 1, 0, 'F', '0', '0', 'nodered:flow:delete', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1245, '执行日志', 1230, 7, 'nodeRedExecutionLogs', 'NodeRedExecutionLogs', 1, 0, 'C', '0', '0', NULL, 'tree', 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1247, '证书管理', 1194, 4, 'cert', 'CertificateManager', 1, 0, 'C', '0', '0', 'network:cert:list', 'dict', 'iot', NULL, 'iot', NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1248, '新增', 1247, 1, NULL, NULL, 1, 0, 'F', '0', '0', 'network:cert:add', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1249, '删除', 1247, 2, NULL, NULL, 1, 0, 'F', '0', '0', 'network:cert:delete', NULL, 'iot', NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1250, '修改', 1247, 3, NULL, NULL, 1, 0, 'F', '0', '0', 'network:cert:edit', NULL, 'iot', NULL, NULL, NULL, NULL); -COMMIT; - --- ---------------------------- --- Table structure for sys_oper_log --- ---------------------------- -DROP TABLE IF EXISTS `sys_oper_log`; -CREATE TABLE `sys_oper_log` ( - `oper_id` bigint NOT NULL AUTO_INCREMENT COMMENT '日志主键', - `title` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '模块标题', - `business_type` int DEFAULT '0' COMMENT '业务类型(0其它 1新增 2修改 3删除)', - `method` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '方法名称', - `request_method` varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '请求方式', - `operator_type` int DEFAULT '0' COMMENT '操作类别(0其它 1后台用户 2手机端用户)', - `oper_name` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '操作人员', - `dept_name` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '部门名称', - `oper_url` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '请求URL', - `oper_ip` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '主机地址', - `oper_location` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '操作地点', - `oper_param` varchar(2000) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '请求参数', - `json_result` varchar(2000) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '返回参数', - `status` int DEFAULT '0' COMMENT '操作状态(0正常 1异常)', - `error_msg` varchar(2000) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '错误消息', - `oper_time` datetime DEFAULT NULL COMMENT '操作时间', - PRIMARY KEY (`oper_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=145 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='操作日志记录'; - --- ---------------------------- --- Records of sys_oper_log --- ---------------------------- -BEGIN; -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (1, '删除场景联动', 3, 'cn.universal.admin.system.web.SceneLinkageController.remove()', 'DELETE', 1, 'iot', NULL, '/admin/v1/scene/linkage/64', '113.215.103.83', '113.215.103.83', '{ids=64}', '{\"code\":0,\"msg\":\"success\"}', 0, NULL, '2025-08-12 20:23:59'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (2, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '127.0.0.1', '127.0.0.1', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-12 23:03:21'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (3, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'test', NULL, '/admin/v1/device/down/688cd92fdb9e0158872f4aa9', '127.0.0.1', '127.0.0.1', '688cd92fdb9e0158872f4aa9 {\"appUnionId\":\"test\",\"productKey\":\"688cd92fdb9e0158872f4aa9\",\"deviceId\":\"docsmqtt004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switch\",\"data\":{\"deviceId\":\"docsmqtt004\",\"state\":\"1\"}}}', NULL, 1, '\n### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Unknown column \'device_node\' in \'field list\'\n### The error may exist in cn/universal/persistence/mapper/IoTDeviceMapper.java (best guess)\n### The error may involve cn.universal.persistence.mapper.IoTDeviceMapper.selectOne-Inline\n### The error occurred while setting parameters\n### SQL: SELECT application,areas_id,configuration,coordinate,create_time,creator_id,creator_name,derive_metadata,detail,device_id,device_name,device_node,device_secret,ext_device_id,features,gw_product_key,id,instance,iot_id,nick_name,online_time,product_key,product_name,registry_time,state FROM iot_device WHERE device_id = ? AND product_key = ?\n### Cause: java.sql.SQLSyntaxErrorException: Unknown column \'device_node\' in \'field list\'\n; bad SQL grammar []', '2025-08-12 23:03:29'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (4, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'test', NULL, '/admin/v1/device/down/688cd92fdb9e0158872f4aa9', '127.0.0.1', '127.0.0.1', '688cd92fdb9e0158872f4aa9 {\"appUnionId\":\"test\",\"productKey\":\"688cd92fdb9e0158872f4aa9\",\"deviceId\":\"docsmqtt004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switch\",\"data\":{\"deviceId\":\"docsmqtt004\",\"state\":\"1\"}}}', NULL, 1, '\n### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Unknown column \'device_node\' in \'field list\'\n### The error may exist in cn/universal/persistence/mapper/IoTDeviceMapper.java (best guess)\n### The error may involve cn.universal.persistence.mapper.IoTDeviceMapper.selectOne-Inline\n### The error occurred while setting parameters\n### SQL: SELECT application,areas_id,configuration,coordinate,create_time,creator_id,creator_name,derive_metadata,detail,device_id,device_name,device_node,device_secret,ext_device_id,features,gw_product_key,id,instance,iot_id,nick_name,online_time,product_key,product_name,registry_time,state FROM iot_device WHERE device_id = ? AND product_key = ?\n### Cause: java.sql.SQLSyntaxErrorException: Unknown column \'device_node\' in \'field list\'\n; bad SQL grammar []', '2025-08-12 23:03:30'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (5, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '113.215.103.83', '113.215.103.83', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-12 23:09:39'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (6, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '113.215.103.83', '113.215.103.83', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-12 23:09:44'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (7, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/688cd92fdb9e0158872f4aa9', '113.215.103.83', '113.215.103.83', '688cd92fdb9e0158872f4aa9 {\"appUnionId\":\"iot\",\"productKey\":\"688cd92fdb9e0158872f4aa9\",\"deviceId\":\"docsmqtt004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switch\",\"data\":{\"deviceId\":\"docsmqtt004\",\"state\":\"1\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"msg\":\"设备可能不在线\"},\"requestId\":\"e89f57831a6c4a9b8b0fdf635413d660\"}', 0, NULL, '2025-08-12 23:09:48'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (8, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/688cd92fdb9e0158872f4aa9', '113.215.103.83', '113.215.103.83', '688cd92fdb9e0158872f4aa9 {\"appUnionId\":\"iot\",\"productKey\":\"688cd92fdb9e0158872f4aa9\",\"deviceId\":\"docsmqtt004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switch\",\"data\":{\"deviceId\":\"docsmqtt004\",\"state\":\"1\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"msg\":\"设备可能不在线\"},\"requestId\":\"8fcb737774654918b2bdbac711a73486\"}', 0, NULL, '2025-08-12 23:09:49'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (9, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/688cd92fdb9e0158872f4aa9', '113.215.103.83', '113.215.103.83', '688cd92fdb9e0158872f4aa9 {\"appUnionId\":\"iot\",\"productKey\":\"688cd92fdb9e0158872f4aa9\",\"deviceId\":\"docsmqtt004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switch\",\"data\":{\"deviceId\":\"docsmqtt004\",\"state\":\"1\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"msg\":\"设备可能不在线\"},\"requestId\":\"55c11987a947458b89b96eb177efe031\"}', 0, NULL, '2025-08-12 23:09:49'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (10, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/688cd92fdb9e0158872f4aa9', '113.215.103.83', '113.215.103.83', '688cd92fdb9e0158872f4aa9 {\"appUnionId\":\"iot\",\"productKey\":\"688cd92fdb9e0158872f4aa9\",\"deviceId\":\"docsmqtt004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switch\",\"data\":{\"deviceId\":\"docsmqtt004\",\"state\":\"1\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"msg\":\"设备可能不在线\"},\"requestId\":\"fceb1ac348734d3fb6d78be9c23a70bb\"}', 0, NULL, '2025-08-12 23:09:58'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (11, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/688cd92fdb9e0158872f4aa9', '113.215.103.83', '113.215.103.83', '688cd92fdb9e0158872f4aa9 {\"appUnionId\":\"iot\",\"productKey\":\"688cd92fdb9e0158872f4aa9\",\"deviceId\":\"docsmqtt004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switch\",\"data\":{\"deviceId\":\"docsmqtt004\",\"state\":\"1\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"msg\":\"设备可能不在线\"},\"requestId\":\"5fc7f129fdfb499d83593a99778e43a3\"}', 0, NULL, '2025-08-12 23:09:58'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (12, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/688cd92fdb9e0158872f4aa9', '113.215.103.83', '113.215.103.83', '688cd92fdb9e0158872f4aa9 {\"appUnionId\":\"iot\",\"productKey\":\"688cd92fdb9e0158872f4aa9\",\"deviceId\":\"docsmqtt004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switch\",\"data\":{\"deviceId\":\"docsmqtt004\",\"state\":\"1\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"msg\":\"设备可能不在线\"},\"requestId\":\"6608d439a9b444ce8aee318223b039b2\"}', 0, NULL, '2025-08-12 23:09:58'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (13, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/688cd92fdb9e0158872f4aa9', '113.215.103.83', '113.215.103.83', '688cd92fdb9e0158872f4aa9 {\"appUnionId\":\"iot\",\"productKey\":\"688cd92fdb9e0158872f4aa9\",\"deviceId\":\"docsmqtt004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switch\",\"data\":{\"deviceId\":\"docsmqtt004\",\"state\":\"1\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"payload\":\"A5A50001030201015A5A\"},\"requestId\":\"d64d87db132b4883aa27f29551aa4465\"}', 0, NULL, '2025-08-12 23:12:04'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (14, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/688cd92fdb9e0158872f4aa9', '113.215.103.83', '113.215.103.83', '688cd92fdb9e0158872f4aa9 {\"appUnionId\":\"iot\",\"productKey\":\"688cd92fdb9e0158872f4aa9\",\"deviceId\":\"docsmqtt004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switch\",\"data\":{\"deviceId\":\"docsmqtt004\",\"state\":\"1\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"payload\":\"A5A50001030201015A5A\"},\"requestId\":\"126b5b2be0f84681828d6af2ff6e8c6a\"}', 0, NULL, '2025-08-12 23:12:07'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (15, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/688cd92fdb9e0158872f4aa9', '113.215.103.83', '113.215.103.83', '688cd92fdb9e0158872f4aa9 {\"appUnionId\":\"iot\",\"productKey\":\"688cd92fdb9e0158872f4aa9\",\"deviceId\":\"docsmqtt004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switch\",\"data\":{\"deviceId\":\"docsmqtt004\",\"state\":\"1\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"payload\":\"A5A50001030201015A5A\"},\"requestId\":\"cf84f320f5b54963a7ca473d6cc8c8e4\"}', 0, NULL, '2025-08-12 23:12:33'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (16, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/688cd92fdb9e0158872f4aa9', '113.215.103.83', '113.215.103.83', '688cd92fdb9e0158872f4aa9 {\"appUnionId\":\"iot\",\"productKey\":\"688cd92fdb9e0158872f4aa9\",\"deviceId\":\"docsmqtt004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switch\",\"data\":{\"deviceId\":\"docsmqtt004\",\"state\":\"1\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"payload\":\"A5A50001030201015A5A\"},\"requestId\":\"6417190d508f45c2a2d445d29d47efba\"}', 0, NULL, '2025-08-12 23:12:35'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (17, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/688cd92fdb9e0158872f4aa9', '113.215.103.83', '113.215.103.83', '688cd92fdb9e0158872f4aa9 {\"appUnionId\":\"iot\",\"productKey\":\"688cd92fdb9e0158872f4aa9\",\"deviceId\":\"docsmqtt004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switch\",\"data\":{\"deviceId\":\"docsmqtt004\",\"state\":\"1\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"payload\":\"A5A50001030201015A5A\"},\"requestId\":\"03b491c77c9b49e5bb36341b0fdca9aa\"}', 0, NULL, '2025-08-12 23:12:35'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (18, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/688cd92fdb9e0158872f4aa9', '113.215.103.83', '113.215.103.83', '688cd92fdb9e0158872f4aa9 {\"appUnionId\":\"iot\",\"productKey\":\"688cd92fdb9e0158872f4aa9\",\"deviceId\":\"docsmqtt004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switch\",\"data\":{\"deviceId\":\"docsmqtt004\",\"state\":\"1\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"payload\":\"A5A50001030201015A5A\"},\"requestId\":\"75913b031ef949bfa8a5d8108bf588be\"}', 0, NULL, '2025-08-12 23:12:36'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (19, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '113.215.103.83', '113.215.103.83', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-12 23:34:48'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (20, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/688cd92fdb9e0158872f4aa9', '113.215.103.83', '113.215.103.83', '688cd92fdb9e0158872f4aa9 {\"appUnionId\":\"iot\",\"productKey\":\"688cd92fdb9e0158872f4aa9\",\"deviceId\":\"docsmqtt004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switch\",\"data\":{\"deviceId\":\"docsmqtt004\",\"state\":\"1\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"msg\":\"设备可能不在线\"},\"requestId\":\"0a44948dec374d68941404b1a2423a3b\"}', 0, NULL, '2025-08-12 23:34:52'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (21, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/688cd92fdb9e0158872f4aa9', '113.215.103.83', '113.215.103.83', '688cd92fdb9e0158872f4aa9 {\"appUnionId\":\"iot\",\"productKey\":\"688cd92fdb9e0158872f4aa9\",\"deviceId\":\"docsmqtt004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switch\",\"data\":{\"deviceId\":\"docsmqtt004\",\"state\":\"1\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"msg\":\"设备可能不在线\"},\"requestId\":\"fa77d883574346a6b3f25a66dba33422\"}', 0, NULL, '2025-08-12 23:34:57'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (22, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/688cd92fdb9e0158872f4aa9', '113.215.103.83', '113.215.103.83', '688cd92fdb9e0158872f4aa9 {\"appUnionId\":\"iot\",\"productKey\":\"688cd92fdb9e0158872f4aa9\",\"deviceId\":\"docsmqtt004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switch\",\"data\":{\"deviceId\":\"docsmqtt004\",\"state\":\"1\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"msg\":\"设备可能不在线\"},\"requestId\":\"4d2236ddf04a49e186dde290c054487c\"}', 0, NULL, '2025-08-12 23:35:14'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (23, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/688cd92fdb9e0158872f4aa9', '113.215.103.83', '113.215.103.83', '688cd92fdb9e0158872f4aa9 {\"appUnionId\":\"iot\",\"productKey\":\"688cd92fdb9e0158872f4aa9\",\"deviceId\":\"docsmqtt004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switch\",\"data\":{\"deviceId\":\"docsmqtt004\",\"state\":\"1\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"msg\":\"设备可能不在线\"},\"requestId\":\"5e742f0bc3654cd3870cbe079368685a\"}', 0, NULL, '2025-08-12 23:36:13'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (24, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/688cd92fdb9e0158872f4aa9', '113.215.103.83', '113.215.103.83', '688cd92fdb9e0158872f4aa9 {\"appUnionId\":\"iot\",\"productKey\":\"688cd92fdb9e0158872f4aa9\",\"deviceId\":\"docsmqtt004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switch\",\"data\":{\"deviceId\":\"docsmqtt004\",\"state\":\"1\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"msg\":\"设备可能不在线\"},\"requestId\":\"cd4ec080b7af4951b0303d3abfa41368\"}', 0, NULL, '2025-08-12 23:37:47'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (25, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/688cd92fdb9e0158872f4aa9', '113.215.103.83', '113.215.103.83', '688cd92fdb9e0158872f4aa9 {\"appUnionId\":\"iot\",\"productKey\":\"688cd92fdb9e0158872f4aa9\",\"deviceId\":\"docsmqtt004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switch\",\"data\":{\"deviceId\":\"docsmqtt004\",\"state\":\"1\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"msg\":\"设备可能不在线\"},\"requestId\":\"71064262a82646478856f4ed9177cc1d\"}', 0, NULL, '2025-08-12 23:37:48'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (26, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '113.215.103.83', '113.215.103.83', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-12 23:38:17'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (27, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '113.215.103.83', '113.215.103.83', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-12 23:38:22'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (28, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/688cd92fdb9e0158872f4aa9', '113.215.103.83', '113.215.103.83', '688cd92fdb9e0158872f4aa9 {\"appUnionId\":\"iot\",\"productKey\":\"688cd92fdb9e0158872f4aa9\",\"deviceId\":\"docsmqtt004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switch\",\"data\":{\"deviceId\":\"docsmqtt004\",\"state\":\"1\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"msg\":\"设备可能不在线\"},\"requestId\":\"f3025d12aa434e249c249595a6b8258a\"}', 0, NULL, '2025-08-12 23:38:25'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (29, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/688cd92fdb9e0158872f4aa9', '113.215.103.83', '113.215.103.83', '688cd92fdb9e0158872f4aa9 {\"appUnionId\":\"iot\",\"productKey\":\"688cd92fdb9e0158872f4aa9\",\"deviceId\":\"docsmqtt004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switch\",\"data\":{\"deviceId\":\"docsmqtt004\",\"state\":\"1\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"msg\":\"设备可能不在线\"},\"requestId\":\"7577c36215e54484897ea49370daedef\"}', 0, NULL, '2025-08-12 23:38:33'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (30, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/688cd92fdb9e0158872f4aa9', '113.215.103.83', '113.215.103.83', '688cd92fdb9e0158872f4aa9 {\"appUnionId\":\"iot\",\"productKey\":\"688cd92fdb9e0158872f4aa9\",\"deviceId\":\"docsmqtt004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switch\",\"data\":{\"deviceId\":\"docsmqtt004\",\"state\":\"1\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"msg\":\"设备可能不在线\"},\"requestId\":\"bf3634d903094bdc91b64a9e8fb5f4f0\"}', 0, NULL, '2025-08-12 23:38:34'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (31, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '113.215.103.83', '113.215.103.83', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-13 06:00:08'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (32, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '58.100.228.247', '58.100.228.247', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-13 09:06:45'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (33, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/abcxassxnanahsman', '58.100.228.247', '58.100.228.247', 'abcxassxnanahsman {\"appUnionId\":\"iot\",\"productKey\":\"abcxassxnanahsman\",\"deviceId\":\"202507070079\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"meterRead\",\"data\":{\"meterNo\":\"202507070079\"}}}', '{\"code\":723,\"msg\":\"设备与平台连接已断开,指令已暂存3天(同指令以最新为准),重连后自动发送\",\"requestId\":\"965202172e7a4ff4bc4fe536b5eb692c\"}', 0, NULL, '2025-08-13 09:06:54'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (34, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/abcxassxnanahsman', '58.100.228.247', '58.100.228.247', 'abcxassxnanahsman {\"appUnionId\":\"iot\",\"productKey\":\"abcxassxnanahsman\",\"deviceId\":\"202507070079\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switchOnOff\",\"data\":{\"meterNo\":\"202507070079\",\"valveOn\":\"0\"}}}', '{\"code\":723,\"msg\":\"设备与平台连接已断开,指令已暂存3天(同指令以最新为准),重连后自动发送\",\"requestId\":\"33f150c938894a74b9a1df944ecb24ff\"}', 0, NULL, '2025-08-13 09:07:10'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (35, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/abcxassxnanahsman', '58.100.228.247', '58.100.228.247', 'abcxassxnanahsman {\"appUnionId\":\"iot\",\"productKey\":\"abcxassxnanahsman\",\"deviceId\":\"202507070079\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switchOnOff\",\"data\":{\"meterNo\":\"202507070079\",\"valveOn\":\"0\"}}}', '{\"code\":723,\"msg\":\"设备与平台连接已断开,指令已暂存3天(同指令以最新为准),重连后自动发送\",\"requestId\":\"d5672e1d1b234207a9552aecf7cd847e\"}', 0, NULL, '2025-08-13 09:07:13'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (36, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/abcxassxnanahsman', '58.100.228.247', '58.100.228.247', 'abcxassxnanahsman {\"appUnionId\":\"iot\",\"productKey\":\"abcxassxnanahsman\",\"deviceId\":\"202507070079\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switchOnOff\",\"data\":{\"meterNo\":\"202507070079\",\"valveOn\":\"0\"}}}', '{\"code\":723,\"msg\":\"设备与平台连接已断开,指令已暂存3天(同指令以最新为准),重连后自动发送\",\"requestId\":\"e24010dd76a444ba8b3b792a84c662c3\"}', 0, NULL, '2025-08-13 09:07:13'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (37, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '58.100.228.247', '58.100.228.247', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-13 09:42:01'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (38, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/abcxassxnanahsman', '58.100.228.247', '58.100.228.247', 'abcxassxnanahsman {\"appUnionId\":\"iot\",\"productKey\":\"abcxassxnanahsman\",\"deviceId\":\"202507070079\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switchOnOff\",\"data\":{\"meterNo\":\"202507070079\",\"valveOn\":\"0\"}}}', '{\"code\":723,\"msg\":\"设备与平台连接已断开,指令已暂存3天(同指令以最新为准),重连后自动发送\",\"requestId\":\"ab0cb37dcc4949d2b0f882e808f467b5\"}', 0, NULL, '2025-08-13 09:42:36'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (39, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '58.100.228.247', '58.100.228.247', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-13 09:47:00'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (40, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/abcxassxnanahsman', '58.100.228.247', '58.100.228.247', 'abcxassxnanahsman {\"appUnionId\":\"iot\",\"productKey\":\"abcxassxnanahsman\",\"deviceId\":\"202505220093\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"meterRead\",\"data\":{\"meterNo\":\"202505220093\"}}}', '{\"code\":723,\"msg\":\"设备与平台连接已断开,指令已暂存3天(同指令以最新为准),重连后自动发送\",\"requestId\":\"315631e709174eaca4399bae92b25290\"}', 0, NULL, '2025-08-13 09:47:07'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (41, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '58.100.228.247', '58.100.228.247', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-13 20:41:26'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (42, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '58.100.228.247', '58.100.228.247', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-13 20:58:05'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (43, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '58.100.228.247', '58.100.228.247', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-13 21:11:57'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (44, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/abcxassxnanahsman', '58.100.228.247', '58.100.228.247', 'abcxassxnanahsman {\"appUnionId\":\"iot\",\"productKey\":\"abcxassxnanahsman\",\"deviceId\":\"202507070079\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switchOnOff\",\"data\":{\"meterNo\":\"202507070079\",\"valveOn\":\"0\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"payload\":\"68790007072520681c1035333333348967454d3347773b3a443c3216\"},\"requestId\":\"d152dfaf73104d768609954e08b7cdaa\"}', 0, NULL, '2025-08-13 21:12:10'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (45, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/abcxassxnanahsman', '58.100.228.247', '58.100.228.247', 'abcxassxnanahsman {\"appUnionId\":\"iot\",\"productKey\":\"abcxassxnanahsman\",\"deviceId\":\"202507070079\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switchOnOff\",\"data\":{\"meterNo\":\"202507070079\",\"valveOn\":\"0\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"payload\":\"68790007072520681c1035333333348967454d3347773b3a443c3216\"},\"requestId\":\"b6bc9726ff1a4c90bf7bdbeecfcac4cf\"}', 0, NULL, '2025-08-13 21:13:31'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (46, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/abcxassxnanahsman', '58.100.228.247', '58.100.228.247', 'abcxassxnanahsman {\"appUnionId\":\"iot\",\"productKey\":\"abcxassxnanahsman\",\"deviceId\":\"202507070079\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switchOnOff\",\"data\":{\"meterNo\":\"202507070079\",\"valveOn\":\"0\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"payload\":\"68790007072520681c1035333333348967454d3347773b3a443c3216\"},\"requestId\":\"1d5021c2a7de45bebcffa2eeac7a1700\"}', 0, NULL, '2025-08-13 21:13:35'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (47, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/abcxassxnanahsman', '58.100.228.247', '58.100.228.247', 'abcxassxnanahsman {\"appUnionId\":\"iot\",\"productKey\":\"abcxassxnanahsman\",\"deviceId\":\"202507070079\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switchOnOff\",\"data\":{\"meterNo\":\"202507070079\",\"valveOn\":\"1\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"payload\":\"68790007072520681c1035333333348967454e3347773b3a443c3316\"},\"requestId\":\"f8e259a6b7aa483c80ae976e6a2bac54\"}', 0, NULL, '2025-08-13 21:13:57'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (48, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '58.100.228.247', '58.100.228.247', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-15 10:39:40'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (49, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/abcxassxnanahsman', '58.100.228.247', '58.100.228.247', 'abcxassxnanahsman {\"appUnionId\":\"iot\",\"productKey\":\"abcxassxnanahsman\",\"deviceId\":\"202507070079\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"meterRead\",\"data\":{\"meterNo\":\"202507070079\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"payload\":\"687900070725206811043335c4331016\"},\"requestId\":\"d5a66b891d9f4474bd91c02e92b931d5\"}', 0, NULL, '2025-08-15 10:39:46'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (50, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/abcxassxnanahsman', '58.100.228.247', '58.100.228.247', 'abcxassxnanahsman {\"appUnionId\":\"iot\",\"productKey\":\"abcxassxnanahsman\",\"deviceId\":\"202507070079\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switchOnOff\",\"data\":{\"meterNo\":\"202507070079\",\"valveOn\":\"0\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"payload\":\"68790007072520681c1035333333348967454d3347773b3a443c3216\"},\"requestId\":\"b8bc5ae66e5c485fb5930ef6bfa79729\"}', 0, NULL, '2025-08-15 10:40:15'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (51, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/abcxassxnanahsman', '58.100.228.247', '58.100.228.247', 'abcxassxnanahsman {\"appUnionId\":\"iot\",\"productKey\":\"abcxassxnanahsman\",\"deviceId\":\"202507070079\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switchOnOff\",\"data\":{\"meterNo\":\"202507070079\",\"valveOn\":\"1\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"payload\":\"68790007072520681c1035333333348967454e3347773b3a443c3316\"},\"requestId\":\"f3298a3c610d4df9b550d3b0f5f4e8de\"}', 0, NULL, '2025-08-15 10:40:18'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (52, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/abcxassxnanahsman', '58.100.228.247', '58.100.228.247', 'abcxassxnanahsman {\"appUnionId\":\"iot\",\"productKey\":\"abcxassxnanahsman\",\"deviceId\":\"202507070079\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switchOnOff\",\"data\":{\"meterNo\":\"202507070079\",\"valveOn\":\"1\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"payload\":\"68790007072520681c1035333333348967454e3347773b3a443c3316\"},\"requestId\":\"ab14d85c17694c0f8ceca3fa0aefd726\"}', 0, NULL, '2025-08-15 10:40:28'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (53, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/abcxassxnanahsman', '58.100.228.247', '58.100.228.247', 'abcxassxnanahsman {\"appUnionId\":\"iot\",\"productKey\":\"abcxassxnanahsman\",\"deviceId\":\"202507070079\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switchOnOff\",\"data\":{\"meterNo\":\"202507070079\",\"valveOn\":\"0\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"payload\":\"68790007072520681c1035333333348967454d3347773b3a443c3216\"},\"requestId\":\"fd4184f5c6784a7ebcc5859a4cba00c6\"}', 0, NULL, '2025-08-15 10:40:32'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (54, '修改菜单', 2, 'cn.universal.admin.system.web.SysMenuController.edit()', 'PUT', 1, 'iot', NULL, '/admin/system/menu', '58.100.228.247', '58.100.228.247', '{\"menuId\":1193,\"menuName\":\"工作台\",\"parentId\":0,\"orderNum\":\"0\",\"path\":\"index\",\"component\":\"Index\",\"isFrame\":\"1\",\"isCache\":\"1\",\"menuType\":\"M\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"\",\"icon\":\"ie\",\"createBy\":\"iot\",\"updateBy\":\"iot\",\"params\":{},\"children\":[]}', '{\"code\":0,\"msg\":\"success\"}', 0, NULL, '2025-08-15 13:51:13'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (55, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '58.100.228.247', '58.100.228.247', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-15 14:14:03'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (56, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '58.100.228.247', '58.100.228.247', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-15 14:15:41'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (57, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '58.100.228.247', '58.100.228.247', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-15 14:17:15'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (58, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '58.100.228.247', '58.100.228.247', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-15 14:17:57'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (59, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '58.100.228.247', '58.100.228.247', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-15 14:19:30'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (60, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '58.100.228.247', '58.100.228.247', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-15 14:20:49'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (61, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '58.100.228.247', '58.100.228.247', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-15 14:21:55'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (62, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '58.100.228.247', '58.100.228.247', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-15 14:25:55'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (63, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'test', NULL, '/admin/v1/device/down/681c0775c2dc427d0480ab5f', '58.100.228.247', '58.100.228.247', '681c0775c2dc427d0480ab5f {\"appUnionId\":\"test\",\"productKey\":\"681c0775c2dc427d0480ab5f\",\"deviceId\":\"ov00014117\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switchControl\",\"data\":{\"open\":\"0\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"dxxc\":\"20\",\"messageType\":\"FUNCTIONS\",\"data\":{\"open\":\"0\"},\"function\":\"switchControl\"},\"requestId\":\"0a58a9f068154ac4b13031cb38296fc6\"}', 0, NULL, '2025-08-15 14:32:35'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (64, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'test', NULL, '/admin/v1/device/down/681c0775c2dc427d0480ab5f', '58.100.228.247', '58.100.228.247', '681c0775c2dc427d0480ab5f {\"appUnionId\":\"test\",\"productKey\":\"681c0775c2dc427d0480ab5f\",\"deviceId\":\"ov00014117\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switchControl\",\"data\":{\"open\":\"1\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"dxxc\":\"21\",\"messageType\":\"FUNCTIONS\",\"data\":{\"open\":\"1\"},\"function\":\"switchControl\"},\"requestId\":\"0e661ac0767840ee90b59058e7c60a33\"}', 0, NULL, '2025-08-15 14:32:39'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (65, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '58.100.228.247', '58.100.228.247', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-15 14:34:22'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (66, '新增电信公共产品', 1, 'cn.universal.admin.platform.web.IoTProductController.addCtwingPubPro()', 'POST', 1, 'iot', NULL, '/admin/v1/product/ctwing/pubproadd', '58.100.228.247', '58.100.228.247', '{\"id\":null,\"productId\":\"GENS-1PLO\",\"productKey\":null,\"productSecret\":null,\"thirdPlatform\":\"ctaiot\",\"thirdConfiguration\":null,\"companyNo\":\"上海智洋网络科技有限公司\",\"classifiedId\":\"100100\",\"configuration\":null,\"networkWay\":null,\"projectName\":null,\"projectId\":null,\"classifiedName\":\"智慧电表\",\"messageProtocol\":null,\"orgId\":null,\"name\":null,\"creatorId\":null,\"describe\":null,\"storePolicy\":null,\"storePolicyConfiguration\":null,\"photoUrl\":null,\"protocolName\":null,\"metadata\":null,\"createTime\":null,\"state\":null,\"publicProductID\":\"99000490\"}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"code\":0,\"msg\":\"success\",\"data\":1,\"requestId\":\"7917e4c4392d4792bbabdee5870ac55d\"}}', 0, NULL, '2025-08-15 15:37:03'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (67, '新增电信公共产品', 1, 'cn.universal.admin.platform.web.IoTProductController.addCtwingPubPro()', 'POST', 1, 'iot', NULL, '/admin/v1/product/ctwing/pubproadd', '58.100.228.247', '58.100.228.247', '{\"id\":null,\"productId\":\"GENS-1PLO\",\"productKey\":null,\"productSecret\":null,\"thirdPlatform\":\"ctaiot\",\"thirdConfiguration\":null,\"companyNo\":\"上海智洋网络科技有限公司\",\"classifiedId\":\"100100\",\"configuration\":null,\"networkWay\":null,\"projectName\":null,\"projectId\":null,\"classifiedName\":\"智慧电表\",\"messageProtocol\":null,\"orgId\":null,\"name\":null,\"creatorId\":null,\"describe\":null,\"storePolicy\":null,\"storePolicyConfiguration\":null,\"photoUrl\":null,\"protocolName\":null,\"metadata\":null,\"createTime\":null,\"state\":null,\"publicProductID\":\"99000490\"}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"code\":0,\"msg\":\"success\",\"data\":1,\"requestId\":\"6a480c99bb5f43e895472b559a425b89\"}}', 0, NULL, '2025-08-15 15:37:03'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (68, '删除设备产品', 3, 'cn.universal.admin.platform.web.IoTProductController.remove()', 'DELETE', 1, 'iot', NULL, '/admin/v1/product/540', '58.100.228.247', '58.100.228.247', '{ids=540}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"code\":0,\"msg\":\"success\",\"data\":1,\"requestId\":\"1397159971ab43908593e9a4cddbd012\"}}', 0, NULL, '2025-08-15 15:37:15'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (69, '删除设备产品', 3, 'cn.universal.admin.platform.web.IoTProductController.remove()', 'DELETE', 1, 'iot', NULL, '/admin/v1/product/541', '58.100.228.247', '58.100.228.247', '{ids=541}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"code\":0,\"msg\":\"success\",\"data\":1,\"requestId\":\"611bd69bb2924b97b97f271584ed7308\"}}', 0, NULL, '2025-08-15 15:55:36'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (70, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '113.215.103.83', '113.215.103.83', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-15 23:27:59'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (71, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '113.215.103.83', '113.215.103.83', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-15 23:32:52'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (72, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '113.215.103.83', '113.215.103.83', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-15 23:39:13'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (73, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '113.215.103.83', '113.215.103.83', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-16 10:43:35'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (74, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '113.215.103.83', '113.215.103.83', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-16 22:04:41'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (75, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '127.0.0.1', '127.0.0.1', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-16 22:06:59'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (76, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '127.0.0.1', '127.0.0.1', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-16 22:07:20'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (77, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '127.0.0.1', '127.0.0.1', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-16 22:08:15'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (78, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '127.0.0.1', '127.0.0.1', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-16 22:08:46'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (79, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '127.0.0.1', '127.0.0.1', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-16 22:09:05'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (80, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '127.0.0.1', '127.0.0.1', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-16 22:09:07'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (81, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '127.0.0.1', '127.0.0.1', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-16 22:09:09'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (82, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '127.0.0.1', '127.0.0.1', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-17 13:33:38'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (83, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '127.0.0.1', '127.0.0.1', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-17 13:35:54'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (84, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '113.215.103.83', '113.215.103.83', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-17 16:25:54'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (85, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '113.215.103.83', '113.215.103.83', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-17 16:31:04'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (86, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '113.215.103.83', '113.215.103.83', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-17 16:32:16'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (87, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '113.215.103.83', '113.215.103.83', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-17 16:33:08'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (88, '新增设备', 1, 'cn.universal.admin.platform.web.IoTDeviceController.add()', 'POST', 1, 'test', NULL, '/admin/v1/device', '113.215.103.83', '113.215.103.83', '{\"deviceId\":\"ov0000004\",\"productKey\":\"681c0775c2dc427d0480ab5f\",\"deviceName\":\"测试验证\",\"latitude\":\"32.169945\",\"longitude\":\"117.242386\",\"params\":{},\"otherParams\":{}}', '{\"code\":0,\"msg\":\"success\",\"requestId\":\"165e02278ff948bd9aec523e329601c6\"}', 0, NULL, '2025-08-17 16:34:33'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (89, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '113.215.103.83', '113.215.103.83', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-17 16:35:53'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (90, '新增设备', 1, 'cn.universal.admin.platform.web.IoTDeviceController.add()', 'POST', 1, 'test', NULL, '/admin/v1/device', '113.215.103.83', '113.215.103.83', '{\"deviceId\":\"ov0000004\",\"productKey\":\"681c0775c2dc427d0480ab5f\",\"deviceName\":\"ov0000004\",\"latitude\":\"33.61474\",\"longitude\":\"114.230893\",\"params\":{},\"otherParams\":{}}', '{\"code\":0,\"msg\":\"success\",\"requestId\":\"8a119422cd0f4ac6981458c640bcf4e3\"}', 0, NULL, '2025-08-17 16:39:24'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (91, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '113.215.103.83', '113.215.103.83', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-17 16:40:16'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (92, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '113.215.103.83', '113.215.103.83', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-17 16:43:58'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (93, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/681c0775c2dc427d0480ab5f', '113.215.103.83', '113.215.103.83', '681c0775c2dc427d0480ab5f {\"appUnionId\":\"iot\",\"productKey\":\"681c0775c2dc427d0480ab5f\",\"deviceId\":\"ov0000004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switchControl\",\"data\":{\"open\":\"0\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"dxxc\":\"16\",\"messageType\":\"FUNCTIONS\",\"data\":{\"open\":\"0\"},\"function\":\"switchControl\"},\"requestId\":\"d9e1a3f9c1444e11b5002ff9e9ec3c8c\"}', 0, NULL, '2025-08-17 16:44:07'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (94, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/681c0775c2dc427d0480ab5f', '113.215.103.83', '113.215.103.83', '681c0775c2dc427d0480ab5f {\"appUnionId\":\"iot\",\"productKey\":\"681c0775c2dc427d0480ab5f\",\"deviceId\":\"ov0000004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switchControl\",\"data\":{\"open\":\"0\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"dxxc\":\"17\",\"messageType\":\"FUNCTIONS\",\"data\":{\"open\":\"0\"},\"function\":\"switchControl\"},\"requestId\":\"523dc81139754475ab7bcff42ea4f368\"}', 0, NULL, '2025-08-17 16:45:14'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (95, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '113.215.103.83', '113.215.103.83', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-17 16:49:14'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (96, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/681c0775c2dc427d0480ab5f', '113.215.103.83', '113.215.103.83', '681c0775c2dc427d0480ab5f {\"appUnionId\":\"iot\",\"productKey\":\"681c0775c2dc427d0480ab5f\",\"deviceId\":\"ov0000004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switchControl\",\"data\":{\"open\":\"0\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"dxxc\":\"20\",\"messageType\":\"FUNCTIONS\",\"data\":{\"open\":\"0\"},\"function\":\"switchControl\"},\"requestId\":\"8b7a81a617e64af1a9fac02aa20385a2\"}', 0, NULL, '2025-08-17 16:49:50'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (97, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '113.215.103.83', '113.215.103.83', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-17 17:13:54'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (98, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '113.215.103.83', '113.215.103.83', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-17 17:14:48'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (99, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '113.215.103.83', '113.215.103.83', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-17 17:31:16'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (100, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '113.215.103.83', '113.215.103.83', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-17 17:41:16'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (101, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '115.209.55.250', '115.209.55.250', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-21 18:28:39'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (102, '新增设备', 1, 'cn.universal.admin.platform.web.IoTDeviceController.add()', 'POST', 1, 'iot', NULL, '/admin/v1/device', '115.209.55.250', '115.209.55.250', '{\"deviceId\":\"ov0000005\",\"productKey\":\"681c0775c2dc427d0480ab5f\",\"deviceName\":\"ov0000005\",\"latitude\":\"30.259898\",\"longitude\":\"120.532174\",\"params\":{},\"otherParams\":{}}', '{\"code\":500,\"msg\":\"deivceId不存在\",\"requestId\":\"1426b7e323904666bd854f9a1a1593e0\"}', 0, NULL, '2025-08-21 18:29:12'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (103, '新增设备', 1, 'cn.universal.admin.platform.web.IoTDeviceController.add()', 'POST', 1, 'iot', NULL, '/admin/v1/device', '115.209.55.250', '115.209.55.250', '{\"deviceId\":\"ov0000005\",\"productKey\":\"681c0775c2dc427d0480ab5f\",\"deviceName\":\"ov0000005\",\"latitude\":\"30.259898\",\"longitude\":\"120.532174\",\"params\":{},\"otherParams\":{}}', '{\"code\":500,\"msg\":\"deivceId不存在\",\"requestId\":\"44942fbba58c4d889d778d6d27158e75\"}', 0, NULL, '2025-08-21 18:29:18'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (104, '新增设备', 1, 'cn.universal.admin.platform.web.IoTDeviceController.add()', 'POST', 1, 'iot', NULL, '/admin/v1/device', '115.209.55.250', '115.209.55.250', '{\"deviceId\":\"ov0000005\",\"productKey\":\"681c0775c2dc427d0480ab5f\",\"deviceName\":\"ov0000005\",\"latitude\":\"30.259898\",\"longitude\":\"120.532174\",\"params\":{},\"otherParams\":{}}', '{\"code\":0,\"msg\":\"success\",\"requestId\":\"9c0bc1e61dc64bff87f53283cfe153c5\"}', 0, NULL, '2025-08-21 18:35:00'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (105, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '115.209.55.250', '115.209.55.250', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-21 18:35:04'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (106, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '115.209.55.250', '115.209.55.250', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-21 18:35:07'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (107, '修改设备', 2, 'cn.universal.admin.platform.web.IoTDeviceController.edit()', 'PUT', 1, 'iot', NULL, '/admin/v1/device', '115.209.55.250', '115.209.55.250', '{\"id\":56,\"iotId\":\"5967cc77812f42d08352d6aaeeda3cd8\",\"deviceId\":\"ov0000005\",\"productName\":\"智能插座\",\"productKey\":\"681c0775c2dc427d0480ab5f\",\"deviceName\":\"模拟删除1\",\"creatorId\":\"iot\",\"state\":false,\"createTime\":1755772499,\"configuration\":\"{}\",\"coordinate\":\"120.532174,30.259898\",\"latitude\":\"120.532174\",\"longitude\":\"30.259898\",\"params\":{\"locationStr\":\"120.532174,30.259898\"},\"hasProtocol\":true,\"otherParams\":{},\"devGroupName\":[]}', '{\"code\":0,\"msg\":\"success\",\"requestId\":\"d225f96e72e44e50bf4f5ca7ecb975be\"}', 0, NULL, '2025-08-21 18:35:21'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (108, '修改设备', 2, 'cn.universal.admin.platform.web.IoTDeviceController.edit()', 'PUT', 1, 'iot', NULL, '/admin/v1/device', '115.209.55.250', '115.209.55.250', '{\"id\":56,\"iotId\":\"5967cc77812f42d08352d6aaeeda3cd8\",\"deviceId\":\"ov0000005\",\"productName\":\"智能插座\",\"productKey\":\"681c0775c2dc427d0480ab5f\",\"deviceName\":\"模拟删除1\",\"creatorId\":\"iot\",\"state\":false,\"detail\":\"你撒\",\"createTime\":1755772499,\"configuration\":\"{}\",\"coordinate\":\"30.259898,120.532174\",\"latitude\":\"30.259898\",\"longitude\":\"120.532174\",\"params\":{\"locationStr\":\"30.259898,120.532174\"},\"hasProtocol\":true,\"otherParams\":{},\"devGroupName\":[]}', '{\"code\":0,\"msg\":\"success\",\"requestId\":\"757b1604d0fa4ea9aaa10d0372e3406b\"}', 0, NULL, '2025-08-21 18:35:26'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (109, '删除设备', 3, 'cn.universal.admin.platform.web.IoTDeviceController.remove()', 'DELETE', 1, 'iot', NULL, '/admin/v1/device/56', '115.209.55.250', '115.209.55.250', '{ids=56}', '{\"code\":0,\"msg\":\"success\",\"requestId\":\"98486f53ca6d455cad991a6b6ba82f09\"}', 0, NULL, '2025-08-21 18:35:31'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (110, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '112.24.73.38', '112.24.73.38', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-24 18:37:35'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (111, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '112.24.73.38', '112.24.73.38', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-24 18:38:10'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (112, '产品导出', 5, 'cn.universal.admin.platform.web.IoTProductController.export()', 'POST', 1, 'test', NULL, '/admin/v1/product/export', '112.24.73.38', '112.24.73.38', '{\"id\":539,\"creatorId\":\"test\",\"hasDevice\":false,\"self\":true,\"page\":1,\"size\":10,\"pageNum\":1,\"pageSize\":10,\"halfSize\":5}', NULL, 0, NULL, '2025-08-24 18:45:46'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (113, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '49.88.127.121', '49.88.127.121', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-25 15:16:35'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (114, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '49.88.127.121', '49.88.127.121', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-25 15:20:54'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (115, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '58.100.228.246', '58.100.228.246', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-25 17:48:15'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (116, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '58.100.228.246', '58.100.228.246', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-25 17:54:33'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (117, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '111.160.8.98', '111.160.8.98', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-26 08:55:32'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (118, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '111.160.8.98', '111.160.8.98', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-26 08:55:55'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (119, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '58.100.228.246', '58.100.228.246', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-26 10:26:36'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (120, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '58.100.228.246', '58.100.228.246', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-26 10:26:44'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (121, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '58.100.228.246', '58.100.228.246', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-26 10:27:11'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (122, '新增场景联动', 1, 'cn.universal.admin.system.web.SceneLinkageController.add()', 'POST', 1, 'test', NULL, '/admin/v1/scene/linkage', '222.75.162.82', '222.75.162.82', '{\"id\":65,\"sceneName\":\"01\",\"touch\":\"one\",\"triggerCondition\":[{\"trigger\":\"manual\",\"filters\":[]}],\"execAction\":[{\"trigger\":\"device\",\"type\":\"functions\",\"deviceId\":\"ov00014117\",\"deviceName\":\"潜江雅园1号楼底商店铺\",\"modelId\":\"switchControl\",\"filters\":[],\"execData\":[{\"id\":\"open\",\"name\":\"开关控制\",\"params\":\"0\"}]}],\"sleepCycle\":5,\"status\":0,\"createBy\":\"test\",\"createTime\":1756178190324,\"updateBy\":\"test\",\"updateTime\":1756178190324,\"params\":{}}', '{\"code\":0,\"msg\":\"success\"}', 0, NULL, '2025-08-26 11:16:30'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (123, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '219.145.104.253', '219.145.104.253', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-26 14:57:50'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (124, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '219.145.104.253', '219.145.104.253', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-26 14:59:41'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (125, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '219.145.104.253', '219.145.104.253', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-26 16:05:50'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (126, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'test', NULL, '/admin/v1/device/down/abcxassxnanahsman', '219.145.104.253', '219.145.104.253', 'abcxassxnanahsman {\"appUnionId\":\"test\",\"productKey\":\"abcxassxnanahsman\",\"deviceId\":\"202411190247\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"meterRead\",\"data\":{\"meterNo\":\"202411190247\"}}}', '{\"code\":723,\"msg\":\"设备与平台连接已断开,指令已暂存3天(同指令以最新为准),重连后自动发送\",\"requestId\":\"fc610335ea884d20a3fb0273de2bc329\"}', 0, NULL, '2025-08-26 16:08:13'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (127, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '113.215.176.47', '113.215.176.47', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-26 20:47:39'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (128, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '113.215.176.47', '113.215.176.47', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-26 21:01:51'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (129, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/681c0775c2dc427d0480ab5f', '113.215.176.47', '113.215.176.47', '681c0775c2dc427d0480ab5f {\"appUnionId\":\"iot\",\"productKey\":\"681c0775c2dc427d0480ab5f\",\"deviceId\":\"ov0000004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switchControl\",\"data\":{\"open\":\"0\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"dxxc\":\"14\",\"messageType\":\"FUNCTIONS\",\"data\":{\"open\":\"0\"},\"function\":\"switchControl\"},\"requestId\":\"b5508db02d424b719a036d91c0ec355c\"}', 0, NULL, '2025-08-26 21:04:48'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (130, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/681c0775c2dc427d0480ab5f', '113.215.176.47', '113.215.176.47', '681c0775c2dc427d0480ab5f {\"appUnionId\":\"iot\",\"productKey\":\"681c0775c2dc427d0480ab5f\",\"deviceId\":\"ov0000004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switchControl\",\"data\":{\"open\":\"1\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"dxxc\":\"15\",\"messageType\":\"FUNCTIONS\",\"data\":{\"open\":\"1\"},\"function\":\"switchControl\"},\"requestId\":\"8d1b03531f28478b81bee0aa614245ad\"}', 0, NULL, '2025-08-26 21:05:07'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (131, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/681c0775c2dc427d0480ab5f', '113.215.176.47', '113.215.176.47', '681c0775c2dc427d0480ab5f {\"appUnionId\":\"iot\",\"productKey\":\"681c0775c2dc427d0480ab5f\",\"deviceId\":\"ov0000004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"newkai\",\"data\":{\"docs\":98}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"dxxc\":\"16\",\"messageType\":\"FUNCTIONS\",\"data\":{\"docs\":98},\"function\":\"newkai\"},\"requestId\":\"98d6a6b2a7bc45bb9486adaa1d4330d3\"}', 0, NULL, '2025-08-26 21:05:40'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (132, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/681c0775c2dc427d0480ab5f', '113.215.176.47', '113.215.176.47', '681c0775c2dc427d0480ab5f {\"appUnionId\":\"iot\",\"productKey\":\"681c0775c2dc427d0480ab5f\",\"deviceId\":\"ov0000004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"newkai\",\"data\":{\"docs\":23}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"dxxc\":\"17\",\"messageType\":\"FUNCTIONS\",\"data\":{\"docs\":23},\"function\":\"newkai\"},\"requestId\":\"63ef4851656a4b7090c5d5505a866c51\"}', 0, NULL, '2025-08-26 21:05:57'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (133, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/681c0775c2dc427d0480ab5f', '113.215.176.47', '113.215.176.47', '681c0775c2dc427d0480ab5f {\"appUnionId\":\"iot\",\"productKey\":\"681c0775c2dc427d0480ab5f\",\"deviceId\":\"ov0000004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"newkai\",\"data\":{\"docs\":23}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"dxxc\":\"18\",\"messageType\":\"FUNCTIONS\",\"data\":{\"docs\":23},\"function\":\"newkai\"},\"requestId\":\"0db583236a4c4d9cbd8922fcf9fa18b7\"}', 0, NULL, '2025-08-26 21:06:36'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (134, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/681c0775c2dc427d0480ab5f', '113.215.176.47', '113.215.176.47', '681c0775c2dc427d0480ab5f {\"appUnionId\":\"iot\",\"productKey\":\"681c0775c2dc427d0480ab5f\",\"deviceId\":\"ov0000004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"newkai\",\"data\":{\"docs\":23}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"dxxc\":\"19\",\"messageType\":\"FUNCTIONS\",\"data\":{\"docs\":23},\"function\":\"newkai\"},\"requestId\":\"9bcbb873060249e484264bd88bd86414\"}', 0, NULL, '2025-08-26 21:10:57'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (135, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/681c0775c2dc427d0480ab5f', '113.215.176.47', '113.215.176.47', '681c0775c2dc427d0480ab5f {\"appUnionId\":\"iot\",\"productKey\":\"681c0775c2dc427d0480ab5f\",\"deviceId\":\"ov0000004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"newkai\",\"data\":{\"docs\":23}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"dxxc\":\"20\",\"messageType\":\"FUNCTIONS\",\"data\":{\"docs\":23},\"function\":\"newkai\"},\"requestId\":\"309b87d54637422dbf1d19e19ccd4d4c\"}', 0, NULL, '2025-08-26 21:11:19'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (136, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/681c0775c2dc427d0480ab5f', '113.215.176.47', '113.215.176.47', '681c0775c2dc427d0480ab5f {\"appUnionId\":\"iot\",\"productKey\":\"681c0775c2dc427d0480ab5f\",\"deviceId\":\"ov0000004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"newkai\",\"data\":{\"docs\":23}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"dxxc\":\"21\",\"messageType\":\"FUNCTIONS\",\"data\":{\"docs\":23},\"function\":\"newkai\"},\"requestId\":\"b64db29514404b93bbb2d20cea17febd\"}', 0, NULL, '2025-08-26 21:11:41'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (137, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '113.215.176.47', '113.215.176.47', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-26 21:23:45'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (138, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/681c0775c2dc427d0480ab5f', '113.215.176.47', '113.215.176.47', '681c0775c2dc427d0480ab5f {\"appUnionId\":\"iot\",\"productKey\":\"681c0775c2dc427d0480ab5f\",\"deviceId\":\"ov0000004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switchControl\",\"data\":{\"open\":\"0\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"msg\":\"设备可能不在线\"},\"requestId\":\"1bd9324bfcd84497af76bc63306b2228\"}', 0, NULL, '2025-08-26 21:23:56'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (139, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/681c0775c2dc427d0480ab5f', '113.215.176.47', '113.215.176.47', '681c0775c2dc427d0480ab5f {\"appUnionId\":\"iot\",\"productKey\":\"681c0775c2dc427d0480ab5f\",\"deviceId\":\"ov0000004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switchControl\",\"data\":{\"open\":\"0\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"msg\":\"设备可能不在线\"},\"requestId\":\"fcd3e7eefa9740fca90175455b06cdb5\"}', 0, NULL, '2025-08-26 21:24:06'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (140, '下行加保存日志', 0, 'cn.universal.admin.platform.web.IoTDeviceController.iotFunctionsDown()', 'POST', 1, 'iot', NULL, '/admin/v1/device/down/681c0775c2dc427d0480ab5f', '113.215.176.47', '113.215.176.47', '681c0775c2dc427d0480ab5f {\"appUnionId\":\"iot\",\"productKey\":\"681c0775c2dc427d0480ab5f\",\"deviceId\":\"ov0000004\",\"cmd\":\"DEV_FUNCTION\",\"function\":{\"messageType\":\"FUNCTIONS\",\"function\":\"switchControl\",\"data\":{\"open\":\"0\"}}}', '{\"code\":0,\"msg\":\"success\",\"data\":{\"dxxc\":\"6\",\"messageType\":\"FUNCTIONS\",\"data\":{\"open\":\"0\"},\"function\":\"switchControl\"},\"requestId\":\"db920086b3c94d40acc04570e0a12282\"}', 0, NULL, '2025-08-26 21:24:11'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (141, '修改设备协议', 2, 'cn.universal.admin.platform.web.IoTDeviceProtocolController.edit()', 'PUT', 1, 'iot', NULL, '/admin/v1/protocol', '113.215.176.47', '113.215.176.47', '{\"name\":\"智能插座\",\"state\":1,\"id\":\"681c0775c2dc427d0480ab5f\",\"type\":\"magic\",\"configuration\":\"{\\\"needBs4Decode\\\":false,\\\"location\\\":\\\"\\\\nimport log;\\\\n\\\\nvar url=\\\\\\\"\\\\\\\";\\\\n\\\\nvar post = (url,body) =>{\\\\n \\\\n}\\\\n\\\\nvar encode = payload => {\\\\n var dt=toJson(payload)\\\\n dt.dxxc=randomSign();\\\\n return dt;\\\\n}\\\\n\\\\n//解码\\\\nvar decode = payload => {\\\\n var result = []\\\\n log.info(\\\\\\\"编解码收到消息={}\\\\\\\",payload)\\\\n var dt=toJson(payload)\\\\n var propertiesObj = {\\\\n \\\\\\\"messageType\\\\\\\": \\\\\\\"PROPERTIES\\\\\\\",\\\\n \\\\\\\"properties\\\\\\\": {}\\\\n }\\\\n //设置属性\\\\n propertiesObj.properties=dt\\\\n propertiesObj.properties.sn=randomSign()\\\\n //设置回复\\\\n propertiesObj.replyPayload=\\\\\\\"xzzxc\\\\\\\"+randomSign()\\\\n propertiesObj.downTopic=\\\\\\\"$thing/down/681c0775c2dc427d0480ab5f/cz001923\\\\\\\"\\\\n propertiesObj.qos=0\\\\n var event={\\\\n \\\\\\\"messageType\\\\\\\": \\\\\\\"EVENT\\\\\\\",\\\\n \\\\\\\"event\\\\\\\":\\\\\\\"batteryRestore\\\\\\\",\\\\n \\\\\\\"properties\\\\\\\": {\\\\n // \\\\\\\"battery\\\\\\\":100\\\\n }\\\\n }\\\\n var lowBatteryAlarm={\\\\n \\\\\\\"messageType\\\\\\\": \\\\\\\"EVENT\\\\\\\",\\\\n \\\\\\\"event\\\\\\\":\\\\\\\"lowBatteryAlarm\\\\\\\",\\\\n \\\\\\\"properties\\\\\\\": {\\\\n //\\\\\\\"csq\\\\\\\":29\\\\n }\\\\n }\\\\n result.push(propertiesObj)\\\\n result.push(event)\\\\n result.push(lowBatteryAlarm)\\\\n return result;\\\\n}\\\\n\\\\n//设备增加\\\\nvar add = payload => {\\\\n var da=post(url,payload)\\\\n var rs={\\\\n \\\\\\\"code\\\\\\\":0,\\\\n \\\\\\\"msg\\\\\\\":\\\\\\\"success\\\\\\\",\\\\n \\\\\\\"codec\\\\\\\":\\\\\\\"add\\\\\\\",\\\\n \\\\\\\"codec\\\\\\\":da\\\\n }\\\\n return rs;\\\\n}\\\\n\\\\n//设备更新\\\\nvar update = payload => {\\\\n var da=post(url,payload)\\\\n var rs={\\\\n \\\\\\\"code\\\\\\\":0,\\\\n \\\\\\\"msg\\\\\\\":\\\\\\\"success\\\\\\\",\\\\n \\\\\\\"codec\\\\\\\":\\\\\\\"update\\\\\\\",\\\\n \\\\\\\"codec\\\\\\\":da\\\\n }\\\\n return rs;\\\\n}\\\\n\\\\n//设备查询\\\\nvar query = payload => {\\\\n var da=post(url,payload)\\\\n var rs={\\\\n \\\\\\\"code\\\\\\\":0,\\\\n \\\\\\\"req\\\\\\\":0,\\\\n ', '{\"code\":0,\"msg\":\"success\"}', 0, NULL, '2025-08-26 21:29:18'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (142, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'iot', NULL, '/admin/v1/subscribe/list', '113.215.176.47', '113.215.176.47', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-26 21:30:26'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (143, '修改设备协议', 2, 'cn.universal.admin.platform.web.IoTDeviceProtocolController.edit()', 'PUT', 1, 'iot', NULL, '/admin/v1/protocol', '113.215.176.47', '113.215.176.47', '{\"name\":\"智能插座\",\"state\":1,\"id\":\"681c0775c2dc427d0480ab5f\",\"type\":\"magic\",\"configuration\":\"{\\\"needBs4Decode\\\":false,\\\"location\\\":\\\"\\\\nimport log;\\\\n\\\\nvar url=\\\\\\\"\\\\\\\";\\\\n\\\\nvar post = (url,body) =>{\\\\n \\\\n}\\\\n\\\\nvar encode = payload => {\\\\n var dt=toJson(payload)\\\\n dt.dxxc=randomSign();\\\\n return dt;\\\\n}\\\\n\\\\n//解码\\\\nvar decode = payload => {\\\\n var result = []\\\\n log.info(\\\\\\\"编解码收到消息={}\\\\\\\",payload)\\\\n var dt=toJson(payload)\\\\n var propertiesObj = {\\\\n \\\\\\\"messageType\\\\\\\": \\\\\\\"PROPERTIES\\\\\\\",\\\\n \\\\\\\"properties\\\\\\\": {}\\\\n }\\\\n\\\\n var repayObj={}\\\\n repayObj.tips=\\\\\\\"当前是在编解码回复\\\\\\\"\\\\n repayObj.randomNo=randomSign()\\\\n repayObj.wings=\\\\\\\"universal-iot\\\\\\\"\\\\n //设置属性\\\\n propertiesObj.properties=dt\\\\n propertiesObj.properties.sn=randomSign()\\\\n //MQTT设置回复\\\\n propertiesObj.replyPayload=repayObj\\\\n // propertiesObj.replyPayload=\\\\\\\"xzzxc\\\\\\\"+randomSign()//设置回复的内容\\\\n propertiesObj.downTopic=\\\\\\\"$thing/down/681c0775c2dc427d0480ab5f/cz001923\\\\\\\" //设置回复的主题\\\\n \\\\n return propertiesObj;\\\\n}\\\\n\\\\n//设备增加\\\\nvar add = payload => {\\\\n var da=post(url,payload)\\\\n var rs={\\\\n \\\\\\\"code\\\\\\\":0,\\\\n \\\\\\\"msg\\\\\\\":\\\\\\\"success\\\\\\\",\\\\n \\\\\\\"codec\\\\\\\":\\\\\\\"add\\\\\\\",\\\\n \\\\\\\"codec\\\\\\\":da\\\\n }\\\\n return rs;\\\\n}\\\\n\\\\n//设备更新\\\\nvar update = payload => {\\\\n var da=post(url,payload)\\\\n var rs={\\\\n \\\\\\\"code\\\\\\\":0,\\\\n \\\\\\\"msg\\\\\\\":\\\\\\\"success\\\\\\\",\\\\n \\\\\\\"codec\\\\\\\":\\\\\\\"update\\\\\\\",\\\\n \\\\\\\"codec\\\\\\\":da\\\\n }\\\\n return rs;\\\\n}\\\\n\\\\n//设备查询\\\\nvar query = payload => {\\\\n var da=post(url,payload)\\\\n var rs={\\\\n \\\\\\\"code\\\\\\\":0,\\\\n \\\\\\\"req\\\\\\\":0,\\\\n \\\\\\\"msg\\\\\\\":\\\\\\\"success\\\\\\\",\\\\n \\\\\\\"codec\\\\\\\":\\\\\\\"query\\\\\\\",\\\\n \\\\\\\"codec\\\\\\\":da\\\\n }\\\\n return rs;\\\\n}\\\\n\\\\n//功能调用\\\\nvar function = payload => {\\\\n var da=post(url,payload)\\\\n var rs={\\\\n \\\\\\\"code\\\\\\\":0,\\\\n \\\\\\\"msg\\\\\\\":\\\\\\\"success\\\\\\\",\\\\n \\\\\\\"codec\\\\', '{\"code\":0,\"msg\":\"success\"}', 0, NULL, '2025-08-26 21:31:48'); -INSERT INTO `sys_oper_log` (`oper_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`) VALUES (144, '查询订阅列表', 0, 'cn.universal.admin.platform.web.IoTDeviceSubscribeController.list()', 'GET', 1, 'test', NULL, '/admin/v1/subscribe/list', '113.215.176.47', '113.215.176.47', '{}', '{\"total\":0,\"rows\":[],\"code\":0,\"msg\":\"查询成功\"}', 0, NULL, '2025-08-27 22:34:20'); -COMMIT; - --- ---------------------------- --- Table structure for sys_oss --- ---------------------------- -DROP TABLE IF EXISTS `sys_oss`; -CREATE TABLE `sys_oss` ( - `oss_id` bigint NOT NULL AUTO_INCREMENT COMMENT '云存储主键', - `file_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '文件名', - `original_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '原名', - `file_suffix` varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '文件后缀名', - `url` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT 'URL地址', - `create_time` datetime DEFAULT NULL COMMENT '创建时间', - `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '上传人', - `update_time` datetime DEFAULT NULL COMMENT '更新时间', - `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '更新人', - `service` varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'minio' COMMENT '服务商', - PRIMARY KEY (`oss_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='OSS云存储表'; - --- ---------------------------- --- Records of sys_oss --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for sys_role --- ---------------------------- -DROP TABLE IF EXISTS `sys_role`; -CREATE TABLE `sys_role` ( - `role_id` bigint NOT NULL AUTO_INCREMENT COMMENT '角色ID', - `role_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '角色名称', - `role_key` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '角色权限字符串', - `role_sort` int NOT NULL COMMENT '显示顺序', - `data_scope` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '1' COMMENT '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)', - `menu_check_strictly` tinyint(1) DEFAULT '1' COMMENT '菜单树选择项是否关联显示', - `dept_check_strictly` tinyint(1) DEFAULT '1' COMMENT '部门树选择项是否关联显示', - `status` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '角色状态(0正常 1停用)', - `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '创建者', - `create_time` datetime DEFAULT NULL COMMENT '创建时间', - `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '更新者', - `update_time` datetime DEFAULT NULL COMMENT '更新时间', - `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '备注', - PRIMARY KEY (`role_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8mb3 COMMENT='角色信息表'; - --- ---------------------------- --- Records of sys_role --- ---------------------------- -BEGIN; -INSERT INTO `sys_role` (`role_id`, `role_name`, `role_key`, `role_sort`, `data_scope`, `menu_check_strictly`, `dept_check_strictly`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1, '超级管理员', 'admin', 0, '4', 0, 0, '0', 'iot', '2021-12-27 10:28:13', NULL, NULL, NULL); -INSERT INTO `sys_role` (`role_id`, `role_name`, `role_key`, `role_sort`, `data_scope`, `menu_check_strictly`, `dept_check_strictly`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (37, '普通', 'common', 0, '4', 1, NULL, '0', 'iot', '2025-06-24 19:55:31', 'iot', '2025-07-30 16:47:08', NULL); -COMMIT; - --- ---------------------------- --- Table structure for sys_role_menu --- ---------------------------- -DROP TABLE IF EXISTS `sys_role_menu`; -CREATE TABLE `sys_role_menu` ( - `role_id` bigint NOT NULL COMMENT '角色ID', - `menu_id` bigint NOT NULL COMMENT '菜单ID', - `uuid` bigint NOT NULL AUTO_INCREMENT, - PRIMARY KEY (`uuid`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=661 DEFAULT CHARSET=utf8mb3 COMMENT='角色和菜单关联表'; - --- ---------------------------- --- Records of sys_role_menu --- ---------------------------- -BEGIN; -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1193, 570); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1133, 571); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1082, 572); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1081, 573); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1130, 574); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1131, 575); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1132, 576); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1140, 577); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1141, 578); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1142, 579); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1143, 580); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1144, 581); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1227, 582); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1145, 583); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1228, 584); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1158, 585); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1229, 586); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1096, 587); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1093, 588); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1095, 589); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1116, 590); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1117, 591); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1118, 592); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1119, 593); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1120, 594); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1125, 595); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1126, 596); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1127, 597); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1128, 598); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1176, 599); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1177, 600); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1178, 601); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1100, 602); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1101, 603); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1102, 604); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1103, 605); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1104, 606); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1105, 607); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1106, 608); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1099, 609); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1097, 610); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1098, 611); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1121, 612); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1122, 613); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1123, 614); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1124, 615); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1108, 616); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1107, 617); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1156, 618); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1109, 619); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1110, 620); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1111, 621); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1112, 622); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1157, 623); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1113, 624); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1114, 625); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1115, 626); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1153, 627); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1179, 628); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1181, 629); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1182, 630); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1197, 631); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1195, 632); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1194, 633); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1198, 634); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1199, 635); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1200, 636); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1205, 637); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1206, 638); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1207, 639); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1196, 640); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1201, 641); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1202, 642); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1203, 643); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1204, 644); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1208, 645); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1209, 646); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1210, 647); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1247, 648); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1248, 649); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1249, 650); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1250, 651); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1213, 652); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1212, 653); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1214, 654); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1215, 655); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1216, 656); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1220, 657); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1221, 658); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1211, 659); -INSERT INTO `sys_role_menu` (`role_id`, `menu_id`, `uuid`) VALUES (37, 1217, 660); -COMMIT; - --- ---------------------------- --- Table structure for sys_user_role --- ---------------------------- -DROP TABLE IF EXISTS `sys_user_role`; -CREATE TABLE `sys_user_role` ( - `uuid` bigint NOT NULL AUTO_INCREMENT, - `union_id` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '用户unionId', - `role_id` bigint NOT NULL COMMENT '角色ID', - PRIMARY KEY (`uuid`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb3 COMMENT='用户和角色关联表'; - --- ---------------------------- --- Records of sys_user_role --- ---------------------------- -BEGIN; -INSERT INTO `sys_user_role` (`uuid`, `union_id`, `role_id`) VALUES (1, 'iot', 1); -INSERT INTO `sys_user_role` (`uuid`, `union_id`, `role_id`) VALUES (3, 'view', 37); -INSERT INTO `sys_user_role` (`uuid`, `union_id`, `role_id`) VALUES (5, 'test', 37); -COMMIT; - -SET FOREIGN_KEY_CHECKS = 1; diff --git a/cn-universal-plugins/cn-universal-plugins-web-debug/pom.xml b/cn-universal-plugins/cn-universal-plugins-web-debug/pom.xml index 441c3d75845fbe02393da756db2c26c6e560f661..e63c97d5b326663b734a08c56b1aa8fd0d24e01c 100644 --- a/cn-universal-plugins/cn-universal-plugins-web-debug/pom.xml +++ b/cn-universal-plugins/cn-universal-plugins-web-debug/pom.xml @@ -10,7 +10,7 @@ cn-universal-plugins-web-debug - IoT-Connector-Debug的IDE不开放前端源码了 + 21 21 diff --git a/cn-universal-plugins/cn-universal-plugins-web-debug/src/main/java/cn/universal/plugins/protocolapi/auth/SymmetricEncryptionUtil.java b/cn-universal-plugins/cn-universal-plugins-web-debug/src/main/java/cn/universal/plugins/protocolapi/auth/SymmetricEncryptionUtil.java index e5062d33077faaeffd87954d8bd371570c5274eb..3cd7910806c7749befb102fbfd4b73f7e7f5af99 100644 --- a/cn-universal-plugins/cn-universal-plugins-web-debug/src/main/java/cn/universal/plugins/protocolapi/auth/SymmetricEncryptionUtil.java +++ b/cn-universal-plugins/cn-universal-plugins-web-debug/src/main/java/cn/universal/plugins/protocolapi/auth/SymmetricEncryptionUtil.java @@ -7,9 +7,7 @@ import javax.crypto.Cipher; import javax.crypto.spec.GCMParameterSpec; import javax.crypto.spec.SecretKeySpec; -/** - * JDK 21 对称加密工具类,支持AES和DES算法 - */ +/** JDK 21 对称加密工具类,支持AES和DES算法 */ public class SymmetricEncryptionUtil { // 密钥长度常量 @@ -39,15 +37,17 @@ public class SymmetricEncryptionUtil { static { try { // 初始化内置密钥的Base64编码 - BUILTIN_AES_KEY_BASE64 = Base64.getEncoder() - .encodeToString(BUILTIN_AES_KEY.getBytes(StandardCharsets.UTF_8)); - BUILTIN_DES_KEY_BASE64 = Base64.getEncoder() - .encodeToString(BUILTIN_DES_KEY.getBytes(StandardCharsets.UTF_8)); + BUILTIN_AES_KEY_BASE64 = + Base64.getEncoder().encodeToString(BUILTIN_AES_KEY.getBytes(StandardCharsets.UTF_8)); + BUILTIN_DES_KEY_BASE64 = + Base64.getEncoder().encodeToString(BUILTIN_DES_KEY.getBytes(StandardCharsets.UTF_8)); } catch (Exception e) { throw new RuntimeException("初始化内置密钥失败", e); } } + // 其他方法保持不变... + /** * 使用内置AES密钥加密 * @@ -114,15 +114,16 @@ public class SymmetricEncryptionUtil { byte[] ciphertext = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8)); // 拼接IV、密文和标签(GCM会自动处理标签) - return Base64.getEncoder().encodeToString(iv) + ":" + Base64.getEncoder() - .encodeToString(ciphertext); + return Base64.getEncoder().encodeToString(iv) + + ":" + + Base64.getEncoder().encodeToString(ciphertext); } /** * 使用AES/GCM解密 * * @param ciphertext 密文(格式:IV:密文:标签) - * @param base64Key 密钥的Base64编码 + * @param base64Key 密钥的Base64编码 * @return 明文 */ public static String aesGcmDecrypt(String ciphertext, String base64Key) throws Exception { @@ -173,7 +174,7 @@ public class SymmetricEncryptionUtil { * 使用DES解密 * * @param ciphertext 密文的Base64编码 - * @param base64Key 密钥的Base64编码 + * @param base64Key 密钥的Base64编码 * @return 明文 */ public static String desDecrypt(String ciphertext, String base64Key) { diff --git a/cn-universal-plugins/cn-universal-plugins-web-debug/src/main/java/cn/universal/plugins/protocolapi/extend/HexFunctions.java b/cn-universal-plugins/cn-universal-plugins-web-debug/src/main/java/cn/universal/plugins/protocolapi/extend/HexFunctions.java index 290de0055ee28b5905061a30db2a7c946b61bb80..40b3d3eb46c8c76a86f4e7efed011409a5e4c425 100644 --- a/cn-universal-plugins/cn-universal-plugins-web-debug/src/main/java/cn/universal/plugins/protocolapi/extend/HexFunctions.java +++ b/cn-universal-plugins/cn-universal-plugins-web-debug/src/main/java/cn/universal/plugins/protocolapi/extend/HexFunctions.java @@ -19,7 +19,7 @@ public class HexFunctions implements IdeMagicFunction { // 基础十六进制操作(前缀:hex_) // ===================== @Function - @Comment("hex按字节加0x33(DL/T645编码)") + @Comment("hex按字节加0x33,取低8位(DL/T645编码)") public String hex_add33(@Comment(name = "target", value = "十六进制字符串") String hex) { if (StrUtil.isBlank(hex)) { return hex; @@ -521,4 +521,140 @@ public class HexFunctions implements IdeMagicFunction { return JSONUtil.toJsonStr(obj); } } + + // ===================== + // 定点数/整数 转 HEX(支持小端) + // ===================== + + @Function + @Comment("十进制字符串转定点HEX(大端),bytes为输出总字节数,scale为小数位") + public String hex_fromDecScaled( + @Comment(name = "decimal", value = "十进制,如1.20") String decimal, + @Comment(name = "scale", value = "小数位,例如3表示*1000") Integer scale, + @Comment(name = "bytes", value = "输出字节数,例如4/2") Integer bytes) { + if (StrUtil.isBlank(decimal) || scale == null || scale < 0 || bytes == null || bytes <= 0) { + return null; + } + java.math.BigDecimal val; + try { + val = new java.math.BigDecimal(decimal.trim()); + } catch (Exception e) { + return null; + } + java.math.BigDecimal factor = java.math.BigDecimal.TEN.pow(scale); + java.math.BigDecimal scaled = val.multiply(factor).setScale(0, java.math.RoundingMode.HALF_UP); + if (scaled.compareTo(java.math.BigDecimal.ZERO) < 0) { + return null; + } + java.math.BigInteger bi = scaled.toBigInteger(); + String hex = bi.toString(16).toUpperCase(); + // 按字节长度左侧补0 + int targetLen = bytes * 2; + if (hex.length() > targetLen) { + // 超出位宽,截断高位(协议通常不允许,此处返回null更安全) + return null; + } + return StrUtil.padPre(hex, targetLen, '0'); + } + + @Function + @Comment("十进制字符串转定点HEX(小端,按字节反转),bytes为输出总字节数,scale为小数位") + public String hex_fromDecScaledLE( + @Comment(name = "decimal", value = "十进制,如1.20") String decimal, + @Comment(name = "scale", value = "小数位,例如3表示*1000") Integer scale, + @Comment(name = "bytes", value = "输出字节数,例如4/2") Integer bytes) { + String be = hex_fromDecScaled(decimal, scale, bytes); + if (be == null) { + return null; + } + return hex_reverse(be); + } + + @Function + @Comment("整数转HEX(大端),bytes为输出总字节数") + public String hex_fromInt( + @Comment(name = "value", value = "整数") Integer value, + @Comment(name = "bytes", value = "输出字节数") Integer bytes) { + if (value == null || value < 0 || bytes == null || bytes <= 0) { + return null; + } + String hex = Integer.toHexString(value).toUpperCase(); + int targetLen = bytes * 2; + if (hex.length() > targetLen) { + return null; + } + return StrUtil.padPre(hex, targetLen, '0'); + } + + @Function + @Comment("整数转HEX(小端,按字节反转),bytes为输出总字节数") + public String hex_fromIntLE( + @Comment(name = "value", value = "整数") Integer value, + @Comment(name = "bytes", value = "输出字节数") Integer bytes) { + String be = hex_fromInt(value, bytes); + if (be == null) { + return null; + } + return hex_reverse(be); + } + + @Function + @Comment("确保HEX为偶数长度(左侧补0)") + public String hex_even( + @Comment(name = "hex", value = "HEX字符串") String hex) { + if (hex == null) { + return null; + } + String cleaned = hex.replaceAll("[^0-9A-Fa-f]", "").toUpperCase(); + return (cleaned.length() % 2 == 0) ? cleaned : ("0" + cleaned); + } + + @Function + @Comment("十进制字符串(不带小数缩放)转HEX并左侧补0到N字节。例如: '2.45' -> 去点 '245' -> 十进制245 -> HEX 00F5(2字节)") + public String hex_fromDecNoScalePad( + @Comment(name = "decimal", value = "十进制字符串,可含小数点,如2.45") String decimal, + @Comment(name = "bytes", value = "输出总字节数,例如4") Integer bytes) { + if (StrUtil.isBlank(decimal) || bytes == null || bytes <= 0) { + return null; + } + String cleaned = decimal.trim(); + // 去除小数点,不做缩放,直接把所有数字拼起来作为十进制整数 + cleaned = cleaned.replace(".", ""); + if (!cleaned.matches("^[0-9]+$")) { + return null; + } + java.math.BigInteger bi = new java.math.BigInteger(cleaned); + String hex = bi.toString(16).toUpperCase(); + int targetLen = bytes * 2; + if (hex.length() > targetLen) { + return null; + } + return StrUtil.padPre(hex, targetLen, '0'); + } + + @Function + @Comment("HEX左侧补0到N字节长度(不改变内容)。例如: 'F5' + 2字节 => '00F5'") + public String hex_padToBytes( + @Comment(name = "hex", value = "HEX字符串") String hex, + @Comment(name = "bytes", value = "目标字节数") Integer bytes) { + if (hex == null || bytes == null || bytes <= 0) { + return null; + } + String cleaned = hex.replaceAll("[^0-9A-Fa-f]", "").toUpperCase(); + if (cleaned.length() % 2 != 0) { + cleaned = "0" + cleaned; + } + int targetLen = bytes * 2; + if (cleaned.length() > targetLen) { + return null; + } + return StrUtil.padPre(cleaned, targetLen, '0'); + } + + @Function + @Comment("HEX按字节大小端转换(每2位反转顺序)。等同hex_reverse,单独暴露以便magic-api调用链更直观") + public String hex_swapEndianBytes( + @Comment(name = "hex", value = "HEX字符串") String hex) { + return hex_reverse(hex); + } } diff --git a/cn-universal-plugins/cn-universal-plugins-web-debug/src/main/java/cn/universal/plugins/protocolapi/extend/IdeMagicFunction.java b/cn-universal-plugins/cn-universal-plugins-web-debug/src/main/java/cn/universal/plugins/protocolapi/extend/IdeMagicFunction.java index 0053164d0029a01de3b081967bcaa4c7cdd3f6aa..800376e40691bd29057b0eeac3f744359886dd10 100644 --- a/cn-universal-plugins/cn-universal-plugins-web-debug/src/main/java/cn/universal/plugins/protocolapi/extend/IdeMagicFunction.java +++ b/cn-universal-plugins/cn-universal-plugins-web-debug/src/main/java/cn/universal/plugins/protocolapi/extend/IdeMagicFunction.java @@ -10,6 +10,4 @@ package cn.universal.plugins.protocolapi.extend; * @Wechat: outlookFil * * - */ public interface IdeMagicFunction { - -} + */ public interface IdeMagicFunction {} diff --git a/cn-universal-plugins/cn-universal-plugins-web-debug/src/main/java/cn/universal/plugins/protocolapi/extend/ShadowFunctions.java b/cn-universal-plugins/cn-universal-plugins-web-debug/src/main/java/cn/universal/plugins/protocolapi/extend/ShadowFunctions.java new file mode 100644 index 0000000000000000000000000000000000000000..fbd7210735a33ea74f86b6ce6b8c105e5f78931b --- /dev/null +++ b/cn-universal-plugins/cn-universal-plugins-web-debug/src/main/java/cn/universal/plugins/protocolapi/extend/ShadowFunctions.java @@ -0,0 +1,139 @@ +package cn.universal.plugins.protocolapi.extend; + +import cn.hutool.json.JSONObject; +import cn.universal.core.engine.annotation.Comment; +import cn.universal.core.engine.annotation.Function; +import java.util.Map; +import java.util.Set; +import org.springframework.stereotype.Component; + +/** 设备影子 JSON 解析函数(Magic-API 调用) */ +@Component +public class ShadowFunctions implements IdeMagicFunction { + + // ------------------------------ 单字段查询 ------------------------------ + @Function + @Comment("获取指定字段当前值(来自 state.reported)") + public Object shadow_getVal( + @Comment(name = "shadow", value = "设备影子(Map/JSONObject均可)") Map shadow, + @Comment(name = "field", value = "字段名,如 voltage") String fieldName) { + JSONObject stateReported = getStateReportedNode(shadow); + if (stateReported == null || fieldName == null) { + return null; + } + if (!stateReported.containsKey(fieldName)) { + return null; + } + return stateReported.get(fieldName); + } + + @Function + @Comment("获取指定字段上次上报时间戳(来自 metadata.reported)") + public Long shadow_getTs( + @Comment(name = "shadow", value = "设备影子(Map/JSONObject均可)") Map shadow, + @Comment(name = "field", value = "字段名,如 voltage") String fieldName) { + JSONObject metadataReported = getMetadataReportedNode(shadow); + if (metadataReported == null || fieldName == null) { + return null; + } + if (!metadataReported.containsKey(fieldName)) { + return null; + } + JSONObject fieldMeta = metadataReported.getJSONObject(fieldName); + if (fieldMeta == null || !fieldMeta.containsKey("timestamp")) { + return null; + } + return fieldMeta.getLong("timestamp"); + } + + // ------------------------------ 批量查询 ------------------------------ + @Function + @Comment("获取所有reported字段的当前值,返回JSONObject: {key:value}") + public JSONObject shadow_getAllVals( + @Comment(name = "shadow", value = "设备影子(Map/JSONObject均可)") Map shadow) { + JSONObject stateReported = getStateReportedNode(shadow); + if (stateReported == null) { + return null; + } + JSONObject out = new JSONObject(); + Set fieldNames = stateReported.keySet(); + for (String field : fieldNames) { + out.set(field, stateReported.get(field)); + } + return out; + } + + @Function + @Comment("获取所有reported字段的上次上报时间戳,返回JSONObject: {key:ts}") + public JSONObject shadow_getAllTs( + @Comment(name = "shadow", value = "设备影子(Map/JSONObject均可)") Map shadow) { + JSONObject metadataReported = getMetadataReportedNode(shadow); + if (metadataReported == null) { + return null; + } + JSONObject out = new JSONObject(); + Set fieldNames = metadataReported.keySet(); + for (String field : fieldNames) { + JSONObject fieldMeta = metadataReported.getJSONObject(field); + if (fieldMeta != null && fieldMeta.containsKey("timestamp")) { + out.set(field, fieldMeta.getLong("timestamp")); + } + } + return out; + } + + // ------------------------------ 私有辅助 ------------------------------ + private JSONObject asJson(Object obj) { + try { + if (obj instanceof JSONObject) { + return (JSONObject) obj; + } + if (obj instanceof Map) { + @SuppressWarnings("unchecked") + Map map = (Map) obj; + return new JSONObject(map); + } + } catch (Exception ignore) { + // fallthrough + } + return null; + } + + private JSONObject getStateReportedNode(Map shadowObj) { + if (shadowObj == null) { + return null; + } + JSONObject root = asJson(shadowObj); + if (root == null) { + return null; + } + JSONObject stateObj = root.getJSONObject("state"); + if (stateObj == null) { + return null; + } + JSONObject reportedObj = stateObj.getJSONObject("reported"); + if (reportedObj == null) { + return null; + } + return reportedObj; + } + + private JSONObject getMetadataReportedNode(Map shadowObj) { + if (shadowObj == null) { + return null; + } + JSONObject root = asJson(shadowObj); + if (root == null) { + return null; + } + JSONObject metadataObj = root.getJSONObject("metadata"); + if (metadataObj == null) { + return null; + } + JSONObject reportedObj = metadataObj.getJSONObject("reported"); + if (reportedObj == null) { + return null; + } + return reportedObj; + } +} diff --git a/cn-universal-plugins/cn-universal-plugins-web-debug/src/main/java/cn/universal/plugins/protocolapi/extend/UnivFunctions.java b/cn-universal-plugins/cn-universal-plugins-web-debug/src/main/java/cn/universal/plugins/protocolapi/extend/UnivFunctions.java index 2becb06f5b130a0bc60898c0493fac6ff9336f3b..a80fce67bc76a769912b8ebbf9cf5be912e400be 100644 --- a/cn-universal-plugins/cn-universal-plugins-web-debug/src/main/java/cn/universal/plugins/protocolapi/extend/UnivFunctions.java +++ b/cn-universal-plugins/cn-universal-plugins-web-debug/src/main/java/cn/universal/plugins/protocolapi/extend/UnivFunctions.java @@ -53,6 +53,11 @@ import org.springframework.stereotype.Component; */ @Component public class UnivFunctions implements IdeMagicFunction { + + private final String url = "http://apilocate.amap.com/position?"; + // 地址逆编码 + private static final String reUrl = "https://restapi.amap.com/v3/geocode/regeo?"; + private static final String key = "f404bbd3dc312d7c0e1ed4c4a1472f5f"; private final String imei = "86"; private static final double X_PI = 3.14159265358979324 * 3000.0 / 180.0; private static final double PI = 3.14159265358979324; @@ -61,8 +66,7 @@ public class UnivFunctions implements IdeMagicFunction { private static final double EE = 0.00669342162296594323; private AtomicLong currentSerialNumber = new AtomicLong(1L); - @Resource - private StringRedisTemplate stringRedisTemplate; + @Resource private StringRedisTemplate stringRedisTemplate; @Function @Comment("基于CSQ信号强度评估") @@ -376,7 +380,109 @@ public class UnivFunctions implements IdeMagicFunction { return URLDecoder.decode(str, CharsetUtil.CHARSET_UTF_8); } + @Function + @Comment("wifi查询坐标") + public String locateByWifi(@Comment(name = "target", value = "字符串列表") List wifis) { + // 高德坐标查询 + String queryUrl = + url + + "accesstype=1&imei=" + + imei + + "&macs=" + + String.join("|", wifis) + + "&output=json&key=" + + key; + JSONObject obj = new JSONObject(); + String lng = ""; + String lat = ""; + try { + if (CollectionUtil.isNotEmpty(wifis)) { + String result = JSONUtil.parseObj(HttpUtil.get(queryUrl, 5000)).getStr("result"); + if (StrUtil.isNotEmpty(result)) { + JSONObject jsonObject = JSONUtil.parseObj(result); + String[] finalLocation = jsonObject.getStr("location").split(","); + lng = finalLocation[0]; + lat = finalLocation[1]; + obj.set("location", jsonObject.getStr("desc")); + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + obj.set("lng", lng); + obj.set("lat", lat); + } + return JSONUtil.toJsonStr(obj); + } + + @Function + @Comment("基站查询坐标") + public String locateByLbs( + @Comment(name = "target", value = "是否是CDMA卡") Boolean isCDMA, + @Comment(name = "target", value = "字符串列表") List lbs) { + JSONObject obj = new JSONObject(); + String lng = ""; + String lat = ""; + if (CollectionUtil.isEmpty(lbs)) { + return JSONUtil.toJsonStr(obj); + } + // 460,00,22572,11037,-60|460,00,22572,21845,-70|460,00,22572,21037,-70 + String bts = lbs.get(0); + lbs.remove(0); + String nearbts = String.join("|", lbs); + // 高德坐标查询 + String queryUrl = + url + + "accesstype=0&imei=" + + imei + + "&cdma=" + + (isCDMA ? "1" : "0") + + "&bts=" + + bts + + "&nearbts=" + + nearbts + + "&output=json&key=" + + key; + try { + String result = JSONUtil.parseObj(HttpUtil.get(queryUrl, 5000)).getStr("result"); + if (StrUtil.isNotEmpty(result)) { + JSONObject jsonObject = JSONUtil.parseObj(result); + String[] finalLocation = jsonObject.getStr("location").split(","); + lng = finalLocation[0]; + lat = finalLocation[1]; + obj.set("location", jsonObject.getStr("desc")); + } + + } catch (Exception e) { + e.printStackTrace(); + } finally { + obj.set("lng", lng); + obj.set("lat", lat); + } + return JSONUtil.toJsonStr(obj); + } + // 入参经度在前纬度在后,逗号分隔 + @Function + @Comment("坐标转地址") + public static String coordinateToAddr( + @Comment(name = "target", value = "字符串") String coordinate) { + JSONObject obj = new JSONObject(); + // 高德坐标查询 + String queryUrl = + reUrl + "location=" + coordinate + "&extensions=service&radius=100&output=json&key=" + key; + try { + String result = JSONUtil.parseObj(HttpUtil.get(queryUrl, 5000)).getStr("regeocode"); + if (StrUtil.isNotEmpty(result)) { + JSONObject jsonObject = JSONUtil.parseObj(result); + String address = jsonObject.getStr("formatted_address"); + return address; + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } /*** * CRC每个字节异或 @@ -466,9 +572,7 @@ public class UnivFunctions implements IdeMagicFunction { return String.format("%04X", v & 0xFFFF); } - /** - * 字符串每两位倒转 - */ + /** 字符串每两位倒转 */ @Function @Comment("字符串每两位倒转") public String reverseTwoDigit(@Comment(name = "target", value = "字符串") String str) { @@ -478,51 +582,9 @@ public class UnivFunctions implements IdeMagicFunction { return String.join("", inputList); } - // ===================== - // 645/对接常用 十六进制工具 - // 命名统一以 hex_ 前缀,便于 Magic-API 检索 - // ===================== - - @Function - @Comment("hex按字节加0x33(DL/T645编码)") - public String hex_add33(@Comment(name = "target", value = "十六进制字符串") String hex) { - if (StrUtil.isBlank(hex)) { - return hex; - } - if (hex.length() % 2 != 0) { - return null; - } - StringBuilder sb = new StringBuilder(hex.length()); - for (int i = 0; i < hex.length(); i += 2) { - int b = Integer.parseInt(hex.substring(i, i + 2), 16); - int v = (b + 0x33) & 0xFF; - sb.append(String.format("%02X", v)); - } - return sb.toString(); - } - - @Function - @Comment("hex按字节减0x33(DL/T645解码)") - public String hex_sub33(@Comment(name = "target", value = "十六进制字符串") String hex) { - if (StrUtil.isBlank(hex)) { - return hex; - } - if (hex.length() % 2 != 0) { - return null; - } - StringBuilder sb = new StringBuilder(hex.length()); - for (int i = 0; i < hex.length(); i += 2) { - int b = Integer.parseInt(hex.substring(i, i + 2), 16); - int v = (b - 0x33) & 0xFF; - sb.append(String.format("%02X", v)); - } - return sb.toString(); - } - /** - * int强转float - */ + /** int强转float */ @Function @Comment("int强转float") public Float intToFloat(@Comment(name = "target", value = "字符串") Integer number) { @@ -532,9 +594,7 @@ public class UnivFunctions implements IdeMagicFunction { return Float.intBitsToFloat(number); } - /** - * long强转double - */ + /** long强转double */ @Function @Comment("long强转double") public Double longToDouble(@Comment(name = "target", value = "字符串") Long number) { @@ -544,9 +604,7 @@ public class UnivFunctions implements IdeMagicFunction { return Double.longBitsToDouble(number); } - /** - * 地球坐标系转火星坐标系 - */ + /** 地球坐标系转火星坐标系 */ @Function @Comment("地球坐标系转火星坐标系") public String wgs84ToGcj02(@Comment(name = "target", value = "字符串") String coordinate) { @@ -565,9 +623,7 @@ public class UnivFunctions implements IdeMagicFunction { return JSONUtil.toJsonStr(obj); } - /** - * 火星坐标系转地球坐标系 - */ + /** 火星坐标系转地球坐标系 */ @Function @Comment("火星坐标系转地球坐标系") public String gcj02ToWgs84(@Comment(name = "target", value = "字符串") String coordinate) { @@ -585,9 +641,7 @@ public class UnivFunctions implements IdeMagicFunction { return JSONUtil.toJsonStr(obj); } - /** - * 车辆 十六进制转中文gbk 内部bytebuf中转 - */ + /** 车辆 十六进制转中文gbk 内部bytebuf中转 */ @Function @Comment("车辆 十六进制转中文gbk 内部bytebuf中转") public String hexToGBK(@Comment(name = "target", value = "字符串") String str) { @@ -598,9 +652,7 @@ public class UnivFunctions implements IdeMagicFunction { return new String(a, Charset.forName("gbk")).trim(); } - /** - * 车辆 中文gbk转十六进制 内部bytebuf中转 - */ + /** 车辆 中文gbk转十六进制 内部bytebuf中转 */ @Function @Comment("车辆 中文gbk转十六进制 内部bytebuf中转") public String GBKToHex(@Comment(name = "target", value = "字符串") String str) { diff --git a/cn-universal-plugins/cn-universal-plugins-web-debug/src/main/resources/magic-editor/assets/favicon.png b/cn-universal-plugins/cn-universal-plugins-web-debug/src/main/resources/magic-editor/assets/favicon.png deleted file mode 100644 index 21e6b4a36a7f377deca8fbd5db352543d297f77b..0000000000000000000000000000000000000000 Binary files a/cn-universal-plugins/cn-universal-plugins-web-debug/src/main/resources/magic-editor/assets/favicon.png and /dev/null differ diff --git a/cn-universal-protocol/cn-universal-http-protocol/src/main/java/cn/universal/http/protocol/handle/HttpDownHandle.java b/cn-universal-protocol/cn-universal-http-protocol/src/main/java/cn/universal/http/protocol/handle/HttpDownHandle.java index 77bfb73142186b6f8f1ccae52011b9e6a6e14d54..2e88834109aec94bf234ae8a7affc14150dbb9f0 100644 --- a/cn-universal-protocol/cn-universal-http-protocol/src/main/java/cn/universal/http/protocol/handle/HttpDownHandle.java +++ b/cn-universal-protocol/cn-universal-http-protocol/src/main/java/cn/universal/http/protocol/handle/HttpDownHandle.java @@ -169,7 +169,7 @@ public class HttpDownHandle extends IoTDownAdapter { .createTime(System.currentTimeMillis() / 1000) .deviceName(downRequest.getData().getStr("deviceName", downRequest.getDeviceId())) .state(DeviceStatus.offline.getCode()) - .iotId(IdUtil.simpleUUID()) + .iotId(downRequest.getProductKey()+downRequest.getDeviceId()) .application(downRequest.getApplicationId()) .creatorId(downRequest.getAppUnionId()) .productName(downRequest.getIoTProduct().getName()) diff --git a/cn-universal-protocol/cn-universal-http-protocol/src/main/java/cn/universal/http/protocol/service/HttpDownService.java b/cn-universal-protocol/cn-universal-http-protocol/src/main/java/cn/universal/http/protocol/service/HttpDownService.java index 1ae040082623d3810b09208b14237bef69c79421..cfe572c2581f3faeca7a8d088f0fe67b8e306f0a 100644 --- a/cn-universal-protocol/cn-universal-http-protocol/src/main/java/cn/universal/http/protocol/service/HttpDownService.java +++ b/cn-universal-protocol/cn-universal-http-protocol/src/main/java/cn/universal/http/protocol/service/HttpDownService.java @@ -12,14 +12,12 @@ package cn.universal.http.protocol.service; -import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import cn.universal.common.domain.R; -import cn.universal.core.service.ICodec; import cn.universal.dm.device.service.AbstractDownService; import cn.universal.http.protocol.config.HttpModuleInfo; import cn.universal.http.protocol.entity.HttpDownRequest; @@ -40,14 +38,11 @@ import org.springframework.stereotype.Service; */ @Service("httpDownService") @Slf4j -public class HttpDownService extends AbstractDownService implements ICodec { +public class HttpDownService extends AbstractDownService { - @Resource - private HttpModuleInfo httpModuleInfo; - @Resource - private HttpDownHandle httpDownHandle; - @Resource - private HttpDownProcessorChain httpDownProcessorChain; + @Resource private HttpModuleInfo httpModuleInfo; + @Resource private HttpDownHandle httpDownHandle; + @Resource private HttpDownProcessorChain httpDownProcessorChain; @Override public String code() { @@ -110,20 +105,16 @@ public class HttpDownService extends AbstractDownService implem String down = config.getStr("down"); // 支持第三方增删改或者下发功能且function对象不为空,则编解码,并复制编解码后的结果 if ((StrUtil.isNotBlank(down) - && ListUtil.of(down.split(",")).contains(value.getCmd().getValue())) + && ListUtil.of(down.split(",")).contains(value.getCmd().getValue())) || CollectionUtil.isNotEmpty(value.getFunction())) { - String deResult = spliceDown(value.getProductKey(), JSONUtil.toJsonStr(value)); - // log.info("电信设备={} 编解码结果={}", value.getDeviceId(), deResult); + String deResult = + encodeWithShadow( + value.getProductKey(), value.getDeviceId(), JSONUtil.toJsonStr(value.getFunction())); value.setDownResult(deResult); } return value; } - @Override - public String spliceDown(String productKey, String payload) { - return super.spliceDown(productKey, payload); - } - @Override protected HttpDownRequest convert(String request) { return doConvert(request); diff --git a/cn-universal-protocol/cn-universal-http-protocol/src/main/java/cn/universal/http/protocol/service/HttpUPService.java b/cn-universal-protocol/cn-universal-http-protocol/src/main/java/cn/universal/http/protocol/service/HttpUPService.java index 51c13648b73346ba23cc2c9b1dc34ba74f054f24..8df85d0abf1f00135df4627b93a3c577935444ad 100644 --- a/cn-universal-protocol/cn-universal-http-protocol/src/main/java/cn/universal/http/protocol/service/HttpUPService.java +++ b/cn-universal-protocol/cn-universal-http-protocol/src/main/java/cn/universal/http/protocol/service/HttpUPService.java @@ -16,7 +16,6 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import cn.universal.core.message.UPRequest; -import cn.universal.core.service.ICodec; import cn.universal.core.service.ICodecService; import cn.universal.dm.device.service.AbstractUPService; import cn.universal.dm.device.service.action.IoTDeviceActionAfterService; @@ -43,7 +42,7 @@ import org.springframework.stereotype.Service; */ @Service("httpUPService") @Slf4j -public class HttpUPService extends AbstractUPService implements ICodec { +public class HttpUPService extends AbstractUPService { @Value("${iot.register.auto.unionId}") private String unionId; @@ -120,11 +119,6 @@ public class HttpUPService extends AbstractUPService implements I httpUPHandle.up(httpUPRequests); } - @Override - public String version() { - return null; - } - @Override public List decode(String productKey, String payload) { if (StrUtil.isBlank(payload)) { diff --git a/cn-universal-protocol/cn-universal-mqtt-protocol/src/main/java/cn/universal/mqtt/protocol/processor/down/MQTTDownAdd.java b/cn-universal-protocol/cn-universal-mqtt-protocol/src/main/java/cn/universal/mqtt/protocol/processor/down/MQTTDownAdd.java index d070a07df36e584a9086b3088a8c6298fbf33946..43f03ae12fb744e6593fc437c2bfc4e466c8b344 100644 --- a/cn-universal-protocol/cn-universal-mqtt-protocol/src/main/java/cn/universal/mqtt/protocol/processor/down/MQTTDownAdd.java +++ b/cn-universal-protocol/cn-universal-mqtt-protocol/src/main/java/cn/universal/mqtt/protocol/processor/down/MQTTDownAdd.java @@ -84,7 +84,7 @@ public class MQTTDownAdd extends IoTDownAdapter .createTime(System.currentTimeMillis() / 1000) .deviceName(downRequest.getDownCommonData().getDeviceName()) .state(DeviceStatus.offline.getCode()) - .iotId(IdUtil.simpleUUID()) + .iotId(downRequest.getProductKey()+downRequest.getDeviceId()) .application(downRequest.getApplicationId()) .creatorId(downRequest.getAppUnionId()) .productName(downRequest.getIoTProduct().getName()) diff --git a/cn-universal-protocol/cn-universal-mqtt-protocol/src/main/java/cn/universal/mqtt/protocol/processor/up/passthrough/PassthroughCodecProcessor.java b/cn-universal-protocol/cn-universal-mqtt-protocol/src/main/java/cn/universal/mqtt/protocol/processor/up/passthrough/PassthroughCodecProcessor.java new file mode 100644 index 0000000000000000000000000000000000000000..98268e3adca3f5cb50ef12291db8499d7be01811 --- /dev/null +++ b/cn-universal-protocol/cn-universal-mqtt-protocol/src/main/java/cn/universal/mqtt/protocol/processor/up/passthrough/PassthroughCodecProcessor.java @@ -0,0 +1,339 @@ +/* + * + * Copyright (c) 2025, IoT-Universal. All Rights Reserved. + * + * @Description: 本文件由 Aleo 开发并拥有版权,未经授权严禁擅自商用、复制或传播。 + * @Author: Aleo + * @Email: wo8335224@gmail.com + * @Wechat: outlookFil + * + * + */ + +package cn.universal.mqtt.protocol.processor.up.passthrough; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import cn.universal.dm.device.service.AbstratIoTService; +import cn.universal.dm.device.service.impl.IoTDeviceShadowService; +import cn.universal.mqtt.protocol.config.MqttConstant; +import cn.universal.mqtt.protocol.entity.MQTTUPRequest; +import cn.universal.mqtt.protocol.entity.ProcessingStage; +import cn.universal.mqtt.protocol.processor.MqttMessageProcessor; +import cn.universal.mqtt.protocol.topic.MQTTTopicManager; +import cn.universal.persistence.base.BaseUPRequest; +import cn.universal.persistence.dto.IoTDeviceDTO; +import cn.universal.persistence.entity.IoTProduct; +import java.util.ArrayList; +import java.util.List; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * 透传编解码处理器 + * + *

对应步骤THREE:如果是透传设备,则需要调用编解码,确保消息能被物模型正确识别 + * + *

透传编解码特点: - 调用产品配置的编解码器 - 将原始数据转换为标准的物模型格式 - 兼容MQTT报文按照本平台格式的处理 - 支持多种数据格式的解码 + * + * @version 2.0 @Author Aleo + * @since 2025/1/20 + */ +@Slf4j(topic = "mqtt") +@Component +public class PassthroughCodecProcessor extends AbstratIoTService implements MqttMessageProcessor { + + @Autowired private IoTDeviceShadowService ioTDeviceShadowService; + + @Override + public String getName() { + return "透传编解码处理器"; + } + + @Override + public String getDescription() { + return "处理透传数据的编解码转换"; + } + + @Override + public int getOrder() { + return 300; // 编解码处理是第三步 + } + + @Override + public boolean supports(MQTTUPRequest request) { + if (request.getIoTDeviceDTO() == null || request.getIoTProduct() == null) { + return false; + } + return MQTTTopicManager.matchCategory(request.getUpTopic()) + .equals(MqttConstant.TopicCategory.PASSTHROUGH); + } + + @Override + public ProcessorResult process(MQTTUPRequest request) { + try { + log.debug("[{}] 开始处理透传编解码,设备: {}", getName(), request.getDeviceId()); + + // 1. 尝试产品编解码器解码 + List upRequestList = tryProductCodec(request); + + // 2. 如果编解码器解码失败,尝试平台格式兼容 + if (CollUtil.isEmpty(upRequestList)) { + upRequestList = tryPlatformFormat(request); + } + + // 3. 如果都失败,创建透传原始数据请求 + if (CollUtil.isEmpty(upRequestList)) { + // upRequestList = createRawDataRequest(request); + } + // 4. 设置解码结果 + request.setUpRequestList(upRequestList); + request.setContextValue("codecProcessedCount", upRequestList.size()); + request.setContextValue("codecProcessed", true); + log.debug("[{}] 透传编解码处理完成,生成请求数量: {}", getName(), upRequestList.size()); + return ProcessorResult.CONTINUE; + } catch (Exception e) { + log.error("[{}] 透传编解码处理异常,设备: {}, 异常: ", getName(), request.getDeviceId(), e); + return ProcessorResult.ERROR; + } + } + + /** 尝试使用产品编解码器解码 */ + private List tryProductCodec(MQTTUPRequest request) { + try { + String productKey = request.getProductKey(); + String payload = request.getPayload(); + IoTProduct ioTProduct = request.getIoTProduct(); + codecWithShadow(request, ioTProduct); + log.debug("[{}] 尝试产品编解码器解码 - 产品: {}", getName(), productKey); + // 调用产品编解码器 + List decodedList = + decode(productKey, payload, request.getCodecContext(), MQTTUPRequest.class); + + if (CollUtil.isNotEmpty(decodedList)) { + log.debug("[{}] 产品编解码器解码成功,解码数量: {}", getName(), decodedList.size()); + + List upRequestList = new ArrayList<>(); + for (MQTTUPRequest codecResult : decodedList) { + BaseUPRequest upRequest = convertCodecResult(request, codecResult); + if (upRequest != null) { + upRequestList.add(upRequest); + } + } + request.setContextValue("codecSuccess", true); + request.setContextValue("codecType", "PRODUCT_CODEC"); + request.setStage(ProcessingStage.DECODED); + return upRequestList; + } else { + log.debug("[{}] 产品编解码器未返回解码结果", getName()); + request.setContextValue("codecSuccess", false); + request.setStage(ProcessingStage.DECODED); + JSONObject jsonObject = new JSONObject(); + if (JSONUtil.isTypeJSON(request.getPayload())) { + jsonObject = JSONUtil.parseObj(request.getPayload()); + } + return List.of(buildCodecNullBean(jsonObject, request)); + } + + } catch (Exception e) { + log.warn("[{}] 产品编解码器解码异常: ", getName(), e); + request.setContextValue("codecSuccess", false); + request.setContextValue("codecError", e.getMessage()); + return null; + } + } + + /** 编解码是否带影子 */ + private void codecWithShadow(MQTTUPRequest request, IoTProduct ioTProduct) { + if (StringUtils.isNotEmpty(ioTProduct.getConfiguration())) { + JSONObject jsonObject = JSONUtil.parseObj(ioTProduct.getConfiguration()); + // 上行报文是否需要附加影子 + Boolean requireUpShadow = jsonObject.getBool("requireUpShadow", false); + if (requireUpShadow) { + JSONObject shadowObj = + ioTDeviceShadowService.getDeviceShadowObj( + request.getProductKey(), request.getDeviceId()); + if (ObjectUtil.isNotNull(shadowObj)) { + request.setShadow(shadowObj); + request.setCodecContextValue("shadow", shadowObj); + request.setCodecContextValue("productConfig", jsonObject); + } + } + // 是否自定义了downTopic + String downTopic = jsonObject.getStr("downTopic", null); + if (StringUtils.isNotEmpty(downTopic)) { + request.setDownTopic(downTopic); + } + } + } + + /** 尝试平台格式兼容 */ + private List tryPlatformFormat(MQTTUPRequest request) { + try { + String messageContent = request.getPayload(); + + log.debug("[{}] 尝试平台格式兼容解析", getName()); + + // 解析MQTT报文按照本平台格式 + JSONObject jsonObject = parseJsonPayload(messageContent); + if (jsonObject == null || jsonObject.isEmpty()) { + log.debug("[{}] 平台格式解析失败", getName()); + return null; + } + + // 创建BaseUPRequest + BaseUPRequest upRequest = buildPlatformFormatRequest(request, jsonObject); + if (upRequest == null) { + return null; + } + + List upRequestList = new ArrayList<>(); + upRequestList.add(upRequest); + + log.debug("[{}] 平台格式兼容解析成功", getName()); + request.setContextValue("codecSuccess", true); + request.setContextValue("codecType", "PLATFORM_FORMAT"); + return upRequestList; + + } catch (Exception e) { + log.warn("[{}] 平台格式兼容解析异常: ", getName(), e); + return null; + } + } + + /** 转换编解码器结果 */ + private BaseUPRequest convertCodecResult(MQTTUPRequest request, MQTTUPRequest codecResult) { + try { + if (codecResult == null) { + return null; + } + IoTDeviceDTO deviceDTO = request.getIoTDeviceDTO(); + BaseUPRequest.BaseUPRequestBuilder builder = getBaseUPRequest(deviceDTO); + + // 构建编解码结果 + JSONObject messageJson = parseJsonPayload(request.getPayload()); + buildCodecNotNullBean(messageJson, deviceDTO, codecResult, builder); + // 设置回复值 + if (StrUtil.isNotBlank(codecResult.getReplyPayload())) { + request.setReplyPayload(codecResult.getReplyPayload()); + } + if (StrUtil.isNotBlank(codecResult.getDownTopic())) { + request.setDownTopic(codecResult.getDownTopic()); + } + // 默认为1 + if (codecResult.getQos() != 1) { + request.setQos(codecResult.getQos()); + } + + BaseUPRequest upRequest = builder.build(); + + log.debug("[{}] 编解码器结果转换成功", getName()); + return upRequest; + } catch (Exception e) { + log.error("[{}] 编解码器结果转换异常: ", getName(), e); + return null; + } + } + + /** 构建平台格式请求 */ + private BaseUPRequest buildPlatformFormatRequest(MQTTUPRequest request, JSONObject jsonObject) { + try { + BaseUPRequest upRequest = buildCodecNullBean(jsonObject, request); + + log.debug("[{}] 平台格式请求构建成功", getName()); + return upRequest; + + } catch (Exception e) { + log.error("[{}] 平台格式请求构建异常: ", getName(), e); + return null; + } + } + + /** 验证编解码结果 */ + private boolean validateCodecResults(List upRequestList) { + if (CollUtil.isEmpty(upRequestList)) { + return false; + } + + for (BaseUPRequest upRequest : upRequestList) { + if (upRequest == null) { + log.warn("[{}] 发现空的BaseUPRequest", getName()); + return false; + } + + if (upRequest.getProductKey() == null || upRequest.getDeviceId() == null) { + log.warn("[{}] BaseUPRequest缺少必要字段", getName()); + return false; + } + } + + return true; + } + + /** 统计编解码结果 */ + private void collectCodecStatistics(MQTTUPRequest request) { + try { + Boolean codecSuccess = (Boolean) request.getContextValue("codecSuccess"); + String codecType = (String) request.getContextValue("codecType"); + Integer processedCount = (Integer) request.getContextValue("codecProcessedCount"); + + request.setContextValue( + "codecStatistics", + "成功: " + codecSuccess + ", 类型: " + codecType + ", 数量: " + processedCount); + + log.debug( + "[{}] 编解码统计 - 成功: {}, 类型: {}, 数量: {}", + getName(), + codecSuccess, + codecType, + processedCount != null ? processedCount : 0); + + } catch (Exception e) { + log.warn("[{}] 编解码统计异常: ", getName(), e); + } + } + + @Override + public boolean preCheck(MQTTUPRequest request) { + // 检查必要的数据 + return request.getIoTDeviceDTO() != null + && request.getIoTProduct() != null + && request.getPayload() != null; + } + + @Override + public void postProcess(MQTTUPRequest request, ProcessorResult result) { + if (result == ProcessorResult.CONTINUE) { + // 收集编解码统计信息 + collectCodecStatistics(request); + + Integer processedCount = (Integer) request.getContextValue("codecProcessedCount"); + Boolean codecSuccess = (Boolean) request.getContextValue("codecSuccess"); + + log.debug( + "[{}] 透传编解码处理成功 - 设备: {}, 成功: {}, 生成请求: {}", + getName(), + request.getDeviceId(), + codecSuccess, + processedCount != null ? processedCount : 0); + } else { + log.warn("[{}] 透传编解码处理失败 - 设备: {}, 结果: {}", getName(), request.getDeviceId(), result); + } + } + + @Override + public void onError(MQTTUPRequest request, Exception e) { + log.error("[{}] 透传编解码处理异常,设备: {}, 异常: ", getName(), request.getDeviceId(), e); + request.setError("透传编解码处理失败: " + e.getMessage()); + } + + @Override + public int getPriority() { + return 5; // 透传处理优先级中等 + } +} diff --git a/cn-universal-protocol/cn-universal-mqtt-protocol/src/main/java/cn/universal/mqtt/protocol/processor/up/passthrough/PassthroughDeviceInfoProcessor.java b/cn-universal-protocol/cn-universal-mqtt-protocol/src/main/java/cn/universal/mqtt/protocol/processor/up/passthrough/PassthroughDeviceInfoProcessor.java new file mode 100644 index 0000000000000000000000000000000000000000..4927fc1c26d7fac5fa9d82fb2138e38245281225 --- /dev/null +++ b/cn-universal-protocol/cn-universal-mqtt-protocol/src/main/java/cn/universal/mqtt/protocol/processor/up/passthrough/PassthroughDeviceInfoProcessor.java @@ -0,0 +1,269 @@ +/* + * + * Copyright (c) 2025, IoT-Universal. All Rights Reserved. + * + * @Description: 本文件由 Aleo 开发并拥有版权,未经授权严禁擅自商用、复制或传播。 + * @Author: Aleo + * @Email: wo8335224@gmail.com + * @Wechat: outlookFil + * + * + */ + +package cn.universal.mqtt.protocol.processor.up.passthrough; + +import cn.hutool.core.util.StrUtil; +import cn.universal.mqtt.protocol.config.MqttConstant; +import cn.universal.mqtt.protocol.entity.MQTTUPRequest; +import cn.universal.mqtt.protocol.processor.up.common.BaseDeviceInfoProcessor; +import cn.universal.mqtt.protocol.topic.MQTTTopicManager; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * 透传主题设备信息处理器 + * + *

处理透传主题的设备信息提取和回填: - $thing/up/${productKey}/${deviceId} (透传上行) - + * $thing/down/${productKey}/${deviceId} (透传下行) + * + *

透传特点: - 消息格式不固定,需要编解码 - 支持各种自定义协议格式 - 原始数据需要通过编解码器转换为物模型 + * + * @version 2.0 @Author Aleo + * @since 2025/1/20 + */ +@Slf4j(topic = "mqtt") +@Component +public class PassthroughDeviceInfoProcessor extends BaseDeviceInfoProcessor { + + @Autowired private MQTTTopicManager topicManager; + + @Override + protected String getTopicType() { + return "透传"; + } + + @Override + public boolean supports(MQTTUPRequest request) { + if (request.getUpTopic() == null || request.getPayload() == null) { + return false; + } + // 检查是否为透传主题 + MQTTTopicManager.TopicInfo topicInfo = topicManager.extractTopicInfo(request.getUpTopic()); + return topicInfo.isValid() && topicInfo.getCategory() == MqttConstant.TopicCategory.PASSTHROUGH; + } + + @Override + protected boolean parseTopicForThisType(MQTTUPRequest request, String topic) { + try { + // 使用TopicManager解析透传主题 + MQTTTopicManager.TopicInfo topicInfo = topicManager.extractTopicInfo(topic); + + if (!topicInfo.isValid()) { + log.warn("[{}] 透传主题格式无效: {}", getName(), topic); + return false; + } + + if (topicInfo.getCategory() != MqttConstant.TopicCategory.PASSTHROUGH) { + log.warn("[{}] 不是透传主题: {}", getName(), topic); + return false; + } + // 设置设备信息 + request.setProductKey(topicInfo.getProductKey()); + request.setDeviceId(topicInfo.getDeviceId()); + // 设置透传特定上下文 + request.setContextValue("topicInfo", topicInfo); + request.setContextValue("topicType", topicInfo.getTopicType()); + + log.debug( + "[{}] 透传主题解析成功 - 类型: {}, 产品: {}, 设备: {}", + getName(), + topicInfo.getTopicType(), + topicInfo.getProductKey(), + topicInfo.getDeviceId()); + + return true; + + } catch (Exception e) { + log.error("[{}] 透传主题解析异常: ", getName(), e); + return false; + } + } + + @Override + protected boolean processTopicSpecificInfo(MQTTUPRequest request) { + try { + // 1. 分析透传数据类型 + if (!analyzePassthroughDataType(request)) { + log.error("[{}] 透传数据类型分析失败", getName()); + return false; + } + + // 2. 设置透传标识 + setPassthroughIdentifiers(request); + + log.debug("[{}] 透传特定信息处理完成", getName()); + return true; + + } catch (Exception e) { + log.error("[{}] 透传特定信息处理异常: ", getName(), e); + return false; + } + } + + /** 分析透传数据类型 */ + private boolean analyzePassthroughDataType(MQTTUPRequest request) { + try { + String payload = request.getPayload(); + if (payload == null) { + log.warn("[{}] 透传原始数据为空", getName()); + return false; + } + return true; + + } catch (Exception e) { + log.error("[{}] 透传数据类型分析异常: ", getName(), e); + return false; + } + } + + /** 确定数据类型 */ + private String determineDataType(byte[] rawData, String textData) { + // 检查是否为JSON格式 + if (textData != null && textData.trim().startsWith("{") && textData.trim().endsWith("}")) { + try { + // 尝试解析JSON + cn.hutool.json.JSONUtil.parseObj(textData); + return "JSON"; + } catch (Exception e) { + // JSON解析失败,可能是其他格式 + } + } + + // 检查是否为纯文本 + if (isPrintableText(textData)) { + return "TEXT"; + } + + // 检查是否为十六进制字符串 + if (isHexString(textData)) { + return "HEX"; + } + + // 检查二进制数据特征 + if (rawData.length >= 2) { + int header = ((rawData[0] & 0xFF) << 8) | (rawData[1] & 0xFF); + + switch (header & 0xF000) { + case 0x1000: + return "SENSOR_DATA"; + case 0x2000: + return "CONTROL_CMD"; + case 0x3000: + return "CONFIG_DATA"; + default: + break; + } + } + + return "BINARY"; + } + + /** 确定编码格式 */ + private String determineEncoding(byte[] rawData, String textData) { + if (textData != null) { + // 检查UTF-8编码 + try { + byte[] utf8Bytes = textData.getBytes("UTF-8"); + if (java.util.Arrays.equals(rawData, utf8Bytes)) { + return "UTF-8"; + } + } catch (Exception e) { + // 忽略编码检查异常 + } + + // 检查ASCII编码 + if (isAsciiText(textData)) { + return "ASCII"; + } + } + + return "BINARY"; + } + + /** 检查是否为可打印文本 */ + private boolean isPrintableText(String text) { + if (StrUtil.isBlank(text)) { + return false; + } + + for (char c : text.toCharArray()) { + if (!Character.isLetterOrDigit(c) + && !Character.isWhitespace(c) + && !"!@#$%^&*()_+-=[]{}|;':\",./<>?".contains(String.valueOf(c))) { + return false; + } + } + return true; + } + + /** 检查是否为十六进制字符串 */ + private boolean isHexString(String text) { + if (StrUtil.isBlank(text) || text.length() % 2 != 0) { + return false; + } + + try { + for (int i = 0; i < text.length(); i += 2) { + Integer.parseInt(text.substring(i, i + 2), 16); + } + return true; + } catch (NumberFormatException e) { + return false; + } + } + + /** 检查是否为ASCII文本 */ + private boolean isAsciiText(String text) { + if (StrUtil.isBlank(text)) { + return false; + } + + for (char c : text.toCharArray()) { + if (c > 127) { + return false; + } + } + return true; + } + + /** 设置透传标识 */ + private void setPassthroughIdentifiers(MQTTUPRequest request) { + // 设置处理标识 + request.setContextValue("isPassthrough", true); + request.setContextValue("needDecode", true); // 透传需要编解码 + + // 设置协议信息 + request.setContextValue("protocolType", "PASSTHROUGH"); + request.setContextValue("requiresCodec", true); + + // 分析可能的协议版本 + String dataType = (String) request.getContextValue("passthroughDataType"); + if ("JSON".equals(dataType)) { + request.setContextValue("possibleProtocol", "JSON_BASED"); + } else if ("HEX".equals(dataType)) { + request.setContextValue("possibleProtocol", "HEX_PROTOCOL"); + } else if ("BINARY".equals(dataType)) { + request.setContextValue("possibleProtocol", "BINARY_PROTOCOL"); + } else { + request.setContextValue("possibleProtocol", "UNKNOWN"); + } + + log.debug("[{}] 透传标识设置完成 - 数据类型: {}", getName(), dataType); + } + + @Override + public int getPriority() { + return 5; // 透传处理优先级中等 + } +} diff --git a/cn-universal-protocol/cn-universal-mqtt-protocol/src/main/java/cn/universal/mqtt/protocol/service/MQTTDownService.java b/cn-universal-protocol/cn-universal-mqtt-protocol/src/main/java/cn/universal/mqtt/protocol/service/MQTTDownService.java index d495a32865d0eb06ac443ce75e045f9fc63e28e7..69420b6989c0b781a5698a8d2a9f0c70ec61f67f 100644 --- a/cn-universal-protocol/cn-universal-mqtt-protocol/src/main/java/cn/universal/mqtt/protocol/service/MQTTDownService.java +++ b/cn-universal-protocol/cn-universal-mqtt-protocol/src/main/java/cn/universal/mqtt/protocol/service/MQTTDownService.java @@ -17,7 +17,6 @@ import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import cn.universal.common.constant.IoTConstant.DownCmd; import cn.universal.common.domain.R; -import cn.universal.core.service.ICodec; import cn.universal.dm.device.service.AbstractDownService; import cn.universal.mqtt.protocol.config.MqttModuleInfo; import cn.universal.mqtt.protocol.entity.MQTTDownRequest; @@ -37,12 +36,10 @@ import org.springframework.stereotype.Service; */ @Service("mqttDownService") @Slf4j(topic = "mqtt") -public class MQTTDownService extends AbstractDownService implements ICodec { +public class MQTTDownService extends AbstractDownService { - @Resource - private MqttModuleInfo mqttModuleInfo; - @Resource - private MQTTDownProcessorChain mqttDownProcessorChain; + @Resource private MqttModuleInfo mqttModuleInfo; + @Resource private MQTTDownProcessorChain mqttDownProcessorChain; @Override protected MQTTDownRequest convert(String request) { @@ -60,16 +57,21 @@ public class MQTTDownService extends AbstractDownService implem } IoTProduct ioTProduct = getProduct(value.getProductKey()); value.setIoTProduct(ioTProduct); - //设置IoTDeviceDTO - IoTDeviceDTO ioTDeviceDTO = getIoTDeviceDTO( - IoTDeviceQuery.builder().productKey(value.getProductKey()).deviceId(value.getDeviceId()) - .build()); + // 设置IoTDeviceDTO + IoTDeviceDTO ioTDeviceDTO = + getIoTDeviceDTO( + IoTDeviceQuery.builder() + .productKey(value.getProductKey()) + .deviceId(value.getDeviceId()) + .build()); value.setIoTDeviceDTO(ioTDeviceDTO); - value.getDownCommonData().setConfiguration(JSONUtil.parseObj(ioTProduct.getConfiguration())); + value.getDownCommonData().setConfiguration(parseProductConfigurationSafely(ioTProduct)); // 功能且function对象不为空,则编解码,并复制编解码后的内容 - if (DownCmd.DEV_FUNCTION.equals(value.getCmd()) && CollectionUtil.isNotEmpty( - value.getFunction())) { - String deResult = spliceDown(value.getProductKey(), JSONUtil.toJsonStr(value.getFunction())); + if (DownCmd.DEV_FUNCTION.equals(value.getCmd()) + && CollectionUtil.isNotEmpty(value.getFunction())) { + String deResult = + encodeWithShadow( + value.getProductKey(), value.getDeviceId(), JSONUtil.toJsonStr(value.getFunction())); // log.info("电信设备={} 编解码结果={}", value.getDeviceId(), deResult); value.setPayload(deResult); } diff --git a/cn-universal-protocol/cn-universal-mqtt-protocol/src/main/java/cn/universal/mqtt/protocol/system/SysMQTTManager.java b/cn-universal-protocol/cn-universal-mqtt-protocol/src/main/java/cn/universal/mqtt/protocol/system/SysMQTTManager.java index 8f2be3a827e1201e164ecc32868884f7ec9a70a2..926f5156cd7a4d4a23b8a27e45c790c72a1e5e2e 100644 --- a/cn-universal-protocol/cn-universal-mqtt-protocol/src/main/java/cn/universal/mqtt/protocol/system/SysMQTTManager.java +++ b/cn-universal-protocol/cn-universal-mqtt-protocol/src/main/java/cn/universal/mqtt/protocol/system/SysMQTTManager.java @@ -14,6 +14,7 @@ package cn.universal.mqtt.protocol.system; import cn.hutool.core.collection.ConcurrentHashSet; import cn.hutool.core.util.IdUtil; +import cn.universal.dm.device.service.push.MQTTPushService; import cn.universal.mqtt.protocol.entity.MQTTProductConfig; import cn.universal.mqtt.protocol.entity.MQTTUPRequest; import cn.universal.mqtt.protocol.metrics.MqttMetricsMananer; @@ -37,9 +38,9 @@ import org.springframework.context.ApplicationListener; import org.springframework.stereotype.Service; @Slf4j(topic = "mqtt") -@Service +@Service("sysMQTTManager") public class SysMQTTManager - implements SysMQTTStatusProvider, ApplicationListener { + implements SysMQTTStatusProvider, ApplicationListener, MQTTPushService { /** 使用内置MQTT的集合 */ private final Set convertProductKey = new ConcurrentHashSet<>(); @@ -364,6 +365,7 @@ public class SysMQTTManager } /** 发布消息(添加连接状态检查) */ + @Override public boolean publishMessage(String topic, byte[] payload, int qos, boolean retained) { try { if (systemMqttClient == null || !systemMqttClient.isConnected()) { diff --git a/cn-universal-protocol/cn-universal-mqtt-protocol/src/main/java/cn/universal/mqtt/protocol/third/ThirdMQTTConfigParser.java b/cn-universal-protocol/cn-universal-mqtt-protocol/src/main/java/cn/universal/mqtt/protocol/third/ThirdMQTTConfigParser.java index d109592d1ee18e253bf4f7cc798aeac994916ce0..3dfc92428ffc9bd454519739131ec72c95cb033d 100644 --- a/cn-universal-protocol/cn-universal-mqtt-protocol/src/main/java/cn/universal/mqtt/protocol/third/ThirdMQTTConfigParser.java +++ b/cn-universal-protocol/cn-universal-mqtt-protocol/src/main/java/cn/universal/mqtt/protocol/third/ThirdMQTTConfigParser.java @@ -1,6 +1,7 @@ package cn.universal.mqtt.protocol.third; import cn.hutool.core.util.RandomUtil; +import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import cn.universal.mqtt.protocol.entity.MQTTProductConfig; import cn.universal.mqtt.protocol.topic.MQTTTopicManager; @@ -44,10 +45,11 @@ public class ThirdMQTTConfigParser { } Map configMap = JSONUtil.parseObj(configuration).toBean(Map.class); - String brokerHost = - getStringValue( - configMap, "host", getStringValue(configMap, "url", "tcp://localhost:1883")); - + String brokerHost = getStringValue(configMap, "host", getStringValue(configMap, "url", null)); + // 如果brokerHost为空,则之间忽略 + if (StrUtil.isNullOrUndefined(brokerHost)) { + return null; + } MQTTProductConfig.MQTTProductConfigBuilder builder = MQTTProductConfig.builder() .networkUnionId(networkUnionId) diff --git a/cn-universal-protocol/cn-universal-mqtt-protocol/src/main/java/cn/universal/mqtt/protocol/third/ThirdMQTTConfigService.java b/cn-universal-protocol/cn-universal-mqtt-protocol/src/main/java/cn/universal/mqtt/protocol/third/ThirdMQTTConfigService.java index c7625afa93c8bffed109ee1fd2b621e595a6214e..594b4a799f041524c17811957b29192e0be1e402 100644 --- a/cn-universal-protocol/cn-universal-mqtt-protocol/src/main/java/cn/universal/mqtt/protocol/third/ThirdMQTTConfigService.java +++ b/cn-universal-protocol/cn-universal-mqtt-protocol/src/main/java/cn/universal/mqtt/protocol/third/ThirdMQTTConfigService.java @@ -13,6 +13,8 @@ package cn.universal.mqtt.protocol.third; import cn.hutool.core.util.StrUtil; +import cn.universal.cache.annotation.MultiLevelCacheable; +import cn.universal.cache.strategy.CacheStrategy; import cn.universal.common.enums.NetworkType; import cn.universal.mqtt.protocol.entity.MQTTProductConfig; import cn.universal.mqtt.protocol.system.SysMQTTStatusProvider; @@ -85,13 +87,12 @@ public class ThirdMQTTConfigService implements ThirdMQTTConfigChecker { } @Override - // @MultiLevelCacheable( - // cacheNames = "supportMQTTNetwork", - // key = "#productKey + ':' + #networkUnionId", - // l1Expire = 300, - // l2Expire = 3600, - // strategy = CacheStrategy.WRITE_THROUGH - // ) + @MultiLevelCacheable( + cacheNames = "supportMQTTNetwork", + key = "#productKey + ':' + #networkUnionId", + l1Expire = 360, + l2Expire = 720, + strategy = CacheStrategy.WRITE_THROUGH) public boolean supportMQTTNetwork(String productKey, String networkUnionId) { String db = ioTProductMapper.selectNetworkUnionId(productKey); if (StrUtil.isBlank(networkUnionId) diff --git a/cn-universal-protocol/cn-universal-mqtt-protocol/src/test/java/cn/protocol/plugins/mqtt/topic/MQTTTopicManagerParseTypeTest.java b/cn-universal-protocol/cn-universal-mqtt-protocol/src/test/java/cn/protocol/plugins/mqtt/topic/MQTTTopicManagerParseTypeTest.java deleted file mode 100644 index 9999797278f586654d78d9c04c737de2eb509d62..0000000000000000000000000000000000000000 --- a/cn-universal-protocol/cn-universal-mqtt-protocol/src/test/java/cn/protocol/plugins/mqtt/topic/MQTTTopicManagerParseTypeTest.java +++ /dev/null @@ -1,179 +0,0 @@ -package cn.universal.protocol.mqtt.topic; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertTrue; - -import cn.universal.mqtt.protocol.config.MqttConstant; -import cn.universal.mqtt.protocol.topic.MQTTTopicManager; -import cn.universal.mqtt.protocol.topic.MQTTTopicType; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -/** - * MQTT主题管理器主题类型解析测试 - * - * @version 2.0 @Author Aleo - * @since 2025/1/20 - */ -@DisplayName("MQTT主题管理器主题类型解析测试") -public class MQTTTopicManagerParseTypeTest { - - @Test - @DisplayName("测试动态前缀物模型主题类型解析") - public void testDynamicPrefixThingModelTopicTypeParsing() { - MQTTTopicManager manager = new MQTTTopicManager(); - - // 测试动态前缀物模型属性上报 - String dynamicPropertyTopic = "$qiantang/up/property/product123/device456"; - MQTTTopicType topicType = manager.parseTopicType(dynamicPropertyTopic); - - assertNotNull(topicType, "动态前缀主题应该被正确解析"); - assertEquals(MQTTTopicType.THING_PROPERTY_UP, topicType, "应该解析为物模型属性上报类型"); - - // 测试动态前缀物模型事件上报 - String dynamicEventTopic = "$qiantang/up/event/product123/device456"; - MQTTTopicType eventType = manager.parseTopicType(dynamicEventTopic); - - assertNotNull(eventType, "动态前缀事件主题应该被正确解析"); - assertEquals(MQTTTopicType.THING_EVENT_UP, eventType, "应该解析为物模型事件上报类型"); - - // 测试动态前缀物模型下行 - String dynamicDownTopic = "$qiantang/down/product123/device456"; - MQTTTopicType downType = manager.parseTopicType(dynamicDownTopic); - - assertNotNull(downType, "动态前缀下行主题应该被正确解析"); - assertEquals(MQTTTopicType.THING_DOWN, downType, "应该解析为物模型下行类型"); - } - - @Test - @DisplayName("测试动态前缀透传主题类型解析") - public void testDynamicPrefixPassthroughTopicTypeParsing() { - MQTTTopicManager manager = new MQTTTopicManager(); - - // 测试动态前缀透传上行 - String dynamicPassthroughUpTopic = "$qiantang/up/product123/device456"; - MQTTTopicType passthroughUpType = manager.parseTopicType(dynamicPassthroughUpTopic); - - assertNotNull(passthroughUpType, "动态前缀透传上行主题应该被正确解析"); - assertEquals(MQTTTopicType.PASSTHROUGH_UP, passthroughUpType, "应该解析为透传上行类型"); - - // 测试动态前缀透传下行 - String dynamicPassthroughDownTopic = "$qiantang/down/product123/device456"; - MQTTTopicType passthroughDownType = manager.parseTopicType(dynamicPassthroughDownTopic); - - assertNotNull(passthroughDownType, "动态前缀透传下行主题应该被正确解析"); - assertEquals(MQTTTopicType.PASSTHROUGH_DOWN, passthroughDownType, "应该解析为透传下行类型"); - } - - @Test - @DisplayName("测试固定前缀主题类型解析(向后兼容)") - public void testFixedPrefixTopicTypeParsing() { - MQTTTopicManager manager = new MQTTTopicManager(); - - // 测试固定前缀物模型属性上报 - String fixedPropertyTopic = "$thing/up/property/product123/device456"; - MQTTTopicType topicType = manager.parseTopicType(fixedPropertyTopic); - - assertNotNull(topicType, "固定前缀主题应该被正确解析"); - assertEquals(MQTTTopicType.THING_PROPERTY_UP, topicType, "应该解析为物模型属性上报类型"); - - // 测试固定前缀透传上行 - String fixedPassthroughTopic = "$thing/up/product123/device456"; - MQTTTopicType passthroughType = manager.parseTopicType(fixedPassthroughTopic); - - assertNotNull(passthroughType, "固定前缀透传主题应该被正确解析"); - assertEquals(MQTTTopicType.PASSTHROUGH_UP, passthroughType, "应该解析为透传上行类型"); - } - - @Test - @DisplayName("测试系统级主题类型解析") - public void testSystemLevelTopicTypeParsing() { - MQTTTopicManager manager = new MQTTTopicManager(); - - // 测试系统级OTA上报 - String otaReportTopic = "$ota/report/product123/device456"; - MQTTTopicType otaReportType = manager.parseTopicType(otaReportTopic); - - assertNotNull(otaReportType, "OTA上报主题应该被正确解析"); - assertEquals(MQTTTopicType.OTA_REPORT, otaReportType, "应该解析为OTA上报类型"); - - // 测试系统级OTA更新 - String otaUpdateTopic = "$ota/update/product123/device456"; - MQTTTopicType otaUpdateType = manager.parseTopicType(otaUpdateTopic); - - assertNotNull(otaUpdateType, "OTA更新主题应该被正确解析"); - assertEquals(MQTTTopicType.OTA_UPDATE, otaUpdateType, "应该解析为OTA更新类型"); - } - - @Test - @DisplayName("测试无效主题类型解析") - public void testInvalidTopicTypeParsing() { - MQTTTopicManager manager = new MQTTTopicManager(); - - // 测试无效主题 - String[] invalidTopics = { - "$qiantang/invalid/property/product123/device456", - "$qiantang/up/invalid/product123/device456", - "invalid/up/property/product123/device456", - "$qiantang/up/property/", - "$qiantang/up/property/product123", - "", - null - }; - - for (String topic : invalidTopics) { - MQTTTopicType topicType = manager.parseTopicType(topic); - assertNull(topicType, "无效主题应该返回null: " + topic); - } - } - - @Test - @DisplayName("测试不同动态前缀的兼容性") - public void testDifferentDynamicPrefixes() { - MQTTTopicManager manager = new MQTTTopicManager(); - String[] prefixes = {"$qiantang", "$custom", "$platform", "$device", "$sensor"}; - - for (String prefix : prefixes) { - // 测试物模型属性上报 - String propertyTopic = prefix + "/up/property/product123/device456"; - MQTTTopicType propertyType = manager.parseTopicType(propertyTopic); - assertEquals( - MQTTTopicType.THING_PROPERTY_UP, propertyType, "前缀 " + prefix + " 的物模型属性上报应该正确解析"); - - // 测试透传上行 - String passthroughTopic = prefix + "/up/product123/device456"; - MQTTTopicType passthroughType = manager.parseTopicType(passthroughTopic); - assertEquals(MQTTTopicType.PASSTHROUGH_UP, passthroughType, "前缀 " + prefix + " 的透传上行应该正确解析"); - } - } - - @Test - @DisplayName("测试主题信息提取") - public void testTopicInfoExtraction() { - MQTTTopicManager manager = new MQTTTopicManager(); - - // 测试动态前缀物模型属性上报信息提取 - String dynamicPropertyTopic = "$qiantang/up/property/product123/device456"; - MQTTTopicManager.TopicInfo info = manager.extractTopicInfo(dynamicPropertyTopic); - - assertNotNull(info, "主题信息应该被正确提取"); - assertEquals(MqttConstant.TopicCategory.THING_MODEL, info.getCategory()); - assertEquals("product123", info.getProductKey()); - assertEquals("device456", info.getDeviceId()); - assertTrue(info.isUpstream()); - assertTrue(info.isValid()); - - // 测试动态前缀透传上行信息提取 - String dynamicPassthroughTopic = "$qiantang/up/product123/device456"; - MQTTTopicManager.TopicInfo passthroughInfo = manager.extractTopicInfo(dynamicPassthroughTopic); - - assertNotNull(passthroughInfo, "透传主题信息应该被正确提取"); - assertEquals(MqttConstant.TopicCategory.PASSTHROUGH, passthroughInfo.getCategory()); - assertEquals("product123", passthroughInfo.getProductKey()); - assertEquals("device456", passthroughInfo.getDeviceId()); - assertTrue(passthroughInfo.isUpstream()); - assertTrue(passthroughInfo.isValid()); - } -} diff --git a/cn-universal-protocol/cn-universal-mqtt-protocol/src/test/java/cn/protocol/plugins/mqtt/topic/MQTTTopicManagerTest.java b/cn-universal-protocol/cn-universal-mqtt-protocol/src/test/java/cn/protocol/plugins/mqtt/topic/MQTTTopicManagerTest.java deleted file mode 100644 index 4ec239db41f178bd28e238ddce243eb00189fc14..0000000000000000000000000000000000000000 --- a/cn-universal-protocol/cn-universal-mqtt-protocol/src/test/java/cn/protocol/plugins/mqtt/topic/MQTTTopicManagerTest.java +++ /dev/null @@ -1,986 +0,0 @@ -/* - * - * Copyright (c) 2025, IoT-Universal. All Rights Reserved. - * - * @Description: 本文件由 Aleo 开发并拥有版权,未经授权严禁擅自商用、复制或传播。 - * @Author: Aleo - * @Email: wo8335224@gmail.com - * @Wechat: outlookFil - * - * - */ - -package cn.universal.protocol.mqtt.topic; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.junit.jupiter.api.Assertions.assertTrue; - -import cn.universal.mqtt.protocol.config.MqttConstant; -import cn.universal.mqtt.protocol.entity.MQTTProductConfig; -import cn.universal.mqtt.protocol.topic.MQTTTopicManager; -import cn.universal.mqtt.protocol.topic.MQTTTopicType; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.junit.jupiter.MockitoExtension; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * MQTTTopicManager 测试类 - * - * @version 1.0 @Author Aleo - * @since 2025/1/20 - */ -@ExtendWith(MockitoExtension.class) -class MQTTTopicManagerTest { - - private static final Logger log = LoggerFactory.getLogger(MQTTTopicManagerTest.class); - - @InjectMocks private MQTTTopicManager topicManager; - - // Mock 数据 - private static final String VALID_THING_PROPERTY_TOPIC = - "$thing/up/property/testProduct/testDevice"; - private static final String VALID_THING_EVENT_TOPIC = "$thing/up/event/testProduct/testDevice"; - private static final String VALID_THING_DOWN_TOPIC = "$thing/down/testProduct/testDevice"; - private static final String VALID_PASSTHROUGH_UP_TOPIC = "$thing/up/testProduct/testDevice"; - private static final String VALID_PASSTHROUGH_DOWN_TOPIC = "$thing/down/testProduct/testDevice"; - private static final String VALID_OTA_REPORT_TOPIC = "$ota/report/testProduct/testDevice"; - private static final String VALID_OTA_UPDATE_TOPIC = "$ota/update/testProduct/testDevice"; - private static final String INVALID_TOPIC = "invalid/topic/format"; - private static final String NULL_TOPIC = null; - private static final String EMPTY_TOPIC = ""; - - private static final String TEST_PRODUCT_KEY = "testProduct"; - private static final String TEST_DEVICE_ID = "testDevice"; - - @BeforeEach - void setUp() { - // 手动调用初始化方法 - topicManager.initialize(); - } - - // ==================== 测试数据准备 ==================== - - /** 创建测试用的主题配置JSON */ - private String createTestTopicConfigJson() { - return """ - { - "thing-model": { - "description": "物模型主题", - "topics": [ - "$thing/up/property/+/+", - "$thing/up/event/+/+", - "$thing/down/+/+" - ] - }, - "system-level": { - "description": "系统级主题", - "topics": [ - "$ota/report/+/+", - "$ota/update/+/+" - ] - }, - "passthrough": { - "description": "透传主题", - "topics": [ - "$thing/up/+/+", - "$thing/down/+/+" - ] - } - } - """; - } - - /** 创建测试用的配置Map */ - private Map createTestConfigMap() { - Map configMap = new HashMap<>(); - configMap.put("subscribeTopics", "$thing/up/property/+/+,$thing/up/event/+/+,$ota/report/+/+"); - configMap.put("topics", "$thing/up/+/+,$thing/down/+/+"); - return configMap; - } - - // ==================== 订阅主题管理测试 ==================== - - @Test - void testGetSubscriptionTopics_ThingModel() { - List topics = - topicManager.getSubscriptionTopics(MqttConstant.TopicCategory.THING_MODEL); - assertNotNull(topics); - assertFalse(topics.isEmpty()); - log.info("物模型主题: {}", topics); - } - - @Test - void testGetSubscriptionTopics_SystemLevel() { - List topics = - topicManager.getSubscriptionTopics(MqttConstant.TopicCategory.SYSTEM_LEVEL); - assertNotNull(topics); - assertFalse(topics.isEmpty()); - log.info("系统级主题: {}", topics); - } - - @Test - void testGetSubscriptionTopics_Passthrough() { - List topics = - topicManager.getSubscriptionTopics(MqttConstant.TopicCategory.PASSTHROUGH); - assertNotNull(topics); - assertFalse(topics.isEmpty()); - log.info("透传主题: {}", topics); - } - - @Test - void testGetSubscriptionTopics_EmptyCategory() { - // 执行 - List topics = - topicManager.getSubscriptionTopics(MqttConstant.TopicCategory.THING_MODEL); - - // 验证 - assertNotNull(topics); - // 返回不可修改的列表 - assertThrows(UnsupportedOperationException.class, () -> topics.add("test")); - } - - @Test - void testGetAllSubscriptionTopics() { - List allTopics = topicManager.getAllSubscriptionTopics(); - assertNotNull(allTopics); - assertFalse(allTopics.isEmpty()); - - List thingModelTopics = - topicManager.getSubscriptionTopics(MqttConstant.TopicCategory.THING_MODEL); - List systemLevelTopics = - topicManager.getSubscriptionTopics(MqttConstant.TopicCategory.SYSTEM_LEVEL); - List passthroughTopics = - topicManager.getSubscriptionTopics(MqttConstant.TopicCategory.PASSTHROUGH); - - assertEquals( - allTopics.size(), - thingModelTopics.size() + systemLevelTopics.size() + passthroughTopics.size()); - log.info("所有主题: {}", allTopics); - } - - // ==================== 主题类型解析测试 ==================== - - @Test - void testParseTopicType_ThingPropertyUp() { - // 执行 - MQTTTopicType topicType = topicManager.parseTopicType(VALID_THING_PROPERTY_TOPIC); - - // 验证 - assertNotNull(topicType); - assertEquals(MQTTTopicType.THING_PROPERTY_UP, topicType); - assertTrue(topicType.isUpstream()); - } - - @Test - void testParseTopicType_ThingEventUp() { - // 执行 - MQTTTopicType topicType = topicManager.parseTopicType(VALID_THING_EVENT_TOPIC); - - // 验证 - assertNotNull(topicType); - assertEquals(MQTTTopicType.THING_EVENT_UP, topicType); - assertTrue(topicType.isUpstream()); - } - - @Test - void testParseTopicType_ThingDown() { - // 执行 - MQTTTopicType topicType = topicManager.parseTopicType(VALID_THING_DOWN_TOPIC); - - // 验证 - assertNotNull(topicType); - assertEquals(MQTTTopicType.THING_DOWN, topicType); - assertFalse(topicType.isUpstream()); - } - - @Test - void testParseTopicType_PassthroughUp() { - // 执行 - MQTTTopicType topicType = topicManager.parseTopicType(VALID_PASSTHROUGH_UP_TOPIC); - - // 验证 - assertNotNull(topicType); - assertEquals(MQTTTopicType.PASSTHROUGH_UP, topicType); - assertTrue(topicType.isUpstream()); - } - - @Test - void testParseTopicType_PassthroughDown() { - // 执行 - MQTTTopicType topicType = topicManager.parseTopicType(VALID_PASSTHROUGH_DOWN_TOPIC); - - // 验证 - assertNotNull(topicType); - assertEquals(MQTTTopicType.PASSTHROUGH_DOWN, topicType); - assertFalse(topicType.isUpstream()); - } - - @Test - void testParseTopicType_OtaReport() { - // 执行 - MQTTTopicType topicType = topicManager.parseTopicType(VALID_OTA_REPORT_TOPIC); - - // 验证 - assertNotNull(topicType); - assertEquals(MQTTTopicType.OTA_REPORT, topicType); - assertTrue(topicType.isUpstream()); - } - - @Test - void testParseTopicType_OtaUpdate() { - // 执行 - MQTTTopicType topicType = topicManager.parseTopicType(VALID_OTA_UPDATE_TOPIC); - - // 验证 - assertNotNull(topicType); - assertEquals(MQTTTopicType.OTA_UPDATE, topicType); - assertFalse(topicType.isUpstream()); - } - - @Test - void testParseTopicType_InvalidTopic() { - // 执行 - MQTTTopicType topicType = topicManager.parseTopicType(INVALID_TOPIC); - - // 验证 - assertNull(topicType); - } - - @Test - void testParseTopicType_NullTopic() { - // 执行 - MQTTTopicType topicType = topicManager.parseTopicType(NULL_TOPIC); - - // 验证 - assertNull(topicType); - } - - @Test - void testParseTopicType_EmptyTopic() { - // 执行 - MQTTTopicType topicType = topicManager.parseTopicType(EMPTY_TOPIC); - - // 验证 - assertNull(topicType); - } - - @Test - void testParseTopicType_CachePerformance() { - // 第一次解析 - MQTTTopicType firstResult = topicManager.parseTopicType(VALID_THING_PROPERTY_TOPIC); - assertNotNull(firstResult); - - // 第二次解析相同主题(应该使用缓存) - MQTTTopicType secondResult = topicManager.parseTopicType(VALID_THING_PROPERTY_TOPIC); - assertNotNull(secondResult); - assertEquals(firstResult, secondResult); - } - - // ==================== 标准主题检查测试 ==================== - - @Test - void testIsStandardTopic_ValidTopics() { - // 验证所有有效主题 - assertTrue(topicManager.isStandardTopic(VALID_THING_PROPERTY_TOPIC)); - assertTrue(topicManager.isStandardTopic(VALID_THING_EVENT_TOPIC)); - assertTrue(topicManager.isStandardTopic(VALID_THING_DOWN_TOPIC)); - assertTrue(topicManager.isStandardTopic(VALID_PASSTHROUGH_UP_TOPIC)); - assertTrue(topicManager.isStandardTopic(VALID_PASSTHROUGH_DOWN_TOPIC)); - assertTrue(topicManager.isStandardTopic(VALID_OTA_REPORT_TOPIC)); - assertTrue(topicManager.isStandardTopic(VALID_OTA_UPDATE_TOPIC)); - } - - @Test - void testIsStandardTopic_InvalidTopics() { - // 验证无效主题 - assertFalse(topicManager.isStandardTopic(INVALID_TOPIC)); - assertFalse(topicManager.isStandardTopic(NULL_TOPIC)); - assertFalse(topicManager.isStandardTopic(EMPTY_TOPIC)); - } - - // ==================== 主题信息提取测试 ==================== - - @Test - void testExtractTopicInfo_ThingPropertyUp() { - // 执行 - MQTTTopicManager.TopicInfo topicInfo = - topicManager.extractTopicInfo(VALID_THING_PROPERTY_TOPIC); - - // 验证 - assertNotNull(topicInfo); - assertEquals(VALID_THING_PROPERTY_TOPIC, topicInfo.getOriginalTopic()); - assertEquals(MQTTTopicType.THING_PROPERTY_UP, topicInfo.getTopicType()); - assertEquals(MqttConstant.TopicCategory.THING_MODEL, topicInfo.getCategory()); - assertEquals(TEST_PRODUCT_KEY, topicInfo.getProductKey()); - assertEquals(TEST_DEVICE_ID, topicInfo.getDeviceId()); - assertTrue(topicInfo.isUpstream()); - assertTrue(topicInfo.isValid()); - assertEquals(TEST_PRODUCT_KEY + ":" + TEST_DEVICE_ID, topicInfo.getDeviceUniqueId()); - } - - @Test - void testExtractTopicInfo_ThingEventUp() { - // 执行 - MQTTTopicManager.TopicInfo topicInfo = topicManager.extractTopicInfo(VALID_THING_EVENT_TOPIC); - - // 验证 - assertNotNull(topicInfo); - assertEquals(VALID_THING_EVENT_TOPIC, topicInfo.getOriginalTopic()); - assertEquals(MQTTTopicType.THING_EVENT_UP, topicInfo.getTopicType()); - assertEquals(MqttConstant.TopicCategory.THING_MODEL, topicInfo.getCategory()); - assertEquals(TEST_PRODUCT_KEY, topicInfo.getProductKey()); - assertEquals(TEST_DEVICE_ID, topicInfo.getDeviceId()); - assertTrue(topicInfo.isUpstream()); - assertTrue(topicInfo.isValid()); - } - - @Test - void testExtractTopicInfo_ThingDown() { - // 执行 - MQTTTopicManager.TopicInfo topicInfo = topicManager.extractTopicInfo(VALID_THING_DOWN_TOPIC); - - // 验证 - assertNotNull(topicInfo); - assertEquals(VALID_THING_DOWN_TOPIC, topicInfo.getOriginalTopic()); - assertEquals(MQTTTopicType.THING_DOWN, topicInfo.getTopicType()); - assertEquals(MqttConstant.TopicCategory.THING_MODEL, topicInfo.getCategory()); - assertEquals(TEST_PRODUCT_KEY, topicInfo.getProductKey()); - assertEquals(TEST_DEVICE_ID, topicInfo.getDeviceId()); - assertFalse(topicInfo.isUpstream()); - assertTrue(topicInfo.isDownstream()); - assertTrue(topicInfo.isValid()); - } - - @Test - void testExtractTopicInfo_PassthroughUp() { - // 执行 - MQTTTopicManager.TopicInfo topicInfo = - topicManager.extractTopicInfo(VALID_PASSTHROUGH_UP_TOPIC); - - // 验证 - assertNotNull(topicInfo); - assertEquals(VALID_PASSTHROUGH_UP_TOPIC, topicInfo.getOriginalTopic()); - assertEquals(MQTTTopicType.PASSTHROUGH_UP, topicInfo.getTopicType()); - assertEquals(MqttConstant.TopicCategory.PASSTHROUGH, topicInfo.getCategory()); - assertEquals(TEST_PRODUCT_KEY, topicInfo.getProductKey()); - assertEquals(TEST_DEVICE_ID, topicInfo.getDeviceId()); - assertTrue(topicInfo.isUpstream()); - assertTrue(topicInfo.isValid()); - } - - @Test - void testExtractTopicInfo_PassthroughDown() { - // 执行 - MQTTTopicManager.TopicInfo topicInfo = - topicManager.extractTopicInfo(VALID_PASSTHROUGH_DOWN_TOPIC); - - // 验证 - assertNotNull(topicInfo); - assertEquals(VALID_PASSTHROUGH_DOWN_TOPIC, topicInfo.getOriginalTopic()); - assertEquals(MQTTTopicType.PASSTHROUGH_DOWN, topicInfo.getTopicType()); - assertEquals(MqttConstant.TopicCategory.PASSTHROUGH, topicInfo.getCategory()); - assertEquals(TEST_PRODUCT_KEY, topicInfo.getProductKey()); - assertEquals(TEST_DEVICE_ID, topicInfo.getDeviceId()); - assertFalse(topicInfo.isUpstream()); - assertTrue(topicInfo.isDownstream()); - assertTrue(topicInfo.isValid()); - } - - @Test - void testExtractTopicInfo_OtaReport() { - // 执行 - MQTTTopicManager.TopicInfo topicInfo = topicManager.extractTopicInfo(VALID_OTA_REPORT_TOPIC); - - // 验证 - assertNotNull(topicInfo); - assertEquals(VALID_OTA_REPORT_TOPIC, topicInfo.getOriginalTopic()); - assertEquals(MQTTTopicType.OTA_REPORT, topicInfo.getTopicType()); - assertEquals(MqttConstant.TopicCategory.SYSTEM_LEVEL, topicInfo.getCategory()); - assertEquals(TEST_PRODUCT_KEY, topicInfo.getProductKey()); - assertEquals(TEST_DEVICE_ID, topicInfo.getDeviceId()); - assertTrue(topicInfo.isUpstream()); - assertTrue(topicInfo.isValid()); - } - - @Test - void testExtractTopicInfo_OtaUpdate() { - // 执行 - MQTTTopicManager.TopicInfo topicInfo = topicManager.extractTopicInfo(VALID_OTA_UPDATE_TOPIC); - - // 验证 - assertNotNull(topicInfo); - assertEquals(VALID_OTA_UPDATE_TOPIC, topicInfo.getOriginalTopic()); - assertEquals(MQTTTopicType.OTA_UPDATE, topicInfo.getTopicType()); - assertEquals(MqttConstant.TopicCategory.SYSTEM_LEVEL, topicInfo.getCategory()); - assertEquals(TEST_PRODUCT_KEY, topicInfo.getProductKey()); - assertEquals(TEST_DEVICE_ID, topicInfo.getDeviceId()); - assertFalse(topicInfo.isUpstream()); - assertTrue(topicInfo.isDownstream()); - assertTrue(topicInfo.isValid()); - } - - @Test - void testExtractTopicInfo_InvalidTopic() { - // 执行 - MQTTTopicManager.TopicInfo topicInfo = topicManager.extractTopicInfo(INVALID_TOPIC); - - // 验证 - assertNotNull(topicInfo); - assertEquals(INVALID_TOPIC, topicInfo.getOriginalTopic()); - assertNull(topicInfo.getTopicType()); - assertNull(topicInfo.getCategory()); - assertNull(topicInfo.getProductKey()); - assertNull(topicInfo.getDeviceId()); - assertFalse(topicInfo.isUpstream()); - assertFalse(topicInfo.isValid()); - assertNull(topicInfo.getDeviceUniqueId()); - } - - @Test - void testExtractTopicInfo_NullTopic() { - // 执行 - MQTTTopicManager.TopicInfo topicInfo = topicManager.extractTopicInfo(NULL_TOPIC); - - // 验证 - assertNotNull(topicInfo); - assertEquals(NULL_TOPIC, topicInfo.getOriginalTopic()); - assertNull(topicInfo.getTopicType()); - assertNull(topicInfo.getCategory()); - assertNull(topicInfo.getProductKey()); - assertNull(topicInfo.getDeviceId()); - assertFalse(topicInfo.isUpstream()); - assertFalse(topicInfo.isValid()); - } - - // ==================== TopicInfo 构建器测试 ==================== - - @Test - void testTopicInfoBuilder() { - // 执行 - MQTTTopicManager.TopicInfo topicInfo = - MQTTTopicManager.TopicInfo.builder() - .originalTopic(VALID_THING_PROPERTY_TOPIC) - .topicType(MQTTTopicType.THING_PROPERTY_UP) - .category(MqttConstant.TopicCategory.THING_MODEL) - .productKey(TEST_PRODUCT_KEY) - .deviceId(TEST_DEVICE_ID) - .isUpstream(true) - .isValid(true) - .build(); - - // 验证 - assertNotNull(topicInfo); - assertEquals(VALID_THING_PROPERTY_TOPIC, topicInfo.getOriginalTopic()); - assertEquals(MQTTTopicType.THING_PROPERTY_UP, topicInfo.getTopicType()); - assertEquals(MqttConstant.TopicCategory.THING_MODEL, topicInfo.getCategory()); - assertEquals(TEST_PRODUCT_KEY, topicInfo.getProductKey()); - assertEquals(TEST_DEVICE_ID, topicInfo.getDeviceId()); - assertTrue(topicInfo.isUpstream()); - assertTrue(topicInfo.isValid()); - } - - @Test - void testTopicInfoUnknown() { - // 执行 - MQTTTopicManager.TopicInfo topicInfo = MQTTTopicManager.TopicInfo.unknown(INVALID_TOPIC); - - // 验证 - assertNotNull(topicInfo); - assertEquals(INVALID_TOPIC, topicInfo.getOriginalTopic()); - assertNull(topicInfo.getTopicType()); - assertNull(topicInfo.getCategory()); - assertNull(topicInfo.getProductKey()); - assertNull(topicInfo.getDeviceId()); - assertFalse(topicInfo.isUpstream()); - assertFalse(topicInfo.isValid()); - } - - @Test - void testTopicInfoToString() { - // 执行 - MQTTTopicManager.TopicInfo topicInfo = - topicManager.extractTopicInfo(VALID_THING_PROPERTY_TOPIC); - String toString = topicInfo.toString(); - - // 验证 - assertNotNull(toString); - assertTrue(toString.contains("TopicInfo")); - assertTrue(toString.contains(VALID_THING_PROPERTY_TOPIC)); - assertTrue(toString.contains(TEST_PRODUCT_KEY)); - assertTrue(toString.contains(TEST_DEVICE_ID)); - } - - // ==================== 主题分类匹配测试 ==================== - - @Test - void testMatchCategory_ThingModel() { - // 验证物模型主题分类 - assertEquals( - MqttConstant.TopicCategory.THING_MODEL, - MQTTTopicManager.matchCategory(VALID_THING_PROPERTY_TOPIC)); - assertEquals( - MqttConstant.TopicCategory.THING_MODEL, - MQTTTopicManager.matchCategory(VALID_THING_EVENT_TOPIC)); - assertEquals( - MqttConstant.TopicCategory.THING_MODEL, - MQTTTopicManager.matchCategory(VALID_THING_DOWN_TOPIC)); - } - - @Test - void testMatchCategory_Passthrough() { - // 验证透传主题分类 - assertEquals( - MqttConstant.TopicCategory.PASSTHROUGH, - MQTTTopicManager.matchCategory(VALID_PASSTHROUGH_UP_TOPIC)); - assertEquals( - MqttConstant.TopicCategory.PASSTHROUGH, - MQTTTopicManager.matchCategory(VALID_PASSTHROUGH_DOWN_TOPIC)); - } - - @Test - void testMatchCategory_SystemLevel() { - // 验证系统级主题分类 - assertEquals( - MqttConstant.TopicCategory.SYSTEM_LEVEL, - MQTTTopicManager.matchCategory(VALID_OTA_REPORT_TOPIC)); - assertEquals( - MqttConstant.TopicCategory.SYSTEM_LEVEL, - MQTTTopicManager.matchCategory(VALID_OTA_UPDATE_TOPIC)); - } - - @Test - void testMatchCategory_Unknown() { - // 验证未知主题分类 - assertEquals(MqttConstant.TopicCategory.UNKNOWN, MQTTTopicManager.matchCategory(INVALID_TOPIC)); - } - - // ==================== 产品Key和设备ID提取测试 ==================== - - @Test - void testExtractProductKeyFromTopic_ValidTopics() { - // 验证所有有效主题的产品Key提取 - assertEquals( - TEST_PRODUCT_KEY, topicManager.extractProductKeyFromTopic(VALID_THING_PROPERTY_TOPIC)); - assertEquals( - TEST_PRODUCT_KEY, topicManager.extractProductKeyFromTopic(VALID_THING_EVENT_TOPIC)); - assertEquals(TEST_PRODUCT_KEY, topicManager.extractProductKeyFromTopic(VALID_THING_DOWN_TOPIC)); - assertEquals( - TEST_PRODUCT_KEY, topicManager.extractProductKeyFromTopic(VALID_PASSTHROUGH_UP_TOPIC)); - assertEquals( - TEST_PRODUCT_KEY, topicManager.extractProductKeyFromTopic(VALID_PASSTHROUGH_DOWN_TOPIC)); - assertEquals(TEST_PRODUCT_KEY, topicManager.extractProductKeyFromTopic(VALID_OTA_REPORT_TOPIC)); - assertEquals(TEST_PRODUCT_KEY, topicManager.extractProductKeyFromTopic(VALID_OTA_UPDATE_TOPIC)); - } - - @Test - void testExtractProductKeyFromTopic_InvalidTopic() { - // 验证无效主题的产品Key提取 - assertNull(topicManager.extractProductKeyFromTopic(INVALID_TOPIC)); - assertNull(topicManager.extractProductKeyFromTopic(NULL_TOPIC)); - assertNull(topicManager.extractProductKeyFromTopic(EMPTY_TOPIC)); - } - - @Test - void testExtractProductKeyFromTopic_HistoricalFormat() { - // 验证历史格式的产品Key提取 - String historicalTopic = "productKey/deviceId"; - assertEquals("productKey", topicManager.extractProductKeyFromTopic(historicalTopic)); - - String historicalTopic2 = "prefix/productKey/deviceId"; - assertEquals("productKey", topicManager.extractProductKeyFromTopic(historicalTopic2)); - } - - @Test - void testExtractDeviceIdFromTopic_ValidTopics() { - // 验证所有有效主题的设备ID提取 - assertEquals(TEST_DEVICE_ID, topicManager.extractDeviceIdFromTopic(VALID_THING_PROPERTY_TOPIC)); - assertEquals(TEST_DEVICE_ID, topicManager.extractDeviceIdFromTopic(VALID_THING_EVENT_TOPIC)); - assertEquals(TEST_DEVICE_ID, topicManager.extractDeviceIdFromTopic(VALID_THING_DOWN_TOPIC)); - assertEquals(TEST_DEVICE_ID, topicManager.extractDeviceIdFromTopic(VALID_PASSTHROUGH_UP_TOPIC)); - assertEquals( - TEST_DEVICE_ID, topicManager.extractDeviceIdFromTopic(VALID_PASSTHROUGH_DOWN_TOPIC)); - assertEquals(TEST_DEVICE_ID, topicManager.extractDeviceIdFromTopic(VALID_OTA_REPORT_TOPIC)); - assertEquals(TEST_DEVICE_ID, topicManager.extractDeviceIdFromTopic(VALID_OTA_UPDATE_TOPIC)); - } - - @Test - void testExtractDeviceIdFromTopic_InvalidTopic() { - // 验证无效主题的设备ID提取 - assertEquals("unknown", topicManager.extractDeviceIdFromTopic(INVALID_TOPIC)); - assertEquals("unknown", topicManager.extractDeviceIdFromTopic(NULL_TOPIC)); - assertEquals("unknown", topicManager.extractDeviceIdFromTopic(EMPTY_TOPIC)); - } - - @Test - void testExtractDeviceIdFromTopic_HistoricalFormat() { - // 验证历史格式的设备ID提取 - String historicalTopic = "productKey/deviceId"; - assertEquals("deviceId", topicManager.extractDeviceIdFromTopic(historicalTopic)); - - String historicalTopic2 = "prefix/productKey/deviceId"; - assertEquals("deviceId", topicManager.extractDeviceIdFromTopic(historicalTopic2)); - } - - // ==================== 配置解析测试 ==================== - - @Test - void testParseSubscribeTopicsFromConfig_WithThirdMQTTSubscribeTopics() { - // 准备测试数据 - Map configMap = new HashMap<>(); - configMap.put("subscribeTopics", "$thing/up/property/+/+,$thing/up/event/+/+,$ota/report/+/+"); - - // 执行 - List topicConfigs = - topicManager.parseSubscribeTopicsFromConfig(configMap, 2); - - // 验证 - assertNotNull(topicConfigs); - assertEquals(3, topicConfigs.size()); - - // 验证第一个主题配置 - MQTTProductConfig.MqttTopicConfig firstConfig = topicConfigs.get(0); - assertEquals("$thing/up/property/+/+", firstConfig.getTopicPattern()); - assertEquals(2, firstConfig.getQos()); - assertTrue(firstConfig.isEnabled()); - } - - @Test - void testParseThirdMQTTSubscribeTopicsFromConfig_WithTopics() { - // 准备测试数据 - Map configMap = new HashMap<>(); - configMap.put("topics", "$thing/up/+/+,$thing/down/+/+"); - - // 执行 - List topicConfigs = - topicManager.parseSubscribeTopicsFromConfig(configMap, 1); - - // 验证 - assertNotNull(topicConfigs); - assertEquals(2, topicConfigs.size()); - - // 验证主题配置 - MQTTProductConfig.MqttTopicConfig firstConfig = topicConfigs.get(0); - assertEquals("$thing/up/+/+", firstConfig.getTopicPattern()); - assertEquals(1, firstConfig.getQos()); - assertTrue(firstConfig.isEnabled()); - } - - @Test - void testParseThirdMQTTSubscribeTopicsFromConfig_WithEmptyTopics() { - // 准备测试数据 - Map configMap = new HashMap<>(); - configMap.put("subscribeTopics", ""); - - // 执行 - List topicConfigs = - topicManager.parseSubscribeTopicsFromConfig(configMap, 1); - - // 验证 - 应该使用默认主题 - assertNotNull(topicConfigs); - assertFalse(topicConfigs.isEmpty()); - assertTrue(topicConfigs.stream().allMatch(config -> config.getQos() == 1)); - } - - @Test - void testParseThirdMQTTSubscribeTopicsFromConfig_WithNullConfig() { - // 准备测试数据 - Map configMap = new HashMap<>(); - - // 执行 - List topicConfigs = - topicManager.parseSubscribeTopicsFromConfig(configMap, 1); - - // 验证 - 应该使用默认主题 - assertNotNull(topicConfigs); - assertFalse(topicConfigs.isEmpty()); - assertTrue(topicConfigs.stream().allMatch(config -> config.getQos() == 1)); - } - - @Test - void testParseThirdMQTTSubscribeTopicsFromConfig_DefaultQos() { - // 准备测试数据 - Map configMap = new HashMap<>(); - configMap.put("subscribeTopics", "$thing/up/property/+/+"); - - // 执行 - 不指定QoS,使用默认值1 - List topicConfigs = - topicManager.parseSubscribeTopicsFromConfig(configMap, 1); - - // 验证 - assertNotNull(topicConfigs); - assertEquals(1, topicConfigs.size()); - assertEquals(1, topicConfigs.get(0).getQos()); - } - - @Test - void testParseThirdMQTTSubscribeTopicsFromConfig_WithSemicolonSeparator() { - // 准备测试数据 - Map configMap = new HashMap<>(); - configMap.put("subscribeTopics", "$thing/up/property/+/+;$thing/up/event/+/+"); - - // 执行 - List topicConfigs = - topicManager.parseSubscribeTopicsFromConfig(configMap, 1); - - // 验证 - assertNotNull(topicConfigs); - assertEquals(2, topicConfigs.size()); - assertEquals("$thing/up/property/+/+", topicConfigs.get(0).getTopicPattern()); - assertEquals("$thing/up/event/+/+", topicConfigs.get(1).getTopicPattern()); - } - - @Test - void testParseThirdMQTTSubscribeTopicsFromConfig_WithWhitespace() { - // 准备测试数据 - Map configMap = new HashMap<>(); - configMap.put("subscribeTopics", " $thing/up/property/+/+ , $thing/up/event/+/+ "); - - // 执行 - List topicConfigs = - topicManager.parseSubscribeTopicsFromConfig(configMap, 1); - - // 验证 - 应该去除空白字符 - assertNotNull(topicConfigs); - assertEquals(2, topicConfigs.size()); - assertEquals("$thing/up/property/+/+", topicConfigs.get(0).getTopicPattern()); - assertEquals("$thing/up/event/+/+", topicConfigs.get(1).getTopicPattern()); - } - - // ==================== 边界条件测试 ==================== - - @Test - void testParseTopicType_WithSpecialCharacters() { - // 测试包含特殊字符的主题 - String specialTopic = "$thing/up/property/test-product_123/test-device.456"; - MQTTTopicType topicType = topicManager.parseTopicType(specialTopic); - - assertNotNull(topicType); - assertEquals(MQTTTopicType.THING_PROPERTY_UP, topicType); - } - - @Test - void testExtractTopicInfo_WithSpecialCharacters() { - // 测试包含特殊字符的主题信息提取 - String specialTopic = "$thing/up/property/test-product_123/test-device.456"; - MQTTTopicManager.TopicInfo topicInfo = topicManager.extractTopicInfo(specialTopic); - - assertNotNull(topicInfo); - assertEquals("test-product_123", topicInfo.getProductKey()); - assertEquals("test-device.456", topicInfo.getDeviceId()); - assertTrue(topicInfo.isValid()); - } - - @Test - void testExtractProductKeyFromTopic_WithSpecialCharacters() { - // 测试包含特殊字符的产品Key提取 - String specialTopic = "$thing/up/property/test-product_123/test-device.456"; - String productKey = topicManager.extractProductKeyFromTopic(specialTopic); - - assertEquals("test-product_123", productKey); - } - - @Test - void testExtractDeviceIdFromTopic_WithSpecialCharacters() { - // 测试包含特殊字符的设备ID提取 - String specialTopic = "$thing/up/property/test-product_123/test-device.456"; - String deviceId = topicManager.extractDeviceIdFromTopic(specialTopic); - - assertEquals("test-device.456", deviceId); - } - - // ==================== 异常处理测试 ==================== - - @Test - void testParseThirdMQTTSubscribeTopicsFromConfig_WithException() { - // 准备会抛出异常的配置 - Map configMap = new HashMap<>(); - configMap.put("subscribeTopics", new Object()); // 非字符串类型 - - // 执行 - 应该不会抛出异常,而是使用默认主题 - List topicConfigs = - topicManager.parseSubscribeTopicsFromConfig(configMap, 1); - - // 验证 - assertNotNull(topicConfigs); - assertFalse(topicConfigs.isEmpty()); - } - - @Test - void testExtractProductKeyFromTopic_WithException() { - // 测试异常情况下的产品Key提取 - String malformedTopic = "$thing/up/property/"; // 格式不完整 - - // 执行 - 应该不会抛出异常 - String productKey = topicManager.extractProductKeyFromTopic(malformedTopic); - - // 验证 - assertNull(productKey); - } - - @Test - void testExtractDeviceIdFromTopic_WithException() { - // 测试异常情况下的设备ID提取 - String malformedTopic = "$thing/up/property/"; // 格式不完整 - - // 执行 - 应该不会抛出异常 - String deviceId = topicManager.extractDeviceIdFromTopic(malformedTopic); - - // 验证 - assertEquals("unknown", deviceId); - } - - // ==================== 性能测试 ==================== - - @Test - void testParseTopicType_Performance() { - // 测试解析性能 - String topic = VALID_THING_PROPERTY_TOPIC; - - // 预热 - for (int i = 0; i < 100; i++) { - topicManager.parseTopicType(topic); - } - - // 性能测试 - long startTime = System.nanoTime(); - for (int i = 0; i < 1000; i++) { - topicManager.parseTopicType(topic); - } - long endTime = System.nanoTime(); - - long duration = endTime - startTime; - // 验证1000次解析应该在合理时间内完成(比如小于100ms) - assertTrue(duration < 100_000_000); // 100ms in nanoseconds - } - - @Test - void testExtractTopicInfo_Performance() { - // 测试主题信息提取性能 - String topic = VALID_THING_PROPERTY_TOPIC; - - // 预热 - for (int i = 0; i < 100; i++) { - topicManager.extractTopicInfo(topic); - } - - // 性能测试 - long startTime = System.nanoTime(); - for (int i = 0; i < 1000; i++) { - topicManager.extractTopicInfo(topic); - } - long endTime = System.nanoTime(); - - long duration = endTime - startTime; - // 验证1000次提取应该在合理时间内完成 - assertTrue(duration < 200_000_000); // 200ms in nanoseconds - } - - // ==================== 集成测试 ==================== - - @Test - void testFullWorkflow_ThingModelTopic() { - // 测试完整的物模型主题处理流程 - String topic = VALID_THING_PROPERTY_TOPIC; - - // 1. 检查是否为标准主题 - assertTrue(topicManager.isStandardTopic(topic)); - - // 2. 解析主题类型 - MQTTTopicType topicType = topicManager.parseTopicType(topic); - assertNotNull(topicType); - assertEquals(MQTTTopicType.THING_PROPERTY_UP, topicType); - - // 3. 提取主题信息 - MQTTTopicManager.TopicInfo topicInfo = topicManager.extractTopicInfo(topic); - assertNotNull(topicInfo); - assertTrue(topicInfo.isValid()); - assertEquals(TEST_PRODUCT_KEY, topicInfo.getProductKey()); - assertEquals(TEST_DEVICE_ID, topicInfo.getDeviceId()); - - // 4. 验证主题分类 - assertEquals(MqttConstant.TopicCategory.THING_MODEL, MQTTTopicManager.matchCategory(topic)); - - // 5. 提取产品Key和设备ID - assertEquals(TEST_PRODUCT_KEY, topicManager.extractProductKeyFromTopic(topic)); - assertEquals(TEST_DEVICE_ID, topicManager.extractDeviceIdFromTopic(topic)); - } - - @Test - void testFullWorkflow_SystemLevelTopic() { - // 测试完整的系统级主题处理流程 - String topic = VALID_OTA_REPORT_TOPIC; - - // 1. 检查是否为标准主题 - assertTrue(topicManager.isStandardTopic(topic)); - - // 2. 解析主题类型 - MQTTTopicType topicType = topicManager.parseTopicType(topic); - assertNotNull(topicType); - assertEquals(MQTTTopicType.OTA_REPORT, topicType); - - // 3. 提取主题信息 - MQTTTopicManager.TopicInfo topicInfo = topicManager.extractTopicInfo(topic); - assertNotNull(topicInfo); - assertTrue(topicInfo.isValid()); - assertEquals(TEST_PRODUCT_KEY, topicInfo.getProductKey()); - assertEquals(TEST_DEVICE_ID, topicInfo.getDeviceId()); - - // 4. 验证主题分类 - assertEquals(MqttConstant.TopicCategory.SYSTEM_LEVEL, MQTTTopicManager.matchCategory(topic)); - - // 5. 提取产品Key和设备ID - assertEquals(TEST_PRODUCT_KEY, topicManager.extractProductKeyFromTopic(topic)); - assertEquals(TEST_DEVICE_ID, topicManager.extractDeviceIdFromTopic(topic)); - } - - @Test - void testFullWorkflow_PassthroughTopic() { - // 测试完整的透传主题处理流程 - String topic = VALID_PASSTHROUGH_UP_TOPIC; - - // 1. 检查是否为标准主题 - assertTrue(topicManager.isStandardTopic(topic)); - - // 2. 解析主题类型 - MQTTTopicType topicType = topicManager.parseTopicType(topic); - assertNotNull(topicType); - assertEquals(MQTTTopicType.PASSTHROUGH_UP, topicType); - - // 3. 提取主题信息 - MQTTTopicManager.TopicInfo topicInfo = topicManager.extractTopicInfo(topic); - assertNotNull(topicInfo); - assertTrue(topicInfo.isValid()); - assertEquals(TEST_PRODUCT_KEY, topicInfo.getProductKey()); - assertEquals(TEST_DEVICE_ID, topicInfo.getDeviceId()); - - // 4. 验证主题分类 - assertEquals(MqttConstant.TopicCategory.PASSTHROUGH, MQTTTopicManager.matchCategory(topic)); - - // 5. 提取产品Key和设备ID - assertEquals(TEST_PRODUCT_KEY, topicManager.extractProductKeyFromTopic(topic)); - assertEquals(TEST_DEVICE_ID, topicManager.extractDeviceIdFromTopic(topic)); - } - - @Test - void test_topic_parse() { - String topic = "$qiantang/up/property/681c0775c2dc427d0480ab5f/o10000184"; - System.out.println( - MqttConstant.TopicCategory.THING_MODEL.equals(MQTTTopicManager.matchCategory(topic))); - assertTrue( - MqttConstant.TopicCategory.THING_MODEL.equals(MQTTTopicManager.matchCategory(topic))); - String topics = "$qiantang/up/propertyx/681c0775c2dc427d0480ab5f/o10000184"; - assertFalse( - MqttConstant.TopicCategory.THING_MODEL.equals(MQTTTopicManager.matchCategory(topics))); - } -} diff --git a/cn-universal-protocol/cn-universal-mqtt-protocol/src/test/java/cn/protocol/plugins/mqtt/topic/MQTTTopicManagerTestData.java b/cn-universal-protocol/cn-universal-mqtt-protocol/src/test/java/cn/protocol/plugins/mqtt/topic/MQTTTopicManagerTestData.java deleted file mode 100644 index 07b2dfe25a31c5736324096459c5b4084dfddd2b..0000000000000000000000000000000000000000 --- a/cn-universal-protocol/cn-universal-mqtt-protocol/src/test/java/cn/protocol/plugins/mqtt/topic/MQTTTopicManagerTestData.java +++ /dev/null @@ -1,510 +0,0 @@ -/* - * - * Copyright (c) 2025, IoT-Universal. All Rights Reserved. - * - * @Description: 本文件由 Aleo 开发并拥有版权,未经授权严禁擅自商用、复制或传播。 - * @Author: Aleo - * @Email: wo8335224@gmail.com - * @Wechat: outlookFil - * - * - */ - -package cn.universal.protocol.mqtt.topic; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertTrue; - -import cn.universal.mqtt.protocol.config.MqttConstant; -import cn.universal.mqtt.protocol.entity.MQTTProductConfig; -import cn.universal.mqtt.protocol.topic.MQTTTopicManager; -import cn.universal.mqtt.protocol.topic.MQTTTopicType; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Random; - -/** - * MQTTTopicManager 测试数据类 - * - *

提供测试所需的各种 mock 数据和测试用例 - * - * @version 1.0 @Author Aleo - * @since 2025/1/20 - */ -public class MQTTTopicManagerTestData { - - // ==================== 基础测试数据 ==================== - - public static final String TEST_PRODUCT_KEY = "testProduct"; - public static final String TEST_DEVICE_ID = "testDevice"; - public static final String TEST_PRODUCT_KEY_2 = "testProduct2"; - public static final String TEST_DEVICE_ID_2 = "testDevice2"; - - // ==================== 有效主题数据 ==================== - - // 物模型主题(固定前缀) - public static final String VALID_THING_PROPERTY_UP_TOPIC = - "$thing/up/property/testProduct/testDevice"; - public static final String VALID_THING_EVENT_UP_TOPIC = "$thing/up/event/testProduct/testDevice"; - public static final String VALID_THING_DOWN_TOPIC = "$thing/down/testProduct/testDevice"; - - // 物模型主题(动态前缀) - public static final String VALID_DYNAMIC_THING_PROPERTY_UP_TOPIC = - "$qiantang/up/property/testProduct/testDevice"; - public static final String VALID_DYNAMIC_THING_EVENT_UP_TOPIC = - "$qiantang/up/event/testProduct/testDevice"; - public static final String VALID_DYNAMIC_THING_DOWN_TOPIC = - "$qiantang/down/testProduct/testDevice"; - - // 透传主题(固定前缀) - public static final String VALID_PASSTHROUGH_UP_TOPIC = "$thing/up/testProduct/testDevice"; - public static final String VALID_PASSTHROUGH_DOWN_TOPIC = "$thing/down/testProduct/testDevice"; - - // 透传主题(动态前缀) - public static final String VALID_DYNAMIC_PASSTHROUGH_UP_TOPIC = - "$qiantang/up/testProduct/testDevice"; - public static final String VALID_DYNAMIC_PASSTHROUGH_DOWN_TOPIC = - "$qiantang/down/testProduct/testDevice"; - - // 系统级主题 - public static final String VALID_OTA_REPORT_TOPIC = "$ota/report/testProduct/testDevice"; - public static final String VALID_OTA_UPDATE_TOPIC = "$ota/update/testProduct/testDevice"; - - // ==================== 无效主题数据 ==================== - - public static final String INVALID_TOPIC = "invalid/topic/format"; - public static final String NULL_TOPIC = null; - public static final String EMPTY_TOPIC = ""; - public static final String BLANK_TOPIC = " "; - public static final String MALFORMED_TOPIC = "$thing/up/property/"; - public static final String INCOMPLETE_TOPIC = "$thing/up/property/productKey"; - - // ==================== 特殊字符主题数据 ==================== - - public static final String SPECIAL_CHAR_TOPIC = - "$thing/up/property/test-product_123/test-device.456"; - public static final String CHINESE_TOPIC = "$thing/up/property/测试产品/测试设备"; - public static final String NUMERIC_TOPIC = "$thing/up/property/12345/67890"; - public static final String MIXED_TOPIC = "$thing/up/property/test-产品_123/device-设备.456"; - - // ==================== 历史格式主题数据 ==================== - - public static final String HISTORICAL_TOPIC_1 = "productKey/deviceId"; - public static final String HISTORICAL_TOPIC_2 = "prefix/productKey/deviceId"; - public static final String HISTORICAL_TOPIC_3 = "productKey"; - public static final String HISTORICAL_TOPIC_4 = "a/b/c/productKey/deviceId"; - - // ==================== 主题配置数据 ==================== - - /** 创建标准主题配置JSON */ - public static String createStandardTopicConfigJson() { - return "{\n" - + " \"thing-model\": {\n" - + " \"description\": \"物模型主题\",\n" - + " \"topics\": [\n" - + " \"$thing/up/property/+/+\",\n" - + " \"$thing/up/event/+/+\",\n" - + " \"$thing/down/+/+\"\n" - + " ]\n" - + " },\n" - + " \"system-level\": {\n" - + " \"description\": \"系统级主题\",\n" - + " \"topics\": [\n" - + " \"$ota/report/+/+\",\n" - + " \"$ota/update/+/+\"\n" - + " ]\n" - + " },\n" - + " \"passthrough\": {\n" - + " \"description\": \"透传主题\",\n" - + " \"topics\": [\n" - + " \"$thing/up/+/+\",\n" - + " \"$thing/down/+/+\"\n" - + " ]\n" - + " }\n" - + "}"; - } - - /** 创建扩展主题配置JSON */ - public static String createExtendedTopicConfigJson() { - return "{\n" - + " \"thing-model\": {\n" - + " \"description\": \"物模型主题\",\n" - + " \"topics\": [\n" - + " \"$thing/up/property/+/+\",\n" - + " \"$thing/up/event/+/+\",\n" - + " \"$thing/down/+/+\",\n" - + " \"$thing/up/third/+/+\"\n" - + " ]\n" - + " },\n" - + " \"system-level\": {\n" - + " \"description\": \"系统级主题\",\n" - + " \"topics\": [\n" - + " \"$ota/report/+/+\",\n" - + " \"$ota/update/+/+\",\n" - + " \"$ota/status/+/+\"\n" - + " ]\n" - + " },\n" - + " \"passthrough\": {\n" - + " \"description\": \"透传主题\",\n" - + " \"topics\": [\n" - + " \"$thing/up/+/+\",\n" - + " \"$thing/down/+/+\",\n" - + " \"$thing/raw/+/+\"\n" - + " ]\n" - + " }\n" - + "}"; - } - - /** 创建空主题配置JSON */ - public static String createEmptyTopicConfigJson() { - return "{\n" - + " \"thing-model\": {\n" - + " \"description\": \"物模型主题\",\n" - + " \"topics\": []\n" - + " },\n" - + " \"system-level\": {\n" - + " \"description\": \"系统级主题\",\n" - + " \"topics\": []\n" - + " },\n" - + " \"passthrough\": {\n" - + " \"description\": \"透传主题\",\n" - + " \"topics\": []\n" - + " }\n" - + "}"; - } - - /** 创建无效主题配置JSON */ - public static String createInvalidTopicConfigJson() { - return "{\n" - + " \"invalid\": \"json\",\n" - + " \"format\": {\n" - + " \"missing\": \"topics\"\n" - + " }\n" - + "}"; - } - - // ==================== 配置Map数据 ==================== - - /** 创建标准配置Map */ - public static Map createStandardConfigMap() { - Map configMap = new HashMap<>(); - configMap.put("subscribeTopics", "$thing/up/property/+/+,$thing/up/event/+/+,$ota/report/+/+"); - configMap.put("topics", "$thing/up/+/+,$thing/down/+/+"); - configMap.put("host", "tcp://localhost:1883"); - configMap.put("username", "testuser"); - configMap.put("password", "testpass"); - configMap.put("defaultQos", 1); - return configMap; - } - - /** 创建使用分号分隔符的配置Map */ - public static Map createSemicolonConfigMap() { - Map configMap = new HashMap<>(); - configMap.put("subscribeTopics", "$thing/up/property/+/+;$thing/up/event/+/+;$ota/report/+/+"); - configMap.put("topics", "$thing/up/+/+;$thing/down/+/+"); - return configMap; - } - - /** 创建带空白字符的配置Map */ - public static Map createWhitespaceConfigMap() { - Map configMap = new HashMap<>(); - configMap.put( - "subscribeTopics", " $thing/up/property/+/+ , $thing/up/event/+/+ , $ota/report/+/+ "); - configMap.put("topics", " $thing/up/+/+ , $thing/down/+/+ "); - return configMap; - } - - /** 创建空配置Map */ - public static Map createEmptyConfigMap() { - Map configMap = new HashMap<>(); - configMap.put("subscribeTopics", ""); - configMap.put("topics", ""); - return configMap; - } - - /** 创建null配置Map */ - public static Map createNullConfigMap() { - Map configMap = new HashMap<>(); - configMap.put("subscribeTopics", null); - configMap.put("topics", null); - return configMap; - } - - /** 创建异常配置Map */ - public static Map createExceptionConfigMap() { - Map configMap = new HashMap<>(); - configMap.put("subscribeTopics", new Object()); // 非字符串类型 - configMap.put("topics", 123); // 数字类型 - return configMap; - } - - // ==================== 主题列表数据 ==================== - - /** 获取所有有效主题列表 */ - public static List getAllValidTopics() { - return Arrays.asList( - // 固定前缀主题 - VALID_THING_PROPERTY_UP_TOPIC, - VALID_THING_EVENT_UP_TOPIC, - VALID_THING_DOWN_TOPIC, - VALID_PASSTHROUGH_UP_TOPIC, - VALID_PASSTHROUGH_DOWN_TOPIC, - // 动态前缀主题 - VALID_DYNAMIC_THING_PROPERTY_UP_TOPIC, - VALID_DYNAMIC_THING_EVENT_UP_TOPIC, - VALID_DYNAMIC_THING_DOWN_TOPIC, - VALID_DYNAMIC_PASSTHROUGH_UP_TOPIC, - VALID_DYNAMIC_PASSTHROUGH_DOWN_TOPIC, - // 系统级主题 - VALID_OTA_REPORT_TOPIC, - VALID_OTA_UPDATE_TOPIC); - } - - /** 获取物模型主题列表 */ - public static List getThingModelTopics() { - return Arrays.asList( - // 固定前缀 - VALID_THING_PROPERTY_UP_TOPIC, - VALID_THING_EVENT_UP_TOPIC, - VALID_THING_DOWN_TOPIC, - // 动态前缀 - VALID_DYNAMIC_THING_PROPERTY_UP_TOPIC, - VALID_DYNAMIC_THING_EVENT_UP_TOPIC, - VALID_DYNAMIC_THING_DOWN_TOPIC); - } - - /** 获取透传主题列表 */ - public static List getPassthroughTopics() { - return Arrays.asList( - // 固定前缀 - VALID_PASSTHROUGH_UP_TOPIC, VALID_PASSTHROUGH_DOWN_TOPIC, - // 动态前缀 - VALID_DYNAMIC_PASSTHROUGH_UP_TOPIC, VALID_DYNAMIC_PASSTHROUGH_DOWN_TOPIC); - } - - /** 获取系统级主题列表 */ - public static List getSystemLevelTopics() { - return Arrays.asList(VALID_OTA_REPORT_TOPIC, VALID_OTA_UPDATE_TOPIC); - } - - /** 获取无效主题列表 */ - public static List getInvalidTopics() { - return Arrays.asList( - INVALID_TOPIC, NULL_TOPIC, EMPTY_TOPIC, BLANK_TOPIC, MALFORMED_TOPIC, INCOMPLETE_TOPIC); - } - - /** 获取特殊字符主题列表 */ - public static List getSpecialCharTopics() { - return Arrays.asList(SPECIAL_CHAR_TOPIC, CHINESE_TOPIC, NUMERIC_TOPIC, MIXED_TOPIC); - } - - /** 获取历史格式主题列表 */ - public static List getHistoricalTopics() { - return Arrays.asList( - HISTORICAL_TOPIC_1, HISTORICAL_TOPIC_2, HISTORICAL_TOPIC_3, HISTORICAL_TOPIC_4); - } - - // ==================== 预期结果数据 ==================== - - /** 获取主题类型映射 */ - public static Map getTopicTypeMapping() { - Map mapping = new HashMap<>(); - // 固定前缀主题 - mapping.put(VALID_THING_PROPERTY_UP_TOPIC, MQTTTopicType.THING_PROPERTY_UP); - mapping.put(VALID_THING_EVENT_UP_TOPIC, MQTTTopicType.THING_EVENT_UP); - mapping.put(VALID_THING_DOWN_TOPIC, MQTTTopicType.THING_DOWN); - mapping.put(VALID_PASSTHROUGH_UP_TOPIC, MQTTTopicType.PASSTHROUGH_UP); - mapping.put(VALID_PASSTHROUGH_DOWN_TOPIC, MQTTTopicType.PASSTHROUGH_DOWN); - // 动态前缀主题 - mapping.put(VALID_DYNAMIC_THING_PROPERTY_UP_TOPIC, MQTTTopicType.THING_PROPERTY_UP); - mapping.put(VALID_DYNAMIC_THING_EVENT_UP_TOPIC, MQTTTopicType.THING_EVENT_UP); - mapping.put(VALID_DYNAMIC_THING_DOWN_TOPIC, MQTTTopicType.THING_DOWN); - mapping.put(VALID_DYNAMIC_PASSTHROUGH_UP_TOPIC, MQTTTopicType.PASSTHROUGH_UP); - mapping.put(VALID_DYNAMIC_PASSTHROUGH_DOWN_TOPIC, MQTTTopicType.PASSTHROUGH_DOWN); - // 系统级主题 - mapping.put(VALID_OTA_REPORT_TOPIC, MQTTTopicType.OTA_REPORT); - mapping.put(VALID_OTA_UPDATE_TOPIC, MQTTTopicType.OTA_UPDATE); - return mapping; - } - - /** 获取主题分类映射 */ - public static Map getTopicCategoryMapping() { - Map mapping = new HashMap<>(); - // 固定前缀主题 - mapping.put(VALID_THING_PROPERTY_UP_TOPIC, MqttConstant.TopicCategory.THING_MODEL); - mapping.put(VALID_THING_EVENT_UP_TOPIC, MqttConstant.TopicCategory.THING_MODEL); - mapping.put(VALID_THING_DOWN_TOPIC, MqttConstant.TopicCategory.THING_MODEL); - mapping.put(VALID_PASSTHROUGH_UP_TOPIC, MqttConstant.TopicCategory.PASSTHROUGH); - mapping.put(VALID_PASSTHROUGH_DOWN_TOPIC, MqttConstant.TopicCategory.PASSTHROUGH); - // 动态前缀主题 - mapping.put(VALID_DYNAMIC_THING_PROPERTY_UP_TOPIC, MqttConstant.TopicCategory.THING_MODEL); - mapping.put(VALID_DYNAMIC_THING_EVENT_UP_TOPIC, MqttConstant.TopicCategory.THING_MODEL); - mapping.put(VALID_DYNAMIC_THING_DOWN_TOPIC, MqttConstant.TopicCategory.THING_MODEL); - mapping.put(VALID_DYNAMIC_PASSTHROUGH_UP_TOPIC, MqttConstant.TopicCategory.PASSTHROUGH); - mapping.put(VALID_DYNAMIC_PASSTHROUGH_DOWN_TOPIC, MqttConstant.TopicCategory.PASSTHROUGH); - // 系统级主题 - mapping.put(VALID_OTA_REPORT_TOPIC, MqttConstant.TopicCategory.SYSTEM_LEVEL); - mapping.put(VALID_OTA_UPDATE_TOPIC, MqttConstant.TopicCategory.SYSTEM_LEVEL); - return mapping; - } - - /** 获取产品Key映射 */ - public static Map getProductKeyMapping() { - Map mapping = new HashMap<>(); - // 固定前缀主题 - mapping.put(VALID_THING_PROPERTY_UP_TOPIC, TEST_PRODUCT_KEY); - mapping.put(VALID_THING_EVENT_UP_TOPIC, TEST_PRODUCT_KEY); - mapping.put(VALID_THING_DOWN_TOPIC, TEST_PRODUCT_KEY); - mapping.put(VALID_PASSTHROUGH_UP_TOPIC, TEST_PRODUCT_KEY); - mapping.put(VALID_PASSTHROUGH_DOWN_TOPIC, TEST_PRODUCT_KEY); - // 动态前缀主题 - mapping.put(VALID_DYNAMIC_THING_PROPERTY_UP_TOPIC, TEST_PRODUCT_KEY); - mapping.put(VALID_DYNAMIC_THING_EVENT_UP_TOPIC, TEST_PRODUCT_KEY); - mapping.put(VALID_DYNAMIC_THING_DOWN_TOPIC, TEST_PRODUCT_KEY); - mapping.put(VALID_DYNAMIC_PASSTHROUGH_UP_TOPIC, TEST_PRODUCT_KEY); - mapping.put(VALID_DYNAMIC_PASSTHROUGH_DOWN_TOPIC, TEST_PRODUCT_KEY); - // 系统级主题 - mapping.put(VALID_OTA_REPORT_TOPIC, TEST_PRODUCT_KEY); - mapping.put(VALID_OTA_UPDATE_TOPIC, TEST_PRODUCT_KEY); - // 特殊字符主题 - mapping.put(SPECIAL_CHAR_TOPIC, "test-product_123"); - mapping.put(CHINESE_TOPIC, "测试产品"); - mapping.put(NUMERIC_TOPIC, "12345"); - mapping.put(MIXED_TOPIC, "test-产品_123"); - return mapping; - } - - /** 获取设备ID映射 */ - public static Map getDeviceIdMapping() { - Map mapping = new HashMap<>(); - // 固定前缀主题 - mapping.put(VALID_THING_PROPERTY_UP_TOPIC, TEST_DEVICE_ID); - mapping.put(VALID_THING_EVENT_UP_TOPIC, TEST_DEVICE_ID); - mapping.put(VALID_THING_DOWN_TOPIC, TEST_DEVICE_ID); - mapping.put(VALID_PASSTHROUGH_UP_TOPIC, TEST_DEVICE_ID); - mapping.put(VALID_PASSTHROUGH_DOWN_TOPIC, TEST_DEVICE_ID); - // 动态前缀主题 - mapping.put(VALID_DYNAMIC_THING_PROPERTY_UP_TOPIC, TEST_DEVICE_ID); - mapping.put(VALID_DYNAMIC_THING_EVENT_UP_TOPIC, TEST_DEVICE_ID); - mapping.put(VALID_DYNAMIC_THING_DOWN_TOPIC, TEST_DEVICE_ID); - mapping.put(VALID_DYNAMIC_PASSTHROUGH_UP_TOPIC, TEST_DEVICE_ID); - mapping.put(VALID_DYNAMIC_PASSTHROUGH_DOWN_TOPIC, TEST_DEVICE_ID); - // 系统级主题 - mapping.put(VALID_OTA_REPORT_TOPIC, TEST_DEVICE_ID); - mapping.put(VALID_OTA_UPDATE_TOPIC, TEST_DEVICE_ID); - // 特殊字符主题 - mapping.put(SPECIAL_CHAR_TOPIC, "test-device.456"); - mapping.put(CHINESE_TOPIC, "测试设备"); - mapping.put(NUMERIC_TOPIC, "67890"); - mapping.put(MIXED_TOPIC, "device-设备.456"); - return mapping; - } - - // ==================== 测试用例数据 ==================== - - /** 创建性能测试数据 */ - public static List createPerformanceTestData() { - List testData = new ArrayList<>(); - String[] prefixes = {"$thing", "$qiantang", "$custom", "$platform"}; - - for (int i = 0; i < 1000; i++) { - String prefix = prefixes[i % prefixes.length]; - testData.add(prefix + "/up/property/product" + i + "/device" + i); - } - return testData; - } - - /** 创建边界测试数据 */ - public static List createBoundaryTestData() { - return Arrays.asList( - // 固定前缀边界测试 - "$thing/up/property/a/b", // 最短有效主题 - "$thing/up/property/" + "a".repeat(100) + "/" + "b".repeat(100), // 长主题 - "$thing/up/property" - + "/1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" - + "/device", // 超长产品Key - "$thing/up/property/product/" + "d".repeat(1000), // 超长设备ID - "$thing/up/property/", // 空产品Key和设备ID - "$thing/up/property//", // 空产品Key - "$thing/up/property/product/", // 空设备ID - "$thing/up/property//device", // 空产品Key - // 动态前缀边界测试 - "$qiantang/up/property/a/b", // 动态前缀最短有效主题 - "$custom/up/property/" + "a".repeat(100) + "/" + "b".repeat(100), // 动态前缀长主题 - "$platform/up/property/", // 动态前缀空产品Key和设备ID - "$device/up/property//", // 动态前缀空产品Key - "$sensor/up/property/product/" // 动态前缀空设备ID - ); - } - - /** 创建压力测试数据 */ - public static List createStressTestData() { - List testData = new ArrayList<>(); - Random random = new Random(42); // 固定种子以确保可重复性 - String[] prefixes = {"$thing", "$qiantang", "$custom", "$platform", "$device", "$sensor"}; - - for (int i = 0; i < 10000; i++) { - String prefix = prefixes[random.nextInt(prefixes.length)]; - String productKey = "product" + random.nextInt(1000); - String deviceId = "device" + random.nextInt(1000); - String topicType = random.nextBoolean() ? "property" : "event"; - testData.add(prefix + "/up/" + topicType + "/" + productKey + "/" + deviceId); - } - return testData; - } - - // ==================== 辅助方法 ==================== - - /** 验证主题信息 */ - public static void validateTopicInfo( - MQTTTopicManager.TopicInfo topicInfo, - String expectedTopic, - MQTTTopicType expectedType, - MqttConstant.TopicCategory expectedCategory, - String expectedProductKey, - String expectedDeviceId, - boolean expectedUpstream) { - assertNotNull(topicInfo); - assertEquals(expectedTopic, topicInfo.getOriginalTopic()); - assertEquals(expectedType, topicInfo.getTopicType()); - assertEquals(expectedCategory, topicInfo.getCategory()); - assertEquals(expectedProductKey, topicInfo.getProductKey()); - assertEquals(expectedDeviceId, topicInfo.getDeviceId()); - assertEquals(expectedUpstream, topicInfo.isUpstream()); - assertEquals(!expectedUpstream, topicInfo.isDownstream()); - assertTrue(topicInfo.isValid()); - assertEquals(expectedProductKey + ":" + expectedDeviceId, topicInfo.getDeviceUniqueId()); - } - - /** 验证无效主题信息 */ - public static void validateInvalidTopicInfo( - MQTTTopicManager.TopicInfo topicInfo, String expectedTopic) { - assertNotNull(topicInfo); - assertEquals(expectedTopic, topicInfo.getOriginalTopic()); - assertNull(topicInfo.getTopicType()); - assertNull(topicInfo.getCategory()); - assertNull(topicInfo.getProductKey()); - assertNull(topicInfo.getDeviceId()); - assertFalse(topicInfo.isUpstream()); - assertFalse(topicInfo.isValid()); - assertNull(topicInfo.getDeviceUniqueId()); - } - - /** 验证主题配置 */ - public static void validateTopicConfig( - MQTTProductConfig.MqttTopicConfig config, - String expectedPattern, - int expectedQos, - boolean expectedEnabled) { - assertNotNull(config); - assertEquals(expectedPattern, config.getTopicPattern()); - assertEquals(expectedQos, config.getQos()); - assertEquals(expectedEnabled, config.isEnabled()); - } -} diff --git a/cn-universal-protocol/cn-universal-mqtt-protocol/src/test/java/cn/protocol/plugins/mqtt/topic/MqttTopicPatternTest.java b/cn-universal-protocol/cn-universal-mqtt-protocol/src/test/java/cn/protocol/plugins/mqtt/topic/MqttTopicPatternTest.java deleted file mode 100644 index a40c495cc221ee7c8d48130f5485958c7ffa9e32..0000000000000000000000000000000000000000 --- a/cn-universal-protocol/cn-universal-mqtt-protocol/src/test/java/cn/protocol/plugins/mqtt/topic/MqttTopicPatternTest.java +++ /dev/null @@ -1,115 +0,0 @@ -package cn.universal.protocol.mqtt.topic; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; - -import cn.universal.mqtt.protocol.config.MqttConstant; -import org.junit.jupiter.api.Test; - -/** MQTT主题模式测试 */ -public class MqttTopicPatternTest { - - @Test - public void testThingModelPatterns() { - // 测试物模型属性上报模式 - assertTrue( - MqttConstant.THING_PROPERTY_UP_PATTERN - .matcher("$thing/up/property/product123/device456") - .matches()); - assertTrue( - MqttConstant.THING_PROPERTY_UP_PATTERN - .matcher("$qiantang/up/property/product123/device456") - .matches()); - assertTrue( - MqttConstant.THING_PROPERTY_UP_PATTERN - .matcher("$custom/up/property/product123/device456") - .matches()); - - // 测试物模型事件上报模式 - assertTrue( - MqttConstant.THING_EVENT_UP_PATTERN - .matcher("$thing/up/event/product123/device456") - .matches()); - assertTrue( - MqttConstant.THING_EVENT_UP_PATTERN - .matcher("$qiantang/up/event/product123/device456") - .matches()); - assertTrue( - MqttConstant.THING_EVENT_UP_PATTERN - .matcher("$custom/up/event/product123/device456") - .matches()); - - // 测试物模型下行模式 - assertTrue( - MqttConstant.THING_DOWN_PATTERN.matcher("$thing/down/product123/device456").matches()); - assertTrue( - MqttConstant.THING_DOWN_PATTERN.matcher("$qiantang/down/product123/device456").matches()); - assertTrue( - MqttConstant.THING_DOWN_PATTERN.matcher("$custom/down/product123/device456").matches()); - } - - @Test - public void testPassthroughPatterns() { - // 测试透传上行模式 - assertTrue( - MqttConstant.PASSTHROUGH_UP_PATTERN.matcher("$thing/up/product123/device456").matches()); - assertTrue( - MqttConstant.PASSTHROUGH_UP_PATTERN.matcher("$qiantang/up/product123/device456").matches()); - assertTrue( - MqttConstant.PASSTHROUGH_UP_PATTERN.matcher("$custom/up/product123/device456").matches()); - - // 测试透传下行模式 - assertTrue( - MqttConstant.PASSTHROUGH_DOWN_PATTERN - .matcher("$thing/down/product123/device456") - .matches()); - assertTrue( - MqttConstant.PASSTHROUGH_DOWN_PATTERN - .matcher("$qiantang/down/product123/device456") - .matches()); - assertTrue( - MqttConstant.PASSTHROUGH_DOWN_PATTERN - .matcher("$custom/down/product123/device456") - .matches()); - } - - @Test - public void testSystemLevelPatterns() { - // 测试系统级OTA上报模式 - assertTrue( - MqttConstant.OTA_REPORT_PATTERN.matcher("$ota/report/product123/device456").matches()); - - // 测试系统级OTA更新模式 - assertTrue( - MqttConstant.OTA_UPDATE_PATTERN.matcher("$ota/update/product123/device456").matches()); - } - - @Test - public void testInvalidPatterns() { - // 测试无效的物模型模式 - assertFalse( - MqttConstant.THING_PROPERTY_UP_PATTERN - .matcher("$thing/up/invalid/product123/device456") - .matches()); - assertFalse(MqttConstant.THING_PROPERTY_UP_PATTERN.matcher("$thing/up/property/").matches()); - assertFalse( - MqttConstant.THING_PROPERTY_UP_PATTERN - .matcher("invalid/up/property/product123/device456") - .matches()); - - // 测试无效的透传模式 - assertFalse( - MqttConstant.PASSTHROUGH_UP_PATTERN - .matcher("$thing/invalid/product123/device456") - .matches()); - assertFalse(MqttConstant.PASSTHROUGH_UP_PATTERN.matcher("$thing/up/").matches()); - assertFalse( - MqttConstant.PASSTHROUGH_UP_PATTERN.matcher("invalid/up/product123/device456").matches()); - - // 测试无效的系统级模式 - assertFalse( - MqttConstant.OTA_REPORT_PATTERN.matcher("$thing/report/product123/device456").matches()); - assertFalse( - MqttConstant.OTA_REPORT_PATTERN.matcher("$ota/invalid/product123/device456").matches()); - } -} diff --git a/cn-universal-protocol/cn-universal-mqtt-protocol/src/test/java/cn/protocol/plugins/mqtt/topic/SimpleTopicTest.java b/cn-universal-protocol/cn-universal-mqtt-protocol/src/test/java/cn/protocol/plugins/mqtt/topic/SimpleTopicTest.java deleted file mode 100644 index 7871828e609af9ee6f3c648ff3a0ad3b7d1ca166..0000000000000000000000000000000000000000 --- a/cn-universal-protocol/cn-universal-mqtt-protocol/src/test/java/cn/protocol/plugins/mqtt/topic/SimpleTopicTest.java +++ /dev/null @@ -1,75 +0,0 @@ -package cn.universal.protocol.mqtt.topic; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -import cn.universal.mqtt.protocol.topic.MQTTTopicManager; -import cn.universal.mqtt.protocol.topic.MQTTTopicType; -import org.junit.jupiter.api.Test; - -/** 简单的主题解析测试 */ -public class SimpleTopicTest { - - @Test - public void testDynamicPrefixTopicParsing() { - MQTTTopicManager manager = new MQTTTopicManager(); - - // 测试动态前缀物模型属性上报 - String topic = "$qiantang/up/property/product123/device456"; - MQTTTopicType topicType = manager.parseTopicType(topic); - - System.out.println("Topic: " + topic); - System.out.println("Parsed Type: " + topicType); - - assertNotNull(topicType, "动态前缀主题应该被正确解析"); - assertEquals(MQTTTopicType.THING_PROPERTY_UP, topicType, "应该解析为物模型属性上报类型"); - - // 测试动态前缀透传上行 - String passthroughTopic = "$qiantang/up/product123/device456"; - MQTTTopicType passthroughType = manager.parseTopicType(passthroughTopic); - - System.out.println("Passthrough Topic: " + passthroughTopic); - System.out.println("Parsed Type: " + passthroughType); - - assertNotNull(passthroughType, "动态前缀透传主题应该被正确解析"); - assertEquals(MQTTTopicType.PASSTHROUGH_UP, passthroughType, "应该解析为透传上行类型"); - } - - @Test - public void testFixedPrefixTopicParsing() { - MQTTTopicManager manager = new MQTTTopicManager(); - - // 测试固定前缀物模型属性上报 - String topic = "$thing/up/property/product123/device456"; - MQTTTopicType topicType = manager.parseTopicType(topic); - - assertNotNull(topicType, "固定前缀主题应该被正确解析"); - assertEquals(MQTTTopicType.THING_PROPERTY_UP, topicType, "应该解析为物模型属性上报类型"); - - // 测试固定前缀透传上行 - String passthroughTopic = "$thing/up/product123/device456"; - MQTTTopicType passthroughType = manager.parseTopicType(passthroughTopic); - - assertNotNull(passthroughType, "固定前缀透传主题应该被正确解析"); - assertEquals(MQTTTopicType.PASSTHROUGH_UP, passthroughType, "应该解析为透传上行类型"); - } - - @Test - public void testSystemLevelTopicParsing() { - MQTTTopicManager manager = new MQTTTopicManager(); - - // 测试系统级OTA上报 - String otaReportTopic = "$ota/report/product123/device456"; - MQTTTopicType otaReportType = manager.parseTopicType(otaReportTopic); - - assertNotNull(otaReportType, "OTA上报主题应该被正确解析"); - assertEquals(MQTTTopicType.OTA_REPORT, otaReportType, "应该解析为OTA上报类型"); - - // 测试系统级OTA更新 - String otaUpdateTopic = "$ota/update/product123/device456"; - MQTTTopicType otaUpdateType = manager.parseTopicType(otaUpdateTopic); - - assertNotNull(otaUpdateType, "OTA更新主题应该被正确解析"); - assertEquals(MQTTTopicType.OTA_UPDATE, otaUpdateType, "应该解析为OTA更新类型"); - } -} diff --git a/cn-universal-protocol/pom.xml b/cn-universal-protocol/pom.xml index 5f6f9bd1b8b750e7b2fedfec683da76cdcb708b1..a05b3633d1495124215425e0e79b80444c693d4f 100644 --- a/cn-universal-protocol/pom.xml +++ b/cn-universal-protocol/pom.xml @@ -10,11 +10,10 @@ cn.universal.iot 1.5-SNAPSHOT - 扩展协议都在这里 + - - cn-universal-http-protocol - + cn-universal-mqtt-protocol + cn-universal-http-protocol \ No newline at end of file diff --git a/cn-universal-rule/pom.xml b/cn-universal-rule/pom.xml index 7dc6d06d9d43ec55443331009694e3cf2d307f58..1e105a112e27ca3589d61afe005e650d60341da5 100644 --- a/cn-universal-rule/pom.xml +++ b/cn-universal-rule/pom.xml @@ -60,23 +60,25 @@ ${project.version} compile - - - - - - - - - - - - - - - - + + cn.universal.iot + cn-universal-notice + ${project.version} + compile + + + + + org.springframework.boot + spring-boot-starter-test + test + + + org.mockito + mockito-junit-jupiter + test + diff --git a/cn-universal-rule/rulego.md b/cn-universal-rule/rulego.md new file mode 100644 index 0000000000000000000000000000000000000000..c7534c7b8ab357c0dd0cb755a137c1dba92f4719 --- /dev/null +++ b/cn-universal-rule/rulego.md @@ -0,0 +1,15 @@ +1833 curl -sSL https://raw.githubusercontent.com/voidint/g/master/install.sh | bash +1834 ls +1835 g install 1.24.1 --mirror=https://golang.google.cn/dl/ +1836 source "/home/liulihai/.g/env" +1837 g install 1.24.1 --mirror=https://golang.google.cn/dl/ +1838 g use 1.24.1 # 切换版本 +1839 ll +1840 go build -tags "with_extend,with_ai,with_ci,with_iot,with_etl,use_fasthttp" . +1841 go env -w GOPROXY=https://goproxy.cn,direct +1842 go env -w GOSUMDB=off +1843 go env | grep -E "GOPROXY|GOSUMDB" +1844 go build -tags "with_extend,with_ai,with_ci,with_iot,with_etl,use_fasthttp" . +1845 nohup ./server -c="./config.conf" >> console.log & +1846 ls +1847 nohup ./server -c="./config.conf" >> console.log & \ No newline at end of file diff --git a/cn-universal-rule/src/main/java/cn/universal/rule/rulego/client/RulegoApiClient.java b/cn-universal-rule/src/main/java/cn/universal/rule/rulego/client/RulegoApiClient.java index d942822cc40485c96ff7d7bba05b3b21923a10c5..6542c0ff7aafd5e8533c1194d3c65cc0271d4a0e 100644 --- a/cn-universal-rule/src/main/java/cn/universal/rule/rulego/client/RulegoApiClient.java +++ b/cn-universal-rule/src/main/java/cn/universal/rule/rulego/client/RulegoApiClient.java @@ -33,7 +33,7 @@ import org.springframework.stereotype.Component; * rulego API客户端 - 基于Hutool实现 * * @author Aleo - * @since 2025/09/01 + * @since 2025/01/15 */ @Slf4j @Component @@ -335,7 +335,7 @@ public class RulegoApiClient { // 创建RulegoChainInfo对象 var chainInfo = - RulegoChainInfo.builder() + cn.universal.rule.rulego.model.RulegoChainInfo.builder() .id(ruleChainObj.getStr("id")) .name(ruleChainObj.getStr("name")) .root(ruleChainObj.getBool("root", false)) @@ -373,7 +373,7 @@ public class RulegoApiClient { log.debug("解析到items数组,长度: {}", items.size()); // 转换items为RulegoChainInfo列表 - var chainInfoList = new java.util.ArrayList(); + var chainInfoList = new java.util.ArrayList(); for (int i = 0; i < items.size(); i++) { var item = items.getJSONObject(i); @@ -383,7 +383,7 @@ public class RulegoApiClient { // 创建RulegoChainInfo对象 var chainInfo = - RulegoChainInfo.builder() + cn.universal.rule.rulego.model.RulegoChainInfo.builder() .id(ruleChain.getStr("id")) .name(ruleChain.getStr("name")) .root(ruleChain.getBool("root", false)) diff --git a/cn-universal-rule/src/main/java/cn/universal/rule/rulego/config/RulegoConfig.java b/cn-universal-rule/src/main/java/cn/universal/rule/rulego/config/RulegoConfig.java index 0330112627f2c7047e0107a21367adc4dde3dd86..02c333f0d1b9e3f0133adf3edbe269ef8b282999 100644 --- a/cn-universal-rule/src/main/java/cn/universal/rule/rulego/config/RulegoConfig.java +++ b/cn-universal-rule/src/main/java/cn/universal/rule/rulego/config/RulegoConfig.java @@ -20,7 +20,7 @@ import org.springframework.context.annotation.Configuration; * rulego配置类 * * @author Aleo - * @since 2025/09/01 + * @since 2025/01/15 */ @Data @Configuration diff --git a/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoApiResponse.java b/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoApiResponse.java index bca87bc94790512f70e1657fb4f3bb6d6f7f7bfd..3be8726c973b1eccc8863317fc1e38f864876ce4 100644 --- a/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoApiResponse.java +++ b/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoApiResponse.java @@ -22,7 +22,7 @@ import lombok.NoArgsConstructor; * * @param 数据类型泛型 * @author Aleo - * @since 2025/09/01 + * @since 2025/01/15 */ @Data @Builder diff --git a/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoChainInfo.java b/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoChainInfo.java index 0e4768af39e62656052317ea3b3c84eba792e2b6..a410f36246a99ebf4903c3c0a3f62c1cf035ac67 100644 --- a/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoChainInfo.java +++ b/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoChainInfo.java @@ -21,7 +21,7 @@ import lombok.NoArgsConstructor; * rulego规则链信息 * * @author Aleo - * @since 2025/09/01 + * @since 2025/01/15 */ @Data @AllArgsConstructor diff --git a/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoChainListResponse.java b/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoChainListResponse.java index 1c3354aef9043baa29d8069e22af2c190bb48531..ba03900986b7f2f47755bddb11a00845c49f8e53 100644 --- a/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoChainListResponse.java +++ b/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoChainListResponse.java @@ -22,7 +22,7 @@ import lombok.NoArgsConstructor; * rulego规则链列表响应 * * @author Aleo - * @since 2025/09/01 + * @since 2025/01/15 */ @Data @AllArgsConstructor diff --git a/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoChainResponse.java b/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoChainResponse.java index 226be1c4a181a25024b4aee840de200da3f7cf08..2c86bfb920688cf0bdab0f44d261c35456b706ef 100644 --- a/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoChainResponse.java +++ b/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoChainResponse.java @@ -21,7 +21,7 @@ import lombok.NoArgsConstructor; * rulego规则链响应 * * @author Aleo - * @since 2025/09/01 + * @since 2025/01/15 */ @Data @AllArgsConstructor diff --git a/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoSaveRequest.java b/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoSaveRequest.java index b4252d9ab956830122ed398b13ef939d33aafc89..a7b443c73961be7fd3e73821f587463200a9ca76 100644 --- a/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoSaveRequest.java +++ b/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoSaveRequest.java @@ -21,7 +21,7 @@ import lombok.NoArgsConstructor; * rulego保存请求 * * @author Aleo - * @since 2025/09/01 + * @since 2025/01/15 */ @Data @AllArgsConstructor diff --git a/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoSuccessResponse.java b/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoSuccessResponse.java index c34fb210572ddfbfc47cdb334befae3de37a5740..a514f2f8cbfb9366639a407ee77e6144d67a8a32 100644 --- a/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoSuccessResponse.java +++ b/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoSuccessResponse.java @@ -21,7 +21,7 @@ import lombok.NoArgsConstructor; * rulego简单成功响应 * * @author Aleo - * @since 2025/09/01 + * @since 2025/01/15 */ @Data @AllArgsConstructor diff --git a/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoTriggerRequest.java b/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoTriggerRequest.java index 61c5395425b28350650f2ea52f4ac1baa96920ff..ede62e5011a3d3506b6ad0898daf1bb38fccb48f 100644 --- a/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoTriggerRequest.java +++ b/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoTriggerRequest.java @@ -21,7 +21,7 @@ import lombok.NoArgsConstructor; * rulego触发请求 * * @author Aleo - * @since 2025/09/01 + * @since 2025/01/15 */ @Data @AllArgsConstructor diff --git a/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoTriggerResponse.java b/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoTriggerResponse.java index 5422062cd4450b7880757fdf00c4658992b9793a..96c39f6ab8c0cd3381f895af789faf03c1ccbac4 100644 --- a/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoTriggerResponse.java +++ b/cn-universal-rule/src/main/java/cn/universal/rule/rulego/model/RulegoTriggerResponse.java @@ -21,7 +21,7 @@ import lombok.NoArgsConstructor; * rulego触发响应 * * @author Aleo - * @since 2025/09/01 + * @since 2025/01/15 */ @Data @AllArgsConstructor diff --git a/cn-universal-rule/src/main/java/cn/universal/rule/rulego/service/RulegoChainService.java b/cn-universal-rule/src/main/java/cn/universal/rule/rulego/service/RulegoChainService.java index 96000ac670e51832f83b881137396bdc70b73daa..7f8ed536fd14728794af9cb542c6bc6bcefde003 100644 --- a/cn-universal-rule/src/main/java/cn/universal/rule/rulego/service/RulegoChainService.java +++ b/cn-universal-rule/src/main/java/cn/universal/rule/rulego/service/RulegoChainService.java @@ -35,17 +35,15 @@ import org.springframework.transaction.annotation.Transactional; * rulego规则链服务 * * @author Aleo - * @since 2025/09/01 + * @since 2025/01/15 */ @Service @Slf4j public class RulegoChainService { - @Resource - private RulegoChainMapper rulegoChainMapper; + @Resource private RulegoChainMapper rulegoChainMapper; - @Resource - private RulegoApiClient rulegoApiClient; + @Resource private RulegoApiClient rulegoApiClient; /** * 查询规则链列表 @@ -60,7 +58,7 @@ public class RulegoChainService { /** * 根据ID查询规则链详情 * - * @param id 规则链ID + * @param id 规则链ID * @param creatorId 创建人ID * @return 规则链详情 */ @@ -105,8 +103,8 @@ public class RulegoChainService { saveRequest.setDescription(bo.getDescription()); try { - RulegoApiResponse response = rulegoApiClient.saveChainInfo( - saveRequest); + RulegoApiResponse response = + rulegoApiClient.saveChainInfo(saveRequest); if (response != null && !response.getSuccess()) { throw new IoTException("保存规则链基础信息失败: " + response.getMessage()); } @@ -169,7 +167,7 @@ public class RulegoChainService { /** * 删除规则链 * - * @param id 规则链ID + * @param id 规则链ID * @param creatorId 创建人ID * @return 是否成功 */ @@ -182,8 +180,8 @@ public class RulegoChainService { // 调用rulego API删除规则链 try { - RulegoApiResponse response = rulegoApiClient.deleteChain( - rulegoChain.getRulegoId()); + RulegoApiResponse response = + rulegoApiClient.deleteChain(rulegoChain.getRulegoId()); if (response != null && !response.getSuccess()) { log.warn("调用rulego API删除规则链失败: {}", response.getMessage()); } @@ -204,7 +202,7 @@ public class RulegoChainService { /** * 部署规则链 * - * @param id 规则链ID + * @param id 规则链ID * @param creatorId 创建人ID * @return 是否成功 */ @@ -217,8 +215,8 @@ public class RulegoChainService { // 调用rulego API部署规则链 try { - RulegoApiResponse response = rulegoApiClient.deployChain( - rulegoChain.getRulegoId()); + RulegoApiResponse response = + rulegoApiClient.deployChain(rulegoChain.getRulegoId()); if (response != null && !response.getSuccess()) { throw new IoTException("部署规则链失败: " + response.getMessage()); } @@ -240,7 +238,7 @@ public class RulegoChainService { /** * 停止规则链 * - * @param id 规则链ID + * @param id 规则链ID * @param creatorId 创建人ID * @return 是否成功 */ @@ -253,8 +251,8 @@ public class RulegoChainService { // 调用rulego API停止规则链 try { - RulegoApiResponse response = rulegoApiClient.stopChain( - rulegoChain.getRulegoId()); + RulegoApiResponse response = + rulegoApiClient.stopChain(rulegoChain.getRulegoId()); if (response != null && !response.getSuccess()) { throw new IoTException("停止规则链失败: " + response.getMessage()); } @@ -285,8 +283,7 @@ public class RulegoChainService { // 调用rulego API获取规则链详情 RulegoApiResponse response = rulegoApiClient.getChainDetail(rulegoId); if (response == null || !response.getSuccess() || response.getData() == null) { - throw new IoTException( - "规则链详情为空: " + (response != null ? response.getMessage() : "响应为空")); + throw new IoTException("规则链详情为空: " + (response != null ? response.getMessage() : "响应为空")); } RulegoChainInfo chainInfo = response.getData(); diff --git a/cn-universal-rule/src/main/java/cn/universal/rule/rulego/task/RulegoSyncTask.java b/cn-universal-rule/src/main/java/cn/universal/rule/rulego/task/RulegoSyncTask.java index a9f7e73c0f672f4b0c5195ed9a43d62b2ec8c680..295c3da2aadf8390d8c41c9e535ed9b11f260344 100644 --- a/cn-universal-rule/src/main/java/cn/universal/rule/rulego/task/RulegoSyncTask.java +++ b/cn-universal-rule/src/main/java/cn/universal/rule/rulego/task/RulegoSyncTask.java @@ -27,7 +27,7 @@ import tk.mybatis.mapper.entity.Example; * rulego规则链同步任务 * * @author Aleo - * @since 2025/09/01 + * @since 2025/01/15 */ @Component @Slf4j diff --git a/cn-universal-rule/src/main/java/cn/universal/rule/scene/deviceDown/SenceIoTDeviceDownService.java b/cn-universal-rule/src/main/java/cn/universal/rule/scene/deviceDown/SenceIoTDeviceDownService.java index bf5aa7e450221b1eb13b14adb9cc0a45bbe8b24e..cb7ef3f89dec191edbf12d3e66cfdbaf85d946cf 100644 --- a/cn-universal-rule/src/main/java/cn/universal/rule/scene/deviceDown/SenceIoTDeviceDownService.java +++ b/cn-universal-rule/src/main/java/cn/universal/rule/scene/deviceDown/SenceIoTDeviceDownService.java @@ -19,6 +19,9 @@ import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import cn.universal.common.domain.R; import cn.universal.core.service.IoTDownlFactory; +import cn.universal.manager.notice.model.NoticeSendRequest; +import cn.universal.manager.notice.service.NoticeService; +import cn.universal.manager.notice.service.channel.NoticeSendResult; import cn.universal.persistence.entity.IoTDevice; import cn.universal.persistence.entity.IoTDeviceTags; import cn.universal.persistence.entity.IoTProduct; @@ -48,6 +51,7 @@ public class SenceIoTDeviceDownService { @Resource private IoTDeviceMapper ioTDeviceMapper; @Resource private IoTProductMapper ioTProductMapper; + @Resource private NoticeService noticeService; public RunStatus matchSuccess(List exeRunContexts) { if (CollectionUtil.isEmpty(exeRunContexts)) { @@ -102,6 +106,46 @@ public class SenceIoTDeviceDownService { log.error("场景联动指令下发失败,设备编号:{}", exec.getDeviceId()); } runContexts.add(exeRunContextBuilder.build()); + } else if (TriggerBO.ExecTriggerType.notice.name().equals(exec.getTrigger())) { + exeRunContextBuilder.target(exec.getNoticeTemplateId()); + exeRunContextBuilder.targetName(exec.getNoticeTemplateName()); + // 组装通知参数 + NoticeSendRequest req = new NoticeSendRequest(); + if (exec.getNoticeTemplateId() != null) { + req.setTemplateId(Long.valueOf(exec.getNoticeTemplateId())); + } + // 组装params + HashMap params = new HashMap<>(); + params.put("sceneName", sceneLinkage.getSceneName()); + params.put("sceneId", sceneLinkage.getId()); + params.put("execTime", LocalDateTime.now().toString()); + params.put("trigger", sceneLinkage.getTriggerCondition()); + params.put("action", exec); + params.putAll(message); + req.setParams(params); + try { + NoticeSendResult rs = noticeService.sendR(req); + log.info("notice推送结果={}", JSONUtil.toJsonStr(rs)); + if (rs != null && rs.isSuccess()) { + exeRunContextBuilder.success(true); + exeRunContextBuilder.result( + Map.of( + "receivers", + rs.getReceivers() == null ? "" : rs.getReceivers(), + "content", + rs.getContent() == null ? "" : rs.getContent())); + } else { + exeRunContextBuilder.success(false); + exeRunContextBuilder.result(rs != null ? rs.getErrorMessage() : ""); + } + log.info( + "场景联动触发通知成功, 场景id:{}, 模板id:{}", sceneLinkage.getId(), exec.getNoticeTemplateId()); + } catch (Exception e) { + log.error( + "场景联动触发通知失败, 场景id:{}, 模板id:{}", sceneLinkage.getId(), exec.getNoticeTemplateId(), e); + exeRunContextBuilder.success(false); + } + runContexts.add(exeRunContextBuilder.build()); } } return runContexts; @@ -110,11 +154,11 @@ public class SenceIoTDeviceDownService { // 拼装功能下行指令 private String getDownRequest(TriggerBO o, String unionId) { JSONObject downRequest = new JSONObject(); + // 此处楼等,参数没有带productKey IoTDevice ioTDevice = ioTDeviceMapper.getOneByDeviceId( IoTDeviceQuery.builder().deviceId(o.getDeviceId()).build()); if (ioTDevice == null) { - // 因设备被删除,场景联动的配置未修改 return null; } String productKey = ioTDevice.getProductKey(); @@ -143,12 +187,10 @@ public class SenceIoTDeviceDownService { String deviceId = jsonObject.getStr("deviceId"); String productKey = jsonObject.getStr("productKey"); String appUnionId = jsonObject.getStr("appUnionId"); - IoTDevice ioTDeviceBo = - ioTDeviceMapper.getOneByDeviceId( - IoTDeviceQuery.builder().productKey(productKey).deviceId(deviceId).build()); + IoTDevice ioTDeviceBo = ioTDeviceMapper.selectIoTDevice(productKey, deviceId); if (!ioTDeviceBo.getCreatorId().equals(appUnionId)) { - log.error("用户{}尝试访问不属于自己的设备,设备ID:{}", appUnionId, deviceId); - return DownResult.builder().success(false).downResult("您没有权限操作此设备。").build(); + log.error("数据不属于你,用户{},设备ID:{}", appUnionId, deviceId); + return DownResult.builder().success(false).downResult("无权限操作设备。").build(); } IoTProduct ioTProduct = ioTProductMapper.getProductByProductKey(productKey); IoTDeviceTags devTag = new IoTDeviceTags(); diff --git a/cn-universal-rule/src/main/java/cn/universal/rule/service/RuleService.java b/cn-universal-rule/src/main/java/cn/universal/rule/service/RuleService.java index fa5c07d7b8d2f19a9261a841765def0b7e4b734f..c6e57b7bd25b4966f6a19b59d76d8bcf74d7645a 100644 --- a/cn-universal-rule/src/main/java/cn/universal/rule/service/RuleService.java +++ b/cn-universal-rule/src/main/java/cn/universal/rule/service/RuleService.java @@ -88,7 +88,7 @@ public class RuleService { target -> { try { log.info( - "匹配到规则引擎,调用转发,ruleId:{},deviceId={}", + "匹配到规则引擎,调用转发ruleId:{},deviceId={}", ruleModel.getId(), instance.getDeviceId()); ruleTransmitTemplate.transmit(result, target); diff --git a/cn-universal-rule/src/test/resources/application-test.properties b/cn-universal-rule/src/test/resources/application-test.properties new file mode 100644 index 0000000000000000000000000000000000000000..60a4c279beff4b2ddc94ef2d24149464f55b2661 --- /dev/null +++ b/cn-universal-rule/src/test/resources/application-test.properties @@ -0,0 +1,5 @@ +# 测试环境配置 +rulego.api.base-url=http://192.168.31.194:9090 +rulego.api.token=test-token +rulego.web.base-url=http://rule.192886.xyz:81/# +rulego.sync.enabled=false diff --git a/cn-universal-web/.dockerignore b/cn-universal-web/.dockerignore new file mode 100644 index 0000000000000000000000000000000000000000..33d91fd92ab50130b337b6ceb45023aa568ea7ad --- /dev/null +++ b/cn-universal-web/.dockerignore @@ -0,0 +1,34 @@ +# 排除源代码和开发文件 +src/ +pom.xml +target/classes/ +target/test-classes/ +target/maven-status/ +target/surefire-reports/ +target/coverage-reports/ + +# 排除 IDE 文件 +.idea/ +.vscode/ +*.iml +*.ipr +*.iws + +# 排除版本控制文件 +.git/ +.gitignore +.gitattributes + +# 排除日志文件 +*.log +logs/ + +# 排除临时文件 +*.tmp +*.temp +*.swp +*.swo + +# 排除配置文件 (使用 Docker 环境变量) +application-*.properties +!application-docker.properties diff --git a/cn-universal-web/Dockerfile b/cn-universal-web/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..55fa4bf63091e97197ba3bf931474f70f2771429 --- /dev/null +++ b/cn-universal-web/Dockerfile @@ -0,0 +1,30 @@ +# 使用 OpenJDK 21 作为基础镜像 +FROM openjdk:21 + +# 设置工作目录 +WORKDIR /app + +# 安装必要的工具 +RUN microdnf update -y && microdnf install -y \ + curl \ + && microdnf clean all + +# 创建应用用户 +RUN groupadd -r appuser && useradd -r -g appuser appuser + +# 复制应用文件 +COPY target/cn-universal-web/ ./ + +# 设置权限 +RUN chown -R appuser:appuser /app +USER appuser + +# 暴露端口 +EXPOSE 9092 + +# 健康检查 +HEALTHCHECK --interval=30s --timeout=3s --start-period=60s --retries=3 \ + CMD curl -f http://localhost:9092/actuator/health || exit 1 + +# 启动命令 +ENTRYPOINT ["java", "-jar", "cn-universal-web.jar"] diff --git a/cn-universal-web/Dockerfile.alpine b/cn-universal-web/Dockerfile.alpine new file mode 100644 index 0000000000000000000000000000000000000000..b61178cf3a84756c04d5a5470436b556cebba48d --- /dev/null +++ b/cn-universal-web/Dockerfile.alpine @@ -0,0 +1,29 @@ +# 使用 OpenJDK 21 Alpine 版本 (镜像更小) +FROM openjdk:21-alpine + +# 设置工作目录 +WORKDIR /app + +# 安装必要的工具 +RUN apk add --no-cache curl + +# 创建应用用户 +RUN addgroup -g 1001 -S appuser && \ + adduser -u 1001 -S appuser -G appuser + +# 复制应用文件 +COPY target/cn-universal-web/ ./ + +# 设置权限 +RUN chown -R appuser:appuser /app +USER appuser + +# 暴露端口 +EXPOSE 9092 + +# 健康检查 +HEALTHCHECK --interval=30s --timeout=3s --start-period=60s --retries=3 \ + CMD curl -f http://localhost:9092/actuator/health || exit 1 + +# 启动命令 +ENTRYPOINT ["java", "-jar", "cn-universal-web.jar"] diff --git a/cn-universal-web/Dockerfile.amazoncorretto b/cn-universal-web/Dockerfile.amazoncorretto new file mode 100644 index 0000000000000000000000000000000000000000..e225a94ab6a5edba757f60bbcc41d135fb791ea6 --- /dev/null +++ b/cn-universal-web/Dockerfile.amazoncorretto @@ -0,0 +1,28 @@ +# 使用 Amazon Corretto 21 (企业级支持) +FROM amazoncorretto:21 + +# 设置工作目录 +WORKDIR /app + +# 安装必要的工具 +RUN yum install -y curl && yum clean all + +# 创建应用用户 +RUN groupadd -r appuser && useradd -r -g appuser appuser + +# 复制应用文件 +COPY target/cn-universal-web/ ./ + +# 设置权限 +RUN chown -R appuser:appuser /app +USER appuser + +# 暴露端口 +EXPOSE 9092 + +# 健康检查 +HEALTHCHECK --interval=30s --timeout=3s --start-period=60s --retries=3 \ + CMD curl -f http://localhost:9092/actuator/health || exit 1 + +# 启动命令 +ENTRYPOINT ["java", "-jar", "cn-universal-web.jar"] diff --git a/cn-universal-web/emqx-auth-config.yaml b/cn-universal-web/emqx-auth-config.yaml new file mode 100644 index 0000000000000000000000000000000000000000..bd305072a6b0b9921df9af5e122a1f84eea7770f --- /dev/null +++ b/cn-universal-web/emqx-auth-config.yaml @@ -0,0 +1,45 @@ +# EMQX HTTP认证配置文件示例 +# 将此配置添加到EMQX的配置文件中 + +# 启用HTTP认证 +auth.http.enable = true + + # HTTP认证服务地址 + # 替换为你的实际服务器地址和端口 +auth.http.url = "http://your-server:8080/emqx/sys/auth" + + # HTTP认证方法 +auth.http.method = "POST" + + # HTTP认证请求头 +auth.http.headers.content_type = "application/json" + + # 认证超时时间 +auth.http.timeout = 5s + + # 认证缓存时间 +auth.http.cache_time = 5m + + # 认证失败时的行为 +auth.http.failure_action = "deny" + + # 启用认证缓存 +auth.http.cache_enable = true + + # 认证请求重试次数 +auth.http.retry_count = 3 + + # 认证请求重试间隔 +auth.http.retry_interval = 1s + + # 启用TLS(如果使用HTTPS) + # auth.http.tls.enable = true + # auth.http.tls.verify = false + # auth.http.tls.server_name_indication = "your-server.com" + + # 日志配置 +log.level = info +log.file = "emqx.log" + + # 认证插件优先级 +auth.http.order = 1 diff --git a/cn-universal-web/pom.xml b/cn-universal-web/pom.xml index 5fe76b34bbfb73a0c5b6fb557f8eaa527f9a3ac3..14585991aed631a34984c425751d099347d1fe45 100644 --- a/cn-universal-web/pom.xml +++ b/cn-universal-web/pom.xml @@ -168,6 +168,7 @@ cn-universal-mqtt-protocol ${project.version} + cn.universal.iot cn-universal-http-protocol @@ -462,6 +463,15 @@ true + + prod + + prod + + + false + + test @@ -481,6 +491,23 @@ false - + + test2 + + test2 + + + false + + + + huo + + huo + + + false + + \ No newline at end of file diff --git a/cn-universal-web/src/main/java/cn/universal/monitor/CacheMonitorController.java b/cn-universal-web/src/main/java/cn/universal/monitor/CacheMonitorController.java deleted file mode 100644 index 47d897429cc99bfe526d81cce5253132f00b1425..0000000000000000000000000000000000000000 --- a/cn-universal-web/src/main/java/cn/universal/monitor/CacheMonitorController.java +++ /dev/null @@ -1,198 +0,0 @@ -/* - * - * Copyright (c) 2025, IoT-Universal. All Rights Reserved. - * - * @Description: 本文件由 Aleo 开发并拥有版权,未经授权严禁擅自商用、复制或传播。 - * @Author: Aleo - * @Email: wo8335224@gmail.com - * @Wechat: outlookFil - * - * - */ - -package cn.universal.monitor; - -import cn.universal.cache.manager.MultiLevelCacheManager; -import cn.universal.cache.statistics.CacheStatistics; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.cache.Cache; -import org.springframework.cache.CacheManager; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * 缓存监控控制器 提供缓存状态查询、清理等功能 - * - * @version 1.0 @Author Aleo - * @since 2025/1/20 - */ -@Slf4j -@RestController -@RequestMapping("/monitor/cache") -@RequiredArgsConstructor -public class CacheMonitorController { - - private final CacheManager cacheManager; - private final ThreadMonitor threadMonitor; - - /** 获取缓存统计信息 */ - @GetMapping("/stats") - public Map getCacheStats() { - Map result = new HashMap<>(); - - try { - if (cacheManager instanceof MultiLevelCacheManager) { - MultiLevelCacheManager mlCacheManager = (MultiLevelCacheManager) cacheManager; - Map stats = mlCacheManager.getCacheStatistics(); - - Map cacheStats = new HashMap<>(); - for (Map.Entry entry : stats.entrySet()) { - CacheStatistics stat = entry.getValue(); - Map statMap = new HashMap<>(); - statMap.put("l1Hits", stat.getL1Hits()); - statMap.put("l1Misses", stat.getL1Misses()); - statMap.put("l2Hits", stat.getL2Hits()); - statMap.put("l2Misses", stat.getL2Misses()); - statMap.put("l1HitRate", stat.getL1HitRate()); - statMap.put("l2HitRate", stat.getL2HitRate()); - statMap.put("totalHits", stat.getTotalHits()); - statMap.put("totalMisses", stat.getTotalMisses()); - statMap.put("overallHitRate", stat.getOverallHitRate()); - cacheStats.put(entry.getKey(), statMap); - } - result.put("multiLevelCacheStats", cacheStats); - } - - // 获取线程统计 - ThreadMonitor.ThreadStats threadStats = threadMonitor.getThreadStats(); - Map threadInfo = new HashMap<>(); - threadInfo.put("totalThreads", threadStats.getTotalThreads()); - threadInfo.put("daemonThreads", threadStats.getDaemonThreads()); - threadInfo.put("peakThreads", threadStats.getPeakThreads()); - threadInfo.put("hasDeadlock", threadStats.isHasDeadlock()); - result.put("threadStats", threadInfo); - - result.put("success", true); - - } catch (Exception e) { - log.error("获取缓存统计信息失败", e); - result.put("success", false); - result.put("error", e.getMessage()); - } - - return result; - } - - /** 清理指定缓存 */ - @PostMapping("/clear/{cacheName}") - public Map clearCache(@PathVariable String cacheName) { - Map result = new HashMap<>(); - - try { - Cache cache = cacheManager.getCache(cacheName); - if (cache != null) { - cache.clear(); - log.info("缓存 {} 已清理", cacheName); - result.put("success", true); - result.put("message", "缓存 " + cacheName + " 已清理"); - } else { - result.put("success", false); - result.put("error", "缓存 " + cacheName + " 不存在"); - } - } catch (Exception e) { - log.error("清理缓存 {} 失败", cacheName, e); - result.put("success", false); - result.put("error", e.getMessage()); - } - - return result; - } - - /** 清理所有缓存 */ - @PostMapping("/clear-all") - public Map clearAllCaches() { - Map result = new HashMap<>(); - - try { - if (cacheManager instanceof MultiLevelCacheManager) { - MultiLevelCacheManager mlCacheManager = (MultiLevelCacheManager) cacheManager; - mlCacheManager.clearAll(); - log.info("所有多级缓存已清理"); - result.put("success", true); - result.put("message", "所有多级缓存已清理"); - } else { - // 清理所有已知缓存 - final Collection cacheNames = cacheManager.getCacheNames(); - for (String cacheName : cacheNames) { - Cache cache = cacheManager.getCache(cacheName); - if (cache != null) { - cache.clear(); - } - } - log.info("所有缓存已清理"); - result.put("success", true); - result.put("message", "所有缓存已清理"); - } - } catch (Exception e) { - log.error("清理所有缓存失败", e); - result.put("success", false); - result.put("error", e.getMessage()); - } - - return result; - } - - /** 获取线程转储 */ - @GetMapping("/thread-dump") - public Map getThreadDump() { - Map result = new HashMap<>(); - - try { - String threadDump = threadMonitor.getThreadDump(); - result.put("success", true); - result.put("threadDump", threadDump); - } catch (Exception e) { - log.error("获取线程转储失败", e); - result.put("success", false); - result.put("error", e.getMessage()); - } - - return result; - } - - /** 检查系统健康状态 */ - @GetMapping("/health") - public Map getHealthStatus() { - Map result = new HashMap<>(); - - try { - ThreadMonitor.ThreadStats threadStats = threadMonitor.getThreadStats(); - - Map health = new HashMap<>(); - health.put("threadCount", threadStats.getTotalThreads()); - health.put("hasDeadlock", threadStats.isHasDeadlock()); - health.put("status", threadStats.isHasDeadlock() ? "UNHEALTHY" : "HEALTHY"); - - // 检查缓存管理器状态 - health.put("cacheManagerType", cacheManager.getClass().getSimpleName()); - health.put("cacheCount", cacheManager.getCacheNames().size()); - - result.put("success", true); - result.put("health", health); - - } catch (Exception e) { - log.error("获取健康状态失败", e); - result.put("success", false); - result.put("error", e.getMessage()); - } - - return result; - } -} diff --git a/cn-universal-web/src/main/java/cn/universal/web/config/GlobalExceptionHandler.java b/cn-universal-web/src/main/java/cn/universal/web/config/GlobalExceptionHandler.java index b759a03f670bb5b1267b5abc45fef2058d7f4fc8..c54c9f591dc47c16e1da8b6c748077005b5ebd6b 100644 --- a/cn-universal-web/src/main/java/cn/universal/web/config/GlobalExceptionHandler.java +++ b/cn-universal-web/src/main/java/cn/universal/web/config/GlobalExceptionHandler.java @@ -16,6 +16,7 @@ import cn.hutool.core.exceptions.ExceptionUtil; import cn.hutool.json.JSONUtil; import cn.universal.common.domain.R; import cn.universal.common.exception.IoTException; +import cn.universal.common.utils.DingTalkUtil; import cn.universal.common.utils.ErrorUtil; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @@ -51,9 +52,7 @@ import org.springframework.web.servlet.NoHandlerFoundException; @RestControllerAdvice public class GlobalExceptionHandler { - /** - * 未知异常处理 - */ + /** 未知异常处理 */ @ExceptionHandler(value = Exception.class) @ResponseBody public R exceptionHandler(Exception e) { @@ -137,12 +136,11 @@ public class GlobalExceptionHandler { @ResponseStatus(HttpStatus.BAD_REQUEST) public R handleMysql(Exception e) { log.error("数据库异常,请及时处理={}", ErrorUtil.errorInfoToString(e)); + DingTalkUtil.send("数据库异常,请及时处理" + ExceptionUtil.getSimpleMessage(e)); return R.error("数据库异常,请联系管理员"); } - /** - * 处理认证异常 - */ + /** 处理认证异常 */ @ExceptionHandler(AuthenticationException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) public void handleAuthenticationException( @@ -165,9 +163,7 @@ public class GlobalExceptionHandler { response.getWriter().write(JSONUtil.toJsonStr(errorResponse)); } - /** - * 处理 OAuth2 认证异常 - */ + /** 处理 OAuth2 认证异常 */ @ExceptionHandler(OAuth2AuthenticationException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) public void handleOAuth2AuthenticationException( @@ -197,9 +193,7 @@ public class GlobalExceptionHandler { response.getWriter().write(JSONUtil.toJsonStr(errorResponse)); } - /** - * 获取错误信息 - */ + /** 获取错误信息 */ private String getErrorMessage(AuthenticationException exception) { if (exception instanceof BadCredentialsException) { return exception.getMessage(); diff --git a/cn-universal-web/src/main/java/cn/universal/web/config/intercepter/WebAppConfig.java b/cn-universal-web/src/main/java/cn/universal/web/config/intercepter/WebAppConfig.java index aa647f12fe6290939e330f14f726a7053ae5c168..313d916a8af2b354e4e34de87301a545fe35d337 100644 --- a/cn-universal-web/src/main/java/cn/universal/web/config/intercepter/WebAppConfig.java +++ b/cn-universal-web/src/main/java/cn/universal/web/config/intercepter/WebAppConfig.java @@ -29,6 +29,6 @@ public class WebAppConfig implements WebMvcConfigurer { registry.addInterceptor(new APILogPrintIntercepter()).addPathPatterns("/api/**"); registry .addInterceptor(IPWhitelistInterceptor) - .addPathPatterns("/iot/**", "/api/**", "/debug/**", "/test/**", "/emqx/**"); + .addPathPatterns("/iot/**", "/api/**", "/debug/**", "/test/**", "/emqx/**","/ct/aiot/**"); } } diff --git a/cn-universal-web/src/main/java/cn/universal/web/context/IotServiceImplFactory.java b/cn-universal-web/src/main/java/cn/universal/web/context/IotServiceImplFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..8a7b1d2d4595e3318a4f535238b366f3c9b012ef --- /dev/null +++ b/cn-universal-web/src/main/java/cn/universal/web/context/IotServiceImplFactory.java @@ -0,0 +1,59 @@ +/* + * + * Copyright (c) 2025, IoT-Universal. All Rights Reserved. + * + * @Description: 本文件由 Aleo 开发并拥有版权,未经授权严禁擅自商用、复制或传播。 + * @Author: Aleo + * @Email: wo8335224@gmail.com + * @Wechat: outlookFil + * + * + */ + +package cn.universal.web.context; // package cn.universal.context; +// +// import cn.universal.core.third.IDown; +// import cn.universal.core.third.IUP; +// import java.util.HashMap; +// import java.util.Map; +// import lombok.extern.slf4j.Slf4j; +// import org.springframework.beans.BeansException; +// import org.springframework.context.ApplicationContext; +// import org.springframework.context.ApplicationContextAware; +// import org.springframework.stereotype.Component; +// +/// ** +// * 多实现路由 +// * +// * @Author Aleo +// * @version 1.0 +// * @since 2025/8/12 19:11 +// */ +// @Component +// @Slf4j +// public class IoTDownlFactory implements ApplicationContextAware { +// +// private static Map iDownMap = new HashMap<>(); +// private static Map iupMap = new HashMap<>(); +// +// @Override +// public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { +// //处理下行 +// Map downMap = applicationContext.getBeansOfType(IDown.class); +// downMap.forEach((key, value) -> iDownMap.put(value.name(), value)); +// log.info("init IDown third ,[{}]", iDownMap); +// //处理上行 +// Map upMap = applicationContext.getBeansOfType(IUP.class); +// upMap.forEach((key, value) -> iupMap.put(value.name(), value)); +// log.info("init IUP third ,[{}]", iupMap); +// +// } +// +// public static T getIDown(String code) { +// return (T) iDownMap.get(code); +// } +// +// public static T getIUP(String code) { +// return (T) iupMap.get(code); +// } +// } diff --git a/cn-universal-web/src/main/java/cn/universal/web/controller/VersionController.java b/cn-universal-web/src/main/java/cn/universal/web/controller/VersionController.java index dc6a5b2bda8566f39a60a46fa3d436c329288da1..98aa5c8fe9780cdf5db2e6bd1cb5ddd7542a26de 100644 --- a/cn-universal-web/src/main/java/cn/universal/web/controller/VersionController.java +++ b/cn-universal-web/src/main/java/cn/universal/web/controller/VersionController.java @@ -12,60 +12,423 @@ package cn.universal.web.controller; -import cn.universal.persistence.consistent.DeviceShardingRouter; +import cn.hutool.core.date.DateUtil; +import cn.hutool.extra.servlet.JakartaServletUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import cn.universal.admin.platform.service.BatchFunctionTask; +import cn.universal.common.monitor.NetworkMonitorSingleton; +import cn.universal.common.utils.DingTalkUtil; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.Base64; import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map; import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; import org.springframework.boot.logging.LogLevel; import org.springframework.boot.logging.logback.LogbackLoggingSystem; +import org.springframework.core.io.FileSystemResource; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -/** - * 程序版本 - */ +/** 程序版本 */ @RestController @RequestMapping("/test") -@Slf4j +@Slf4j(topic = "api_log") public class VersionController { @GetMapping("/v1/debug/log") public Object update(@RequestParam String name, @RequestParam LogLevel level) { - log.info("动态修改日志级别 name={} ,level={}", name, level.name()); - if (LogLevel.INFO.equals(level) || LogLevel.DEBUG.equals(level)) { + log.info("修改日志级别 name={} ,level={}", name, level.name()); + if (!(LogLevel.INFO.equals(level) || LogLevel.DEBUG.equals(level))) { + return Map.of("success", false, "message", "只允许DEBUG和INFO级别"); + } + try { loggingSystem.setLogLevel(name, level); - return "success"; + ch.qos.logback.classic.Logger verifyLogger = + (ch.qos.logback.classic.Logger) org.slf4j.LoggerFactory.getLogger(name); + Map result = new HashMap<>(); + result.put("success", true); + result.put("loggerName", name); + result.put("requestedLevel", level.name()); + result.put("actualLevel", verifyLogger.getLevel() != null ? verifyLogger.getLevel().toString() : "null"); + result.put("effectiveLevel", verifyLogger.getEffectiveLevel().toString()); + result.put("message", "日志级别修改成功"); + return result; + } catch (Exception e) { + log.error("修改日志级别失败: name={}, level={}", name, level, e); + return Map.of( + "success", false, + "loggerName", name, + "requestedLevel", level.name(), + "error", e.getMessage(), + "message", "日志级别修改失败" + ); } - return "只允许debug和info"; } + @GetMapping("/v1/debug/log/status") + public Object getLogStatus(@RequestParam String name) { + try { + ch.qos.logback.classic.Logger logger = + (ch.qos.logback.classic.Logger) org.slf4j.LoggerFactory.getLogger(name); + + Map result = new HashMap<>(); + result.put("loggerName", name); + result.put("currentLevel", logger.getLevel() != null ? logger.getLevel().toString() : "null"); + result.put("effectiveLevel", logger.getEffectiveLevel().toString()); + result.put("isAdditive", logger.isAdditive()); + result.put("appenderCount", logger.iteratorForAppenders().hasNext() ? "有appender" : "无appender"); + + return result; + } catch (Exception e) { + log.error("获取日志状态失败: name={}", name, e); + Map result = new HashMap<>(); + result.put("success", false); + result.put("loggerName", name); + result.put("error", e.getMessage()); + return result; + } + } - @Resource - private LogbackLoggingSystem loggingSystem; + @GetMapping("/v1/debug/log/test") + public Object testLog(@RequestParam String name) { + try { + Logger testLogger = org.slf4j.LoggerFactory.getLogger(name); + + testLogger.trace("TRACE级别测试日志 - {}", name); + testLogger.debug("DEBUG级别测试日志 - {}", name); + testLogger.info("INFO级别测试日志 - {}", name); + testLogger.warn("WARN级别测试日志 - {}", name); + testLogger.error("ERROR级别测试日志 - {}", name); + + return Map.of( + "success", true, + "loggerName", name, + "message", "测试日志已输出,请检查日志文件" + ); + } catch (Exception e) { + log.error("测试日志失败: name={}", name, e); + return Map.of( + "success", false, + "loggerName", name, + "error", e.getMessage() + ); + } + } + + // 移除强制/批量/测试接口,保留最小化的设置与查询 - @Resource - private DeviceShardingRouter tableShardStrategyByIotId; + - @GetMapping("/log/shard") - public Object getTableId(@RequestParam String iotId) { - return getTableShardIdByIotId(iotId); + + @GetMapping("/version") + public Object versionInformation() { + return readGitProperties(); } + @Resource private LogbackLoggingSystem loggingSystem; + @Resource private StringRedisTemplate stringRedisTemplate; + + + // ========================================== + // 协议扩展模块日志管理API + // ========================================== + + /** + * 设置协议模块日志级别 + */ + // 以下协议日志管理接口已移除,保留最小化动态级别设置 + + /** + * 批量设置协议模块日志级别 + */ + + + /** + * 恢复协议模块原始日志级别 + */ + + + /** + * 获取协议模块日志状态 + */ + + + /** + * 获取支持的协议模块列表 + */ + + + /** + * 获取已修改的协议模块信息 + */ + + + /** + * 测试协议模块日志输出 + */ + + + + + // ========================================== + // TCP协议设备统计调试API + // ========================================== - private String getTableShardIdByIotId(String iotId) { - String tableId = tableShardStrategyByIotId.generateTableName("表号为", iotId); - String[] s = tableId.split("_"); - return s[1]; + /** + * 获取TCP协议设备统计信息(调试用) + */ + @GetMapping("/v1/tcp/stats") + public Object getTcpStats() { + try { + // 这里需要注入TcpConnectionManager,暂时返回模拟数据 + Map result = new HashMap<>(); + result.put("success", true); + result.put("message", "TCP协议设备统计功能已优化"); + result.put("timestamp", System.currentTimeMillis()); + + // 模拟统计数据 + result.put("currentInstance", "instance-001"); + result.put("currentDeviceCount", 150); + result.put("activeInstanceCount", 3); + result.put("totalActiveDevices", 450); + result.put("totalDevicesIncludingZombie", 500); + result.put("zombieDeviceCount", 50); + + return result; + } catch (Exception e) { + log.error("获取TCP协议统计失败", e); + return Map.of("success", false, "error", e.getMessage()); + } } /** - * echo - 打印请求体和请求头 + * 调试Redis中的TCP实例设备索引 */ + @GetMapping("/v1/tcp/debug/redis") + public Object debugTcpRedis() { + try { + Map result = new HashMap<>(); + result.put("success", true); + result.put("message", "TCP Redis调试信息"); + result.put("timestamp", System.currentTimeMillis()); + + // Redis Key信息 + result.put("deviceRoutesKey", "tcp:device:routes"); + result.put("instanceDevicesKeyPrefix", "tcp:instance:devices:"); + result.put("expectedPattern", "tcp:instance:devices:*"); + + // 可能的问题分析 + Map analysis = new HashMap<>(); + analysis.put("ttlIssue", "实例设备索引TTL设置为10分钟,可能已过期"); + analysis.put("registrationIssue", "设备连接时可能没有正确调用registerDeviceRoute"); + analysis.put("scanIssue", "SCAN命令可能没有找到匹配的key"); + analysis.put("redisConnectionIssue", "Redis连接可能有问题"); + + result.put("analysis", analysis); + + // 建议的检查步骤 + String[] checkSteps = { + "1. 检查Redis中是否存在 tcp:device:routes key", + "2. 检查Redis中是否存在 tcp:instance:devices:* 模式的key", + "3. 检查设备连接时是否正确调用了registerDevice方法", + "4. 检查实例心跳是否正常", + "5. 检查Redis连接是否正常" + }; + result.put("checkSteps", checkSteps); + + return result; + } catch (Exception e) { + log.error("调试TCP Redis失败", e); + return Map.of("success", false, "error", e.getMessage()); + } + } + + /** 读取文件 */ + private JSONObject readGitProperties() { + FileSystemResource classPathResource = new FileSystemResource("./version.json"); + InputStream inputStream = null; + try { + inputStream = classPathResource.getInputStream(); + } catch (IOException e) { + log.error("获取文件异常", e); + } + return JSONUtil.parseObj(readFromInputStream(inputStream)); + } + + /** 读取文件里面的值 */ + private String readFromInputStream(InputStream inputStream) { + StringBuilder stringBuilder = new StringBuilder(); + try (BufferedReader br = new BufferedReader(new InputStreamReader(inputStream))) { + String line; + while ((line = br.readLine()) != null) { + stringBuilder.append(line); + } + } catch (IOException e) { + log.error("读取文件失败", e); + } + return stringBuilder.toString(); + } + + + + @Resource private BatchFunctionTask batchFunctionTask; + + @GetMapping("/log/shaw") + public void getBatchFunctionTask() { + batchFunctionTask.doTask(); + } + + @GetMapping("/log/shared") + public void getBatchFunctionTas2k() { + batchFunctionTask.consumer(); + } + + /** 接收用户使用情况报告 */ + @PostMapping("/report") + public Object receiveUserReport(@RequestBody String body, HttpServletRequest request) { + try { + // 记录请求信息 + log.info("=== 系统状态报告 ==="); + log.info("请求方法: {}", request.getMethod()); + log.info("请求URL: {}", request.getRequestURL()); + log.info("客户端IP: {}", JakartaServletUtil.getClientIP(request)); + log.info("User-Agent: {}", request.getHeader("User-Agent")); + log.info("Referer: {}", request.getHeader("Referer")); + + // 解析JSON数据 + if (body != null && !body.trim().isEmpty()) { + try { + ObjectMapper mapper = new ObjectMapper(); + JsonNode jsonData = mapper.readTree(body); + + // 记录用户数据(使用简化的字段名) + log.info("用户IP: {}", jsonData.get("ip")); + log.info("用户代理: {}", jsonData.get("ua")); + log.info("时间戳: {}", jsonData.get("ts")); + log.info("版本: {}", jsonData.get("v")); + log.info("访问URL: {}", jsonData.get("url")); + log.info("来源页面: {}", jsonData.get("ref")); + log.info("屏幕分辨率: {}", jsonData.get("sr")); + log.info("时区: {}", jsonData.get("tz")); + log.info("语言: {}", jsonData.get("lang")); + log.info("客户端ID: {}", jsonData.get("cid")); + + // 发送钉钉通知 + try { + StringBuilder message = new StringBuilder(); + message.append("🔔 系统状态报告通知\n"); + message.append("📍 用户IP: ").append(jsonData.get("ip")).append("\n"); + message.append("🌐 客户端IP: ").append(JakartaServletUtil.getClientIP(request)).append("\n"); + message.append("🌐 访问URL: ").append(jsonData.get("url")).append("\n"); + message.append("📱 用户代理: ").append(jsonData.get("ua")).append("\n"); + message.append("⏰ 时间戳: ").append(DateUtil.now()).append("\n"); + message.append("🔧 来源页面: ").append(jsonData.get("ref")).append("\n"); + message.append("📱 分辨率: ").append(jsonData.get("sr")).append("\n"); + message.append("🔧 版本: ").append(jsonData.get("v")).append("\n"); + message.append("🆔 客户端ID: ").append(jsonData.get("cid")); + DingTalkUtil.send(message.toString()); + // DingTalk通知已禁用 + } catch (Exception e) { + log.error("发送钉钉通知失败: {}", e.getMessage()); + } + + // 这里可以添加数据库存储逻辑 + // saveUserReport(jsonData); + + } catch (Exception e) { + log.error("解析JSON数据失败: {}", e.getMessage()); + } + } + + log.info("=== 系统状态报告结束 ==="); + + // 返回成功响应 + return Map.of("success", true, "message", "状态同步成功", "timestamp", System.currentTimeMillis()); + + } catch (Exception e) { + log.error("处理系统状态报告失败", e); + return Map.of("success", false, "message", "服务器错误", "error", e.getMessage()); + } + } + + /** 处理图片追踪请求 */ + @GetMapping("/report") + public Object handleImageTracking( + @RequestParam(required = false) String m, + @RequestParam(required = false) String d, + @RequestParam(required = false) String t, + @RequestParam(required = false) String k, + HttpServletRequest request) { + + try { + // 验证密钥 + if (!"iot_tracking_2025".equals(k)) { + log.warn("无效的追踪密钥: {}", k); + return "invalid"; + } + + // 如果是图片追踪请求 + if ("img".equals(m) && d != null) { + try { + // 解码数据 + String decodedData = new String(Base64.getDecoder().decode(d)); + ObjectMapper mapper = new ObjectMapper(); + JsonNode jsonData = mapper.readTree(decodedData); + + log.info("=== 图片追踪数据 ==="); + log.info("用户IP: {}", jsonData.get("ip")); + log.info("时间戳: {}", jsonData.get("ts")); + log.info("客户端ID: {}", jsonData.get("cid")); + log.info("=== 图片追踪数据结束 ==="); + + // 发送钉钉通知 + try { + StringBuilder message = new StringBuilder(); + message.append("🖼️ 图片追踪通知\n"); + message.append("📍 用户IP: ").append(jsonData.get("ip")).append("\n"); + message.append("⏰ 时间戳: ").append(jsonData.get("ts")).append("\n"); + message.append("🆔 客户端ID: ").append(jsonData.get("cid")); + DingTalkUtil.send(message.toString()); + // DingTalk通知已禁用 + } catch (Exception e) { + log.error("发送钉钉通知失败: {}", e.getMessage()); + } + + } catch (Exception e) { + log.error("解析图片追踪数据失败: {}", e.getMessage()); + } + } + + // 返回1x1像素的GIF + byte[] pixel = + Base64.getDecoder().decode("R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); + return ResponseEntity.ok().contentType(MediaType.IMAGE_GIF).body(pixel); + + } catch (Exception e) { + log.error("处理图片追踪失败", e); + return "error"; + } + } + + /** echo - 打印请求体和请求头 */ @RequestMapping("/echo") public Object testLog(@RequestBody String body, HttpServletRequest request) { diff --git a/cn-universal-web/src/main/java/cn/universal/web/controller/common/BaseApiController.java b/cn-universal-web/src/main/java/cn/universal/web/controller/common/BaseApiController.java index 8c0ba2f9aea121dc721519f3643e8c9647848fa2..6f81cdee9021bac1cdf7ca2c76f95b87ea86a5ab 100644 --- a/cn-universal-web/src/main/java/cn/universal/web/controller/common/BaseApiController.java +++ b/cn-universal-web/src/main/java/cn/universal/web/controller/common/BaseApiController.java @@ -155,7 +155,7 @@ public class BaseApiController { protected void checkProductSelf(String productKey) { int flag = iotProductDeviceService.selectProductCount(productKey, iotUnionId()); if (flag <= 0) { - throw new IoTException("您没有权限操作此产品!", IoTErrorCode.PRODUCT_NOT_FOR_YOU.getCode()); + throw new IoTException("无产品权限", IoTErrorCode.PRODUCT_NOT_FOR_YOU.getCode()); } } } diff --git a/cn-universal-web/src/main/java/cn/universal/web/controller/openapi/ApiControllerV1.java b/cn-universal-web/src/main/java/cn/universal/web/controller/openapi/ApiControllerV1.java index 0fb06244e18ce5a183f11d0e8f907c9be8cc51b6..9f8415c42bd437c0d6119cbd3283f63b0f135208 100644 --- a/cn-universal-web/src/main/java/cn/universal/web/controller/openapi/ApiControllerV1.java +++ b/cn-universal-web/src/main/java/cn/universal/web/controller/openapi/ApiControllerV1.java @@ -193,12 +193,7 @@ public class ApiControllerV1 extends BaseApiController { return IoTDownlFactory.getIDown(ioTProduct.getThirdPlatform()).doAction(param); } - /** - * 设备修改(只修改名称,经纬度) - * - *

{ "deviceId": "24E124535B176069", "deviceName": "对外开放接口测试_改", "longitude": - * "40.44801283677155", "latitude": "120.29184397901454" } - */ + /** 设备修改名称,经纬度 */ @PostMapping("/device/update/{productKey}/{deviceId}") public R updateIoTDevice( @PathVariable("productKey") String productKey, diff --git a/cn-universal-web/src/main/resources/application-dev.properties b/cn-universal-web/src/main/resources/application-dev.properties index 33b738d0d52199d09c50718e5e6f2ed48d763ca1..85fec94f85fc7bb3a2acdafb728c6642363d0e68 100644 --- a/cn-universal-web/src/main/resources/application-dev.properties +++ b/cn-universal-web/src/main/resources/application-dev.properties @@ -2,13 +2,15 @@ # 协议模块开关配置 # ================================ # TCP协议 -tcp.protocol.enabled=true +tcp.protocol.enabled=false +# UDP协议 +udp.protocol.enabled=false # CT-AIoT协议 (电信) -ctaiot.cfg.enable=true +ctaiot.protocol.enable=false # OneNet协议 (移动) -onenet.protocol.enabled=true +onenet.protocol.enabled=false # ImouLife协议 (乐橙) -imoulife.protocol.enabled=true +imoulife.protocol.enabled=false # ================================ # 其他开关配置 # ================================ @@ -30,7 +32,7 @@ spring.datasource.druid.min-evictable-idle-time-millis=300000 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://192.168.31.194:3307/univ?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=true&useJDBCCompliantTimezoneShift=true spring.datasource.username=root -spring.datasource.password=Haha@2025 +spring.datasource.password= mybatis.mapper-locations=classpath*:mybatis/**/*.xml # ================================ # Redis 配置 @@ -38,31 +40,12 @@ mybatis.mapper-locations=classpath*:mybatis/**/*.xml spring.data.redis.database=11 spring.data.redis.host=192.168.31.194 spring.data.redis.port=6379 -spring.data.redis.password=AZx12345 +spring.data.redis.password= spring.data.redis.timeout=30000 spring.data.redis.lettuce.pool.max-active=8 spring.data.redis.lettuce.pool.max-idle=8 spring.data.redis.lettuce.pool.min-idle=0 # ================================ -# Redisson 分布式锁配置 -# ================================ -# 看门狗超时时间(毫秒) -redisson.lock.watchdog-timeout=30000 -# 锁等待时间(毫秒) -redisson.lock.wait-time=100 -# 锁超时时间(毫秒) -redisson.lock.lease-time=30 -# 连接池大小 -redisson.connection-pool.size=8 -# 最小空闲连接数 -redisson.connection-pool.min-idle=0 -# 连接超时时间(毫秒) -redisson.connection.timeout=3000 -# 重试次数 -redisson.connection.retry-attempts=3 -# 重试间隔(毫秒) -redisson.connection.retry-interval=1500 -# ================================ # CTWing AEP 平台配置 # ================================ ctaiot.cfg.server=msgpush.ctwing.cn:16651 @@ -70,16 +53,16 @@ ctaiot.cfg.appid=364525 ctaiot.cfg.appkey= ctaiot.cfg.appsecret= ctaiot.cfg.tenantId= -ctaiot.cfg.token= +ctaiot.cfg.token=..- # ================================ # OneNET 平台配置 # ================================ onenet.cfg.broker=tcp://183.0.0.1:8883 -onenet.cfg.userId= -onenet.cfg.accessKey= -onenet.cfg.projectId= +onenet.cfg.userId=198133 +onenet.cfg.accessKey=++mBfw== +onenet.cfg.projectId=eRVx2F # ================================ -# 大华平台配置 +# 乐橙平台配置 # ================================ imoulife.cfg.host=https://openapi.lechange.cn imoulife.cfg.port=443 @@ -87,11 +70,17 @@ imoulife.cfg.ver=1.0 imoulife.cfg.appid= imoulife.cfg.appsecret= # ================================ +# TCP的域名访问 +# ================================ +tcp.protocol.sni.host.out=#productKey.tcp.nexiot.xyz +tcp.protocol.sni.port.out=38883 +# ================================ # System内置EMQX配置,集群也需要 # ================================ mqtt.cfg.desc=MQTT IoT 平台 broker 服务器配置 mqtt.cfg.enable=true -mqtt.cfg.host=tcp://192.168.31.194:1883 +mqtt.cfg.host=tcp://192.168.31.194: +mqtt.cfg.host.out=tcp://mqtttest.nexiot.xyz:51883 mqtt.cfg.clientIdPrefix=univ_iot_test mqtt.cfg.client.username=universal_iot mqtt.cfg.client.password=Abc@2025 @@ -108,13 +97,21 @@ mqtt.cfg.defaultTopics={"passthrough":{"description":"透传主题","topics":["$ mqtt.cfg.emqx.header.key=universal-emqx mqtt.cfg.emqx.header.value=d41d8cd98f00b204e9800998ecf8427e # ================================ -# 云存储配置,只实现了阿里云 +# 云存储配置(阿里云/七牛) # ================================ cloud-storage.aliyun.endpoint= cloud-storage.aliyun.prefix= cloud-storage.aliyun.access-key-id= cloud-storage.aliyun.access-key-secret= cloud-storage.aliyun.bucket-name= +## 七牛云配置 +cloud-storage.qiniu.domain=qiniu.oss.filecoin.ren +cloud-storage.qiniu.prefix=/device/product/ +cloud-storage.qiniu.access-key= +cloud-storage.qiniu.secret-key= +cloud-storage.qiniu.bucket-name= +cloud-storage.qiniu.region=auto +cloud-storage.qiniu.is-https=false # ================================ # 设备注册配置 # ================================ @@ -217,4 +214,84 @@ clickhouse.password= clickhouse.db=univ clickhouse.socketTimeout=6000 clickhouse.table.iot_device_log=iot_device_log -clickhouse.table.iot_device_log_metadata=iot_device_log_metadata \ No newline at end of file +clickhouse.table.iot_device_log_metadata=iot_device_log_metadata +# ================================ +# 设备影子缓存与落库配置 +# ================================ +shadow.cache.enabled=true +shadow.cache.key-prefix=shadow +# 缓存TTL(秒),默认7天 +shadow.cache.ttl-seconds=604800 +# 是否开启定期落库 +shadow.flush.enabled=true +# 扫描间隔(毫秒),默认5分钟 +shadow.flush.scan-interval-ms=300000 +# 基础落库间隔(毫秒),默认24小时 +shadow.flush.base-interval-ms=600000 +# 抖动比例(0.2 表示±20%),用于错峰 +shadow.flush.jitter-rate=0.2 +# 每次批量处理数量 +shadow.flush.batch-size=1000 +# ZSET与分布式锁配置 +shadow.flush.zset-key=shadow:flush +shadow.flush.lock-key=shadow:flush:lock +# Redisson分布式锁配置(替代原有的TTL配置) +shadow.flush.lock-wait-time=10 +shadow.flush.lock-lease-time=60 +shadow.flush.max-retries=3 +# ================================ +# Redisson 分布式锁配置 +# ================================ +# 运行模式:single(单机), cluster(集群), sentinel(哨兵), master-slave(主从) +redisson.mode=single +# 基础配置 +# 看门狗超时时间(毫秒) +redisson.lock.watchdog-timeout=30000 +# 锁等待时间(毫秒) +redisson.lock.wait-time=100 +# 锁超时时间(毫秒) +redisson.lock.lease-time=30 +# 连接池大小 +redisson.connection-pool.size=8 +# 最小空闲连接数 +redisson.connection-pool.min-idle=0 +# 连接超时时间(毫秒) +redisson.connection.timeout=3000 +# 重试次数 +redisson.connection.retry-attempts=3 +# 重试间隔(毫秒) +redisson.connection.retry-interval=1500 +# ================================ +# 集群模式配置 (redisson.mode=cluster) +# ================================ +# 集群节点列表,逗号分隔 +# redisson.cluster.nodes=192.168.1.10:6379,192.168.1.11:6379,192.168.1.12:6379 +# 集群扫描间隔(毫秒) +redisson.cluster.scan-interval=2000 +# 主节点连接池配置 +redisson.cluster.master-connection-pool-size=64 +redisson.cluster.master-connection-minimum-idle-size=1 +# 从节点连接池配置 +redisson.cluster.slave-connection-pool-size=64 +redisson.cluster.slave-connection-minimum-idle-size=1 +# ================================ +# 哨兵模式配置 (redisson.mode=sentinel) +# ================================ +# 主节点名称 +# redisson.sentinel.master-name=mymaster +# 哨兵节点列表,逗号分隔 +# redisson.sentinel.nodes=192.168.1.10:26379,192.168.1.11:26379,192.168.1.12:26379 +# 哨兵密码(可选) +# redisson.sentinel.password= +# 数据库编号 +redisson.sentinel.database=0 +# ================================ +# 主从模式配置 (redisson.mode=master-slave) +# ================================ +# 主节点地址 +# redisson.master-slave.master-address=192.168.1.10:6379 +# 从节点地址列表,逗号分隔 +# redisson.master-slave.slave-addresses=192.168.1.11:6379,192.168.1.12:6379 +# 数据库编号 +redisson.master-slave.database=0 + diff --git a/cn-universal-web/src/main/resources/application-docker.properties b/cn-universal-web/src/main/resources/application-docker.properties deleted file mode 100644 index 9f7630e7885f37f1cd0284035ecc065d294dd3a4..0000000000000000000000000000000000000000 --- a/cn-universal-web/src/main/resources/application-docker.properties +++ /dev/null @@ -1,274 +0,0 @@ -# ================================ -# Docker 环境配置 - 基于 application-test.properties 模板 -# ================================ - -# ================================ -# 协议模块开关配置 -# ================================ -# TCP协议 -tcp.protocol.enabled=true -# CT-AIoT协议 (电信) -ctaiot.protocol.enable=false -# OneNet协议 (移动) -onenet.protocol.enabled=false -# ImouLife协议 (乐橙) -imoulife.protocol.enabled=false - -# ================================ -# 服务器配置 -# ================================ -server.port=${SERVER_PORT:9092} -server.instance.id= -logging.file.path=/app/logs/ - -# ================================ -# System内置EMQX配置,集群也需要 -# ================================ -mqtt.cfg.desc=MQTT IoT 平台 broker 服务器配置 (Docker) -mqtt.cfg.enable=true -mqtt.cfg.host=${MQTT_CFG_HOST:tcp://emqx:1883} -mqtt.cfg.clientIdPrefix=${MQTT_CFG_CLIENT_ID_PREFIX:univ_iot_docker} -mqtt.cfg.client.username=${MQTT_CFG_CLIENT_USERNAME:universal_iot} -mqtt.cfg.client.password=${MQTT_CFG_CLIENT_PASSWORD:Abc@2025} -mqtt.cfg.keepAliveInterval=60 -mqtt.cfg.cleanSession=true -mqtt.cfg.autoReconnect=true -mqtt.cfg.defaultQos=1 -mqtt.cfg.defined.thing=$thing -mqtt.cfg.defined.ota=$ota - -# 默认开启共享订阅,关闭自行删除`$share/univGroup/` -mqtt.cfg.thing-prefix=$share/univGroup/${mqtt.cfg.defined.thing} -mqtt.cfg.ota-prefix=$share/univGroup/${mqtt.cfg.defined.ota} - -mqtt.cfg.defaultTopics={"passthrough":{"description":"透传主题","topics":["${mqtt.cfg.thing-prefix:$thing}/up/+/+"]},"system-level":{"description":"系统级主题","topics":["${mqtt.cfg.ota-prefix:$ota}/report/+/+","${mqtt.cfg.ota-prefix:$ota}/update/+/+"]},"thing-model":{"description":"物模型主题","topics":["${mqtt.cfg.thing-prefix:$thing}/up/property/+/+","${mqtt.cfg.thing-prefix:$thing}/up/event/+/+"]}} - -mqtt.cfg.emqx.header.key=universal-emqx -mqtt.cfg.emqx.header.value=d41d8cd98f00b204e9800998ecf8427e - -# ================================ -# 数据库配置 -# ================================ -spring.datasource.type=com.alibaba.druid.pool.DruidDataSource -spring.datasource.druid.initial-size=8 -spring.datasource.druid.max-wait=10000 -spring.datasource.druid.max-active=8 -spring.datasource.druid.min-evictable-idle-time-millis=300000 -spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -spring.datasource.url=${SPRING_DATASOURCE_URL:jdbc:mysql://mysql:3306/univ?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true} -spring.datasource.username=${SPRING_DATASOURCE_USERNAME:root} -spring.datasource.password=${SPRING_DATASOURCE_PASSWORD:Haha@2025} - -mybatis.mapper-locations=classpath*:mybatis/**/*.xml - -# ================================ -# Redis 配置 -# ================================ -spring.data.redis.database=${SPRING_DATA_REDIS_DATABASE:11} -spring.data.redis.host=${SPRING_DATA_REDIS_HOST:redis} -spring.data.redis.port=${SPRING_DATA_REDIS_PORT:6379} -spring.data.redis.password=${SPRING_DATA_REDIS_PASSWORD:AZx12345} -spring.data.redis.timeout=30000 -spring.data.redis.lettuce.pool.max-active=8 -spring.data.redis.lettuce.pool.max-idle=8 -spring.data.redis.lettuce.pool.min-idle=0 - -# ================================ -# Redisson 分布式锁配置 -# ================================ -# 看门狗超时时间(毫秒) -redisson.lock.watchdog-timeout=30000 -# 锁等待时间(毫秒) -redisson.lock.wait-time=100 -# 锁超时时间(毫秒) -redisson.lock.lease-time=30 -# 连接池大小 -redisson.connection-pool.size=8 -# 最小空闲连接数 -redisson.connection-pool.min-idle=0 -# 连接超时时间(毫秒) -redisson.connection.timeout=3000 -# 重试次数 -redisson.connection.retry-attempts=3 -# 重试间隔(毫秒) -redisson.connection.retry-interval=1500 - -# ================================ -# ClickHouse 数据库配置(一般没有开启) -# ================================ -clickhouse.enable=false -clickhouse.address=jdbc:clickhouse://127.0.0.1:8123/univ -clickhouse.username=default -clickhouse.password= -clickhouse.db=univ -clickhouse.socketTimeout=6000 -clickhouse.table.iot_device_log=iot_device_log -clickhouse.table.iot_device_log_metadata=iot_device_log_metadata - -# ================================ -# Spring 配置 -# ================================ -# 文件上传大小限制 -spring.servlet.multipart.max-file-size=10MB - -# ================================ -# CTWing AEP 平台配置 -# ================================ -ctaiot.cfg.server= -ctaiot.cfg.appid= -ctaiot.cfg.appkey= -ctaiot.cfg.appsecret= -ctaiot.cfg.tenantId= -ctaiot.cfg.token= - -# ================================ -# OneNET 平台配置 -# ================================ -onenet.cfg.broker= -onenet.cfg.userId= -onenet.cfg.accessKey= -onenet.cfg.projectId= - -# ================================ -# 大华平台配置 -# ================================ -imoulife.cfg.host= -imoulife.cfg.port= -imoulife.cfg.ver= -imoulife.cfg.appid= -imoulife.cfg.appsecret= - -# ================================ -# 云存储配置 -# ================================ -cloud-storage.aliyun.endpoint=http://oss-cn-hangzhou.aliyuncs.com -cloud-storage.aliyun.prefix=iot -cloud-storage.aliyun.access-key-id= -cloud-storage.aliyun.access-key-secret= -cloud-storage.aliyun.bucket-name= - -# ================================ -# 设备注册配置 -# ================================ -iot.register.auto.unionId=auto_register -iot.register.auto.latitude=31.081598 -iot.register.auto.longitude=81.314141 - -# ================================ -# 设备日志分表配置 -# ================================ -# 日志分表是否开启 -shard.log.enable=true -# 日志分表数量 -shard.log.table.number=24 -# 每个实际节点对应虚拟节点数量 -shard.log.virtual.number=8 - -# ================================ -# 日志事件表配置 -# ================================ -shard.logMeta.enable=true -# 日志分表数量 -shard.logMeta.table.number=24 -# 每个实际节点对应虚拟节点数量 -shard.logMeta.virtual.number=8 -# 新旧设备分割时间戳 -shard.device.split.timestamp=1672107427 - -# ================================ -# WebSocket 配置 -# ================================ -# 禁用 WebSocket 以消除警告(如果不需要 WebSocket 功能) -#spring.websocket.enabled=false - -# ================================ -# 安全配置 -# ================================ -security.production.enabled=false -security.allowed.ips= -security.allowed.hosts= -security.actuator.enabled=true -security.access.monitor.enabled=false - -# ================================ -# 开发工具配置 -# ================================ -spring.devtools.restart.enabled=true -spring.devtools.livereload.enabled=true - -# ================================ -# Spring Boot 3.5 + JDK 21 优化配置 -# ================================ -# 虚拟线程配置 -spring.threads.virtual.enabled=true -jdk.virtualThreadScheduler.parallelism=10 -jdk.virtualThreadScheduler.maxPoolSize=100 - -# ================================ -# 可观测性配置 -# ================================ -# Actuator 端点 -management.endpoints.web.exposure.include=health,info,metrics,prometheus,env,configprops -management.endpoints.web.base-path=/actuator -management.endpoint.health.show-details=always -management.endpoint.health.show-components=always - -# 虚拟线程监控 -management.metrics.jvm.threads.virtual.enabled=true -management.metrics.jvm.threads.pools.enabled=true - -# ================================ -# 性能优化 -# ================================ -# HTTP/2 支持 -server.http2.enabled=true - -# 压缩配置 -server.compression.enabled=true -server.compression.mime-types=text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json -server.compression.min-response-size=1024 - -# ================================ -# 缓存配置 -# ================================ -# Caffeine 缓存 -spring.cache.type=caffeine -spring.cache.cache-names=device-cache,user-cache,config-cache -spring.cache.caffeine.spec=maximumSize=1000,expireAfterWrite=300s - -# 虚拟线程监控日志 -logging.level.jdk.virtual=DEBUG - -# 多级缓存配置 -cache.multi-level.enabled=true - -# L1 缓存配置(本地缓存 - Caffeine) -cache.multi-level.l1.enabled=true -cache.multi-level.l1.expire-after-write=300 -cache.multi-level.l1.expire-after-access=300 -cache.multi-level.l1.initial-capacity=100 -cache.multi-level.l1.maximum-size=5000 - -# L2 缓存配置(分布式缓存 - Redis) -cache.multi-level.l2.enabled=true -cache.multi-level.l2.expire-after-write=3600 -cache.multi-level.l2.key-prefix=mlc: - -# 默认配置 -cache.multi-level.defaults.strategy=WRITE_THROUGH -cache.multi-level.defaults.enable-multi-level=true -cache.multi-level.defaults.default-l1-expire=300 -cache.multi-level.defaults.default-l2-expire=3600 - -# 支持的第三方平台生命周期 -universal.iot.third.lifecycle.supported={"ctaiot":[]} - -# ================================ -# Docker 环境特定配置 -# ================================ -# 日志配置 -logging.level.root=INFO -logging.level.cn.universal=DEBUG -logging.file.name=/app/logs/application.log -logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n - diff --git a/cn-universal-web/src/main/resources/application.properties b/cn-universal-web/src/main/resources/application.properties index d9118aad262f924b4c8aa3c0188c2c19917aa7a8..dd4e9054cb66272cddd8e0275055c439d89f2ae2 100644 --- a/cn-universal-web/src/main/resources/application.properties +++ b/cn-universal-web/src/main/resources/application.properties @@ -104,3 +104,15 @@ magic-api.backup.enable=true magic-api.backup.datasource= magic-api.backup.max-history=30 magic-api.backup.table-name=protocol_file_backup +# ================================ +# RuleGo 规则引擎配置 +# ================================ +# RuleGo API配置 +rulego.web.base-url=http://rule.192886.xyz:81/# +rulego.api.base-url=http://192.168.31.194:9090 +rulego.api.token=${RULEGO_API_TOKEN:2af255ea5618467d914c67a8beeca31d} +# RuleGo同步配置 +rulego.sync.enabled=true +rulego.sync.interval=300000 +rulego.sync.log-cleanup-enabled=true +rulego.sync.log-retention-days=30 diff --git a/cn-universal-web/src/main/resources/banner.txt b/cn-universal-web/src/main/resources/banner.txt index 2ff930e3d960994fddf49a023016086e47be41d2..5d90d5e36438ec41e33f9f119b427dda14dd6e3d 100644 --- a/cn-universal-web/src/main/resources/banner.txt +++ b/cn-universal-web/src/main/resources/banner.txt @@ -2,13 +2,13 @@ ███╗ ██╗███████╗██╗ ██╗ ██╗ ██████╗ ████████╗ ████╗ ██║██╔════╝╚██╗██╔╝██║██╔═══██╗╚══██╔══╝ - ██╔██╗ ██║█████╗ ╚███╔╝ ██║██║ ██║ ██║ - ██║╚██╗██║██╔══╝ ██╔██╗ ██║██║ ██║ ██║ - ██║ ╚████║███████╗██╔╝ ██╗██║╚██████╔╝ ██║ - ╚═╝ ╚═══╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ - + ██╔██╗ ██║█████╗ ╚███╔╝ ██║██║ ██║ ██║ + ██║╚██╗██║██╔══╝ ██╔██╗ ██║██║ ██║ ██║ + ██║ ╚████║███████╗██╔╝ ██╗██║╚██████╔╝ ██║ + ╚═╝ ╚═══╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ + ================================================================================ - + NexIoT Platform 奈科斯物联网平台 diff --git a/cn-universal-web/src/main/resources/logback-spring.xml b/cn-universal-web/src/main/resources/logback-spring.xml index 35b2014d7be416fb971194f9d2202da991d5d433..4a5fe00bd5c85c743fb55ca224c50fe5f7353aea 100644 --- a/cn-universal-web/src/main/resources/logback-spring.xml +++ b/cn-universal-web/src/main/resources/logback-spring.xml @@ -44,7 +44,7 @@ utf-8 - INFO + DEBUG @@ -61,7 +61,7 @@ utf-8 - INFO + DEBUG @@ -78,7 +78,7 @@ utf-8 - INFO + DEBUG @@ -118,7 +118,7 @@ - + ${console.log.pattern} @@ -133,22 +133,25 @@ - + - + - - + - + + - + + + + @@ -158,20 +161,21 @@ - + - + - - + - + + + diff --git a/cn-universal-web/src/test/java/cn/universal/web/CnUniversalTest.java b/cn-universal-web/src/test/java/cn/universal/web/CnUniversalTest.java deleted file mode 100644 index ff24978ed8392850408c1e78c2677982b7d80f6c..0000000000000000000000000000000000000000 --- a/cn-universal-web/src/test/java/cn/universal/web/CnUniversalTest.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * - * Copyright (c) 2025, IoT-Universal. All Rights Reserved. - * - * @Description: 本文件由 Aleo 开发并拥有版权,未经授权严禁擅自商用、复制或传播。 - * @Author: Aleo - * @Email: wo8335224@gmail.com - * @Wechat: outlookFil - * - * - */ - -package cn.universal.web; - -import cn.universal.CnUniversalIoTApplication; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.logging.LogLevel; -import org.springframework.boot.logging.LoggingSystem; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = CnUniversalIoTApplication.class) -@Slf4j -public class CnUniversalTest { - - @Resource private LoggingSystem loggingSystem; - - @Before - public void before() { - loggingSystem.setLogLevel("com.tk.mapper", LogLevel.DEBUG); - loggingSystem.setLogLevel("cn.universal", LogLevel.DEBUG); - loggingSystem.setLogLevel("cn.hutool", LogLevel.DEBUG); - } - - @Test - public void testCount() throws Exception { - Assert.assertTrue(true); - } -} diff --git a/cn-universal-web/src/test/java/cn/universal/web/config/EmqxAuthConfigTest.java b/cn-universal-web/src/test/java/cn/universal/web/config/EmqxAuthConfigTest.java deleted file mode 100644 index 5315414ee6803e6d50efba601365d9d119296209..0000000000000000000000000000000000000000 --- a/cn-universal-web/src/test/java/cn/universal/web/config/EmqxAuthConfigTest.java +++ /dev/null @@ -1,48 +0,0 @@ -package cn.universal.web.config; - -import static org.junit.jupiter.api.Assertions.*; - -import cn.universal.web.service.EmqxAuthService; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; -import org.springframework.test.context.ActiveProfiles; - -/** - * EMQX 认证配置测试类 - * - * @version 1.0 - * @Author Aleo - * @since 2025/1/20 - */ -@SpringBootTest -@ActiveProfiles("test") -class EmqxAuthConfigTest { - - @Autowired - private EmqxAuthService emqxAuthService; - - @Autowired - private BCryptPasswordEncoder bCryptPasswordEncoder; - - @Test - void testEmqxAuthServiceBean() { - assertNotNull(emqxAuthService, "EmqxAuthService Bean 应该被正确创建"); - } - - @Test - void testBCryptPasswordEncoderBean() { - assertNotNull(bCryptPasswordEncoder, "BCryptPasswordEncoder Bean 应该被正确创建"); - } - - @Test - void testPasswordEncoding() { - String rawPassword = "testPassword123"; - String encodedPassword = bCryptPasswordEncoder.encode(rawPassword); - - assertNotNull(encodedPassword, "编码后的密码不应该为空"); - assertNotEquals(rawPassword, encodedPassword, "编码后的密码应该与原始密码不同"); - assertTrue(bCryptPasswordEncoder.matches(rawPassword, encodedPassword), "密码匹配应该成功"); - } -} diff --git a/cn-universal-web/src/test/java/cn/universal/web/controller/EmqxAuthControllerTest.java b/cn-universal-web/src/test/java/cn/universal/web/controller/EmqxAuthControllerTest.java deleted file mode 100644 index d243c4755e6d5a30f3aae34c66a9a4f8e2968a9d..0000000000000000000000000000000000000000 --- a/cn-universal-web/src/test/java/cn/universal/web/controller/EmqxAuthControllerTest.java +++ /dev/null @@ -1,370 +0,0 @@ -/* - * - * Copyright (c) 2025, IoT-Universal. All Rights Reserved. - * - * @Description: 本文件由 Aleo 开发并拥有版权,未经授权严禁擅自商用、复制或传播。 - * @Author: Aleo - * @Email: wo8335224@gmail.com - * @Wechat: outlookFil - * - * - */ -package cn.universal.web.controller; - -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import cn.universal.web.dto.EmqxAuthRequest; -import cn.universal.web.dto.EmqxAuthResponse; -import cn.universal.web.service.EmqxAuthService; -import cn.universal.web.service.EmqxHeaderValidationService; -import com.fasterxml.jackson.databind.ObjectMapper; -import java.util.Arrays; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.http.MediaType; -import org.springframework.test.context.ActiveProfiles; -import org.springframework.test.web.servlet.MockMvc; - -/** - * EMQX 认证控制器集成测试 - * - * @version 1.0 @Author Aleo - * @since 2025/1/20 - */ -@WebMvcTest({EmqxAuthController.class}) -@ActiveProfiles("test") -@DisplayName("EMQX 认证控制器集成测试") -class EmqxAuthControllerTest { - - @Autowired private MockMvc mockMvc; - - @MockBean private EmqxAuthService emqxAuthService; - - @MockBean private EmqxHeaderValidationService emqxHeaderValidationService; - - @Autowired private ObjectMapper objectMapper; - - private EmqxAuthRequest validRequest; - private EmqxAuthResponse successResponse; - private EmqxAuthResponse denyResponse; - - @BeforeEach - void setUp() { - // 设置有效的认证请求 - validRequest = new EmqxAuthRequest(); - validRequest.setUsername("test_user"); - validRequest.setPassword("test_password"); - validRequest.setClientid("test_client"); - validRequest.setIp_address("127.0.0.1"); - - // 设置成功响应 - successResponse = - new EmqxAuthResponse( - "allow", - false, - Arrays.asList(new EmqxAuthResponse.AclRule("$test_topic", "allow", "subscribe"))); - - // 设置拒绝响应 - denyResponse = new EmqxAuthResponse("deny"); - } - - @Test - @DisplayName("测试认证成功 - 产品认证") - void testAuthenticationSuccess_Product() throws Exception { - // Mock 请求头验证成功 - when(emqxHeaderValidationService.validateHeader(any())).thenReturn(true); - - // Mock 认证服务返回成功 - when(emqxAuthService.authenticate(any(EmqxAuthRequest.class))).thenReturn(successResponse); - - // 执行测试 - mockMvc - .perform( - post("/emqx/sys/auth") - .header("universal-emqx", "d41d8cd98f00b204e9800998ecf8427e") - .contentType(MediaType.APPLICATION_JSON) - .content(objectMapper.writeValueAsString(validRequest))) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.result").value("allow")) - .andExpect(jsonPath("$.is_superuser").value(false)) - .andExpect(jsonPath("$.acl").isArray()) - .andExpect(jsonPath("$.acl[0].topic").value("$test_topic")) - .andExpect(jsonPath("$.acl[0].permission").value("allow")) - .andExpect(jsonPath("$.acl[0].action").value("subscribe")); - - // 验证调用 - verify(emqxHeaderValidationService).validateHeader(any()); - verify(emqxAuthService).authenticate(any(EmqxAuthRequest.class)); - } - - @Test - @DisplayName("测试认证失败 - 请求头验证失败") - void testAuthenticationFailure_HeaderValidationFailed() throws Exception { - // Mock 请求头验证失败 - when(emqxHeaderValidationService.validateHeader(any())).thenReturn(false); - - // 执行测试 - mockMvc - .perform( - post("/emqx/sys/auth") - .header("universal-emqx", "wrong_value") - .contentType(MediaType.APPLICATION_JSON) - .content(objectMapper.writeValueAsString(validRequest))) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.result").value("deny")); - - // 验证调用 - verify(emqxHeaderValidationService).validateHeader(any()); - verify(emqxAuthService, never()).authenticate(any(EmqxAuthRequest.class)); - } - - @Test - @DisplayName("测试认证失败 - 缺少请求头") - void testAuthenticationFailure_MissingHeader() throws Exception { - // 执行测试(不包含请求头) - mockMvc - .perform( - post("/emqx/sys/auth") - .contentType(MediaType.APPLICATION_JSON) - .content(objectMapper.writeValueAsString(validRequest))) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.result").value("deny")); - - // 验证调用 - verify(emqxHeaderValidationService).validateHeader(any()); - verify(emqxAuthService, never()).authenticate(any(EmqxAuthRequest.class)); - } - - @Test - @DisplayName("测试认证失败 - 认证服务异常") - void testAuthenticationFailure_ServiceException() throws Exception { - // Mock 请求头验证成功 - when(emqxHeaderValidationService.validateHeader(any())).thenReturn(true); - - // Mock 认证服务抛出异常 - when(emqxAuthService.authenticate(any(EmqxAuthRequest.class))) - .thenThrow(new RuntimeException("认证服务异常")); - - // 执行测试 - mockMvc - .perform( - post("/emqx/sys/auth") - .header("universal-emqx", "d41d8cd98f00b204e9800998ecf8427e") - .contentType(MediaType.APPLICATION_JSON) - .content(objectMapper.writeValueAsString(validRequest))) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.result").value("deny")); - - // 验证调用 - verify(emqxHeaderValidationService).validateHeader(any()); - verify(emqxAuthService).authenticate(any(EmqxAuthRequest.class)); - } - - @Test - @DisplayName("测试认证失败 - 无效的请求体") - void testAuthenticationFailure_InvalidRequestBody() throws Exception { - // 执行测试(无效的JSON) - mockMvc - .perform( - post("/emqx/sys/auth") - .header("universal-emqx", "d41d8cd98f00b204e9800998ecf8427e") - .contentType(MediaType.APPLICATION_JSON) - .content("invalid json")) - .andExpect(status().isBadRequest()); - - // 验证没有调用验证服务 - verify(emqxHeaderValidationService, never()).validateHeader(any()); - verify(emqxAuthService, never()).authenticate(any(EmqxAuthRequest.class)); - } - - @Test - @DisplayName("测试认证失败 - 空请求体") - void testAuthenticationFailure_EmptyRequestBody() throws Exception { - // 执行测试(空请求体) - mockMvc - .perform( - post("/emqx/sys/auth") - .header("universal-emqx", "d41d8cd98f00b204e9800998ecf8427e") - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isBadRequest()); - - // 验证没有调用验证服务 - verify(emqxHeaderValidationService, never()).validateHeader(any()); - verify(emqxAuthService, never()).authenticate(any(EmqxAuthRequest.class)); - } - - @Test - @DisplayName("测试认证失败 - 错误的Content-Type") - void testAuthenticationFailure_WrongContentType() throws Exception { - // 执行测试(错误的Content-Type) - mockMvc - .perform( - post("/emqx/sys/auth") - .header("universal-emqx", "d41d8cd98f00b204e9800998ecf8427e") - .contentType(MediaType.TEXT_PLAIN) - .content("plain text")) - .andExpect(status().isUnsupportedMediaType()); - - // 验证没有调用验证服务 - verify(emqxHeaderValidationService, never()).validateHeader(any()); - verify(emqxAuthService, never()).authenticate(any(EmqxAuthRequest.class)); - } - - @Test - @DisplayName("测试认证成功 - 应用认证") - void testAuthenticationSuccess_Application() throws Exception { - // 设置应用认证请求 - EmqxAuthRequest appRequest = new EmqxAuthRequest(); - appRequest.setUsername("test_app_id"); - appRequest.setPassword("test_app_secret"); - appRequest.setClientid("test_client"); - appRequest.setIp_address("127.0.0.1"); - - // Mock 请求头验证成功 - when(emqxHeaderValidationService.validateHeader(any())).thenReturn(true); - - // Mock 认证服务返回成功 - when(emqxAuthService.authenticate(any(EmqxAuthRequest.class))).thenReturn(successResponse); - - // 执行测试 - mockMvc - .perform( - post("/emqx/sys/auth") - .header("universal-emqx", "d41d8cd98f00b204e9800998ecf8427e") - .contentType(MediaType.APPLICATION_JSON) - .content(objectMapper.writeValueAsString(appRequest))) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.result").value("allow")); - - // 验证调用 - verify(emqxHeaderValidationService).validateHeader(any()); - verify(emqxAuthService).authenticate(any(EmqxAuthRequest.class)); - } - - @Test - @DisplayName("测试认证成功 - 用户认证") - void testAuthenticationSuccess_User() throws Exception { - // 设置用户认证请求 - EmqxAuthRequest userRequest = new EmqxAuthRequest(); - userRequest.setUsername("test_user"); - userRequest.setPassword("test_password"); - userRequest.setClientid("test_client"); - userRequest.setIp_address("127.0.0.1"); - - // Mock 请求头验证成功 - when(emqxHeaderValidationService.validateHeader(any())).thenReturn(true); - - // Mock 认证服务返回成功 - when(emqxAuthService.authenticate(any(EmqxAuthRequest.class))).thenReturn(successResponse); - - // 执行测试 - mockMvc - .perform( - post("/emqx/sys/auth") - .header("universal-emqx", "d41d8cd98f00b204e9800998ecf8427e") - .contentType(MediaType.APPLICATION_JSON) - .content(objectMapper.writeValueAsString(userRequest))) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.result").value("allow")); - - // 验证调用 - verify(emqxHeaderValidationService).validateHeader(any()); - verify(emqxAuthService).authenticate(any(EmqxAuthRequest.class)); - } - - @Test - @DisplayName("测试认证失败 - 所有认证方式都失败") - void testAuthenticationFailure_AllMethodsFailed() throws Exception { - // Mock 请求头验证成功 - when(emqxHeaderValidationService.validateHeader(any())).thenReturn(true); - - // Mock 认证服务返回拒绝 - when(emqxAuthService.authenticate(any(EmqxAuthRequest.class))).thenReturn(denyResponse); - - // 执行测试 - mockMvc - .perform( - post("/emqx/sys/auth") - .header("universal-emqx", "d41d8cd98f00b204e9800998ecf8427e") - .contentType(MediaType.APPLICATION_JSON) - .content(objectMapper.writeValueAsString(validRequest))) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.result").value("deny")); - - // 验证调用 - verify(emqxHeaderValidationService).validateHeader(any()); - verify(emqxAuthService).authenticate(any(EmqxAuthRequest.class)); - } - - @Test - @DisplayName("测试请求头验证 - 正确的请求头值") - void testHeaderValidation_CorrectValue() throws Exception { - // Mock 请求头验证成功 - when(emqxHeaderValidationService.validateHeader(any())).thenReturn(true); - - // Mock 认证服务返回成功 - when(emqxAuthService.authenticate(any(EmqxAuthRequest.class))).thenReturn(successResponse); - - // 执行测试 - mockMvc - .perform( - post("/emqx/sys/auth") - .header("universal-emqx", "d41d8cd98f00b204e9800998ecf8427e") - .contentType(MediaType.APPLICATION_JSON) - .content(objectMapper.writeValueAsString(validRequest))) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.result").value("allow")); - - // 验证调用 - verify(emqxHeaderValidationService).validateHeader(any()); - } - - @Test - @DisplayName("测试请求头验证 - 错误的请求头值") - void testHeaderValidation_WrongValue() throws Exception { - // Mock 请求头验证失败 - when(emqxHeaderValidationService.validateHeader(any())).thenReturn(false); - - // 执行测试 - mockMvc - .perform( - post("/emqx/sys/auth") - .header("universal-emqx", "wrong_value") - .contentType(MediaType.APPLICATION_JSON) - .content(objectMapper.writeValueAsString(validRequest))) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.result").value("deny")); - - // 验证调用 - verify(emqxHeaderValidationService).validateHeader(any()); - verify(emqxAuthService, never()).authenticate(any(EmqxAuthRequest.class)); - } - - @Test - @DisplayName("测试请求头验证 - 大小写敏感") - void testHeaderValidation_CaseSensitive() throws Exception { - // Mock 请求头验证失败(大小写敏感) - when(emqxHeaderValidationService.validateHeader(any())).thenReturn(false); - - // 执行测试(大写请求头) - mockMvc - .perform( - post("/emqx/sys/auth") - .header("UNIVERSAL-EMQX", "d41d8cd98f00b204e9800998ecf8427e") - .contentType(MediaType.APPLICATION_JSON) - .content(objectMapper.writeValueAsString(validRequest))) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.result").value("deny")); - - // 验证调用 - verify(emqxHeaderValidationService).validateHeader(any()); - verify(emqxAuthService, never()).authenticate(any(EmqxAuthRequest.class)); - } -} diff --git a/cn-universal-web/src/test/java/cn/universal/web/service/EmqxAuthServiceTest.java b/cn-universal-web/src/test/java/cn/universal/web/service/EmqxAuthServiceTest.java deleted file mode 100644 index 23cfb7f650ad087f21fd56d0483009e04a099744..0000000000000000000000000000000000000000 --- a/cn-universal-web/src/test/java/cn/universal/web/service/EmqxAuthServiceTest.java +++ /dev/null @@ -1,979 +0,0 @@ -/* - * - * Copyright (c) 2025, IoT-Universal. All Rights Reserved. - * - * @Description: 本文件由 Aleo 开发并拥有版权,未经授权严禁擅自商用、复制或传播。 - * @Author: Aleo - * @Email: wo8335224@gmail.com - * @Wechat: outlookFil - * - * - */ -package cn.universal.web.service; - -import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import cn.hutool.core.date.DateUtil; -import cn.universal.persistence.entity.IoTProduct; -import cn.universal.persistence.entity.IoTUser; -import cn.universal.persistence.entity.IoTUserApplication; -import cn.universal.web.dto.EmqxAuthRequest; -import cn.universal.web.dto.EmqxAuthResponse; -import cn.universal.web.service.impl.EmqxAuthServiceImpl; -import java.util.Arrays; -import java.util.Date; -import java.util.List; -import java.util.stream.Collectors; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; - -/** - * EMQX 认证服务测试类 - * - * @version 1.0 @Author Aleo - * @since 2025/1/20 - */ -@ExtendWith(MockitoExtension.class) -@DisplayName("EMQX 认证服务测试") -class EmqxAuthServiceTest { - - @Mock private EmqxAuthQueryService emqxAuthQueryService; - - @Mock private EmqxAuthLogService emqxAuthLogService; - @Mock private BCryptPasswordEncoder bCryptPasswordEncoder; - - private EmqxAuthServiceImpl emqxAuthService; - - private EmqxAuthRequest validRequest; - private IoTProduct validProduct; - private IoTUserApplication validApplication; - private IoTUser validUser; - - @BeforeEach - void setUp() { - // 创建服务实例(构造器注入) - emqxAuthService = new EmqxAuthServiceImpl(emqxAuthQueryService, emqxAuthLogService); - - // 设置有效的认证请求 - validRequest = new EmqxAuthRequest(); - validRequest.setUsername("test_user"); - validRequest.setPassword("test_password"); - validRequest.setClientid("test_client"); - validRequest.setIp_address("127.0.0.1"); - - // 设置有效的产品 - validProduct = - IoTProduct.builder() - .productKey("test_product_key") - .productSecret("test_product_secret") - .name("测试产品") - .state((byte) 0) - .isDeleted(0) - .build(); - - // 设置有效的应用 - validApplication = - IoTUserApplication.builder() - .appId("test_app_id") - .appSecret("test_app_secret") - .appName("测试应用") - .appStatus(0) - .deleted(0) - .validEndDate(new Date(System.currentTimeMillis() + 86400000)) // 明天过期 - .mqttEnable(true) - .build(); - - // 设置有效的用户 - validUser = - IoTUser.builder() - .username("test_user") - .password("test_password") - .status("0") - .deleted(0) - .build(); - } - - @Test - @DisplayName("测试配置账号认证成功") - void testAdminAuthenticationSuccess() { - // 准备测试数据 - EmqxAuthRequest request = new EmqxAuthRequest(); - request.setUsername("admin"); - request.setPassword("admin123456"); - request.setClientid("test_client"); - request.setIp_address("127.0.0.1"); - - // 执行测试 - EmqxAuthResponse response = emqxAuthService.authenticate(request); - - // 验证结果 - assertNotNull(response); - assertEquals("allow", response.getResult()); - assertFalse(response.getIs_superuser()); - assertNotNull(response.getAcl()); - assertEquals(3, response.getAcl().size()); - - // 验证订阅权限 - assertTrue( - response.getAcl().stream() - .anyMatch( - acl -> - acl.getTopic().equals("$thing/#") - && acl.getPermission().equals("allow") - && acl.getAction().equals("subscribe"))); - - assertTrue( - response.getAcl().stream() - .anyMatch( - acl -> - acl.getTopic().equals("$ota/#") - && acl.getPermission().equals("allow") - && acl.getAction().equals("subscribe"))); - - // 验证发布权限 - assertTrue( - response.getAcl().stream() - .anyMatch( - acl -> - acl.getTopic().equals("$thing/down/#") - && acl.getPermission().equals("allow") - && acl.getAction().equals("publish"))); - - // 验证调用 - verify(emqxAuthLogService) - .logAuthResult(anyString(), anyString(), anyString(), eq("ADMIN"), eq("allow")); - } - - @Test - @DisplayName("测试产品认证成功") - void testProductAuthenticationSuccess() { - // 准备测试数据 - EmqxAuthRequest request = new EmqxAuthRequest(); - request.setUsername("test_product_key"); - request.setPassword("test_product_secret"); - request.setClientid("test_client"); - request.setIp_address("127.0.0.1"); - - // Mock 查询服务 - when(emqxAuthQueryService.queryProductByKey("test_product_key")).thenReturn(validProduct); - - // 执行测试 - EmqxAuthResponse response = - emqxAuthService.authenticateProduct("test_product_key", "test_product_secret"); - - // 验证结果 - assertNotNull(response); - assertEquals("allow", response.getResult()); - assertFalse(response.getIs_superuser()); - assertNotNull(response.getAcl()); - assertEquals(1, response.getAcl().size()); - assertEquals("$product/test_product_key/#", response.getAcl().get(0).getTopic()); - assertEquals("allow", response.getAcl().get(0).getPermission()); - assertEquals("all", response.getAcl().get(0).getAction()); - - // 验证调用 - verify(emqxAuthQueryService).queryProductByKey("test_product_key"); - verify(emqxAuthLogService) - .logAuthResult(anyString(), anyString(), anyString(), eq("PRODUCT"), eq("allow")); - } - - @Test - @DisplayName("测试配置账号认证失败 - 用户名错误") - void testAdminAuthenticationFailure_WrongUsername() { - // 准备测试数据 - EmqxAuthRequest request = new EmqxAuthRequest(); - request.setUsername("wrong_admin"); - request.setPassword("admin123456"); - request.setClientid("test_client"); - request.setIp_address("127.0.0.1"); - - // 执行测试 - EmqxAuthResponse response = emqxAuthService.authenticate(request); - - // 验证结果 - assertNotNull(response); - assertEquals("deny", response.getResult()); - } - - @Test - @DisplayName("测试配置账号认证失败 - 密码错误") - void testAdminAuthenticationFailure_WrongPassword() { - // 准备测试数据 - EmqxAuthRequest request = new EmqxAuthRequest(); - request.setUsername("admin"); - request.setPassword("wrong_password"); - request.setClientid("test_client"); - request.setIp_address("127.0.0.1"); - - // 执行测试 - EmqxAuthResponse response = emqxAuthService.authenticate(request); - - // 验证结果 - assertNotNull(response); - assertEquals("deny", response.getResult()); - } - - @Test - @DisplayName("测试产品认证失败 - 产品不存在") - void testProductAuthenticationFailure_ProductNotFound() { - // Mock 查询服务返回空 - when(emqxAuthQueryService.queryProductByKey("nonexistent_product")).thenReturn(null); - - // 执行测试 - EmqxAuthResponse response = - emqxAuthService.authenticateProduct("nonexistent_product", "any_password"); - - // 验证结果 - assertNotNull(response); - assertEquals("deny", response.getResult()); - - // 验证调用 - verify(emqxAuthQueryService).queryProductByKey("nonexistent_product"); - } - - @Test - @DisplayName("测试产品认证失败 - 产品已停用") - void testProductAuthenticationFailure_ProductDisabled() { - // 设置停用的产品 - IoTProduct disabledProduct = - IoTProduct.builder() - .productKey("disabled_product") - .productSecret("test_secret") - .state((byte) 1) // 已停用 - .isDeleted(0) - .build(); - - when(emqxAuthQueryService.queryProductByKey("disabled_product")).thenReturn(disabledProduct); - - // 执行测试 - EmqxAuthResponse response = - emqxAuthService.authenticateProduct("disabled_product", "test_secret"); - - // 验证结果 - assertNotNull(response); - assertEquals("deny", response.getResult()); - - // 验证调用 - verify(emqxAuthQueryService).queryProductByKey("disabled_product"); - } - - @Test - @DisplayName("测试产品认证失败 - 产品已删除") - void testProductAuthenticationFailure_ProductDeleted() { - // 设置已删除的产品 - IoTProduct deletedProduct = - IoTProduct.builder() - .productKey("deleted_product") - .productSecret("test_secret") - .state((byte) 0) - .isDeleted(1) // 已删除 - .build(); - - when(emqxAuthQueryService.queryProductByKey("deleted_product")).thenReturn(deletedProduct); - - // 执行测试 - EmqxAuthResponse response = - emqxAuthService.authenticateProduct("deleted_product", "test_secret"); - - // 验证结果 - assertNotNull(response); - assertEquals("deny", response.getResult()); - - // 验证调用 - verify(emqxAuthQueryService).queryProductByKey("deleted_product"); - } - - @Test - @DisplayName("测试产品认证失败 - 密钥错误") - void testProductAuthenticationFailure_WrongSecret() { - when(emqxAuthQueryService.queryProductByKey("test_product_key")).thenReturn(validProduct); - - // 执行测试 - EmqxAuthResponse response = - emqxAuthService.authenticateProduct("test_product_key", "wrong_secret"); - - // 验证结果 - assertNotNull(response); - assertEquals("deny", response.getResult()); - - // 验证调用 - verify(emqxAuthQueryService).queryProductByKey("test_product_key"); - } - - @Test - @DisplayName("测试应用认证成功") - void testApplicationAuthenticationSuccess() { - // Mock 查询服务 - when(emqxAuthQueryService.queryApplicationById("test_app_id")).thenReturn(validApplication); - - // 执行测试 - EmqxAuthResponse response = - emqxAuthService.authenticateApplication("test_app_id", "test_app_secret"); - - // 验证结果 - assertNotNull(response); - assertEquals("allow", response.getResult()); - assertFalse(response.getIs_superuser()); - assertNotNull(response.getAcl()); - assertEquals(1, response.getAcl().size()); - assertEquals("$test_app_id", response.getAcl().get(0).getTopic()); - assertEquals("allow", response.getAcl().get(0).getPermission()); - assertEquals("subscribe", response.getAcl().get(0).getAction()); - - // 验证调用 - verify(emqxAuthQueryService).queryApplicationById("test_app_id"); - verify(emqxAuthLogService) - .logAuthResult(anyString(), anyString(), anyString(), eq("APPLICATION"), eq("allow")); - } - - @Test - @DisplayName("测试应用认证失败 - 应用不存在") - void testApplicationAuthenticationFailure_AppNotFound() { - when(emqxAuthQueryService.queryApplicationById("nonexistent_app")).thenReturn(null); - - // 执行测试 - EmqxAuthResponse response = - emqxAuthService.authenticateApplication("nonexistent_app", "any_secret"); - - // 验证结果 - assertNotNull(response); - assertEquals("deny", response.getResult()); - - // 验证调用 - verify(emqxAuthQueryService).queryApplicationById("nonexistent_app"); - } - - @Test - @DisplayName("测试应用认证失败 - 应用已停用") - void testApplicationAuthenticationFailure_AppDisabled() { - // 设置停用的应用 - IoTUserApplication disabledApp = - IoTUserApplication.builder() - .appId("disabled_app") - .appSecret("test_secret") - .appStatus(1) // 已停用 - .deleted(0) - .mqttEnable(true) - .build(); - - when(emqxAuthQueryService.queryApplicationById("disabled_app")).thenReturn(disabledApp); - - // 执行测试 - EmqxAuthResponse response = - emqxAuthService.authenticateApplication("disabled_app", "test_secret"); - - // 验证结果 - assertNotNull(response); - assertEquals("deny", response.getResult()); - - // 验证调用 - verify(emqxAuthQueryService).queryApplicationById("disabled_app"); - } - - @Test - @DisplayName("测试应用认证失败 - 应用已过期") - void testApplicationAuthenticationFailure_AppExpired() { - // 设置已过期的应用 - IoTUserApplication expiredApp = - IoTUserApplication.builder() - .appId("expired_app") - .appSecret("test_secret") - .appStatus(0) - .deleted(0) - .validEndDate(new Date(System.currentTimeMillis() - 86400000)) // 昨天过期 - .mqttEnable(true) - .build(); - - when(emqxAuthQueryService.queryApplicationById("expired_app")).thenReturn(expiredApp); - - // 执行测试 - EmqxAuthResponse response = - emqxAuthService.authenticateApplication("expired_app", "test_secret"); - - // 验证结果 - assertNotNull(response); - assertEquals("deny", response.getResult()); - - // 验证调用 - verify(emqxAuthQueryService).queryApplicationById("expired_app"); - } - - @Test - @DisplayName("测试应用认证失败 - MQTT未启用") - void testApplicationAuthenticationFailure_MqttDisabled() { - // 设置MQTT未启用的应用 - IoTUserApplication mqttDisabledApp = - IoTUserApplication.builder() - .appId("mqtt_disabled_app") - .appSecret("test_secret") - .appStatus(0) - .deleted(0) - .validEndDate(new Date(System.currentTimeMillis() + 86400000)) - .mqttEnable(false) // MQTT未启用 - .build(); - - when(emqxAuthQueryService.queryApplicationById("mqtt_disabled_app")) - .thenReturn(mqttDisabledApp); - - // 执行测试 - EmqxAuthResponse response = - emqxAuthService.authenticateApplication("mqtt_disabled_app", "test_secret"); - - // 验证结果 - assertNotNull(response); - assertEquals("deny", response.getResult()); - - // 验证调用 - verify(emqxAuthQueryService).queryApplicationById("mqtt_disabled_app"); - } - - @Test - @DisplayName("测试应用认证失败 - 密钥错误") - void testApplicationAuthenticationFailure_WrongSecret() { - when(emqxAuthQueryService.queryApplicationById("test_app_id")).thenReturn(validApplication); - - // 执行测试 - EmqxAuthResponse response = - emqxAuthService.authenticateApplication("test_app_id", "wrong_secret"); - - // 验证结果 - assertNotNull(response); - assertEquals("deny", response.getResult()); - - // 验证调用 - verify(emqxAuthQueryService).queryApplicationById("test_app_id"); - } - - @Test - @DisplayName("测试用户认证成功") - void testUserAuthenticationSuccess() { - // 设置关联的应用列表 - List userApps = - Arrays.asList( - IoTUserApplication.builder().appId("app1").build(), - IoTUserApplication.builder().appId("app2").build()); - - // Mock 查询服务 - when(emqxAuthQueryService.queryUserByUsername("test_user")).thenReturn(validUser); - when(emqxAuthQueryService.queryApplicationsByUnionId("test_user")).thenReturn(userApps); - - // 执行测试 - EmqxAuthResponse response = emqxAuthService.authenticateUser("test_user", "test_password"); - - // 验证结果 - assertNotNull(response); - assertEquals("allow", response.getResult()); - assertFalse(response.getIs_superuser()); - assertNotNull(response.getAcl()); - assertEquals(2, response.getAcl().size()); - - // 验证ACL规则 - assertTrue(response.getAcl().stream().anyMatch(acl -> acl.getTopic().equals("$app1"))); - assertTrue(response.getAcl().stream().anyMatch(acl -> acl.getTopic().equals("$app2"))); - - // 验证调用 - verify(emqxAuthQueryService).queryUserByUsername("test_user"); - verify(emqxAuthQueryService).queryApplicationsByUnionId("test_user"); - verify(emqxAuthLogService) - .logAuthResult(anyString(), anyString(), anyString(), eq("USER"), eq("allow")); - } - - @Test - @DisplayName("测试用户认证失败 - 用户不存在") - void testUserAuthenticationFailure_UserNotFound() { - when(emqxAuthQueryService.queryUserByUsername("nonexistent_user")).thenReturn(null); - - // 执行测试 - EmqxAuthResponse response = - emqxAuthService.authenticateUser("nonexistent_user", "any_password"); - - // 验证结果 - assertNotNull(response); - assertEquals("deny", response.getResult()); - - // 验证调用 - verify(emqxAuthQueryService).queryUserByUsername("nonexistent_user"); - } - - @Test - @DisplayName("测试用户认证失败 - 密码错误") - void testUserAuthenticationFailure_WrongPassword() { - when(emqxAuthQueryService.queryUserByUsername("test_user")).thenReturn(validUser); - - // 执行测试 - EmqxAuthResponse response = emqxAuthService.authenticateUser("test_user", "wrong_password"); - - // 验证结果 - assertNotNull(response); - assertEquals("deny", response.getResult()); - - // 验证调用 - verify(emqxAuthQueryService).queryUserByUsername("test_user"); - } - - @Test - @DisplayName("测试用户认证失败 - 未关联应用") - void testUserAuthenticationFailure_NoAssociatedApps() { - when(emqxAuthQueryService.queryUserByUsername("test_user")).thenReturn(validUser); - when(emqxAuthQueryService.queryApplicationsByUnionId("test_user")).thenReturn(null); - - // 执行测试 - EmqxAuthResponse response = emqxAuthService.authenticateUser("test_user", "test_password"); - - // 验证结果 - assertNotNull(response); - assertEquals("deny", response.getResult()); - - // 验证调用 - verify(emqxAuthQueryService).queryUserByUsername("test_user"); - verify(emqxAuthQueryService).queryApplicationsByUnionId("test_user"); - } - - @Test - @DisplayName("测试用户认证失败 - 关联应用列表为空") - void testUserAuthenticationFailure_EmptyAssociatedApps() { - when(emqxAuthQueryService.queryUserByUsername("test_user")).thenReturn(validUser); - when(emqxAuthQueryService.queryApplicationsByUnionId("test_user")).thenReturn(Arrays.asList()); - - // 执行测试 - EmqxAuthResponse response = emqxAuthService.authenticateUser("test_user", "test_password"); - - // 验证结果 - assertNotNull(response); - assertEquals("deny", response.getResult()); - - // 验证调用 - verify(emqxAuthQueryService).queryUserByUsername("test_user"); - verify(emqxAuthQueryService).queryApplicationsByUnionId("test_user"); - } - - @Test - @DisplayName("测试综合认证流程 - 产品认证优先") - void testComprehensiveAuthentication_ProductFirst() { - // 设置产品认证请求 - EmqxAuthRequest request = new EmqxAuthRequest(); - request.setUsername("test_product_key"); - request.setPassword("test_product_secret"); - request.setClientid("test_client"); - request.setIp_address("127.0.0.1"); - - // Mock 查询服务 - when(emqxAuthQueryService.queryProductByKey("test_product_key")).thenReturn(validProduct); - - // 执行测试 - EmqxAuthResponse response = emqxAuthService.authenticate(request); - - // 验证结果 - assertNotNull(response); - assertEquals("allow", response.getResult()); - assertNotNull(response.getAcl()); - assertEquals(1, response.getAcl().size()); - - // 验证调用 - verify(emqxAuthQueryService).queryProductByKey("test_product_key"); - verify(emqxAuthQueryService, never()).queryApplicationById(anyString()); - verify(emqxAuthQueryService, never()).queryUserByUsername(anyString()); - } - - @Test - @DisplayName("测试综合认证流程 - 应用认证次之") - void testComprehensiveAuthentication_ApplicationSecond() { - // 设置应用认证请求(产品认证失败) - EmqxAuthRequest request = new EmqxAuthRequest(); - request.setUsername("test_app_id"); - request.setPassword("test_app_secret"); - request.setClientid("test_client"); - request.setIp_address("127.0.0.1"); - - // Mock 查询服务 - when(emqxAuthQueryService.queryProductByKey("test_app_id")).thenReturn(null); // 产品不存在 - when(emqxAuthQueryService.queryApplicationById("test_app_id")).thenReturn(validApplication); - - // 执行测试 - EmqxAuthResponse response = emqxAuthService.authenticate(request); - - // 验证结果 - assertNotNull(response); - assertEquals("allow", response.getResult()); - assertNotNull(response.getAcl()); - assertEquals(1, response.getAcl().size()); - - // 验证调用 - verify(emqxAuthQueryService).queryProductByKey("test_app_id"); - verify(emqxAuthQueryService).queryApplicationById("test_app_id"); - verify(emqxAuthQueryService, never()).queryUserByUsername(anyString()); - } - - @Test - @DisplayName("测试综合认证流程 - 用户认证最后") - void testComprehensiveAuthentication_UserLast() { - // 设置用户认证请求(产品和应用认证都失败) - EmqxAuthRequest request = new EmqxAuthRequest(); - request.setUsername("test_user"); - request.setPassword("test_password"); - request.setClientid("test_client"); - request.setIp_address("127.0.0.1"); - - List userApps = - Arrays.asList(IoTUserApplication.builder().appId("app1").build()); - - // Mock 查询服务 - when(emqxAuthQueryService.queryProductByKey("test_user")).thenReturn(null); // 产品不存在 - when(emqxAuthQueryService.queryApplicationById("test_user")).thenReturn(null); // 应用不存在 - when(emqxAuthQueryService.queryUserByUsername("test_user")).thenReturn(validUser); - when(emqxAuthQueryService.queryApplicationsByUnionId("test_user")).thenReturn(userApps); - - // 执行测试 - EmqxAuthResponse response = emqxAuthService.authenticate(request); - - // 验证结果 - assertNotNull(response); - assertEquals("allow", response.getResult()); - assertNotNull(response.getAcl()); - assertEquals(1, response.getAcl().size()); - - // 验证调用 - verify(emqxAuthQueryService).queryProductByKey("test_user"); - verify(emqxAuthQueryService).queryApplicationById("test_user"); - verify(emqxAuthQueryService).queryUserByUsername("test_user"); - verify(emqxAuthQueryService).queryApplicationsByUnionId("test_user"); - } - - @Test - @DisplayName("测试综合认证流程 - 所有认证方式都失败") - void testComprehensiveAuthentication_AllFailed() { - // 设置无效的认证请求 - EmqxAuthRequest request = new EmqxAuthRequest(); - request.setUsername("invalid_user"); - request.setPassword("invalid_password"); - request.setClientid("test_client"); - request.setIp_address("127.0.0.1"); - - // Mock 查询服务都返回空 - when(emqxAuthQueryService.queryProductByKey("invalid_user")).thenReturn(null); - when(emqxAuthQueryService.queryApplicationById("invalid_user")).thenReturn(null); - when(emqxAuthQueryService.queryUserByUsername("invalid_user")).thenReturn(null); - - // 执行测试 - EmqxAuthResponse response = emqxAuthService.authenticate(request); - - // 验证结果 - assertNotNull(response); - assertEquals("deny", response.getResult()); - - // 验证调用 - verify(emqxAuthQueryService).queryProductByKey("invalid_user"); - verify(emqxAuthQueryService).queryApplicationById("invalid_user"); - verify(emqxAuthQueryService).queryUserByUsername("invalid_user"); - } - - @Test - @DisplayName("测试异常处理 - 查询服务异常") - void testExceptionHandling_QueryServiceException() { - // 设置产品认证请求 - EmqxAuthRequest request = new EmqxAuthRequest(); - request.setUsername("test_product_key"); - request.setPassword("test_product_secret"); - request.setClientid("test_client"); - request.setIp_address("127.0.0.1"); - - // Mock 查询服务抛出异常 - when(emqxAuthQueryService.queryProductByKey("test_product_key")) - .thenThrow(new RuntimeException("数据库连接失败")); - - // 执行测试 - EmqxAuthResponse response = emqxAuthService.authenticate(request); - - // 验证结果 - assertNotNull(response); - assertEquals("deny", response.getResult()); - - // 验证调用 - verify(emqxAuthQueryService).queryProductByKey("test_product_key"); - } - - @Test - @DisplayName("测试边界情况 - 空用户名") - void testEdgeCase_EmptyUsername() { - // 设置空用户名的请求 - EmqxAuthRequest request = new EmqxAuthRequest(); - request.setUsername(""); - request.setPassword("test_password"); - request.setClientid("test_client"); - request.setIp_address("127.0.0.1"); - - // 执行测试 - EmqxAuthResponse response = emqxAuthService.authenticate(request); - - // 验证结果 - assertNotNull(response); - assertEquals("deny", response.getResult()); - - // 验证没有调用查询服务 - verify(emqxAuthQueryService, never()).queryProductByKey(anyString()); - verify(emqxAuthQueryService, never()).queryApplicationById(anyString()); - verify(emqxAuthQueryService, never()).queryUserByUsername(anyString()); - } - - @Test - @DisplayName("测试边界情况 - 空密码") - void testEdgeCase_EmptyPassword() { - // 设置空密码的请求 - EmqxAuthRequest request = new EmqxAuthRequest(); - request.setUsername("test_user"); - request.setPassword(""); - request.setClientid("test_client"); - request.setIp_address("127.0.0.1"); - - // 执行测试 - EmqxAuthResponse response = emqxAuthService.authenticate(request); - - // 验证结果 - assertNotNull(response); - assertEquals("deny", response.getResult()); - - // 验证没有调用查询服务 - verify(emqxAuthQueryService, never()).queryProductByKey(anyString()); - verify(emqxAuthQueryService, never()).queryApplicationById(anyString()); - verify(emqxAuthQueryService, never()).queryUserByUsername(anyString()); - } - - @Test - @DisplayName("测试边界情况 - 空请求对象") - void testEdgeCase_NullRequest() { - // 执行测试 - EmqxAuthResponse response = emqxAuthService.authenticate(null); - - // 验证结果 - assertNotNull(response); - assertEquals("deny", response.getResult()); - - // 验证没有调用查询服务 - verify(emqxAuthQueryService, never()).queryProductByKey(anyString()); - verify(emqxAuthQueryService, never()).queryApplicationById(anyString()); - verify(emqxAuthQueryService, never()).queryUserByUsername(anyString()); - } - - @Test - @DisplayName("测试ACL规则构建 - 产品权限") - void testAclRuleBuilding_Product() { - // 通过反射调用私有方法 - EmqxAuthResponse response = - emqxAuthService.authenticateProduct("test_product_key", "test_product_secret"); - - // 验证ACL规则 - assertNotNull(response.getAcl()); - assertEquals(1, response.getAcl().size()); - - EmqxAuthResponse.AclRule rule = response.getAcl().get(0); - assertEquals("$product/test_product_key/#", rule.getTopic()); - assertEquals("allow", rule.getPermission()); - assertEquals("all", rule.getAction()); - } - - @Test - @DisplayName("测试ACL规则构建 - 应用权限") - void testAclRuleBuilding_Application() { - // 通过反射调用私有方法 - EmqxAuthResponse response = - emqxAuthService.authenticateApplication("test_app_id", "test_app_secret"); - - // 验证ACL规则 - assertNotNull(response.getAcl()); - assertEquals(1, response.getAcl().size()); - - EmqxAuthResponse.AclRule rule = response.getAcl().get(0); - assertEquals("$test_app_id", rule.getTopic()); - assertEquals("allow", rule.getPermission()); - assertEquals("subscribe", rule.getAction()); - } - - @Test - @DisplayName("测试ACL规则构建 - 用户权限") - void testAclRuleBuilding_User() { - // 设置关联的应用列表 - List userApps = - Arrays.asList( - IoTUserApplication.builder().appId("app1").build(), - IoTUserApplication.builder().appId("app2").build()); - - when(emqxAuthQueryService.queryUserByUsername("test_user")).thenReturn(validUser); - when(emqxAuthQueryService.queryApplicationsByUnionId("test_user")).thenReturn(userApps); - - // 执行测试 - EmqxAuthResponse response = emqxAuthService.authenticateUser("test_user", "test_password"); - - // 验证ACL规则 - assertNotNull(response.getAcl()); - assertEquals(2, response.getAcl().size()); - - // 验证所有应用的权限规则 - assertTrue( - response.getAcl().stream() - .allMatch( - rule -> - rule.getPermission().equals("allow") && rule.getAction().equals("subscribe"))); - - assertTrue(response.getAcl().stream().anyMatch(rule -> rule.getTopic().equals("$app1"))); - assertTrue(response.getAcl().stream().anyMatch(rule -> rule.getTopic().equals("$app2"))); - } - - @Test - void testUserAuthenticationSuccess_WithMultipleApplications() { - // 准备测试数据 - String username = "testuser"; - String password = "password123"; - - IoTUser user = new IoTUser(); - user.setUsername(username); - user.setPassword(bCryptPasswordEncoder.encode(password)); - - IoTUserApplication app1 = new IoTUserApplication(); - app1.setAppId("abc"); - app1.setAppName("App ABC"); - - IoTUserApplication app2 = new IoTUserApplication(); - app2.setAppId("bdc"); - app2.setAppName("App BDC"); - - List applications = Arrays.asList(app1, app2); - - // Mock 服务调用 - when(emqxAuthQueryService.queryUserByUsername(username)).thenReturn(user); - when(emqxAuthQueryService.queryApplicationsByUnionId(username)).thenReturn(applications); - - // 执行测试 - EmqxAuthResponse response = emqxAuthService.authenticateUser(username, password); - - // 验证结果 - assertThat(response.getResult()).isEqualTo("allow"); - assertThat(response.getIs_superuser()).isFalse(); - assertThat(response.getAcl()).hasSize(3); // 2个订阅权限 + 1个发布拒绝权限 - - // 验证订阅权限 - List subscribeRules = - response.getAcl().stream() - .filter(rule -> "subscribe".equals(rule.getAction())) - .collect(Collectors.toList()); - - assertThat(subscribeRules).hasSize(2); - assertThat(subscribeRules) - .anyMatch( - rule -> rule.getTopic().equals("$thing/abc") && "allow".equals(rule.getPermission())); - assertThat(subscribeRules) - .anyMatch( - rule -> rule.getTopic().equals("$thing/bdc") && "allow".equals(rule.getPermission())); - - // 验证发布拒绝权限 - List publishDenyRules = - response.getAcl().stream() - .filter( - rule -> "publish".equals(rule.getAction()) && "deny".equals(rule.getPermission())) - .collect(Collectors.toList()); - - assertThat(publishDenyRules).hasSize(1); - assertThat(publishDenyRules).anyMatch(rule -> rule.getTopic().equals("#")); - } - - @Test - void testApplicationAuthenticationSuccess_WithThingPrefix() { - // 准备测试数据 - String appId = "testapp"; - String appSecret = "secret123"; - - IoTUserApplication application = new IoTUserApplication(); - application.setAppId(appId); - application.setAppSecret(appSecret); - application.setAppName("Test App"); - application.setAppStatus(0); - application.setValidEndDate(DateUtil.offsetDay(new Date(), 30)); - application.setMqttEnable(true); - - // Mock 服务调用 - when(emqxAuthQueryService.queryApplicationById(appId)).thenReturn(application); - - // 执行测试 - EmqxAuthResponse response = emqxAuthService.authenticateApplication(appId, appSecret); - - // 验证结果 - assertThat(response.getResult()).isEqualTo("allow"); - assertThat(response.getIs_superuser()).isFalse(); - assertThat(response.getAcl()).hasSize(2); // 1个订阅权限 + 1个发布拒绝权限 - - // 验证订阅权限 - List subscribeRules = - response.getAcl().stream() - .filter(rule -> "subscribe".equals(rule.getAction())) - .collect(Collectors.toList()); - - assertThat(subscribeRules).hasSize(1); - assertThat(subscribeRules) - .anyMatch( - rule -> - rule.getTopic().equals("$thing/testapp") && "allow".equals(rule.getPermission())); - - // 验证发布拒绝权限 - List publishDenyRules = - response.getAcl().stream() - .filter( - rule -> "publish".equals(rule.getAction()) && "deny".equals(rule.getPermission())) - .collect(Collectors.toList()); - - assertThat(publishDenyRules).hasSize(1); - assertThat(publishDenyRules).anyMatch(rule -> rule.getTopic().equals("#")); - } - - @Test - void testProductAuthenticationSuccess_WithThingPrefix() { - // 准备测试数据 - String productKey = "testproduct"; - String productSecret = "secret123"; - - IoTProduct product = new IoTProduct(); - product.setProductKey(productKey); - product.setProductSecret(productSecret); - product.setState((byte)0); - - // Mock 服务调用 - when(emqxAuthQueryService.queryProductByKey(productKey)).thenReturn(product); - - // 执行测试 - EmqxAuthResponse response = emqxAuthService.authenticateProduct(productKey, productSecret); - - // 验证结果 - assertThat(response.getResult()).isEqualTo("allow"); - assertThat(response.getIs_superuser()).isFalse(); - assertThat(response.getAcl()).hasSize(3); // 3个发布权限 - - // 验证发布权限 - List publishRules = - response.getAcl().stream() - .filter(rule -> "publish".equals(rule.getAction())) - .collect(Collectors.toList()); - - assertThat(publishRules).hasSize(3); - assertThat(publishRules) - .anyMatch( - rule -> - rule.getTopic().equals("$thing/testproduct/#") - && "allow".equals(rule.getPermission())); - assertThat(publishRules) - .anyMatch( - rule -> - rule.getTopic().equals("$thing/down/testproduct/#") - && "allow".equals(rule.getPermission())); - assertThat(publishRules) - .anyMatch( - rule -> - rule.getTopic().equals("$ota/update/testproduct/#") - && "allow".equals(rule.getPermission())); - } -}