diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index be5c49ac..57dcf95d 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -20,8 +20,8 @@ jobs: path: ~/.m2 key: ${{ runner.os }}-${{ hashFiles('**/pom.xml') }} - name: Build with Maven - run: ./mvnw clean install -Dmaven.build.timestamp="$(date "+%Y-%m-%d %H:%M:%S")" -Dmaven.test.skip=true -Pbuild && cd jetlinks-standalone && docker build -t registry.cn-shenzhen.aliyuncs.com/jetlinks/jetlinks-standalone:$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) . + run: ./mvnw clean install -Dmaven.build.timestamp="$(date "+%Y-%m-%d %H:%M:%S")" -Dmaven.test.skip=true -Pbuild && cd jetlinks-standalone && docker build -t registry.cn-shenzhen.aliyuncs.com/jetlinks/jetlinks-community:$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) . - name: Login Docker Repo run: echo "${{ secrets.ALIYUN_DOCKER_REPO_PWD }}" | docker login registry.cn-shenzhen.aliyuncs.com -u ${{ secrets.ALIYUN_DOCKER_REPO_USERNAME }} --password-stdin - name: Push Docker - run: docker push registry.cn-shenzhen.aliyuncs.com/jetlinks/jetlinks-standalone:$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) + run: docker push registry.cn-shenzhen.aliyuncs.com/jetlinks/jetlinks-community:$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) diff --git a/README.md b/README.md index 7b0f144f..49b1e53c 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,17 @@ # JetLinks 物联网基础平台 ![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/jetlinks/jetlinks-community/maven.yml?branch=master) -![Version](https://img.shields.io/badge/version-2.0--RELEASE-brightgreen) -![Version](https://img.shields.io/badge/version-1.20--RELEASE-brightgreen) +![Version](https://img.shields.io/badge/version-2.1--RELEASE-brightgreen) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/e8d527d692c24633aba4f869c1c5d6ad)](https://app.codacy.com/gh/jetlinks/jetlinks-community?utm_source=github.com&utm_medium=referral&utm_content=jetlinks/jetlinks-community&utm_campaign=Badge_Grade_Settings) [![OSCS Status](https://www.oscs1024.com/platform/badge/jetlinks/jetlinks-community.svg?size=small)](https://www.oscs1024.com/project/jetlinks/jetlinks-community?ref=badge_small) [![star](https://img.shields.io/github/stars/jetlinks/jetlinks-community?style=social)](https://github.com/jetlinks/jetlinks-community) [![star](https://gitee.com/jetlinks/jetlinks-community/badge/star.svg?theme=gvp)](https://gitee.com/jetlinks/jetlinks-community/stargazers) -[![QQ①群2021514](https://img.shields.io/badge/QQ①群-2021514-brightgreen)](https://qm.qq.com/cgi-bin/qm/qr?k=LGf0OPQqvLGdJIZST3VTcypdVWhdfAOG&jump_from=webapi) -[![QQ②群324606263](https://img.shields.io/badge/QQ②群-324606263-brightgreen)](https://qm.qq.com/cgi-bin/qm/qr?k=IMas2cH-TNsYxUcY8lRbsXqPnA2sGHYQ&jump_from=webapi) -[![QQ③群647954464](https://img.shields.io/badge/QQ③群-647954464-brightgreen)](https://qm.qq.com/cgi-bin/qm/qr?k=K5m27CkhDn3B_Owr-g6rfiTBC5DKEY59&jump_from=webapi) +[![QQ⑤群554591908](https://img.shields.io/badge/QQ⑤群-554591908-brightgreen)](https://qm.qq.com/cgi-bin/qm/qr?k=jiirLiyFUecy_gsankzVQ-cl6SrZCnv9&&jump_from=webapi) [![QQ④群780133058](https://img.shields.io/badge/QQ④群-780133058-brightgreen)](https://qm.qq.com/cgi-bin/qm/qr?k=Gj47w9kg7TlV5ceD5Bqew_M_O0PIjh_l&jump_from=webapi) +[![QQ③群647954464](https://img.shields.io/badge/QQ③群-647954464-brightgreen)](https://qm.qq.com/cgi-bin/qm/qr?k=K5m27CkhDn3B_Owr-g6rfiTBC5DKEY59&jump_from=webapi) +[![QQ②群324606263](https://img.shields.io/badge/QQ②群-324606263-brightgreen)](https://qm.qq.com/cgi-bin/qm/qr?k=IMas2cH-TNsYxUcY8lRbsXqPnA2sGHYQ&jump_from=webapi) +[![QQ①群2021514](https://img.shields.io/badge/QQ①群-2021514-brightgreen)](https://qm.qq.com/cgi-bin/qm/qr?k=LGf0OPQqvLGdJIZST3VTcypdVWhdfAOG&jump_from=webapi) JetLinks 基于Java8,Spring Boot 2.x,WebFlux,Netty,Vert.x,Reactor等开发, 是一个开箱即用,可二次开发的企业级物联网基础平台。平台实现了物联网相关的众多基础功能, @@ -73,7 +73,7 @@ TCP/UDP/MQTT/HTTP、TLS/DTLS、不同厂商、不同设备、不同报文、统 | 服务项 | 服务内容 | 服务收费 | 服务方式 | |-----------|-----------------|--------|-------------| -| 基础问题答疑 | 问题答疑 | 免费 | 技术交流群支持 [![QQ①群2021514](https://img.shields.io/badge/QQ①群-2021514-brightgreen)](https://qm.qq.com/cgi-bin/qm/qr?k=LGf0OPQqvLGdJIZST3VTcypdVWhdfAOG&jump_from=webapi) [![QQ②群324606263](https://img.shields.io/badge/QQ②群-324606263-brightgreen)](https://qm.qq.com/cgi-bin/qm/qr?k=IMas2cH-TNsYxUcY8lRbsXqPnA2sGHYQ&jump_from=webapi) [![QQ③群647954464](https://img.shields.io/badge/QQ③群-647954464-brightgreen)](https://qm.qq.com/cgi-bin/qm/qr?k=K5m27CkhDn3B_Owr-g6rfiTBC5DKEY59&jump_from=webapi) [![QQ④群780133058](https://img.shields.io/badge/QQ④群-780133058-brightgreen)](https://qm.qq.com/cgi-bin/qm/qr?k=Gj47w9kg7TlV5ceD5Bqew_M_O0PIjh_l&jump_from=webapi) | +| 基础问题答疑 | 问题答疑 | 免费 | 技术交流群支持 [![QQ⑤群554591908](https://img.shields.io/badge/QQ⑤群-554591908-brightgreen)](https://qm.qq.com/cgi-bin/qm/qr?k=jiirLiyFUecy_gsankzVQ-cl6SrZCnv9&&jump_from=webapi) [![QQ④群780133058](https://img.shields.io/badge/QQ④群-780133058-brightgreen)](https://qm.qq.com/cgi-bin/qm/qr?k=Gj47w9kg7TlV5ceD5Bqew_M_O0PIjh_l&jump_from=webapi) [![QQ③群647954464](https://img.shields.io/badge/QQ③群-647954464-brightgreen)](https://qm.qq.com/cgi-bin/qm/qr?k=K5m27CkhDn3B_Owr-g6rfiTBC5DKEY59&jump_from=webapi) [![QQ②群324606263](https://img.shields.io/badge/QQ②群-324606263-brightgreen)](https://qm.qq.com/cgi-bin/qm/qr?k=IMas2cH-TNsYxUcY8lRbsXqPnA2sGHYQ&jump_from=webapi) [![QQ①群2021514](https://img.shields.io/badge/QQ①群-2021514-brightgreen)](https://qm.qq.com/cgi-bin/qm/qr?k=LGf0OPQqvLGdJIZST3VTcypdVWhdfAOG&jump_from=webapi) | | 系统部署 | 系统部署 | 免费 | 文档自助。[源码部署](https://hanta.yuque.com/px7kg1/yfac2l/vvoa3u2ztymtp4oh) [Docker部署](https://hanta.yuque.com/px7kg1/yfac2l/mzq23z4iey5ev1a5) | | 产品使用 | 教学产品各功能使用 | 免费 | 文档自助。[产品文档](https://hanta.yuque.com/px7kg1/yfac2l) | | 二次开发 | 教学平台源码开发过程、工具使用等;| 免费 | 文档自助。[开发文档](https://hanta.yuque.com/px7kg1/nn1gdr) | diff --git a/build-and-push-docker.sh b/build-and-push-docker.sh index dffff12a..0a3ac0a6 100755 --- a/build-and-push-docker.sh +++ b/build-and-push-docker.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -dockerImage=registry.cn-shenzhen.aliyuncs.com/jetlinks/jetlinks-standalone:$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) +dockerImage=registry.cn-shenzhen.aliyuncs.com/jetlinks/jetlinks-community:$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) ./mvnw clean package -Dmaven.test.skip=true -Dmaven.build.timestamp="$(date "+%Y-%m-%d %H:%M:%S")" if [ $? -ne 0 ];then echo "构建失败!" diff --git a/docker/run-all/docker-compose.yml b/docker/run-all/docker-compose.yml index be9c16a6..1b01467c 100644 --- a/docker/run-all/docker-compose.yml +++ b/docker/run-all/docker-compose.yml @@ -59,7 +59,7 @@ services: links: - jetlinks:jetlinks jetlinks: - image: registry.cn-shenzhen.aliyuncs.com/jetlinks/jetlinks-standalone:2.2.0-SNAPSHOT + image: registry.cn-shenzhen.aliyuncs.com/jetlinks/jetlinks-community:2.2.0-SNAPSHOT container_name: jetlinks-ce ports: diff --git a/jetlinks-components/common-component/pom.xml b/jetlinks-components/common-component/pom.xml index 5c529d1b..60726206 100644 --- a/jetlinks-components/common-component/pom.xml +++ b/jetlinks-components/common-component/pom.xml @@ -53,7 +53,7 @@ com.h2database - h2 + h2-mvstore diff --git a/jetlinks-components/configure-component/pom.xml b/jetlinks-components/configure-component/pom.xml index a6a54058..fc87dc83 100644 --- a/jetlinks-components/configure-component/pom.xml +++ b/jetlinks-components/configure-component/pom.xml @@ -157,7 +157,7 @@ com.h2database - h2 + h2-mvstore diff --git a/jetlinks-components/elasticsearch-component/src/main/java/org/jetlinks/community/elastic/search/parser/DefaultLinkTypeParser.java b/jetlinks-components/elasticsearch-component/src/main/java/org/jetlinks/community/elastic/search/parser/DefaultLinkTypeParser.java index a0304b51..7dfa8ef9 100644 --- a/jetlinks-components/elasticsearch-component/src/main/java/org/jetlinks/community/elastic/search/parser/DefaultLinkTypeParser.java +++ b/jetlinks-components/elasticsearch-component/src/main/java/org/jetlinks/community/elastic/search/parser/DefaultLinkTypeParser.java @@ -18,42 +18,56 @@ public class DefaultLinkTypeParser implements LinkTypeParser { private final TermTypeParser parser = new DefaultTermTypeParser(); + @Override - public BoolQueryBuilder process(Term term, Consumer consumer, BoolQueryBuilder queryBuilders) { - if (term.getValue() == null && CollectionUtils.isEmpty(term.getTerms())) { - return queryBuilders; + public void process(List terms, + Consumer consumer, + BoolQueryBuilder queryBuilders) { + + if (CollectionUtils.isEmpty(terms)) { + return; } - if (term.getType() == Term.Type.or) { - handleOr(queryBuilders, term, consumer); - } else { - handleAnd(queryBuilders, term, consumer); + for (TermsHandler.TermGroup group : TermsHandler.groupTerms(terms)) { + if (group.type == Term.Type.or) { + for (Term groupTerm : group.getTerms()) { + handleOr(queryBuilders, groupTerm, consumer); + } + } else { + BoolQueryBuilder andQuery = QueryBuilders.boolQuery(); + for (Term groupTerm : group.getTerms()) { + handleAnd(andQuery, groupTerm, consumer); + } + if (!CollectionUtils.isEmpty(andQuery.must())){ + queryBuilders.should(andQuery); + } + } } - return queryBuilders; } - private void handleOr(BoolQueryBuilder queryBuilders, Term term, Consumer consumer) { + private void handleOr(BoolQueryBuilder queryBuilders, + Term term, + Consumer consumer) { consumer.accept(term); if (term.getTerms().isEmpty() && term.getValue() != null) { parser.process(() -> term, queryBuilders::should); - } else { + } else if (!term.getTerms().isEmpty()){ BoolQueryBuilder nextQuery = QueryBuilders.boolQuery(); - List terms = (term.getTerms()); - terms.forEach(t -> process(t, consumer, nextQuery)); + process(term.getTerms(), consumer, nextQuery); queryBuilders.should(nextQuery); } } - private void handleAnd(BoolQueryBuilder queryBuilders, Term term, Consumer consumer) { + private void handleAnd(BoolQueryBuilder queryBuilders, + Term term, + Consumer consumer) { consumer.accept(term); if (term.getTerms().isEmpty() && term.getValue() != null) { parser.process(() -> term, queryBuilders::must); - } else { + } else if (!term.getTerms().isEmpty()){ BoolQueryBuilder nextQuery = QueryBuilders.boolQuery(); - List terms = term.getTerms(); - terms.forEach(t -> process(t, consumer, nextQuery)); + process(term.getTerms(), consumer, nextQuery); queryBuilders.must(nextQuery); } } - } \ No newline at end of file diff --git a/jetlinks-components/elasticsearch-component/src/main/java/org/jetlinks/community/elastic/search/parser/LinkTypeParser.java b/jetlinks-components/elasticsearch-component/src/main/java/org/jetlinks/community/elastic/search/parser/LinkTypeParser.java index 2d6dce7a..cc92201b 100644 --- a/jetlinks-components/elasticsearch-component/src/main/java/org/jetlinks/community/elastic/search/parser/LinkTypeParser.java +++ b/jetlinks-components/elasticsearch-component/src/main/java/org/jetlinks/community/elastic/search/parser/LinkTypeParser.java @@ -3,6 +3,7 @@ package org.jetlinks.community.elastic.search.parser; import org.elasticsearch.index.query.BoolQueryBuilder; import org.hswebframework.ezorm.core.param.Term; +import java.util.List; import java.util.function.Consumer; /** @@ -10,5 +11,5 @@ import java.util.function.Consumer; **/ public interface LinkTypeParser { - BoolQueryBuilder process(Term term, Consumer consumer, BoolQueryBuilder queryBuilders); + void process(List terms, Consumer consumer, BoolQueryBuilder queryBuilders); } diff --git a/jetlinks-components/elasticsearch-component/src/main/java/org/jetlinks/community/elastic/search/parser/TermsHandler.java b/jetlinks-components/elasticsearch-component/src/main/java/org/jetlinks/community/elastic/search/parser/TermsHandler.java new file mode 100644 index 00000000..ffac5fab --- /dev/null +++ b/jetlinks-components/elasticsearch-component/src/main/java/org/jetlinks/community/elastic/search/parser/TermsHandler.java @@ -0,0 +1,71 @@ +package org.jetlinks.community.elastic.search.parser; + +import lombok.Getter; +import lombok.Setter; +import org.hswebframework.ezorm.core.param.Term; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * 根据terms条件的type分组 + * 如:条件 where a = 1 or b = 2 and c = 3 or d = 4 or e = 5 and f = 6 + * 分组为 + * (a = 1) + * OR + * (b = 2 AND c = 3) + * OR + * (d = 4) + * OR + * (e = 5 AND f = 6) + * + * @author bestfeng + */ +public class TermsHandler { + + public static Set groupTerms(List terms) { + Set groups = new HashSet<>(); + TermGroup currentGroup = null; + + for (int i = 0; i < terms.size(); i++) { + Term currentTerm = terms.get(i); + Term nextTerm = (i + 1 < terms.size()) ? terms.get(i + 1) : null; + + if (currentTerm.getType() == Term.Type.or){ + if (currentGroup == null || currentGroup.type == Term.Type.and){ + currentGroup = new TermGroup(Term.Type.or); + } + // 如果下一个Term为"AND",创建一个新分组 + if (nextTerm != null && nextTerm.getType() == Term.Type.and){ + currentGroup = new TermGroup(Term.Type.and); + } + }else { + if (currentGroup == null){ + currentGroup = new TermGroup(Term.Type.and); + } + } + currentGroup.addTerm(currentTerm); + groups.add(currentGroup); + } + return groups; + } + + @Getter + @Setter + public static class TermGroup { + public TermGroup(Term.Type type) { + this.type = type; + this.terms = new ArrayList<>(); + } + + List terms; + + Term.Type type; + public void addTerm(Term term) { + terms.add(term); + } + } + +} diff --git a/jetlinks-components/elasticsearch-component/src/main/java/org/jetlinks/community/elastic/search/utils/QueryParamTranslator.java b/jetlinks-components/elasticsearch-component/src/main/java/org/jetlinks/community/elastic/search/utils/QueryParamTranslator.java index f1b8a716..c24a1d42 100644 --- a/jetlinks-components/elasticsearch-component/src/main/java/org/jetlinks/community/elastic/search/utils/QueryParamTranslator.java +++ b/jetlinks-components/elasticsearch-component/src/main/java/org/jetlinks/community/elastic/search/utils/QueryParamTranslator.java @@ -103,9 +103,7 @@ public class QueryParamTranslator { } }; } - for (Term term : queryParam.getTerms()) { - linkTypeParser.process(term, paramConverter, queryBuilders); - } + linkTypeParser.process(queryParam.getTerms(), paramConverter, queryBuilders); return queryBuilders; } diff --git a/pom.xml b/pom.xml index a551025b..d9f136c5 100644 --- a/pom.xml +++ b/pom.xml @@ -36,11 +36,11 @@ Borca-SR2 3.0.2 - 4.1.89.Final + 4.1.97.Final 7.17.5 3.7.0 1.2.83 - 2020.0.31 + 2020.0.36 4.3.8 2.18.0 1.2.11 @@ -235,7 +235,13 @@ com.h2database h2 - 2.1.210 + 2.2.224 + + + + com.h2database + h2-mvstore + 2.1.214 @@ -444,7 +450,7 @@ com.google.guava guava - 32.0.0-jre + 32.1.2-jre