From 031288761e3e30ac4add140364d3106dee3766f6 Mon Sep 17 00:00:00 2001 From: wangyu <727842003@qq.com> Date: Thu, 9 Apr 2020 10:48:48 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9B=86=E6=88=90=E5=B0=8F=E9=9C=B8=E7=8E=8B?= =?UTF-8?q?=E6=B3=A8=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../annotations/EnableMongoRepo.java | 29 ++++++++++++ .../framework/builder/CriteriaBuilder.java | 12 ++++- .../boot/FlyfishApplication.java | 47 +++++++++++++++++++ .../framework/controller/BaseController.java | 2 +- .../framework/controller/SafeController.java | 4 ++ .../handler/GlobalExceptionHandler.java | 4 +- 6 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 flyfish-data/src/main/java/com/flyfish/framework/annotations/EnableMongoRepo.java create mode 100644 flyfish-web/src/main/java/com/flyfish/framework/configuration/boot/FlyfishApplication.java create mode 100644 flyfish-web/src/main/java/com/flyfish/framework/controller/SafeController.java diff --git a/flyfish-data/src/main/java/com/flyfish/framework/annotations/EnableMongoRepo.java b/flyfish-data/src/main/java/com/flyfish/framework/annotations/EnableMongoRepo.java new file mode 100644 index 0000000..ce23b87 --- /dev/null +++ b/flyfish-data/src/main/java/com/flyfish/framework/annotations/EnableMongoRepo.java @@ -0,0 +1,29 @@ +package com.flyfish.framework.annotations; + +import com.flyfish.framework.repository.impl.DefaultRepositoryFactoryBean; +import com.flyfish.framework.repository.impl.DefaultRepositoryImpl; +import org.springframework.core.annotation.AliasFor; +import org.springframework.data.mongodb.config.EnableMongoAuditing; +import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; + +import java.lang.annotation.*; + +@EnableMongoRepositories( + repositoryFactoryBeanClass = DefaultRepositoryFactoryBean.class, + repositoryBaseClass = DefaultRepositoryImpl.class +) +@EnableMongoAuditing +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Inherited +public @interface EnableMongoRepo { + + /** + * 扫描的基本路径 + * + * @return 结果 + */ + @AliasFor(annotation = EnableMongoRepositories.class) + String[] basePackages() default {}; +} diff --git a/flyfish-data/src/main/java/com/flyfish/framework/builder/CriteriaBuilder.java b/flyfish-data/src/main/java/com/flyfish/framework/builder/CriteriaBuilder.java index 706d296..7337af0 100644 --- a/flyfish-data/src/main/java/com/flyfish/framework/builder/CriteriaBuilder.java +++ b/flyfish-data/src/main/java/com/flyfish/framework/builder/CriteriaBuilder.java @@ -5,12 +5,14 @@ import com.flyfish.framework.domain.base.Domain; import com.flyfish.framework.domain.base.Qo; import lombok.Getter; import lombok.Setter; +import org.apache.commons.lang3.ClassUtils; import org.bson.types.ObjectId; import org.springframework.beans.BeanUtils; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; +import java.beans.PropertyDescriptor; import java.lang.reflect.InvocationTargetException; import java.util.*; import java.util.function.BiFunction; @@ -105,7 +107,7 @@ public final class CriteriaBuilder { Object value = propertyDescriptor.getReadMethod().invoke(qo); // 值非空予以过滤 if (!ObjectUtils.isEmpty(value)) { - String field = keyMapper.getOrDefault(key, key); + String field = determineField(key, propertyDescriptor); return functionMap.getOrDefault(propertyDescriptor.getName(), Criteria::is).apply( Criteria.where(field), fixValue(field, value)); } @@ -149,6 +151,14 @@ public final class CriteriaBuilder { } } + private String determineField(String key, PropertyDescriptor propertyDescriptor) { + String field = keyMapper.getOrDefault(key, key); + if (ClassUtils.isAssignable(propertyDescriptor.getPropertyType(), Collection.class)) { + field = field.replace(".$id", ""); + } + return field; + } + /** * 整合最后的结果 * diff --git a/flyfish-web/src/main/java/com/flyfish/framework/configuration/boot/FlyfishApplication.java b/flyfish-web/src/main/java/com/flyfish/framework/configuration/boot/FlyfishApplication.java new file mode 100644 index 0000000..9451c49 --- /dev/null +++ b/flyfish-web/src/main/java/com/flyfish/framework/configuration/boot/FlyfishApplication.java @@ -0,0 +1,47 @@ +package com.flyfish.framework.configuration.boot; + +import com.flyfish.framework.annotations.EnableMongoRepo; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.EnableAspectJAutoProxy; +import org.springframework.core.annotation.AliasFor; +import org.springframework.scheduling.annotation.EnableAsync; + +import java.lang.annotation.*; + +/** + * 飞鱼便捷入口,一个注解,所有工作 + * All in One 小霸王注解,注意指定扫描路径 + * + * @author wangyu + */ +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Inherited +@EnableMongoRepo +@SpringBootApplication +@EnableAsync(proxyTargetClass = true) +@EnableAspectJAutoProxy +public @interface FlyfishApplication { + + /** + * repo扫描的基础包 + * + * @return 结果 + */ + @AliasFor( + annotation = EnableMongoRepo.class, + attribute = "basePackages" + ) + String[] repositoryBasePackages() default {}; + + /** + * 扫描组件的路径 + * + * @return 结果 + */ + @AliasFor( + annotation = SpringBootApplication.class + ) + String[] scanBasePackages() default "com.flyfish"; +} diff --git a/flyfish-web/src/main/java/com/flyfish/framework/controller/BaseController.java b/flyfish-web/src/main/java/com/flyfish/framework/controller/BaseController.java index 58baf63..ce82ec5 100644 --- a/flyfish-web/src/main/java/com/flyfish/framework/controller/BaseController.java +++ b/flyfish-web/src/main/java/com/flyfish/framework/controller/BaseController.java @@ -24,7 +24,7 @@ import java.util.List; * @author wangyu * @create 2017-06-15 8:48 */ -public abstract class BaseController> { +public abstract class BaseController> implements SafeController { @Autowired protected BaseService service; diff --git a/flyfish-web/src/main/java/com/flyfish/framework/controller/SafeController.java b/flyfish-web/src/main/java/com/flyfish/framework/controller/SafeController.java new file mode 100644 index 0000000..ecd0f1d --- /dev/null +++ b/flyfish-web/src/main/java/com/flyfish/framework/controller/SafeController.java @@ -0,0 +1,4 @@ +package com.flyfish.framework.controller; + +public interface SafeController { +} diff --git a/flyfish-web/src/main/java/com/flyfish/framework/handler/GlobalExceptionHandler.java b/flyfish-web/src/main/java/com/flyfish/framework/handler/GlobalExceptionHandler.java index 528b758..1f9e450 100644 --- a/flyfish-web/src/main/java/com/flyfish/framework/handler/GlobalExceptionHandler.java +++ b/flyfish-web/src/main/java/com/flyfish/framework/handler/GlobalExceptionHandler.java @@ -2,6 +2,7 @@ package com.flyfish.framework.handler; import com.flyfish.framework.bean.BaseResponse; import com.flyfish.framework.bean.Result; +import com.flyfish.framework.controller.SafeController; import com.flyfish.framework.exception.BaseException; import com.flyfish.framework.exception.auth.ClientTokenException; import com.flyfish.framework.exception.auth.UserInvalidException; @@ -22,8 +23,9 @@ import java.util.stream.Collectors; /** * Created by wangyu on 2017/9/8. + * 只允许implement了SafeController的class */ -@RestControllerAdvice("com.flyfish") +@RestControllerAdvice(basePackageClasses = SafeController.class) @ResponseBody public class GlobalExceptionHandler { private Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);