From 4a2135d733c7b9178c153ba12f21bc9afd421c2d Mon Sep 17 00:00:00 2001 From: zhou-hao Date: Tue, 31 Mar 2020 11:42:51 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractElasticSearchIndexStrategy.java | 6 ++- .../server/vertx/VertxMqttConnection.java | 7 +-- .../device/entity/DeviceInstanceEntity.java | 5 +- .../device/response/DeviceDetail.java | 2 +- .../device/service/term/DeviceTagTerm.java | 50 +++++++++++-------- .../device/web/DeviceInstanceController.java | 2 +- .../device/web/excel/DeviceExcelInfo.java | 3 ++ .../device/web/excel/DeviceWrapper.java | 1 + 8 files changed, 44 insertions(+), 32 deletions(-) diff --git a/jetlinks-components/elasticsearch-component/src/main/java/org/jetlinks/community/elastic/search/index/strategies/AbstractElasticSearchIndexStrategy.java b/jetlinks-components/elasticsearch-component/src/main/java/org/jetlinks/community/elastic/search/index/strategies/AbstractElasticSearchIndexStrategy.java index 64c0f7fc..a35a6f70 100644 --- a/jetlinks-components/elasticsearch-component/src/main/java/org/jetlinks/community/elastic/search/index/strategies/AbstractElasticSearchIndexStrategy.java +++ b/jetlinks-components/elasticsearch-component/src/main/java/org/jetlinks/community/elastic/search/index/strategies/AbstractElasticSearchIndexStrategy.java @@ -88,7 +88,11 @@ public abstract class AbstractElasticSearchIndexStrategy implements ElasticSearc public CreateIndexRequest createIndexRequest(ElasticSearchIndexMetadata metadata) { CreateIndexRequest request = new CreateIndexRequest(wrapIndex(metadata.getIndex())); - request.mapping(Collections.singletonMap("properties", createElasticProperties(metadata.getProperties()))); + request.settings(properties.toSettings()); + Map mappingConfig = new HashMap<>(); + mappingConfig.put("properties", createElasticProperties(metadata.getProperties())); + mappingConfig.put("dynamic_templates", createDynamicTemplates()); + request.mapping(mappingConfig); return request; } diff --git a/jetlinks-components/network-component/mqtt-component/src/main/java/org/jetlinks/community/network/mqtt/server/vertx/VertxMqttConnection.java b/jetlinks-components/network-component/mqtt-component/src/main/java/org/jetlinks/community/network/mqtt/server/vertx/VertxMqttConnection.java index f94de175..ddbcda04 100644 --- a/jetlinks-components/network-component/mqtt-component/src/main/java/org/jetlinks/community/network/mqtt/server/vertx/VertxMqttConnection.java +++ b/jetlinks-components/network-component/mqtt-component/src/main/java/org/jetlinks/community/network/mqtt/server/vertx/VertxMqttConnection.java @@ -329,12 +329,7 @@ class VertxMqttConnection implements MqttConnection { @Override public String toString() { - return "{" + - "topic=" + getTopic() + - ",messageId=" + getMessageId() + - ",qos=" + getQosLevel() + - ",payload=" + message.payload().toString(StandardCharsets.UTF_8) + - '}'; + return print(); } } diff --git a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/entity/DeviceInstanceEntity.java b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/entity/DeviceInstanceEntity.java index 8e202e67..5de637e6 100644 --- a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/entity/DeviceInstanceEntity.java +++ b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/entity/DeviceInstanceEntity.java @@ -17,6 +17,7 @@ import reactor.core.publisher.Mono; import javax.persistence.Column; import javax.persistence.GeneratedValue; +import javax.persistence.Index; import javax.persistence.Table; import javax.validation.constraints.NotBlank; import java.sql.JDBCType; @@ -25,7 +26,9 @@ import java.util.Map; @Getter @Setter -@Table(name = "dev_device_instance") +@Table(name = "dev_device_instance", indexes = { + @Index(name = "idx_dev_product_id", columnList = "product_id"), +}) public class DeviceInstanceEntity extends GenericEntity implements RecordCreationEntity { @Override diff --git a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/response/DeviceDetail.java b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/response/DeviceDetail.java index 4d99fc81..25537fb6 100644 --- a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/response/DeviceDetail.java +++ b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/response/DeviceDetail.java @@ -70,7 +70,7 @@ public class DeviceDetail { private String metadata; //设备配置信息 - private Map configuration; + private Map configuration = new HashMap<>(); //标签 private List tags = new ArrayList<>(); diff --git a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/term/DeviceTagTerm.java b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/term/DeviceTagTerm.java index 77c03b62..bd0f474c 100644 --- a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/term/DeviceTagTerm.java +++ b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/term/DeviceTagTerm.java @@ -1,17 +1,12 @@ package org.jetlinks.community.device.service.term; -import org.apache.commons.collections.CollectionUtils; import org.hswebframework.ezorm.core.param.Term; import org.hswebframework.ezorm.rdb.metadata.RDBColumnMetadata; -import org.hswebframework.ezorm.rdb.operator.builder.fragments.EmptySqlFragments; import org.hswebframework.ezorm.rdb.operator.builder.fragments.PrepareSqlFragments; import org.hswebframework.ezorm.rdb.operator.builder.fragments.SqlFragments; import org.hswebframework.ezorm.rdb.operator.builder.fragments.term.AbstractTermFragmentBuilder; import org.springframework.stereotype.Component; -import java.util.List; -import java.util.stream.Collectors; - /** * where("id$dev-tag$location","重庆") */ @@ -21,30 +16,41 @@ public class DeviceTagTerm extends AbstractTermFragmentBuilder { super("dev-tag", "根据设备标签查询设备"); } + + private void acceptTerm(PrepareSqlFragments fragments, String terms) { + //json + if (terms.startsWith("[")) { + // + } + String[] tags = terms.split("[,]"); + int len = 0; + fragments.addSql("and ("); + + for (String tag : tags) { + String[] kv = tag.split("[:]"); + if (kv.length != 2) { + continue; + } + if (len++ > 0) { + fragments.addSql("or"); + } + fragments.addSql("(d.key = ? and d.value like ?)").addParameter(kv[0], kv[1]); + } + fragments.addSql(")"); + + } + @Override public SqlFragments createFragments(String columnFullName, RDBColumnMetadata column, Term term) { - List values = convertList(column, term); - if (values.isEmpty()) { - return EmptySqlFragments.INSTANCE; - } + String val = String.valueOf(term.getValue()); PrepareSqlFragments fragments = PrepareSqlFragments.of(); - List opts = term.getOptions(); + fragments.addSql("exists(select 1 from dev_device_tags d where d.device_id =", columnFullName); - fragments.addSql("exists(select 1 from dev_device_tags d where d.device_id = ", columnFullName); + acceptTerm(fragments,val); - if (CollectionUtils.isNotEmpty(opts)) { - fragments.addSql("and d.key=?").addParameter(opts.get(0)); - } - if (values.size() == 1) { - fragments.addSql("and d.value like ?)") - .addParameter(values); - } else { - fragments.addSql("and d.value in(", - values.stream().map(r -> "?").collect(Collectors.joining(",")), "))") - .addParameter(values); - } + fragments.addSql(")"); return fragments; } diff --git a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/DeviceInstanceController.java b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/DeviceInstanceController.java index b8e26364..74dfbde4 100644 --- a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/DeviceInstanceController.java +++ b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/DeviceInstanceController.java @@ -357,7 +357,7 @@ public class DeviceInstanceController implements DeviceInstanceEntity entity = FastBeanCopier.copy(info, new DeviceInstanceEntity()); entity.setProductId(productId); if (StringUtils.isEmpty(entity.getId())) { - throw new BusinessException("设备ID不能为空"); + throw new BusinessException("第" + info.getRowNumber() + 1 + "行:设备ID不能为空"); } return Tuples.of(entity, info.getTags()); }) diff --git a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/excel/DeviceExcelInfo.java b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/excel/DeviceExcelInfo.java index 6b3a86f4..03c7c15a 100644 --- a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/excel/DeviceExcelInfo.java +++ b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/excel/DeviceExcelInfo.java @@ -30,6 +30,9 @@ public class DeviceExcelInfo { private List tags = new ArrayList<>(); + private long rowNumber; + + public void tag(String key, String name, Object value) { if (value == null) { return; diff --git a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/excel/DeviceWrapper.java b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/excel/DeviceWrapper.java index e8da00b2..f784f2f4 100644 --- a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/excel/DeviceWrapper.java +++ b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/excel/DeviceWrapper.java @@ -44,6 +44,7 @@ public class DeviceWrapper extends RowWrapper { } else { deviceExcelInfo.with(headerMapping.getOrDefault(headerText, headerText), cell.value().orElse(null)); } + deviceExcelInfo.setRowNumber(cell.getRowIndex()); return deviceExcelInfo; }