diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index f78ca87..0d5abe5 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -60,6 +60,12 @@ com.ruoyi ruoyi-generator + + com.ruoyi + ruoyi-biemo + 3.8.3 + compile + diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java index 32eb6f1..8c79619 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java @@ -3,13 +3,14 @@ package com.ruoyi; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; /** * 启动程序 - * + * * @author ruoyi */ -@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) +@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class , MongoAutoConfiguration.class}) public class RuoYiApplication { public static void main(String[] args) diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/nlp/Test.java b/ruoyi-admin/src/main/java/com/ruoyi/Test.java similarity index 87% rename from ruoyi-biemo/src/main/java/com/ruoyi/biemo/nlp/Test.java rename to ruoyi-admin/src/main/java/com/ruoyi/Test.java index 72f63e9..3437020 100644 --- a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/nlp/Test.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/Test.java @@ -1,4 +1,6 @@ -package com.ruoyi.biemo.nlp; +package com.ruoyi; + +import com.ruoyi.biemo.nlp.NamedEntity; public class Test { diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml index 9a7cba2..beaff32 100644 --- a/ruoyi-admin/src/main/resources/application-druid.yml +++ b/ruoyi-admin/src/main/resources/application-druid.yml @@ -1,5 +1,8 @@ # 数据源配置 spring: + elasticsearch: + rest: + uris: http://59.110.45.20:10000 datasource: type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver diff --git a/ruoyi-biemo/pom.xml b/ruoyi-biemo/pom.xml index 3e449b5..1e1bca9 100644 --- a/ruoyi-biemo/pom.xml +++ b/ruoyi-biemo/pom.xml @@ -56,7 +56,34 @@ hutool-all ${huTool.version} - + + org.elasticsearch.client + elasticsearch-rest-client + 7.9.3 + + + org.elasticsearch.client + elasticsearch-rest-high-level-client + 7.9.3 + + + org.springframework.boot + spring-boot-starter-data-elasticsearch + + + org.elasticsearch + elasticsearch + 7.9.3 + + + org.projectlombok + lombok + + + com.alibaba + fastjson + 1.2.4 + diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/annotation/EsId.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/annotation/EsId.java new file mode 100644 index 0000000..dec6424 --- /dev/null +++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/annotation/EsId.java @@ -0,0 +1,14 @@ +package com.ruoyi.biemo.elasticsearch.annotation; + +import java.lang.annotation.*; + +/** + * @author zcw + * @version 1.0 + * @date 2021/1/14 11:54 + */ +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Inherited +public @interface EsId { +} diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/controller/TestESController.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/controller/TestESController.java new file mode 100644 index 0000000..23b43f4 --- /dev/null +++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/controller/TestESController.java @@ -0,0 +1,39 @@ +package com.ruoyi.biemo.elasticsearch.controller; + +import com.ruoyi.biemo.elasticsearch.entity.Topic; +import com.ruoyi.biemo.elasticsearch.service.TestService; +import org.elasticsearch.search.builder.SearchSourceBuilder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + + +/** + * @author zcw + * @version 1.0 + * @date 2021/1/14 11:19 + */ +@RestController +@RequestMapping(value = "/es") +public class TestESController { + + @Autowired + private TestService testService; + + @PostMapping(value = "insert") + public void insertOrUpdateOne(@RequestBody Topic entity) { + testService.insertOrUpdateOne(entity); + } + + @GetMapping(value = "/get") + public List get() { + return testService.search(new SearchSourceBuilder()); + } + + @GetMapping(value = "/test111") + public List test(){ + return testService.test(); + } + +} diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/entity/Topic.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/entity/Topic.java new file mode 100644 index 0000000..e4f95da --- /dev/null +++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/entity/Topic.java @@ -0,0 +1,30 @@ +package com.ruoyi.biemo.elasticsearch.entity; + +import com.ruoyi.biemo.elasticsearch.annotation.EsId; +import lombok.Data; +import org.springframework.data.elasticsearch.annotations.Document; + +@Data +@Document(indexName = "topic") +public class Topic { + + @EsId + private Long id; + private Long subject; + private Long type; + private String img; + private String content; + private String contentStr; + private Long score; + private String audio; + private String video; + private Boolean disabled; + private Boolean deleted; + private String createdAt; + private String updatedAt; + private String answer; + private String three; + private String checkvalue; + + +} diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/function/GFunction.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/function/GFunction.java new file mode 100644 index 0000000..c70ca98 --- /dev/null +++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/function/GFunction.java @@ -0,0 +1,44 @@ +package com.ruoyi.biemo.elasticsearch.function; + +import lombok.SneakyThrows; + +import java.io.Serializable; +import java.lang.invoke.SerializedLambda; +import java.lang.reflect.Method; +import java.util.function.Function; + +/** + * @author zcw + * @version 1.0 + * @date 2021/1/14 13:50 + */ +@FunctionalInterface +public interface GFunction extends Function, Serializable { + + String get = "get"; + + String is = "is"; + + @SneakyThrows + default SerializedLambda getSerializedLambda() { + Method write = this.getClass().getDeclaredMethod("writeReplace"); + write.setAccessible(true); + return (SerializedLambda) write.invoke(this); + } + + default String field() { + SerializedLambda serializedLambda = this.getSerializedLambda(); + String methodName = serializedLambda.getImplMethodName(); + return resolveFieldName(methodName); + } + default String resolveFieldName(String getMethodName) { + if (getMethodName.startsWith(get)) { + getMethodName = getMethodName.substring(3); + } else if (getMethodName.startsWith(is)) { + getMethodName = getMethodName.substring(2); + } + getMethodName = getMethodName.substring(0, 1).toLowerCase() + getMethodName.substring(1); + return getMethodName; + } + +} diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/service/TestService.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/service/TestService.java new file mode 100644 index 0000000..6b092a9 --- /dev/null +++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/service/TestService.java @@ -0,0 +1,32 @@ +package com.ruoyi.biemo.elasticsearch.service; + +import com.ruoyi.biemo.elasticsearch.entity.Topic; +import com.ruoyi.biemo.elasticsearch.util.EsService; +import org.elasticsearch.common.unit.Fuzziness; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author zcw + * @version 1.0 + * @date 2021/1/14 11:59 + */ +@Service +public class TestService extends EsService { + + public List test() { + esLambdaQuery().notIn(Topic::getId, 1, 2).delete(); + List topics = esLambdaQuery().between(Topic::getId, 2, 3).query(); + return topics; + } + + public List match() { + return esLambdaQuery().fuzzyAll(Topic::getContent, Fuzziness.TWO, "abc").query(); + } + + public void delete() { + esLambdaQuery().eq(Topic::getId,1).delete(); + } + +} diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/util/EsService.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/util/EsService.java new file mode 100644 index 0000000..927a2b4 --- /dev/null +++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/util/EsService.java @@ -0,0 +1,352 @@ +package com.ruoyi.biemo.elasticsearch.util; + +import com.alibaba.fastjson.JSON; +import com.ruoyi.biemo.elasticsearch.annotation.EsId; +import com.ruoyi.biemo.elasticsearch.function.GFunction; +import lombok.Data; +import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest; +import org.elasticsearch.action.bulk.BulkRequest; +import org.elasticsearch.action.delete.DeleteRequest; +import org.elasticsearch.action.index.IndexRequest; +import org.elasticsearch.action.search.SearchRequest; +import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.client.RequestOptions; +import org.elasticsearch.client.RestHighLevelClient; +import org.elasticsearch.client.indices.GetIndexRequest; +import org.elasticsearch.common.unit.Fuzziness; +import org.elasticsearch.common.xcontent.XContentType; +import org.elasticsearch.index.query.BoolQueryBuilder; +import org.elasticsearch.index.query.QueryBuilder; +import org.elasticsearch.index.query.QueryBuilders; +import org.elasticsearch.index.reindex.DeleteByQueryRequest; +import org.elasticsearch.search.SearchHit; +import org.elasticsearch.search.builder.SearchSourceBuilder; +import org.elasticsearch.search.sort.SortOrder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.elasticsearch.annotations.Document; + +import java.lang.reflect.*; +import java.util.ArrayList; +import java.util.List; + +/** + * @author zcw + * @version 1.0 + * @date 2021/1/14 10:47 + */ +public abstract class EsService { + + @Autowired + private RestHighLevelClient client; + + private String index; + + private Class entity; + + private Method getId; + + protected EsService() { + Type type = this.getClass().getGenericSuperclass(); + ParameterizedType parameterizedType = (ParameterizedType) type; + Type[] t = parameterizedType.getActualTypeArguments(); + this.entity = (Class) t[0]; + if (this.entity.isAnnotationPresent(Document.class)) { + this.index = this.entity.getAnnotation(Document.class).indexName(); + } + Field[] fields = this.entity.getDeclaredFields(); + for (Field field : fields) { + if (field.isAnnotationPresent(EsId.class)) { + String fieldName = field.getName(); + String FieldName = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); + String methodName = GFunction.get + FieldName; + Method getMethod = null; + try { + getMethod = this.entity.getMethod(methodName, null); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + } + this.getId = getMethod; + } + } + } + + public boolean indexExist() throws Exception { + GetIndexRequest request = new GetIndexRequest(index); + request.local(false); + request.humanReadable(true); + request.includeDefaults(false); + return client.indices().exists(request, RequestOptions.DEFAULT); + } + + public void insertOrUpdateOne(T entity) { + IndexRequest request = new IndexRequest(index); + try { + request.id(this.getId.invoke(entity, null).toString()); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + request.source(JSON.toJSONString(entity), XContentType.JSON); + try { + client.index(request, RequestOptions.DEFAULT); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public void insertBatch(List list) { + BulkRequest request = new BulkRequest(); + list.forEach(item -> { + try { + request.add(new IndexRequest(index).id(getId.invoke(item, null).toString()) + .source(JSON.toJSONString(item), XContentType.JSON)); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + }); + try { + client.bulk(request, RequestOptions.DEFAULT); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public void deleteBatch(List idList) { + BulkRequest request = new BulkRequest(); + idList.forEach(item -> request.add(new DeleteRequest(index, item.toString()))); + try { + client.bulk(request, RequestOptions.DEFAULT); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public List search(SearchSourceBuilder builder) { + SearchRequest request = new SearchRequest(index); + request.source(builder); + try { + SearchResponse response = client.search(request, RequestOptions.DEFAULT); + SearchHit[] hits = response.getHits().getHits(); + List res = new ArrayList<>(hits.length); + for (SearchHit hit : hits) { + res.add(JSON.parseObject(hit.getSourceAsString(), entity)); + } + return res; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public void deleteIndex() { + try { + client.indices().delete(new DeleteIndexRequest(index), RequestOptions.DEFAULT); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public void deleteByQuery(QueryBuilder builder) { + DeleteByQueryRequest request = new DeleteByQueryRequest(index); + request.setQuery(builder); + request.setBatchSize(10000); + request.setConflicts("proceed"); + try { + client.deleteByQuery(request, RequestOptions.DEFAULT); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + protected EsQueryBuilder esLambdaQuery() { + return new EsQueryBuilder(); + } + + @Data + protected class EsQueryBuilder { + + private SearchSourceBuilder searchSourceBuilder; + + private BoolQueryBuilder boolQueryBuilder; + + private EsQueryBuilder() { + if (this.searchSourceBuilder == null) { + this.searchSourceBuilder = new SearchSourceBuilder(); + } + if (this.boolQueryBuilder == null) { + this.boolQueryBuilder = QueryBuilders.boolQuery(); + } + } + + public EsQueryBuilder eq(GFunction gFunction, Object value) { + String field = gFunction.field(); + this.searchSourceBuilder.postFilter(QueryBuilders.termQuery(field, value)); + this.boolQueryBuilder.filter(QueryBuilders.termQuery(field, value)); + return this; + } + + public EsQueryBuilder notEq(GFunction gFunction, Object value) { + String field = gFunction.field(); + this.searchSourceBuilder.postFilter(QueryBuilders.boolQuery().mustNot(QueryBuilders.termQuery(field, value))); + this.boolQueryBuilder.mustNot(QueryBuilders.termQuery(field, value)); + return this; + } + + public EsQueryBuilder in(GFunction gFunction, Object... values) { + String field = gFunction.field(); + BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); + for (Object value : values) { + boolQueryBuilder.should(QueryBuilders.termQuery(field, value)); + this.boolQueryBuilder.should(QueryBuilders.termQuery(field, value)); + } + this.searchSourceBuilder.postFilter(boolQueryBuilder); + return this; + } + + public EsQueryBuilder notIn(GFunction gFunction, Object... values) { + String field = gFunction.field(); + BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); + for (Object value : values) { + boolQueryBuilder.mustNot(QueryBuilders.termQuery(field, value)); + this.boolQueryBuilder.mustNot(QueryBuilders.termQuery(field, value)); + } + this.searchSourceBuilder.postFilter(boolQueryBuilder); + return this; + } + + public EsQueryBuilder between(GFunction gFunction, Object begin, Object end) { + String field = gFunction.field(); + this.searchSourceBuilder.postFilter(QueryBuilders.boolQuery().filter(QueryBuilders.rangeQuery(field).from(begin).to(end))); + this.boolQueryBuilder.filter(QueryBuilders.rangeQuery(field).from(begin).to(end)); + return this; + } + + public EsQueryBuilder notBetween(GFunction gFunction, Object begin, Object end) { + String field = gFunction.field(); + this.searchSourceBuilder.postFilter(QueryBuilders.boolQuery().mustNot(QueryBuilders.rangeQuery(field).from(begin).to(end))); + this.boolQueryBuilder.mustNot(QueryBuilders.rangeQuery(field).from(begin).to(end)); + return this; + } + + public EsQueryBuilder gt(GFunction gFunction, Object value) { + String field = gFunction.field(); + this.searchSourceBuilder.postFilter(QueryBuilders.rangeQuery(field).gt(value)); + this.boolQueryBuilder.filter(QueryBuilders.rangeQuery(field).gt(value)); + return this; + } + + public EsQueryBuilder lt(GFunction gFunction, Object value) { + String field = gFunction.field(); + this.searchSourceBuilder.postFilter(QueryBuilders.rangeQuery(field).lt(value)); + this.boolQueryBuilder.filter(QueryBuilders.rangeQuery(field).lt(value)); + return this; + } + + public EsQueryBuilder ge(GFunction gFunction, Object value) { + String field = gFunction.field(); + this.searchSourceBuilder.postFilter(QueryBuilders.rangeQuery(field).gte(value)); + this.boolQueryBuilder.filter(QueryBuilders.rangeQuery(field).gte(value)); + return this; + } + + public EsQueryBuilder le(GFunction gFunction, Object value) { + String field = gFunction.field(); + this.searchSourceBuilder.postFilter(QueryBuilders.rangeQuery(field).lte(value)); + this.boolQueryBuilder.filter(QueryBuilders.rangeQuery(field).lte(value)); + return this; + } + + public EsQueryBuilder sort(GFunction gFunction, SortOrder value) { + this.searchSourceBuilder.sort(gFunction.field(), value); + return this; + } + + public EsQueryBuilder page(Integer pageNo, Integer pageSize) { + pageNo = (pageNo - 1) * pageSize; + this.searchSourceBuilder.from(pageNo).size(pageSize); + return this; + } + + public EsQueryBuilder matchAll(GFunction gFunction, Object... values) { + BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); + String field = gFunction.field(); + for (Object value : values) { + boolQueryBuilder.filter(QueryBuilders.matchPhrasePrefixQuery(field, value)); + this.boolQueryBuilder.filter(QueryBuilders.matchPhrasePrefixQuery(field, value)); + } + this.searchSourceBuilder.postFilter(boolQueryBuilder); + return this; + } + + public EsQueryBuilder matchOne(GFunction gFunction, Object... values) { + BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); + String field = gFunction.field(); + for (Object value : values) { + boolQueryBuilder.should(QueryBuilders.matchPhrasePrefixQuery(field, value)); + this.boolQueryBuilder.should(QueryBuilders.matchPhrasePrefixQuery(field, value)); + } + this.searchSourceBuilder.postFilter(boolQueryBuilder); + return this; + } + + public EsQueryBuilder notMatch(GFunction gFunction, Object value) { + String field = gFunction.field(); + this.boolQueryBuilder.mustNot(QueryBuilders.matchPhrasePrefixQuery(field, value)); + this.searchSourceBuilder.postFilter(QueryBuilders.boolQuery().mustNot(QueryBuilders.matchPhrasePrefixQuery(field, value))); + return this; + } + + public EsQueryBuilder fuzzyAll(GFunction gFunction, Fuzziness fuzziness, Object... values) { + String field = gFunction.field(); + for (Object value : values) { + this.searchSourceBuilder.postFilter(QueryBuilders.fuzzyQuery(field, value).fuzziness(fuzziness)); + this.boolQueryBuilder.filter(QueryBuilders.fuzzyQuery(field, value).fuzziness(fuzziness)); + } + return this; + } + + public EsQueryBuilder fuzzyOne(GFunction gFunction, Fuzziness fuzziness, Object... values) { + String field = gFunction.field(); + BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); + for (Object value : values) { + boolQueryBuilder.should(QueryBuilders.fuzzyQuery(field, value).fuzziness(fuzziness)); + this.boolQueryBuilder.should(QueryBuilders.fuzzyQuery(field, value).fuzziness(fuzziness)); + } + this.searchSourceBuilder.postFilter(boolQueryBuilder); + return this; + } + + public EsQueryBuilder notFuzzy(GFunction gFunction, Fuzziness fuzziness, Object value) { + String field = gFunction.field(); + this.boolQueryBuilder.mustNot(QueryBuilders.fuzzyQuery(field, value).fuzziness(fuzziness)); + this.searchSourceBuilder.postFilter(QueryBuilders.boolQuery().mustNot(QueryBuilders.fuzzyQuery(field, value).fuzziness(fuzziness))); + return this; + } + + public EsQueryBuilder isNull(GFunction gFunction) { + String field = gFunction.field(); + this.boolQueryBuilder.filter(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery(field))); + this.searchSourceBuilder.postFilter(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery(field))); + return this; + } + + public EsQueryBuilder isNotNull(GFunction gFunction) { + String field = gFunction.field(); + this.boolQueryBuilder.filter(QueryBuilders.existsQuery(field)); + this.searchSourceBuilder.postFilter(QueryBuilders.existsQuery(field)); + return this; + } + + public List query() { + return search(this.searchSourceBuilder); + } + + public void delete() { + deleteByQuery(this.boolQueryBuilder); + } + + } + +} diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/mongodb/config/MongoConverterConfig.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/mongodb/config/MongoConverterConfig.java index 9832135..960d489 100644 --- a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/mongodb/config/MongoConverterConfig.java +++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/mongodb/config/MongoConverterConfig.java @@ -1,36 +1,36 @@ -package com.ruoyi.biemo.mongodb.config; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.mongodb.MongoDatabaseFactory; -import org.springframework.data.mongodb.core.convert.DbRefResolver; -import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver; -import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper; -import org.springframework.data.mongodb.core.convert.MappingMongoConverter; -import org.springframework.data.mongodb.core.mapping.MongoMappingContext; - -/** - * 配置去掉_class字段 - * - * @author 陈钇蒙 - * - */ -@Configuration -public class MongoConverterConfig { - @Autowired - private MongoDatabaseFactory mongoDatabaseFactory; - - @Autowired - private MongoMappingContext mongoMappingContext; - - @Bean - public MappingMongoConverter mappingMongoConverter() { - DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoDatabaseFactory); - MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, mongoMappingContext); - // 此处是去除插入数据库的 _class 字段 - converter.setTypeMapper(new DefaultMongoTypeMapper(null)); - - return converter; - } -} +//package com.ruoyi.biemo.mongodb.config; +// +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +//import org.springframework.data.mongodb.MongoDatabaseFactory; +//import org.springframework.data.mongodb.core.convert.DbRefResolver; +//import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver; +//import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper; +//import org.springframework.data.mongodb.core.convert.MappingMongoConverter; +//import org.springframework.data.mongodb.core.mapping.MongoMappingContext; +// +///** +// * 配置去掉_class字段 +// * +// * @author 陈钇蒙 +// * +// */ +//@Configuration +//public class MongoConverterConfig { +// @Autowired +// private MongoDatabaseFactory mongoDatabaseFactory; +// +// @Autowired +// private MongoMappingContext mongoMappingContext; +// +// @Bean +// public MappingMongoConverter mappingMongoConverter() { +// DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoDatabaseFactory); +// MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, mongoMappingContext); +// // 此处是去除插入数据库的 _class 字段 +// converter.setTypeMapper(new DefaultMongoTypeMapper(null)); +// +// return converter; +// } +//} diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/mongodb/config/ScanNewField.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/mongodb/config/ScanNewField.java index 7612ef9..35ae542 100644 --- a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/mongodb/config/ScanNewField.java +++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/mongodb/config/ScanNewField.java @@ -1,120 +1,120 @@ -package com.ruoyi.biemo.mongodb.config; - -import java.lang.reflect.Field; -import java.util.Set; - -import javax.annotation.PostConstruct; - -import com.ruoyi.biemo.mongodb.bean.IgnoreDocument; -import com.ruoyi.biemo.mongodb.bean.InitValue; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.mongodb.core.MongoTemplate; -import org.springframework.data.mongodb.core.index.IndexOperations; -import org.springframework.data.mongodb.core.index.IndexResolver; -import org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver; -import org.springframework.data.mongodb.core.mapping.Document; -import org.springframework.data.mongodb.core.mapping.MongoMappingContext; -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.data.mongodb.core.query.Query; -import org.springframework.data.mongodb.core.query.Update; -import org.springframework.stereotype.Service; - -import com.mongodb.client.result.UpdateResult; - -import com.ruoyi.biemo.mongodb.utils.PackageUtil; -import cn.hutool.core.util.ClassUtil; -import cn.hutool.core.util.ReflectUtil; - -/** - * 启动时将表初始化 - * - */ -@Service -public class ScanNewField { - @Autowired - PackageUtil packageUtil; - // 写链接(写到主库,可使用事务) - @Autowired - private MongoTemplate mongoTemplate; - - @Autowired - MongoMappingContext mongoMappingContext; - - @PostConstruct - public void scan() { - // 找到主程序包 - Set> set = ClassUtil.scanPackage(packageUtil.getMainPackage()); - for (Class clazz : set) { - IgnoreDocument ignoreDocument = clazz.getAnnotation(IgnoreDocument.class); - if (ignoreDocument != null) { - continue; - } - - Document document = clazz.getAnnotation(Document.class); - if (document == null) { - continue; - } - - // 创建表 - if (!mongoTemplate.collectionExists(clazz)) { - mongoTemplate.createCollection(clazz); - System.out.println("创建了" + clazz.getSimpleName() + "表"); - } - - // 创建索引 - IndexOperations indexOps = mongoTemplate.indexOps(clazz); - IndexResolver resolver = new MongoPersistentEntityIndexResolver(mongoMappingContext); - resolver.resolveIndexFor(clazz).forEach(indexOps::ensureIndex); - - Field[] fields = ReflectUtil.getFields(clazz); - for (Field field : fields) { - // 获取注解 - if (field.isAnnotationPresent(InitValue.class)) { - InitValue initValue = field.getAnnotation(InitValue.class); - if (initValue.value() != null) { - - // 更新表默认值 - Query query = new Query(); - query.addCriteria(Criteria.where(field.getName()).is(null)); - - Long count = mongoTemplate.count(query, clazz); - if (count > 0) { - Object value = null; - Class type = field.getType(); - - if (type.equals(String.class)) { - value = initValue.value(); - } - if (type.equals(Short.class)) { - value = Short.parseShort(initValue.value()); - } - if (type.equals(Integer.class)) { - value = Integer.parseInt(initValue.value()); - } - if (type.equals(Long.class)) { - value = Long.parseLong(initValue.value()); - } - if (type.equals(Float.class)) { - value = Float.parseFloat(initValue.value()); - } - if (type.equals(Double.class)) { - value = Double.parseDouble(initValue.value()); - } - if (type.equals(Boolean.class)) { - value = Boolean.parseBoolean(initValue.value()); - } - - Update update = new Update().set(field.getName(), value); - UpdateResult updateResult = mongoTemplate.updateMulti(query, update, clazz); - - System.out.println(clazz.getSimpleName() + "表更新了" + updateResult.getModifiedCount() + "条默认值"); - } - } - } - - } - - } - } - -} +//package com.ruoyi.biemo.mongodb.config; +// +//import java.lang.reflect.Field; +//import java.util.Set; +// +//import javax.annotation.PostConstruct; +// +//import com.ruoyi.biemo.mongodb.bean.IgnoreDocument; +//import com.ruoyi.biemo.mongodb.bean.InitValue; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.data.mongodb.core.MongoTemplate; +//import org.springframework.data.mongodb.core.index.IndexOperations; +//import org.springframework.data.mongodb.core.index.IndexResolver; +//import org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver; +//import org.springframework.data.mongodb.core.mapping.Document; +//import org.springframework.data.mongodb.core.mapping.MongoMappingContext; +//import org.springframework.data.mongodb.core.query.Criteria; +//import org.springframework.data.mongodb.core.query.Query; +//import org.springframework.data.mongodb.core.query.Update; +//import org.springframework.stereotype.Service; +// +//import com.mongodb.client.result.UpdateResult; +// +//import com.ruoyi.biemo.mongodb.utils.PackageUtil; +//import cn.hutool.core.util.ClassUtil; +//import cn.hutool.core.util.ReflectUtil; +// +///** +// * 启动时将表初始化 +// * +// */ +//@Service +//public class ScanNewField { +// @Autowired +// PackageUtil packageUtil; +// // 写链接(写到主库,可使用事务) +// @Autowired +// private MongoTemplate mongoTemplate; +// +// @Autowired +// MongoMappingContext mongoMappingContext; +// +// @PostConstruct +// public void scan() { +// // 找到主程序包 +// Set> set = ClassUtil.scanPackage(packageUtil.getMainPackage()); +// for (Class clazz : set) { +// IgnoreDocument ignoreDocument = clazz.getAnnotation(IgnoreDocument.class); +// if (ignoreDocument != null) { +// continue; +// } +// +// Document document = clazz.getAnnotation(Document.class); +// if (document == null) { +// continue; +// } +// +// // 创建表 +// if (!mongoTemplate.collectionExists(clazz)) { +// mongoTemplate.createCollection(clazz); +// System.out.println("创建了" + clazz.getSimpleName() + "表"); +// } +// +// // 创建索引 +// IndexOperations indexOps = mongoTemplate.indexOps(clazz); +// IndexResolver resolver = new MongoPersistentEntityIndexResolver(mongoMappingContext); +// resolver.resolveIndexFor(clazz).forEach(indexOps::ensureIndex); +// +// Field[] fields = ReflectUtil.getFields(clazz); +// for (Field field : fields) { +// // 获取注解 +// if (field.isAnnotationPresent(InitValue.class)) { +// InitValue initValue = field.getAnnotation(InitValue.class); +// if (initValue.value() != null) { +// +// // 更新表默认值 +// Query query = new Query(); +// query.addCriteria(Criteria.where(field.getName()).is(null)); +// +// Long count = mongoTemplate.count(query, clazz); +// if (count > 0) { +// Object value = null; +// Class type = field.getType(); +// +// if (type.equals(String.class)) { +// value = initValue.value(); +// } +// if (type.equals(Short.class)) { +// value = Short.parseShort(initValue.value()); +// } +// if (type.equals(Integer.class)) { +// value = Integer.parseInt(initValue.value()); +// } +// if (type.equals(Long.class)) { +// value = Long.parseLong(initValue.value()); +// } +// if (type.equals(Float.class)) { +// value = Float.parseFloat(initValue.value()); +// } +// if (type.equals(Double.class)) { +// value = Double.parseDouble(initValue.value()); +// } +// if (type.equals(Boolean.class)) { +// value = Boolean.parseBoolean(initValue.value()); +// } +// +// Update update = new Update().set(field.getName(), value); +// UpdateResult updateResult = mongoTemplate.updateMulti(query, update, clazz); +// +// System.out.println(clazz.getSimpleName() + "表更新了" + updateResult.getModifiedCount() + "条默认值"); +// } +// } +// } +// +// } +// +// } +// } +// +//} diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/mongodb/utils/ImportExportUtil.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/mongodb/utils/ImportExportUtil.java index 1309f97..c022292 100644 --- a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/mongodb/utils/ImportExportUtil.java +++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/mongodb/utils/ImportExportUtil.java @@ -1,137 +1,137 @@ -package com.ruoyi.biemo.mongodb.utils; - -import java.io.BufferedReader; -import java.io.File; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import com.ruoyi.biemo.mongodb.bean.Page; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.ApplicationContext; -import org.springframework.data.mongodb.core.MongoTemplate; -import org.springframework.data.mongodb.core.mapping.Document; -import org.springframework.data.mongodb.core.mapping.MongoMappingContext; -import org.springframework.stereotype.Service; - -import cn.hutool.core.io.FileUtil; -import cn.hutool.core.io.IoUtil; -import cn.hutool.core.util.ClassUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.core.util.ZipUtil; -import cn.hutool.json.JSONArray; -import cn.hutool.json.JSONObject; -import cn.hutool.json.JSONUtil; - -/** - * 数据库导入导出工具 - * - */ -@Service -public class ImportExportUtil { - // 写链接(写到主库,可使用事务) - @Autowired - private MongoTemplate mongoTemplate; - - @Autowired - private MongoHelper mongoHelper; - - @Autowired - PackageUtil packageUtil; - public void exportDb(String path) { - path = path.replace(".zip", ""); - FileUtil.del(path); - FileUtil.del(path + ".zip"); - try { - - // 找到主程序包 - Set> set = ClassUtil.scanPackage(packageUtil.getMainPackage()); - Page page = new Page(); - page.setLimit(1000); - - for (Class clazz : set) { - Document document = clazz.getAnnotation(Document.class); - if (document == null) { - continue; - } - - page.setCurr(1); - while (true) { - page = mongoHelper.findPage(page, clazz); - if (page.getList().size() == 0) { - break; - } - - List lines = new ArrayList(); - for (Object object : page.getList()) { - lines.add(JSONUtil.toJsonStr(object)); - } - FileUtil.appendLines(lines, path + File.separator + clazz.getSimpleName() + ".json", "UTF-8"); - System.out.println(clazz.getSimpleName() + "表导出了" + page.getList().size() + "条数据"); - page.setCurr(page.getCurr() + 1); - } - } - ZipUtil.zip(path); - - } catch (Exception e) { - e.printStackTrace(); - FileUtil.del(path + ".zip"); - } - - FileUtil.del(path); - } - - public void importDb(String path) { - if (!FileUtil.exist(path)) { - System.out.println(path + "文件不存在"); - return; - } - BufferedReader reader = null; - - path = path.replace(".zip", ""); - FileUtil.del(path); - ZipUtil.unzip(path + ".zip"); - try { - - // 找到主程序包 - Set> set = ClassUtil.scanPackage(packageUtil.getMainPackage()); - for (Class clazz : set) { - Document document = clazz.getAnnotation(Document.class); - if (document == null) { - continue; - } - - File file = new File(path + File.separator + clazz.getSimpleName() + ".json"); - if (file.exists()) { - mongoTemplate.dropCollection(clazz); - - reader = FileUtil.getReader(file, "UTF-8"); - List list = new ArrayList(); - while (true) { - String json = reader.readLine(); - if (StrUtil.isEmpty(json)) { - mongoTemplate.insertAll(list); - System.out.println(clazz.getSimpleName() + "表导入了" + list.size() + "条数据"); - list.clear(); - break; - } - list.add(JSONUtil.toBean(json, clazz)); - if (list.size() == 1000) { - mongoTemplate.insertAll(list); - System.out.println(clazz.getSimpleName() + "表导入了" + list.size() + "条数据"); - list.clear(); - } - } - } - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - IoUtil.close(reader); - } - FileUtil.del(path); - } -} +//package com.ruoyi.biemo.mongodb.utils; +// +//import java.io.BufferedReader; +//import java.io.File; +//import java.util.ArrayList; +//import java.util.List; +//import java.util.Map; +//import java.util.Set; +// +//import com.ruoyi.biemo.mongodb.bean.Page; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.beans.factory.annotation.Value; +//import org.springframework.boot.autoconfigure.SpringBootApplication; +//import org.springframework.context.ApplicationContext; +//import org.springframework.data.mongodb.core.MongoTemplate; +//import org.springframework.data.mongodb.core.mapping.Document; +//import org.springframework.data.mongodb.core.mapping.MongoMappingContext; +//import org.springframework.stereotype.Service; +// +//import cn.hutool.core.io.FileUtil; +//import cn.hutool.core.io.IoUtil; +//import cn.hutool.core.util.ClassUtil; +//import cn.hutool.core.util.StrUtil; +//import cn.hutool.core.util.ZipUtil; +//import cn.hutool.json.JSONArray; +//import cn.hutool.json.JSONObject; +//import cn.hutool.json.JSONUtil; +// +///** +// * 数据库导入导出工具 +// * +// */ +//@Service +//public class ImportExportUtil { +// // 写链接(写到主库,可使用事务) +// @Autowired +// private MongoTemplate mongoTemplate; +// +// @Autowired +// private MongoHelper mongoHelper; +// +// @Autowired +// PackageUtil packageUtil; +// public void exportDb(String path) { +// path = path.replace(".zip", ""); +// FileUtil.del(path); +// FileUtil.del(path + ".zip"); +// try { +// +// // 找到主程序包 +// Set> set = ClassUtil.scanPackage(packageUtil.getMainPackage()); +// Page page = new Page(); +// page.setLimit(1000); +// +// for (Class clazz : set) { +// Document document = clazz.getAnnotation(Document.class); +// if (document == null) { +// continue; +// } +// +// page.setCurr(1); +// while (true) { +// page = mongoHelper.findPage(page, clazz); +// if (page.getList().size() == 0) { +// break; +// } +// +// List lines = new ArrayList(); +// for (Object object : page.getList()) { +// lines.add(JSONUtil.toJsonStr(object)); +// } +// FileUtil.appendLines(lines, path + File.separator + clazz.getSimpleName() + ".json", "UTF-8"); +// System.out.println(clazz.getSimpleName() + "表导出了" + page.getList().size() + "条数据"); +// page.setCurr(page.getCurr() + 1); +// } +// } +// ZipUtil.zip(path); +// +// } catch (Exception e) { +// e.printStackTrace(); +// FileUtil.del(path + ".zip"); +// } +// +// FileUtil.del(path); +// } +// +// public void importDb(String path) { +// if (!FileUtil.exist(path)) { +// System.out.println(path + "文件不存在"); +// return; +// } +// BufferedReader reader = null; +// +// path = path.replace(".zip", ""); +// FileUtil.del(path); +// ZipUtil.unzip(path + ".zip"); +// try { +// +// // 找到主程序包 +// Set> set = ClassUtil.scanPackage(packageUtil.getMainPackage()); +// for (Class clazz : set) { +// Document document = clazz.getAnnotation(Document.class); +// if (document == null) { +// continue; +// } +// +// File file = new File(path + File.separator + clazz.getSimpleName() + ".json"); +// if (file.exists()) { +// mongoTemplate.dropCollection(clazz); +// +// reader = FileUtil.getReader(file, "UTF-8"); +// List list = new ArrayList(); +// while (true) { +// String json = reader.readLine(); +// if (StrUtil.isEmpty(json)) { +// mongoTemplate.insertAll(list); +// System.out.println(clazz.getSimpleName() + "表导入了" + list.size() + "条数据"); +// list.clear(); +// break; +// } +// list.add(JSONUtil.toBean(json, clazz)); +// if (list.size() == 1000) { +// mongoTemplate.insertAll(list); +// System.out.println(clazz.getSimpleName() + "表导入了" + list.size() + "条数据"); +// list.clear(); +// } +// } +// } +// } +// } catch (Exception e) { +// e.printStackTrace(); +// } finally { +// IoUtil.close(reader); +// } +// FileUtil.del(path); +// } +//} diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/mongodb/utils/MongoHelper.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/mongodb/utils/MongoHelper.java index a6f7be8..ec3dfd3 100644 --- a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/mongodb/utils/MongoHelper.java +++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/mongodb/utils/MongoHelper.java @@ -1,967 +1,967 @@ -package com.ruoyi.biemo.mongodb.utils; - -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import javax.annotation.PostConstruct; - -import com.ruoyi.biemo.mongodb.bean.*; -import com.ruoyi.biemo.mongodb.config.Constant; -import com.ruoyi.biemo.mongodb.reflection.ReflectionUtil; -import com.ruoyi.biemo.mongodb.reflection.SerializableFunction; -import org.bson.Document; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.data.domain.Sort.Direction; -import org.springframework.data.mongodb.core.MongoTemplate; -import org.springframework.data.mongodb.core.convert.MongoConverter; -import org.springframework.data.mongodb.core.convert.QueryMapper; -import org.springframework.data.mongodb.core.convert.UpdateMapper; -import org.springframework.data.mongodb.core.mapping.MongoPersistentEntity; -import org.springframework.data.mongodb.core.query.Query; -import org.springframework.stereotype.Service; -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.ReflectUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.json.JSONObject; -import cn.hutool.json.JSONUtil; - -/** - * mongodb操作器 - * - */ -@Service("mongoHelper") -public class MongoHelper { - Logger logger = LoggerFactory.getLogger(this.getClass()); - - @Autowired - protected MongoConverter mongoConverter; - - protected QueryMapper queryMapper; - protected UpdateMapper updateMapper; - - @Autowired - protected MongoTemplate mongoTemplate; - - public MongoTemplate getMongoTemplate() { - return mongoTemplate; - } - - @Value("${spring.data.mongodb.print:false}") - protected Boolean print; - - @Value("${spring.data.mongodb.slowQuery:false}") - protected Boolean slowQuery; - - @Value("${spring.data.mongodb.slowTime:1000}") - protected Long slowTime; - - @PostConstruct - public void init() { - queryMapper = new QueryMapper(mongoConverter); - updateMapper = new UpdateMapper(mongoConverter); - } - - private void insertSlowQuery(String log, Long queryTime) { - if (slowQuery) { - SlowQuery slowQuery = new SlowQuery(); - slowQuery.setQuery(log); - slowQuery.setTime(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss")); - slowQuery.setQueryTime(queryTime); - slowQuery.setSystem(SystemTool.getSystem()); - StackTraceElement stack[] = Thread.currentThread().getStackTrace(); - - // 保存堆栈 - String stackStr = ""; - for (int i = 0; i < stack.length; i++) { - stackStr += stack[i].getClassName() + "." + stack[i].getMethodName() + ":" + stack[i].getLineNumber() + "\n"; - } - slowQuery.setStack(stackStr); - - mongoTemplate.insert(slowQuery); - } - } - - /** - * 打印查询语句 - * - * @param query - */ - private void logQuery(Class clazz, Query query, Long startTime) { - - MongoPersistentEntity entity = mongoConverter.getMappingContext().getPersistentEntity(clazz); - Document mappedQuery = queryMapper.getMappedObject(query.getQueryObject(), entity); - Document mappedField = queryMapper.getMappedObject(query.getFieldsObject(), entity); - Document mappedSort = queryMapper.getMappedObject(query.getSortObject(), entity); - - String log = "\ndb." + getCollectionName(clazz) + ".find("; - - log += FormatUtils.bson(mappedQuery.toJson()) + ")"; - - if (!query.getFieldsObject().isEmpty()) { - log += ".projection("; - log += FormatUtils.bson(mappedField.toJson()) + ")"; - } - - if (query.isSorted()) { - log += ".sort("; - log += FormatUtils.bson(mappedSort.toJson()) + ")"; - } - - if (query.getLimit() != 0l) { - log += ".limit(" + query.getLimit() + ")"; - } - - if (query.getSkip() != 0l) { - log += ".skip(" + query.getSkip() + ")"; - } - log += ";"; - - // 记录慢查询 - Long queryTime = System.currentTimeMillis() - startTime; - if (queryTime > slowTime) { - insertSlowQuery(log, queryTime); - } - if (print) { - // 打印语句 - logger.info(log + "\n执行时间:" + queryTime + "ms"); - } - - } - - private String getCollectionName(Class clazz) { - org.springframework.data.mongodb.core.mapping.Document document = clazz.getAnnotation(org.springframework.data.mongodb.core.mapping.Document.class); - if (document != null) { - if (StrUtil.isNotEmpty(document.value())) { - return document.value(); - } - if (StrUtil.isNotEmpty(document.collection())) { - return document.collection(); - } - } - - return StrUtil.lowerFirst(clazz.getSimpleName()); - } - - /** - * 打印查询语句 - * - * @param query - */ - private void logCount(Class clazz, Query query, Long startTime) { - - MongoPersistentEntity entity = mongoConverter.getMappingContext().getPersistentEntity(clazz); - Document mappedQuery = queryMapper.getMappedObject(query.getQueryObject(), entity); - - String log = "\ndb." + getCollectionName(clazz) + ".find("; - log += FormatUtils.bson(mappedQuery.toJson()) + ")"; - log += ".count();"; - - // 记录慢查询 - Long queryTime = System.currentTimeMillis() - startTime; - if (queryTime > slowTime) { - insertSlowQuery(log, queryTime); - } - if (print) { - // 打印语句 - logger.info(log + "\n执行时间:" + queryTime + "ms"); - } - - } - - /** - * 打印查询语句 - * - * @param query - */ - private void logDelete(Class clazz, Query query, Long startTime) { - - MongoPersistentEntity entity = mongoConverter.getMappingContext().getPersistentEntity(clazz); - Document mappedQuery = queryMapper.getMappedObject(query.getQueryObject(), entity); - - String log = "\ndb." + getCollectionName(clazz) + ".remove("; - log += FormatUtils.bson(mappedQuery.toJson()) + ")"; - log += ";"; - - // 记录慢查询 - Long queryTime = System.currentTimeMillis() - startTime; - if (queryTime > slowTime) { - insertSlowQuery(log, queryTime); - } - if (print) { - // 打印语句 - logger.info(log + "\n执行时间:" + queryTime + "ms"); - } - - } - - /** - * 打印查询语句 - * - * @param query - */ - private void logUpdate(Class clazz, Query query, UpdateBuilder updateBuilder, boolean multi, Long startTime) { - - MongoPersistentEntity entity = mongoConverter.getMappingContext().getPersistentEntity(clazz); - Document mappedQuery = queryMapper.getMappedObject(query.getQueryObject(), entity); - Document mappedUpdate = updateMapper.getMappedObject(updateBuilder.toUpdate().getUpdateObject(), entity); - - String log = "\ndb." + getCollectionName(clazz) + ".update("; - log += FormatUtils.bson(mappedQuery.toJson()) + ","; - log += FormatUtils.bson(mappedUpdate.toJson()) + ","; - log += FormatUtils.bson("{multi:" + multi + "})"); - log += ";"; - - // 记录慢查询 - Long queryTime = System.currentTimeMillis() - startTime; - if (queryTime > slowTime) { - insertSlowQuery(log, queryTime); - } - if (print) { - // 打印语句 - logger.info(log + "\n执行时间:" + queryTime + "ms"); - } - - } - - /** - * 打印查询语句 - * - * @param object - * - * @param query - */ - private void logSave(Object object, Long startTime, Boolean isInsert) { - JSONObject jsonObject = JSONUtil.parseObj(object); - - if (isInsert) { - jsonObject.remove(Constant.ID); - } - - String log = "\ndb." + getCollectionName(object.getClass()) + ".save("; - log += JSONUtil.toJsonPrettyStr(jsonObject); - log += ");"; - - // 记录慢查询 - Long queryTime = System.currentTimeMillis() - startTime; - if (queryTime > slowTime) { - insertSlowQuery(log, queryTime); - } - if (print) { - // 打印语句 - logger.info(log + "\n执行时间:" + queryTime + "ms"); - } - } - - /** - * 打印查询语句 - * - * @param object - * - * @param query - */ - private void logSave(List list, Long startTime) { - List cloneList = new ArrayList<>(); - for (Object item : list) { - JSONObject jsonObject = JSONUtil.parseObj(item); - - jsonObject.remove(Constant.ID); - cloneList.add(jsonObject); - } - - Object object = list.get(0); - String log = "\ndb." + getCollectionName(object.getClass()) + ".save("; - log += JSONUtil.toJsonPrettyStr(cloneList); - log += ");"; - - // 记录慢查询 - Long queryTime = System.currentTimeMillis() - startTime; - if (queryTime > slowTime) { - insertSlowQuery(log, queryTime); - } - if (print) { - // 打印语句 - logger.info(log + "\n执行时间:" + queryTime + "ms"); - } - } - - /** - * 插入或更新 - * - * @param object 对象 - */ - public String insertOrUpdate(Object object) { - - Long time = System.currentTimeMillis(); - String id = (String) ReflectUtil.getFieldValue(object, Constant.ID); - Object objectOrg = StrUtil.isNotEmpty(id) ? findById(id, object.getClass()) : null; - - if (objectOrg == null) { - // 插入 - // 设置插入时间 - setCreateTime(object, time); - // 设置更新时间 - setUpdateTime(object, time); - - // 设置默认值 - setDefaultVaule(object); - // 去除id值 - ReflectUtil.setFieldValue(object, Constant.ID, null); - - // 克隆一个@IgnoreColumn的字段设为null的对象; - Object objectClone = BeanUtil.copyProperties(object, object.getClass()); - ignoreColumn(objectClone); - - mongoTemplate.save(objectClone); - id = (String) ReflectUtil.getFieldValue(objectClone, Constant.ID); - - // 设置id值 - ReflectUtil.setFieldValue(object, Constant.ID, id); - - logSave(objectClone, time, true); - - } else { - // 更新 - Field[] fields = ReflectUtil.getFields(object.getClass()); - // 拷贝属性 - for (Field field : fields) { - if (!field.getName().equals(Constant.ID) && ReflectUtil.getFieldValue(object, field) != null) { - ReflectUtil.setFieldValue(objectOrg, field, ReflectUtil.getFieldValue(object, field)); - } - } - - // 设置更新时间 - setUpdateTime(objectOrg, time); - // 克隆一个@IgnoreColumn的字段设为null的对象; - Object objectClone = BeanUtil.copyProperties(objectOrg, object.getClass()); - ignoreColumn(objectClone); - - mongoTemplate.save(objectClone); - logSave(objectClone, time, false); - } - - return id; - } - - /** - * 插入 - * - * @param object 对象 - */ - public String insert(Object object) { - ReflectUtil.setFieldValue(object, Constant.ID, null); - insertOrUpdate(object); - return (String) ReflectUtil.getFieldValue(object, Constant.ID); - } - - /** - * 批量插入 - * - * @param - * - * @param object 对象 - */ - public void insertAll(List list) { - Long time = System.currentTimeMillis(); - - List listClone = new ArrayList<>(); - for (Object object : list) { - - // 去除id以便插入 - ReflectUtil.setFieldValue(object, Constant.ID, null); - // 设置插入时间 - setCreateTime(object, time); - // 设置更新时间 - setUpdateTime(object, time); - // 设置默认值 - setDefaultVaule(object); - // 克隆一个@IgnoreColumn的字段设为null的对象; - Object objectClone = BeanUtil.copyProperties(object, object.getClass()); - ignoreColumn(objectClone); - listClone.add(objectClone); - } - - mongoTemplate.insertAll(listClone); - logSave(listClone, time); - - } - - /** - * 设置更新时间 - * - * @param object 对象 - */ - private void setUpdateTime(Object object, Long time) { - Field[] fields = ReflectUtil.getFields(object.getClass()); - for (Field field : fields) { - // 获取注解 - if (field.isAnnotationPresent(UpdateTime.class) && field.getType().equals(Long.class)) { - ReflectUtil.setFieldValue(object, field, time); - } - } - } - - /** - * 设置创建时间 - * - * @param object 对象 - */ - private void setCreateTime(Object object, Long time) { - Field[] fields = ReflectUtil.getFields(object.getClass()); - for (Field field : fields) { - // 获取注解 - if (field.isAnnotationPresent(CreateTime.class) && field.getType().equals(Long.class)) { - ReflectUtil.setFieldValue(object, field, time); - } - } - } - - /** - * 将带有@IgnoreColumn的字段设为null; - * - * @param object 对象 - */ - private void ignoreColumn(Object object) { - Field[] fields = ReflectUtil.getFields(object.getClass()); - for (Field field : fields) { - // 获取注解 - if (field.isAnnotationPresent(IgnoreColumn.class)) { - ReflectUtil.setFieldValue(object, field, null); - } - } - } - - /** - * 根据id更新 - * - * @param object 对象 - */ - public void updateById(Object object) { - if (StrUtil.isEmpty((String) ReflectUtil.getFieldValue(object, Constant.ID))) { - return; - } - if (findById((String) ReflectUtil.getFieldValue(object, Constant.ID), object.getClass()) == null) { - return; - } - insertOrUpdate(object); - } - - /** - * 根据id更新全部字段 - * - * @param object 对象 - */ - public void updateAllColumnById(Object object) { - - if (StrUtil.isEmpty((String) ReflectUtil.getFieldValue(object, Constant.ID))) { - return; - } - if (findById((String) ReflectUtil.getFieldValue(object, Constant.ID), object.getClass()) == null) { - return; - } - Long time = System.currentTimeMillis(); - setUpdateTime(object, time); - mongoTemplate.save(object); - logSave(object, time, false); - } - - /** - * 更新查到的第一项 - * - * @param criteria 查询 - * @param update 更新 - * @param clazz 类 - */ - public void updateFirst(CriteriaWrapper criteriaWrapper, UpdateBuilder updateBuilder, Class clazz) { - Long time = System.currentTimeMillis(); - Query query = new Query(criteriaWrapper.build()); - - mongoTemplate.updateFirst(query, updateBuilder.toUpdate(), clazz); - logUpdate(clazz, query, updateBuilder, false, time); - } - - /** - * 更新查到的全部项 - * - * @param criteria 查询 - * @param update 更新 - * @param clazz 类 - */ - public void updateMulti(CriteriaWrapper criteriaWrapper, UpdateBuilder updateBuilder, Class clazz) { - - Long time = System.currentTimeMillis(); - Query query = new Query(criteriaWrapper.build()); - mongoTemplate.updateMulti(new Query(criteriaWrapper.build()), updateBuilder.toUpdate(), clazz); - logUpdate(clazz, query, updateBuilder, true, time); - } - - /** - * 根据id删除 - * - * @param id 对象 - * @param clazz 类 - */ - public void deleteById(String id, Class clazz) { - - if (StrUtil.isEmpty(id)) { - return; - } - deleteByQuery(new CriteriaAndWrapper().eq(Constant::getId, id), clazz); - } - - /** - * 根据id删除 - * - * @param id 对象 - * @param clazz 类 - */ - public void deleteByIds(List ids, Class clazz) { - - if (ids == null || ids.size() == 0) { - return; - } - - deleteByQuery(new CriteriaAndWrapper().in(Constant::getId, ids), clazz); - } - - /** - * 根据条件删除 - * - * @param criteria 查询 - * @param clazz 类 - */ - public void deleteByQuery(CriteriaWrapper criteriaWrapper, Class clazz) { - Long time = System.currentTimeMillis(); - Query query = new Query(criteriaWrapper.build()); - mongoTemplate.remove(query, clazz); - logDelete(clazz, query, time); - } - - /** - * 设置默认值 - * - * @param object 对象 - */ - private void setDefaultVaule(Object object) { - Field[] fields = ReflectUtil.getFields(object.getClass()); - for (Field field : fields) { - // 获取注解 - if (field.isAnnotationPresent(InitValue.class)) { - InitValue defaultValue = field.getAnnotation(InitValue.class); - - String value = defaultValue.value(); - - if (ReflectUtil.getFieldValue(object, field) == null) { - // 获取字段类型 - Class type = field.getType(); - if (type.equals(String.class)) { - ReflectUtil.setFieldValue(object, field, value); - } - if (type.equals(Short.class)) { - ReflectUtil.setFieldValue(object, field, Short.parseShort(value)); - } - if (type.equals(Integer.class)) { - ReflectUtil.setFieldValue(object, field, Integer.parseInt(value)); - } - if (type.equals(Long.class)) { - ReflectUtil.setFieldValue(object, field, Long.parseLong(value)); - } - if (type.equals(Float.class)) { - ReflectUtil.setFieldValue(object, field, Float.parseFloat(value)); - } - if (type.equals(Double.class)) { - ReflectUtil.setFieldValue(object, field, Double.parseDouble(value)); - } - if (type.equals(Boolean.class)) { - ReflectUtil.setFieldValue(object, field, Boolean.parseBoolean(value)); - } - } - } - } - } - - /** - * 累加某一个字段的数量,原子操作 - * - * @param object - */ - public void addCountById(String id, SerializableFunction property, Number count, Class clazz) { - UpdateBuilder updateBuilder = new UpdateBuilder().inc(property, count); - - updateFirst(new CriteriaAndWrapper().eq(Constant::getId, id), updateBuilder, clazz); - } - - /** - * 按查询条件获取Page - * - * @param criteria 查询 - * @param page 分页 - * @param clazz 类 - * @return Page 分页 - */ - public Page findPage(CriteriaWrapper criteriaWrapper, Page page, Class clazz) { - SortBuilder sortBuilder = new SortBuilder(Constant::getId, Direction.DESC); - return findPage(criteriaWrapper, sortBuilder, page, clazz); - } - - /** - * 按查询条件获取Page - * - * @param criteria 查询 - * @param sort 排序 - * @param clazz 类 - * @return Page 分页 - */ - public Page findPage(CriteriaWrapper criteriaWrapper, SortBuilder sortBuilder, Page page, Class clazz) { - - Page pageResp = new Page(); - pageResp.setCurr(page.getCurr()); - pageResp.setLimit(page.getLimit()); - - // 查询出总条数 - if (page.getQueryCount()) { - Long count = findCountByQuery(criteriaWrapper, clazz); - pageResp.setCount(count); - } - - // 查询List - Query query = new Query(criteriaWrapper.build()); - query.with(sortBuilder.toSort()); - query.skip((page.getCurr() - 1) * page.getLimit());// 从那条记录开始 - query.limit(page.getLimit());// 取多少条记录 - - Long systemTime = System.currentTimeMillis(); - List list = mongoTemplate.find(query, clazz); - logQuery(clazz, query, systemTime); - - pageResp.setList(list); - - return pageResp; - } - - /** - * 按查询条件获取Page - * - * @param criteria 查询 - * @param sort 排序 - * @param clazz 类 - * @return Page 分页 - */ - public Page findPage(SortBuilder sortBuilder, Page page, Class clazz) { - return findPage(new CriteriaAndWrapper(), sortBuilder, page, clazz); - } - - /** - * 获取Page - * - * @param page 分页 - * @param clazz 类 - * @return Page 分页 - */ - public Page findPage(Page page, Class clazz) { - return findPage(new CriteriaAndWrapper(), page, clazz); - } - - /** - * 根据id查找 - * - * @param id id - * @param clazz 类 - * @return T 对象 - */ - public T findById(String id, Class clazz) { - - if (StrUtil.isEmpty(id)) { - return null; - } - Long systemTime = System.currentTimeMillis(); - - T t = (T) mongoTemplate.findById(id, clazz); - - CriteriaAndWrapper criteriaAndWrapper = new CriteriaAndWrapper().eq(Constant::getId, id); - logQuery(clazz, new Query(criteriaAndWrapper.build()), systemTime); - return t; - } - - /** - * 根据条件查找单个 - * - * @param 类型 - * @param criteria - * @param clazz 类 - * @return T 对象 - */ - public T findOneByQuery(CriteriaWrapper criteriaWrapper, Class clazz) { - SortBuilder sortBuilder = new SortBuilder(Constant::getId, Direction.DESC); - return (T) findOneByQuery(criteriaWrapper, sortBuilder, clazz); - } - - /** - * 根据条件查找单个 - * - * @param query 查询 - * @param clazz 类 - * @return T 对象 - */ - public T findOneByQuery(CriteriaWrapper criteriaWrapper, SortBuilder sortBuilder, Class clazz) { - - Query query = new Query(criteriaWrapper.build()); - query.limit(1); - query.with(sortBuilder.toSort()); - - Long systemTime = System.currentTimeMillis(); - T t = (T) mongoTemplate.findOne(query, clazz); - logQuery(clazz, query, systemTime); - - return t; - - } - - /** - * 根据条件查找单个 - * - * @param query 查询 - * @param clazz 类 - * @return T 对象 - */ - public T findOneByQuery(SortBuilder sortBuilder, Class clazz) { - return (T) findOneByQuery(new CriteriaAndWrapper(), sortBuilder, clazz); - } - - /** - * 根据条件查找List - * - * @param 类型 - * @param criteria 查询 - * @param clazz 类 - * @return List 列表 - */ - public List findListByQuery(CriteriaWrapper criteriaWrapper, Class clazz) { - SortBuilder sortBuilder = new SortBuilder().add(Constant::getId, Direction.DESC); - return findListByQuery(criteriaWrapper, sortBuilder, clazz); - - } - - /** - * 根据条件查找List - * - * @param 类型 - * @param criteria 查询 - * @param sort 排序 - * @param clazz 类 - * @return List 列表 - */ - public List findListByQuery(CriteriaWrapper criteriaWrapper, SortBuilder sortBuilder, Class clazz) { - Query query = new Query(criteriaWrapper.build()); - query.with(sortBuilder.toSort()); - - Long systemTime = System.currentTimeMillis(); - List list = mongoTemplate.find(query, clazz); - logQuery(clazz, query, systemTime); - return list; - - } - - /** - * 根据条件查找某个属性 - * - * @param 类型 - * @param criteria 查询 - * @param documentClass 类 - * @param property 属性 - * @param propertyClass 属性类 - * @return List 列表 - */ - public List findPropertiesByQuery(CriteriaWrapper criteriaWrapper, Class documentClass, SerializableFunction property, Class propertyClass) { - Query query = new Query(criteriaWrapper.build()); - query.fields().include(ReflectionUtil.getFieldName(property)); - - Long systemTime = System.currentTimeMillis(); - List list = mongoTemplate.find(query, documentClass); - logQuery(documentClass, query, systemTime); - - List propertyList = extractProperty(list, ReflectionUtil.getFieldName(property), propertyClass); - return propertyList; - } - - /** - * 根据条件查找某个属性 - * - * @param 类型 - * @param criteria 查询 - * @param documentClass 类 - * @param property 属性 - * @return List 列表 - */ - public List findPropertiesByQuery(CriteriaWrapper criteriaWrapper, Class documentClass, SerializableFunction property) { - return findPropertiesByQuery(criteriaWrapper, documentClass, property, String.class); - } - - /** - * 根据id查找某个属性 - * - * @param 类型 - * @param criteria 查询 - * @param documentClass 类 - * @param property 属性 - * @return List 列表 - */ - public List findPropertiesByIds(List ids, Class clazz, SerializableFunction property) { - CriteriaAndWrapper criteriaAndWrapper = new CriteriaAndWrapper().in(Constant::getId, ids); - return findPropertiesByQuery(criteriaAndWrapper, clazz, property); - } - - /** - * 根据条件查找id - * - * @param criteria 查询 - * @param clazz 类 - * @return List 列表 - */ - public List findIdsByQuery(CriteriaWrapper criteriaWrapper, Class clazz) { - return findPropertiesByQuery(criteriaWrapper, clazz, Constant::getId); - } - - /** - * 根据id集合查找 - * - * @param List ids id集合 - * @param clazz 类 - * @return List 列表 - */ - public List findListByIds(Collection ids, Class clazz) { - CriteriaAndWrapper criteriaAndWrapper = new CriteriaAndWrapper().in(Constant::getId, ids); - return findListByQuery(criteriaAndWrapper, clazz); - } - - /** - * 根据id集合查找 - * - * @param List ids id集合 - * @param clazz 类 - * @return List 列表 - */ - public List findListByIds(Collection ids, SortBuilder sortBuilder, Class clazz) { - CriteriaAndWrapper criteriaAndWrapper = new CriteriaAndWrapper().in(Constant::getId, ids); - return findListByQuery(criteriaAndWrapper, sortBuilder, clazz); - } - - /** - * 根据id集合查找 - * - * @param Array ids id集合 - * @param clazz 类 - * @return List 列表 - */ - public List findListByIds(String[] ids, SortBuilder sortBuilder, Class clazz) { - return findListByIds(Arrays.asList(ids), sortBuilder, clazz); - } - - /** - * 根据id集合查找 - * - * @param Array ids id集合 - * @param clazz 类 - * @return List 列表 - */ - public List findListByIds(String[] ids, Class clazz) { - SortBuilder sortBuilder = new SortBuilder(Constant::getId, Direction.DESC); - return findListByIds(ids, sortBuilder, clazz); - } - - /** - * 查询全部 - * - * @param 类型 - * @param clazz 类 - * @return List 列表 - */ - public List findAll(Class clazz) { - SortBuilder sortBuilder = new SortBuilder(Constant::getId, Direction.DESC); - return findListByQuery(new CriteriaAndWrapper(), sortBuilder, clazz); - } - - /** - * 查询全部 - * - * @param 类型 - * @param clazz 类 - * @return List 列表 - */ - public List findAll(SortBuilder sortBuilder, Class clazz) { - return findListByQuery(new CriteriaAndWrapper(), sortBuilder, clazz); - } - - /** - * 查找全部的id - * - * @param clazz 类 - * @return List 列表 - */ - public List findAllIds(Class clazz) { - return findIdsByQuery(new CriteriaAndWrapper(), clazz); - } - - /** - * 查找数量 - * - * @param criteria 查询 - * @param clazz 类 - * @return Long 数量 - */ - public Long findCountByQuery(CriteriaWrapper criteriaWrapper, Class clazz) { - Long systemTime = System.currentTimeMillis(); - Long count = null; - - Query query = new Query(criteriaWrapper.build()); - if (query.getQueryObject().isEmpty()) { - count = mongoTemplate.getCollection(mongoTemplate.getCollectionName(clazz)).estimatedDocumentCount(); - } else { - count = mongoTemplate.count(query, clazz); - } - - logCount(clazz, query, systemTime); - return count; - } - - /** - * 查找全部数量 - * - * @param clazz 类 - * @return Long 数量 - */ - public Long findAllCount(Class clazz) { - return findCountByQuery(new CriteriaAndWrapper(), clazz); - } - - /** - * 获取list中对象某个属性,组成新的list - * - * @param list 列表 - * @param clazz 类 - * @param property 属性 - * @return List 列表 - */ - @SuppressWarnings("unchecked") - private List extractProperty(List list, String property, Class clazz) { - Set rs = new HashSet(); - for (Object object : list) { - Object value = ReflectUtil.getFieldValue(object, property); - if (value != null && value.getClass().equals(clazz)) { - rs.add((T) value); - } - } - - return new ArrayList(rs); - } - -} +//package com.ruoyi.biemo.mongodb.utils; +// +//import java.lang.reflect.Field; +//import java.util.ArrayList; +//import java.util.Arrays; +//import java.util.Collection; +//import java.util.Date; +//import java.util.HashSet; +//import java.util.List; +//import java.util.Set; +// +//import javax.annotation.PostConstruct; +// +//import com.ruoyi.biemo.mongodb.bean.*; +//import com.ruoyi.biemo.mongodb.config.Constant; +//import com.ruoyi.biemo.mongodb.reflection.ReflectionUtil; +//import com.ruoyi.biemo.mongodb.reflection.SerializableFunction; +//import org.bson.Document; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.beans.factory.annotation.Value; +//import org.springframework.data.domain.Sort.Direction; +//import org.springframework.data.mongodb.core.MongoTemplate; +//import org.springframework.data.mongodb.core.convert.MongoConverter; +//import org.springframework.data.mongodb.core.convert.QueryMapper; +//import org.springframework.data.mongodb.core.convert.UpdateMapper; +//import org.springframework.data.mongodb.core.mapping.MongoPersistentEntity; +//import org.springframework.data.mongodb.core.query.Query; +//import org.springframework.stereotype.Service; +//import cn.hutool.core.bean.BeanUtil; +//import cn.hutool.core.date.DateUtil; +//import cn.hutool.core.util.ReflectUtil; +//import cn.hutool.core.util.StrUtil; +//import cn.hutool.json.JSONObject; +//import cn.hutool.json.JSONUtil; +// +///** +// * mongodb操作器 +// * +// */ +//@Service("mongoHelper") +//public class MongoHelper { +// Logger logger = LoggerFactory.getLogger(this.getClass()); +// +// @Autowired +// protected MongoConverter mongoConverter; +// +// protected QueryMapper queryMapper; +// protected UpdateMapper updateMapper; +// +// @Autowired +// protected MongoTemplate mongoTemplate; +// +// public MongoTemplate getMongoTemplate() { +// return mongoTemplate; +// } +// +// @Value("${spring.data.mongodb.print:false}") +// protected Boolean print; +// +// @Value("${spring.data.mongodb.slowQuery:false}") +// protected Boolean slowQuery; +// +// @Value("${spring.data.mongodb.slowTime:1000}") +// protected Long slowTime; +// +// @PostConstruct +// public void init() { +// queryMapper = new QueryMapper(mongoConverter); +// updateMapper = new UpdateMapper(mongoConverter); +// } +// +// private void insertSlowQuery(String log, Long queryTime) { +// if (slowQuery) { +// SlowQuery slowQuery = new SlowQuery(); +// slowQuery.setQuery(log); +// slowQuery.setTime(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss")); +// slowQuery.setQueryTime(queryTime); +// slowQuery.setSystem(SystemTool.getSystem()); +// StackTraceElement stack[] = Thread.currentThread().getStackTrace(); +// +// // 保存堆栈 +// String stackStr = ""; +// for (int i = 0; i < stack.length; i++) { +// stackStr += stack[i].getClassName() + "." + stack[i].getMethodName() + ":" + stack[i].getLineNumber() + "\n"; +// } +// slowQuery.setStack(stackStr); +// +// mongoTemplate.insert(slowQuery); +// } +// } +// +// /** +// * 打印查询语句 +// * +// * @param query +// */ +// private void logQuery(Class clazz, Query query, Long startTime) { +// +// MongoPersistentEntity entity = mongoConverter.getMappingContext().getPersistentEntity(clazz); +// Document mappedQuery = queryMapper.getMappedObject(query.getQueryObject(), entity); +// Document mappedField = queryMapper.getMappedObject(query.getFieldsObject(), entity); +// Document mappedSort = queryMapper.getMappedObject(query.getSortObject(), entity); +// +// String log = "\ndb." + getCollectionName(clazz) + ".find("; +// +// log += FormatUtils.bson(mappedQuery.toJson()) + ")"; +// +// if (!query.getFieldsObject().isEmpty()) { +// log += ".projection("; +// log += FormatUtils.bson(mappedField.toJson()) + ")"; +// } +// +// if (query.isSorted()) { +// log += ".sort("; +// log += FormatUtils.bson(mappedSort.toJson()) + ")"; +// } +// +// if (query.getLimit() != 0l) { +// log += ".limit(" + query.getLimit() + ")"; +// } +// +// if (query.getSkip() != 0l) { +// log += ".skip(" + query.getSkip() + ")"; +// } +// log += ";"; +// +// // 记录慢查询 +// Long queryTime = System.currentTimeMillis() - startTime; +// if (queryTime > slowTime) { +// insertSlowQuery(log, queryTime); +// } +// if (print) { +// // 打印语句 +// logger.info(log + "\n执行时间:" + queryTime + "ms"); +// } +// +// } +// +// private String getCollectionName(Class clazz) { +// org.springframework.data.mongodb.core.mapping.Document document = clazz.getAnnotation(org.springframework.data.mongodb.core.mapping.Document.class); +// if (document != null) { +// if (StrUtil.isNotEmpty(document.value())) { +// return document.value(); +// } +// if (StrUtil.isNotEmpty(document.collection())) { +// return document.collection(); +// } +// } +// +// return StrUtil.lowerFirst(clazz.getSimpleName()); +// } +// +// /** +// * 打印查询语句 +// * +// * @param query +// */ +// private void logCount(Class clazz, Query query, Long startTime) { +// +// MongoPersistentEntity entity = mongoConverter.getMappingContext().getPersistentEntity(clazz); +// Document mappedQuery = queryMapper.getMappedObject(query.getQueryObject(), entity); +// +// String log = "\ndb." + getCollectionName(clazz) + ".find("; +// log += FormatUtils.bson(mappedQuery.toJson()) + ")"; +// log += ".count();"; +// +// // 记录慢查询 +// Long queryTime = System.currentTimeMillis() - startTime; +// if (queryTime > slowTime) { +// insertSlowQuery(log, queryTime); +// } +// if (print) { +// // 打印语句 +// logger.info(log + "\n执行时间:" + queryTime + "ms"); +// } +// +// } +// +// /** +// * 打印查询语句 +// * +// * @param query +// */ +// private void logDelete(Class clazz, Query query, Long startTime) { +// +// MongoPersistentEntity entity = mongoConverter.getMappingContext().getPersistentEntity(clazz); +// Document mappedQuery = queryMapper.getMappedObject(query.getQueryObject(), entity); +// +// String log = "\ndb." + getCollectionName(clazz) + ".remove("; +// log += FormatUtils.bson(mappedQuery.toJson()) + ")"; +// log += ";"; +// +// // 记录慢查询 +// Long queryTime = System.currentTimeMillis() - startTime; +// if (queryTime > slowTime) { +// insertSlowQuery(log, queryTime); +// } +// if (print) { +// // 打印语句 +// logger.info(log + "\n执行时间:" + queryTime + "ms"); +// } +// +// } +// +// /** +// * 打印查询语句 +// * +// * @param query +// */ +// private void logUpdate(Class clazz, Query query, UpdateBuilder updateBuilder, boolean multi, Long startTime) { +// +// MongoPersistentEntity entity = mongoConverter.getMappingContext().getPersistentEntity(clazz); +// Document mappedQuery = queryMapper.getMappedObject(query.getQueryObject(), entity); +// Document mappedUpdate = updateMapper.getMappedObject(updateBuilder.toUpdate().getUpdateObject(), entity); +// +// String log = "\ndb." + getCollectionName(clazz) + ".update("; +// log += FormatUtils.bson(mappedQuery.toJson()) + ","; +// log += FormatUtils.bson(mappedUpdate.toJson()) + ","; +// log += FormatUtils.bson("{multi:" + multi + "})"); +// log += ";"; +// +// // 记录慢查询 +// Long queryTime = System.currentTimeMillis() - startTime; +// if (queryTime > slowTime) { +// insertSlowQuery(log, queryTime); +// } +// if (print) { +// // 打印语句 +// logger.info(log + "\n执行时间:" + queryTime + "ms"); +// } +// +// } +// +// /** +// * 打印查询语句 +// * +// * @param object +// * +// * @param query +// */ +// private void logSave(Object object, Long startTime, Boolean isInsert) { +// JSONObject jsonObject = JSONUtil.parseObj(object); +// +// if (isInsert) { +// jsonObject.remove(Constant.ID); +// } +// +// String log = "\ndb." + getCollectionName(object.getClass()) + ".save("; +// log += JSONUtil.toJsonPrettyStr(jsonObject); +// log += ");"; +// +// // 记录慢查询 +// Long queryTime = System.currentTimeMillis() - startTime; +// if (queryTime > slowTime) { +// insertSlowQuery(log, queryTime); +// } +// if (print) { +// // 打印语句 +// logger.info(log + "\n执行时间:" + queryTime + "ms"); +// } +// } +// +// /** +// * 打印查询语句 +// * +// * @param object +// * +// * @param query +// */ +// private void logSave(List list, Long startTime) { +// List cloneList = new ArrayList<>(); +// for (Object item : list) { +// JSONObject jsonObject = JSONUtil.parseObj(item); +// +// jsonObject.remove(Constant.ID); +// cloneList.add(jsonObject); +// } +// +// Object object = list.get(0); +// String log = "\ndb." + getCollectionName(object.getClass()) + ".save("; +// log += JSONUtil.toJsonPrettyStr(cloneList); +// log += ");"; +// +// // 记录慢查询 +// Long queryTime = System.currentTimeMillis() - startTime; +// if (queryTime > slowTime) { +// insertSlowQuery(log, queryTime); +// } +// if (print) { +// // 打印语句 +// logger.info(log + "\n执行时间:" + queryTime + "ms"); +// } +// } +// +// /** +// * 插入或更新 +// * +// * @param object 对象 +// */ +// public String insertOrUpdate(Object object) { +// +// Long time = System.currentTimeMillis(); +// String id = (String) ReflectUtil.getFieldValue(object, Constant.ID); +// Object objectOrg = StrUtil.isNotEmpty(id) ? findById(id, object.getClass()) : null; +// +// if (objectOrg == null) { +// // 插入 +// // 设置插入时间 +// setCreateTime(object, time); +// // 设置更新时间 +// setUpdateTime(object, time); +// +// // 设置默认值 +// setDefaultVaule(object); +// // 去除id值 +// ReflectUtil.setFieldValue(object, Constant.ID, null); +// +// // 克隆一个@IgnoreColumn的字段设为null的对象; +// Object objectClone = BeanUtil.copyProperties(object, object.getClass()); +// ignoreColumn(objectClone); +// +// mongoTemplate.save(objectClone); +// id = (String) ReflectUtil.getFieldValue(objectClone, Constant.ID); +// +// // 设置id值 +// ReflectUtil.setFieldValue(object, Constant.ID, id); +// +// logSave(objectClone, time, true); +// +// } else { +// // 更新 +// Field[] fields = ReflectUtil.getFields(object.getClass()); +// // 拷贝属性 +// for (Field field : fields) { +// if (!field.getName().equals(Constant.ID) && ReflectUtil.getFieldValue(object, field) != null) { +// ReflectUtil.setFieldValue(objectOrg, field, ReflectUtil.getFieldValue(object, field)); +// } +// } +// +// // 设置更新时间 +// setUpdateTime(objectOrg, time); +// // 克隆一个@IgnoreColumn的字段设为null的对象; +// Object objectClone = BeanUtil.copyProperties(objectOrg, object.getClass()); +// ignoreColumn(objectClone); +// +// mongoTemplate.save(objectClone); +// logSave(objectClone, time, false); +// } +// +// return id; +// } +// +// /** +// * 插入 +// * +// * @param object 对象 +// */ +// public String insert(Object object) { +// ReflectUtil.setFieldValue(object, Constant.ID, null); +// insertOrUpdate(object); +// return (String) ReflectUtil.getFieldValue(object, Constant.ID); +// } +// +// /** +// * 批量插入 +// * +// * @param +// * +// * @param object 对象 +// */ +// public void insertAll(List list) { +// Long time = System.currentTimeMillis(); +// +// List listClone = new ArrayList<>(); +// for (Object object : list) { +// +// // 去除id以便插入 +// ReflectUtil.setFieldValue(object, Constant.ID, null); +// // 设置插入时间 +// setCreateTime(object, time); +// // 设置更新时间 +// setUpdateTime(object, time); +// // 设置默认值 +// setDefaultVaule(object); +// // 克隆一个@IgnoreColumn的字段设为null的对象; +// Object objectClone = BeanUtil.copyProperties(object, object.getClass()); +// ignoreColumn(objectClone); +// listClone.add(objectClone); +// } +// +// mongoTemplate.insertAll(listClone); +// logSave(listClone, time); +// +// } +// +// /** +// * 设置更新时间 +// * +// * @param object 对象 +// */ +// private void setUpdateTime(Object object, Long time) { +// Field[] fields = ReflectUtil.getFields(object.getClass()); +// for (Field field : fields) { +// // 获取注解 +// if (field.isAnnotationPresent(UpdateTime.class) && field.getType().equals(Long.class)) { +// ReflectUtil.setFieldValue(object, field, time); +// } +// } +// } +// +// /** +// * 设置创建时间 +// * +// * @param object 对象 +// */ +// private void setCreateTime(Object object, Long time) { +// Field[] fields = ReflectUtil.getFields(object.getClass()); +// for (Field field : fields) { +// // 获取注解 +// if (field.isAnnotationPresent(CreateTime.class) && field.getType().equals(Long.class)) { +// ReflectUtil.setFieldValue(object, field, time); +// } +// } +// } +// +// /** +// * 将带有@IgnoreColumn的字段设为null; +// * +// * @param object 对象 +// */ +// private void ignoreColumn(Object object) { +// Field[] fields = ReflectUtil.getFields(object.getClass()); +// for (Field field : fields) { +// // 获取注解 +// if (field.isAnnotationPresent(IgnoreColumn.class)) { +// ReflectUtil.setFieldValue(object, field, null); +// } +// } +// } +// +// /** +// * 根据id更新 +// * +// * @param object 对象 +// */ +// public void updateById(Object object) { +// if (StrUtil.isEmpty((String) ReflectUtil.getFieldValue(object, Constant.ID))) { +// return; +// } +// if (findById((String) ReflectUtil.getFieldValue(object, Constant.ID), object.getClass()) == null) { +// return; +// } +// insertOrUpdate(object); +// } +// +// /** +// * 根据id更新全部字段 +// * +// * @param object 对象 +// */ +// public void updateAllColumnById(Object object) { +// +// if (StrUtil.isEmpty((String) ReflectUtil.getFieldValue(object, Constant.ID))) { +// return; +// } +// if (findById((String) ReflectUtil.getFieldValue(object, Constant.ID), object.getClass()) == null) { +// return; +// } +// Long time = System.currentTimeMillis(); +// setUpdateTime(object, time); +// mongoTemplate.save(object); +// logSave(object, time, false); +// } +// +// /** +// * 更新查到的第一项 +// * +// * @param criteria 查询 +// * @param update 更新 +// * @param clazz 类 +// */ +// public void updateFirst(CriteriaWrapper criteriaWrapper, UpdateBuilder updateBuilder, Class clazz) { +// Long time = System.currentTimeMillis(); +// Query query = new Query(criteriaWrapper.build()); +// +// mongoTemplate.updateFirst(query, updateBuilder.toUpdate(), clazz); +// logUpdate(clazz, query, updateBuilder, false, time); +// } +// +// /** +// * 更新查到的全部项 +// * +// * @param criteria 查询 +// * @param update 更新 +// * @param clazz 类 +// */ +// public void updateMulti(CriteriaWrapper criteriaWrapper, UpdateBuilder updateBuilder, Class clazz) { +// +// Long time = System.currentTimeMillis(); +// Query query = new Query(criteriaWrapper.build()); +// mongoTemplate.updateMulti(new Query(criteriaWrapper.build()), updateBuilder.toUpdate(), clazz); +// logUpdate(clazz, query, updateBuilder, true, time); +// } +// +// /** +// * 根据id删除 +// * +// * @param id 对象 +// * @param clazz 类 +// */ +// public void deleteById(String id, Class clazz) { +// +// if (StrUtil.isEmpty(id)) { +// return; +// } +// deleteByQuery(new CriteriaAndWrapper().eq(Constant::getId, id), clazz); +// } +// +// /** +// * 根据id删除 +// * +// * @param id 对象 +// * @param clazz 类 +// */ +// public void deleteByIds(List ids, Class clazz) { +// +// if (ids == null || ids.size() == 0) { +// return; +// } +// +// deleteByQuery(new CriteriaAndWrapper().in(Constant::getId, ids), clazz); +// } +// +// /** +// * 根据条件删除 +// * +// * @param criteria 查询 +// * @param clazz 类 +// */ +// public void deleteByQuery(CriteriaWrapper criteriaWrapper, Class clazz) { +// Long time = System.currentTimeMillis(); +// Query query = new Query(criteriaWrapper.build()); +// mongoTemplate.remove(query, clazz); +// logDelete(clazz, query, time); +// } +// +// /** +// * 设置默认值 +// * +// * @param object 对象 +// */ +// private void setDefaultVaule(Object object) { +// Field[] fields = ReflectUtil.getFields(object.getClass()); +// for (Field field : fields) { +// // 获取注解 +// if (field.isAnnotationPresent(InitValue.class)) { +// InitValue defaultValue = field.getAnnotation(InitValue.class); +// +// String value = defaultValue.value(); +// +// if (ReflectUtil.getFieldValue(object, field) == null) { +// // 获取字段类型 +// Class type = field.getType(); +// if (type.equals(String.class)) { +// ReflectUtil.setFieldValue(object, field, value); +// } +// if (type.equals(Short.class)) { +// ReflectUtil.setFieldValue(object, field, Short.parseShort(value)); +// } +// if (type.equals(Integer.class)) { +// ReflectUtil.setFieldValue(object, field, Integer.parseInt(value)); +// } +// if (type.equals(Long.class)) { +// ReflectUtil.setFieldValue(object, field, Long.parseLong(value)); +// } +// if (type.equals(Float.class)) { +// ReflectUtil.setFieldValue(object, field, Float.parseFloat(value)); +// } +// if (type.equals(Double.class)) { +// ReflectUtil.setFieldValue(object, field, Double.parseDouble(value)); +// } +// if (type.equals(Boolean.class)) { +// ReflectUtil.setFieldValue(object, field, Boolean.parseBoolean(value)); +// } +// } +// } +// } +// } +// +// /** +// * 累加某一个字段的数量,原子操作 +// * +// * @param object +// */ +// public void addCountById(String id, SerializableFunction property, Number count, Class clazz) { +// UpdateBuilder updateBuilder = new UpdateBuilder().inc(property, count); +// +// updateFirst(new CriteriaAndWrapper().eq(Constant::getId, id), updateBuilder, clazz); +// } +// +// /** +// * 按查询条件获取Page +// * +// * @param criteria 查询 +// * @param page 分页 +// * @param clazz 类 +// * @return Page 分页 +// */ +// public Page findPage(CriteriaWrapper criteriaWrapper, Page page, Class clazz) { +// SortBuilder sortBuilder = new SortBuilder(Constant::getId, Direction.DESC); +// return findPage(criteriaWrapper, sortBuilder, page, clazz); +// } +// +// /** +// * 按查询条件获取Page +// * +// * @param criteria 查询 +// * @param sort 排序 +// * @param clazz 类 +// * @return Page 分页 +// */ +// public Page findPage(CriteriaWrapper criteriaWrapper, SortBuilder sortBuilder, Page page, Class clazz) { +// +// Page pageResp = new Page(); +// pageResp.setCurr(page.getCurr()); +// pageResp.setLimit(page.getLimit()); +// +// // 查询出总条数 +// if (page.getQueryCount()) { +// Long count = findCountByQuery(criteriaWrapper, clazz); +// pageResp.setCount(count); +// } +// +// // 查询List +// Query query = new Query(criteriaWrapper.build()); +// query.with(sortBuilder.toSort()); +// query.skip((page.getCurr() - 1) * page.getLimit());// 从那条记录开始 +// query.limit(page.getLimit());// 取多少条记录 +// +// Long systemTime = System.currentTimeMillis(); +// List list = mongoTemplate.find(query, clazz); +// logQuery(clazz, query, systemTime); +// +// pageResp.setList(list); +// +// return pageResp; +// } +// +// /** +// * 按查询条件获取Page +// * +// * @param criteria 查询 +// * @param sort 排序 +// * @param clazz 类 +// * @return Page 分页 +// */ +// public Page findPage(SortBuilder sortBuilder, Page page, Class clazz) { +// return findPage(new CriteriaAndWrapper(), sortBuilder, page, clazz); +// } +// +// /** +// * 获取Page +// * +// * @param page 分页 +// * @param clazz 类 +// * @return Page 分页 +// */ +// public Page findPage(Page page, Class clazz) { +// return findPage(new CriteriaAndWrapper(), page, clazz); +// } +// +// /** +// * 根据id查找 +// * +// * @param id id +// * @param clazz 类 +// * @return T 对象 +// */ +// public T findById(String id, Class clazz) { +// +// if (StrUtil.isEmpty(id)) { +// return null; +// } +// Long systemTime = System.currentTimeMillis(); +// +// T t = (T) mongoTemplate.findById(id, clazz); +// +// CriteriaAndWrapper criteriaAndWrapper = new CriteriaAndWrapper().eq(Constant::getId, id); +// logQuery(clazz, new Query(criteriaAndWrapper.build()), systemTime); +// return t; +// } +// +// /** +// * 根据条件查找单个 +// * +// * @param 类型 +// * @param criteria +// * @param clazz 类 +// * @return T 对象 +// */ +// public T findOneByQuery(CriteriaWrapper criteriaWrapper, Class clazz) { +// SortBuilder sortBuilder = new SortBuilder(Constant::getId, Direction.DESC); +// return (T) findOneByQuery(criteriaWrapper, sortBuilder, clazz); +// } +// +// /** +// * 根据条件查找单个 +// * +// * @param query 查询 +// * @param clazz 类 +// * @return T 对象 +// */ +// public T findOneByQuery(CriteriaWrapper criteriaWrapper, SortBuilder sortBuilder, Class clazz) { +// +// Query query = new Query(criteriaWrapper.build()); +// query.limit(1); +// query.with(sortBuilder.toSort()); +// +// Long systemTime = System.currentTimeMillis(); +// T t = (T) mongoTemplate.findOne(query, clazz); +// logQuery(clazz, query, systemTime); +// +// return t; +// +// } +// +// /** +// * 根据条件查找单个 +// * +// * @param query 查询 +// * @param clazz 类 +// * @return T 对象 +// */ +// public T findOneByQuery(SortBuilder sortBuilder, Class clazz) { +// return (T) findOneByQuery(new CriteriaAndWrapper(), sortBuilder, clazz); +// } +// +// /** +// * 根据条件查找List +// * +// * @param 类型 +// * @param criteria 查询 +// * @param clazz 类 +// * @return List 列表 +// */ +// public List findListByQuery(CriteriaWrapper criteriaWrapper, Class clazz) { +// SortBuilder sortBuilder = new SortBuilder().add(Constant::getId, Direction.DESC); +// return findListByQuery(criteriaWrapper, sortBuilder, clazz); +// +// } +// +// /** +// * 根据条件查找List +// * +// * @param 类型 +// * @param criteria 查询 +// * @param sort 排序 +// * @param clazz 类 +// * @return List 列表 +// */ +// public List findListByQuery(CriteriaWrapper criteriaWrapper, SortBuilder sortBuilder, Class clazz) { +// Query query = new Query(criteriaWrapper.build()); +// query.with(sortBuilder.toSort()); +// +// Long systemTime = System.currentTimeMillis(); +// List list = mongoTemplate.find(query, clazz); +// logQuery(clazz, query, systemTime); +// return list; +// +// } +// +// /** +// * 根据条件查找某个属性 +// * +// * @param 类型 +// * @param criteria 查询 +// * @param documentClass 类 +// * @param property 属性 +// * @param propertyClass 属性类 +// * @return List 列表 +// */ +// public List findPropertiesByQuery(CriteriaWrapper criteriaWrapper, Class documentClass, SerializableFunction property, Class propertyClass) { +// Query query = new Query(criteriaWrapper.build()); +// query.fields().include(ReflectionUtil.getFieldName(property)); +// +// Long systemTime = System.currentTimeMillis(); +// List list = mongoTemplate.find(query, documentClass); +// logQuery(documentClass, query, systemTime); +// +// List propertyList = extractProperty(list, ReflectionUtil.getFieldName(property), propertyClass); +// return propertyList; +// } +// +// /** +// * 根据条件查找某个属性 +// * +// * @param 类型 +// * @param criteria 查询 +// * @param documentClass 类 +// * @param property 属性 +// * @return List 列表 +// */ +// public List findPropertiesByQuery(CriteriaWrapper criteriaWrapper, Class documentClass, SerializableFunction property) { +// return findPropertiesByQuery(criteriaWrapper, documentClass, property, String.class); +// } +// +// /** +// * 根据id查找某个属性 +// * +// * @param 类型 +// * @param criteria 查询 +// * @param documentClass 类 +// * @param property 属性 +// * @return List 列表 +// */ +// public List findPropertiesByIds(List ids, Class clazz, SerializableFunction property) { +// CriteriaAndWrapper criteriaAndWrapper = new CriteriaAndWrapper().in(Constant::getId, ids); +// return findPropertiesByQuery(criteriaAndWrapper, clazz, property); +// } +// +// /** +// * 根据条件查找id +// * +// * @param criteria 查询 +// * @param clazz 类 +// * @return List 列表 +// */ +// public List findIdsByQuery(CriteriaWrapper criteriaWrapper, Class clazz) { +// return findPropertiesByQuery(criteriaWrapper, clazz, Constant::getId); +// } +// +// /** +// * 根据id集合查找 +// * +// * @param List ids id集合 +// * @param clazz 类 +// * @return List 列表 +// */ +// public List findListByIds(Collection ids, Class clazz) { +// CriteriaAndWrapper criteriaAndWrapper = new CriteriaAndWrapper().in(Constant::getId, ids); +// return findListByQuery(criteriaAndWrapper, clazz); +// } +// +// /** +// * 根据id集合查找 +// * +// * @param List ids id集合 +// * @param clazz 类 +// * @return List 列表 +// */ +// public List findListByIds(Collection ids, SortBuilder sortBuilder, Class clazz) { +// CriteriaAndWrapper criteriaAndWrapper = new CriteriaAndWrapper().in(Constant::getId, ids); +// return findListByQuery(criteriaAndWrapper, sortBuilder, clazz); +// } +// +// /** +// * 根据id集合查找 +// * +// * @param Array ids id集合 +// * @param clazz 类 +// * @return List 列表 +// */ +// public List findListByIds(String[] ids, SortBuilder sortBuilder, Class clazz) { +// return findListByIds(Arrays.asList(ids), sortBuilder, clazz); +// } +// +// /** +// * 根据id集合查找 +// * +// * @param Array ids id集合 +// * @param clazz 类 +// * @return List 列表 +// */ +// public List findListByIds(String[] ids, Class clazz) { +// SortBuilder sortBuilder = new SortBuilder(Constant::getId, Direction.DESC); +// return findListByIds(ids, sortBuilder, clazz); +// } +// +// /** +// * 查询全部 +// * +// * @param 类型 +// * @param clazz 类 +// * @return List 列表 +// */ +// public List findAll(Class clazz) { +// SortBuilder sortBuilder = new SortBuilder(Constant::getId, Direction.DESC); +// return findListByQuery(new CriteriaAndWrapper(), sortBuilder, clazz); +// } +// +// /** +// * 查询全部 +// * +// * @param 类型 +// * @param clazz 类 +// * @return List 列表 +// */ +// public List findAll(SortBuilder sortBuilder, Class clazz) { +// return findListByQuery(new CriteriaAndWrapper(), sortBuilder, clazz); +// } +// +// /** +// * 查找全部的id +// * +// * @param clazz 类 +// * @return List 列表 +// */ +// public List findAllIds(Class clazz) { +// return findIdsByQuery(new CriteriaAndWrapper(), clazz); +// } +// +// /** +// * 查找数量 +// * +// * @param criteria 查询 +// * @param clazz 类 +// * @return Long 数量 +// */ +// public Long findCountByQuery(CriteriaWrapper criteriaWrapper, Class clazz) { +// Long systemTime = System.currentTimeMillis(); +// Long count = null; +// +// Query query = new Query(criteriaWrapper.build()); +// if (query.getQueryObject().isEmpty()) { +// count = mongoTemplate.getCollection(mongoTemplate.getCollectionName(clazz)).estimatedDocumentCount(); +// } else { +// count = mongoTemplate.count(query, clazz); +// } +// +// logCount(clazz, query, systemTime); +// return count; +// } +// +// /** +// * 查找全部数量 +// * +// * @param clazz 类 +// * @return Long 数量 +// */ +// public Long findAllCount(Class clazz) { +// return findCountByQuery(new CriteriaAndWrapper(), clazz); +// } +// +// /** +// * 获取list中对象某个属性,组成新的list +// * +// * @param list 列表 +// * @param clazz 类 +// * @param property 属性 +// * @return List 列表 +// */ +// @SuppressWarnings("unchecked") +// private List extractProperty(List list, String property, Class clazz) { +// Set rs = new HashSet(); +// for (Object object : list) { +// Object value = ReflectUtil.getFieldValue(object, property); +// if (value != null && value.getClass().equals(clazz)) { +// rs.add((T) value); +// } +// } +// +// return new ArrayList(rs); +// } +// +//}