diff --git a/README.md b/README.md
index a110940cd5627e22db3d533c15681bcbeb9b504e..72231eac8a03663c8ec2a9aa02c8b19c9b05e5a4 100644
--- a/README.md
+++ b/README.md
@@ -18,11 +18,22 @@ GeneratorConfig generatorConfig = GeneratorConfig.builder()
JointBlockGenerator.generator(generatorConfig);
```
-DataFill填充框架使用必须要引入aop
+DataFill填充框架使用demo
-```xml
-
- org.springframework.boot
- spring-boot-starter-aop
-
+```java
+// 数据填充执行器
+DataFillActuator actuator = new DataFillActuator<>(billDtos);
+// 中心填充处理过程
+actuator.addProcess(DataFillProcessBuilder.builder()
+ .keyGetFun(billDto -> billDto.getCenter().getLmnId())
+ .fillDataGetFun(lmnIds -> baseDataOrgFeignClient.queryOrgPageList(DataFillProcessBuilder.request(() -> {
+ OrgPageQry qry = new OrgPageQry();
+ qry.setLmnIdIn(lmnIds.stream().map(String::valueOf).collect(Collectors.toList()));
+ qry.setPageSize((long)lmnIds.size());
+ return qry;
+ })).getRows())
+ .fillKeyGetFun(OrgDto::getLmnId)
+ .fillFun((billDto, orgDto) -> BeanUtil.copyProperties(orgDto, billDto.getCenter())).build());
+// 执行填充
+actuator.execute();
```
\ No newline at end of file
diff --git a/changelog.md b/changelog.md
index ade0bd5bfbafb9d524d9a826c9ce396eb6281008..15407da3b9f74d2b2667dbd259918429d0e63881 100644
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,12 @@
+# 0.30.0
+feature:
+- flexible查询增加,特殊情况下动态查询`totalChapter[NotIn]=(6|7|8)`
+refactor:
+- 重构DataFill,不在使用注解,使用编码的方式增强代码可读性。
+- 大幅度精简框架,去除大量无用代码。
+fix:
+- 修复代码生成器对审计字段的支持。
+
# 0.29.0
feature:
- batch mapper功能支持,支持批量插入,批量replace。
diff --git a/jointblock-spring-boot-autoconfigure/src/main/java/fun/easycode/joinblock/autoconfigure/JointBlockAutoConfiguration.java b/jointblock-spring-boot-autoconfigure/src/main/java/fun/easycode/joinblock/autoconfigure/JointBlockAutoConfiguration.java
index 6253a7794dde5aad0d15b699f391f1989880bedd..32bab01cfa5ab2c1dde84ee67984bb748d36649e 100644
--- a/jointblock-spring-boot-autoconfigure/src/main/java/fun/easycode/joinblock/autoconfigure/JointBlockAutoConfiguration.java
+++ b/jointblock-spring-boot-autoconfigure/src/main/java/fun/easycode/joinblock/autoconfigure/JointBlockAutoConfiguration.java
@@ -3,22 +3,17 @@ package fun.easycode.joinblock.autoconfigure;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import fun.easycode.jointblock.core.AuditMetaObjectHandler;
import fun.easycode.jointblock.core.ExecutorContext;
-import fun.easycode.jointblock.core.ExecutorDataFillInterceptor;
-import fun.easycode.jointblock.core.ExecutorDataFillPointcut;
-import fun.easycode.jointblock.datafill.*;
-import fun.easycode.jointblock.mybatisplus.JointBlockSqlInjector;
+import fun.easycode.jointblock.core.JointBlockSqlInjector;
+import fun.easycode.jointblock.core.UserHolder;
+import fun.easycode.jointblock.util.BatchUtil;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.aop.Advisor;
-import org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.BeanFactory;
-import org.springframework.beans.factory.BeanFactoryAware;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
@@ -32,9 +27,23 @@ import org.springframework.context.annotation.Configuration;
@EnableConfigurationProperties(JointBlockProperties.class)
@Configuration
@Slf4j
-public class JointBlockAutoConfiguration implements BeanFactoryAware{
+public class JointBlockAutoConfiguration {
- private BeanFactory beanFactory;
+ @Bean
+ @ConditionalOnBean(SqlSessionFactory.class)
+ public BatchUtil batchUtil(SqlSessionFactory factory){
+ return new BatchUtil(factory);
+ }
+
+ /**
+ * 配置用户信息获取器,如果用户自己配置则默认配置失效
+ * @return UserHolder
+ */
+ @Bean
+ @ConditionalOnMissingBean(UserHolder.class)
+ public UserHolder userHolder(){
+ return new UserHolder.DefaultUserHolder();
+ }
/**
* 配置mybatis plus插件, 如果用户自己配置则默认配置失效
@@ -65,11 +74,6 @@ public class JointBlockAutoConfiguration implements BeanFactoryAware{
return new JointBlockSqlInjector();
}
- @Bean
- public DataCopy dataCopy(){
- return new DataCopy();
- }
-
/**
* mybatis plus审计字段处理
* @return AuditMetaObjectHandler
@@ -80,41 +84,6 @@ public class JointBlockAutoConfiguration implements BeanFactoryAware{
return new AuditMetaObjectHandler();
}
- /**
- * 代码填充织入执行器
- * @return DefaultBeanFactoryPointcutAdvisor
- */
- @ConditionalOnClass(Advisor.class)
- @Bean
- public DefaultBeanFactoryPointcutAdvisor executorDataFillAdvisor() {
- // 自动填充织入到Executor.execute方法
- DefaultBeanFactoryPointcutAdvisor advisor = new DefaultBeanFactoryPointcutAdvisor();
- advisor.setPointcut(executorDataFillPointcut());
- advisor.setAdvice(executorDataFillInterceptor());
- advisor.setBeanFactory(beanFactory);
- return advisor;
- }
-
- /**
- * 执行器识别定义的切点
- * @return ExecutorDataFillPointcut
- */
- @Bean
- @ConditionalOnClass(Advisor.class)
- public ExecutorDataFillPointcut executorDataFillPointcut(){
- return new ExecutorDataFillPointcut();
- }
-
- /**
- * 执行器数据填充具体的切入逻辑
- * @return ExecutorDataFillInterceptor
- */
- @Bean
- @ConditionalOnClass(Advisor.class)
- public ExecutorDataFillInterceptor executorDataFillInterceptor(){
- return new ExecutorDataFillInterceptor();
- }
-
/**
* 执行器上下文,用于直接获取执行器进行调用
* @return ExecutorContext
@@ -123,58 +92,4 @@ public class JointBlockAutoConfiguration implements BeanFactoryAware{
public ExecutorContext executorContext(){
return new ExecutorContext();
}
-
- // 下方是DataFill的配置
-
- /**
- * mybatis plus填充策略支持
- * @return MyBatisPlusDataFillStrategy
- */
- @Bean
- @ConditionalOnClass({BaseMapper.class})
- public MyBatisPlusDataFillStrategy myBatisPlusDataFillStrategy(){
- return new MyBatisPlusDataFillStrategy();
- }
-
- /**
- * feign远程调用策略支持
- * @return FeignDataFillStrategy
- */
- @Bean
- @ConditionalOnClass(name = "org.springframework.cloud.openfeign.FeignContext")
- public FeignDataFillStrategy feignDataFillStrategy(){
- return new FeignDataFillStrategy();
- }
-
- /**
- * 数据填充具体执行器, 这里与业务执行器没有联系
- * @return DataFillExecutor
- */
- @Bean
- public DataFillExecutor dataFillExecutor(){
- return new DataFillExecutor();
- }
-
- /**
- * 数据填充策略Context, 用于获取填充策略
- * @return DataFillStrategyContext
- */
- @Bean
- public DataFillStrategyContext dataFillStrategyContext(){
- return new DataFillStrategyContext();
- }
-
- /**
- * 数据填充线程池管理
- * @return DataFillThreadPoolManager
- */
- @Bean
- public DataFillThreadPoolManager dataFillThreadPoolManager(){
- return new DataFillThreadPoolManager();
- }
-
- @Override
- public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
- this.beanFactory = beanFactory;
- }
}
diff --git a/jointblock-spring-boot-autoconfigure/src/main/java/fun/easycode/joinblock/autoconfigure/JointBlockWebAutoConfiguration.java b/jointblock-spring-boot-autoconfigure/src/main/java/fun/easycode/joinblock/autoconfigure/JointBlockWebAutoConfiguration.java
index 9194a76d6a1db90561c8e322d35ab3234f68a02c..8c8aae1321e4cbab40ca06969368f9e40fee5673 100644
--- a/jointblock-spring-boot-autoconfigure/src/main/java/fun/easycode/joinblock/autoconfigure/JointBlockWebAutoConfiguration.java
+++ b/jointblock-spring-boot-autoconfigure/src/main/java/fun/easycode/joinblock/autoconfigure/JointBlockWebAutoConfiguration.java
@@ -2,17 +2,17 @@ package fun.easycode.joinblock.autoconfigure;
import fun.easycode.jointblock.core.*;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
+import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.time.LocalDateTime;
+import java.util.List;
/**
* web应用才生效
@@ -23,6 +23,11 @@ import java.time.LocalDateTime;
@Slf4j
public class JointBlockWebAutoConfiguration implements WebMvcConfigurer, Jackson2ObjectMapperBuilderCustomizer{
+ @Override
+ public void addArgumentResolvers(List resolvers) {
+ resolvers.add(new QueryHandlerMethodArgumentResolver());
+ }
+
/**
* mvc枚举转换器
* @return EnumeratorConvertFactory
@@ -57,15 +62,4 @@ public class JointBlockWebAutoConfiguration implements WebMvcConfigurer, Jackson
jacksonObjectMapperBuilder.deserializerByType(LocalDateTime.class, new LocalDateTimeDeserializer());
jacksonObjectMapperBuilder.serializerByType(LocalDateTime.class, new LocalDateTimeSerializer());
}
-
- /**
- * Cloud UserHolder 实例
- * @return UserHolder
- */
- @ConditionalOnMissingClass({"org.springframework.security.core.Authentication"})
- @ConditionalOnMissingBean(UserHolder.class)
- @Bean
- public UserHolder cloudUserHolder(){
- return new CloudUserHolder();
- }
}
diff --git a/jointblock-spring-boot-parent/pom.xml b/jointblock-spring-boot-parent/pom.xml
index 7c6ee2be14b9ea4855f28f2d59e058dc65622a86..c22bfecf98412d591e13e2e1e87638e42449b6eb 100644
--- a/jointblock-spring-boot-parent/pom.xml
+++ b/jointblock-spring-boot-parent/pom.xml
@@ -27,7 +27,7 @@
10.10.1
2.1.5.RELEASE
20.0
- 0.29.0
+ 0.30.0
2.14.2
@@ -64,6 +64,11 @@
mybatis-plus-boot-starter
${mybatis-plus.version}
+
+ com.baomidou
+ mybatis-plus
+ ${mybatis-plus.version}
+
com.baomidou
mybatis-plus-generator
@@ -74,6 +79,11 @@
jointblock-spring-boot-starter
${jointblock.version}
+
+ fun.easycode
+ jointblock-spring-boot
+ ${jointblock.version}
+
com.github.xiaoymin
knife4j-spring-boot-starter
@@ -137,6 +147,11 @@
lombok-mapstruct-binding
0.2.0
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ ${spring-boot.version}
+
diff --git a/jointblock-spring-boot-test/src/main/java/fun/easycode/jointblock/adpter/api/ArticleRestController.java b/jointblock-spring-boot-test/src/main/java/fun/easycode/jointblock/adpter/api/ArticleRestController.java
index 8b8a717b36548553ed13bc38db3593527f91e663..869bfaf15d7f023cf8186e12d2fad975b7b9e54b 100644
--- a/jointblock-spring-boot-test/src/main/java/fun/easycode/jointblock/adpter/api/ArticleRestController.java
+++ b/jointblock-spring-boot-test/src/main/java/fun/easycode/jointblock/adpter/api/ArticleRestController.java
@@ -1,10 +1,9 @@
package fun.easycode.jointblock.adpter.api;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import fun.easycode.jointblock.core.Constant;
import fun.easycode.jointblock.core.ExecutorContext;
import fun.easycode.jointblock.core.PageDto;
-import fun.easycode.jointblock.service.dto.ArticlePagingQry;
+import fun.easycode.jointblock.service.dto.ArticlePageQry;
import fun.easycode.jointblock.service.dto.data.ArticlePagingDto;
import fun.easycode.jointblock.service.executor.ArticlePagingQryExe;
import io.swagger.annotations.ApiImplicitParam;
@@ -22,10 +21,10 @@ public class ArticleRestController {
+ "查看别人的能看机审通过、到达发布时间、并且不是草稿、不是驳回的阅读文章")
@GetMapping("/articles")
@ApiImplicitParams({
- @ApiImplicitParam(name = Constant.CURRENT_USER_ID_HEADER, paramType = "header"),
+// @ApiImplicitParam(name = Constant.CURRENT_USER_ID_HEADER, paramType = "header"),
@ApiImplicitParam(value = "用户ID", name = "userId")
})
- public ResponseEntity> myReadList(ArticlePagingQry qry) {
+ public ResponseEntity> myReadList(ArticlePageQry qry) {
return ResponseEntity.ok(ExecutorContext.get(ArticlePagingQryExe.class).execute(qry));
}
}
diff --git a/jointblock-spring-boot-test/src/main/java/fun/easycode/jointblock/manager/UserBaseDto.java b/jointblock-spring-boot-test/src/main/java/fun/easycode/jointblock/manager/UserBaseDto.java
index 7ed34362ff021c4fc935283a5177f0537a1b8676..56716019a3c842e5a12fe4aee7c35184b235a8d5 100644
--- a/jointblock-spring-boot-test/src/main/java/fun/easycode/jointblock/manager/UserBaseDto.java
+++ b/jointblock-spring-boot-test/src/main/java/fun/easycode/jointblock/manager/UserBaseDto.java
@@ -1,7 +1,6 @@
package fun.easycode.jointblock.manager;
-import fun.easycode.jointblock.datafill.FeignId;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@@ -15,7 +14,6 @@ import java.io.Serializable;
@NoArgsConstructor
public class UserBaseDto implements Serializable {
- @FeignId
private String userId;
private String nickname;
private String avatar;
diff --git a/jointblock-spring-boot-test/src/main/java/fun/easycode/jointblock/service/dto/ArticlePagingQry.java b/jointblock-spring-boot-test/src/main/java/fun/easycode/jointblock/service/dto/ArticlePageQry.java
similarity index 59%
rename from jointblock-spring-boot-test/src/main/java/fun/easycode/jointblock/service/dto/ArticlePagingQry.java
rename to jointblock-spring-boot-test/src/main/java/fun/easycode/jointblock/service/dto/ArticlePageQry.java
index 8792403d02667cf725bb9fa26a3f00201a6aa970..c1cc688bd307f81421b29795e043213e1ac0a0ee 100644
--- a/jointblock-spring-boot-test/src/main/java/fun/easycode/jointblock/service/dto/ArticlePagingQry.java
+++ b/jointblock-spring-boot-test/src/main/java/fun/easycode/jointblock/service/dto/ArticlePageQry.java
@@ -1,11 +1,11 @@
package fun.easycode.jointblock.service.dto;
-import fun.easycode.jointblock.core.PagingQry;
+import fun.easycode.jointblock.core.PageQry;
import fun.easycode.jointblock.validator.IValidate;
import lombok.Data;
@Data
-public class ArticlePagingQry extends PagingQry implements IValidate {
+public class ArticlePageQry extends PageQry implements IValidate {
// @NotBlank
private String userId;
}
diff --git a/jointblock-spring-boot-test/src/main/java/fun/easycode/jointblock/service/dto/data/ArticlePagingDto.java b/jointblock-spring-boot-test/src/main/java/fun/easycode/jointblock/service/dto/data/ArticlePagingDto.java
index 40b4155a23c867202b7318d6ec0217a12882bcb1..e4d8f464cc54480b57df82773a4b34abd93378f5 100644
--- a/jointblock-spring-boot-test/src/main/java/fun/easycode/jointblock/service/dto/data/ArticlePagingDto.java
+++ b/jointblock-spring-boot-test/src/main/java/fun/easycode/jointblock/service/dto/data/ArticlePagingDto.java
@@ -1,15 +1,11 @@
package fun.easycode.jointblock.service.dto.data;
-import fun.easycode.jointblock.datafill.DataFill;
-import fun.easycode.jointblock.datafill.DataParam;
-import fun.easycode.jointblock.datafill.EnableDataFill;
import fun.easycode.jointblock.manager.*;
import lombok.Data;
import java.util.List;
@Data
-@EnableDataFill
public class ArticlePagingDto {
private String id;
private String title;
@@ -19,45 +15,14 @@ public class ArticlePagingDto {
private List img;
private List coverImgSmall;
// , methodName = "getUserByIds"
- @DataFill(source = UserClient.class, value = "userId")
private UserBaseDto user;
- @DataFill(source = CollegeClient.class)
private CollegeDto college;
private Long createTime;
- @DataFill(source = PraiseCountClient.class)
private int praiseCount;
- @DataFill(source = CommentCountClient.class, params = {
- @DataParam(
- name = "topicIds",
- value = "#ids"
- )
- })
private int commentCount;
- @DataFill(source = BroweCountClient.class
- , spEl = "#source.playAmount + #source.virtualPlayAmount")
private int browseCount;
- @DataFill(source = PraiseClient.class, params = {
- @DataParam(
- name = "userId",
- value = "T(fun.easycode.jointblock.common.util.SecurityUtil).getCurrentUserId()"
- ),
- @DataParam(
- name = "topicIds",
- value = "#ids"
- )
- })
private Boolean isPraise = false;
private Boolean isAttention = false;
- @DataFill(source = FavoriteClient.class, params = {
- @DataParam(
- name = "userId",
- value = "T(fun.easycode.jointblock.common.util.SecurityUtil).getCurrentUserId()"
- ),
- @DataParam(
- name = "topicIds",
- value = "#ids"
- )
- })
private Boolean isCollection = false;
private String topicType = TopicType.ARTICLE.getValue();
private String type = WorkType.TEXT.getValue();
diff --git a/jointblock-spring-boot-test/src/main/java/fun/easycode/jointblock/service/executor/ArticlePagingQryExe.java b/jointblock-spring-boot-test/src/main/java/fun/easycode/jointblock/service/executor/ArticlePagingQryExe.java
index b040375e2b79f1c05838af9b20003d7c0ff76bdc..89402be80c1ac56a09b306539a76dea1cdcdb10d 100644
--- a/jointblock-spring-boot-test/src/main/java/fun/easycode/jointblock/service/executor/ArticlePagingQryExe.java
+++ b/jointblock-spring-boot-test/src/main/java/fun/easycode/jointblock/service/executor/ArticlePagingQryExe.java
@@ -6,9 +6,8 @@ import fun.easycode.jointblock.core.PageDto;
import fun.easycode.jointblock.manager.ArticleClientDto;
import fun.easycode.jointblock.manager.ArticleClientQuery;
import fun.easycode.jointblock.manager.ArticleServiceClient;
-import fun.easycode.jointblock.service.dto.ArticlePagingQry;
+import fun.easycode.jointblock.service.dto.ArticlePageQry;
import fun.easycode.jointblock.service.dto.data.ArticlePagingDto;
-import fun.easycode.jointblock.service.dto.data.ArticlePagingDtoAssembler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
@@ -20,7 +19,7 @@ import java.util.Objects;
* @author xuzhe
*/
@Service
-public class ArticlePagingQryExe implements Executor> {
+public class ArticlePagingQryExe implements Executor> {
private final ArticleServiceClient articleServiceClient;
@@ -30,7 +29,7 @@ public class ArticlePagingQryExe implements Executor execute(ArticlePagingQry qry) {
+ public PageDto execute(ArticlePageQry qry) {
qry.validate();
@@ -49,7 +48,8 @@ public class ArticlePagingQryExe implements Executor pageDto = ExecutorContext.get(ArticlePagingQryExe.class).execute(qry);
System.out.println(pageDto.getTotalSize());
}
+
+ public static void main(String[] args) {
+ Pattern pattern = Pattern.compile("(\\w+?)(\\[.+?\\]=)([a-zA-Z0-9\\\\u4e00-\\\\u9fa5()|]+?),");
+ Matcher matcher = pattern.matcher("lmnid[Eq]=164044345999532823,status[Eq]=1,");
+
+ Pattern operatorPattern = Pattern.compile("(?<=\\[).*(?=\\])");
+// Pattern operatorPattern = Pattern.compile("(?<=\\[).*(?=\\])");
+
+
+ while (matcher.find()) {
+ System.out.print(matcher.group(1) + " ");
+ System.out.print(matcher.group(2)+ " ");
+
+ Matcher operatorMatcher = operatorPattern.matcher(matcher.group(2));
+
+ System.err.print(operatorMatcher.find() ? operatorMatcher.group() : "");
+ System.out.println(matcher.group(3) + " ");
+ }
+
+ }
}
diff --git a/jointblock-spring-boot/src/main/java/fun/easycode/jointblock/core/AuditMetaObjectHandler.java b/jointblock-spring-boot/src/main/java/fun/easycode/jointblock/core/AuditMetaObjectHandler.java
index c6a462c33e9bd5d7e5c72ef566d72bd4ebeaa61a..29f4d1e70c406b6248698f8ff4cbbd946300b6c8 100644
--- a/jointblock-spring-boot/src/main/java/fun/easycode/jointblock/core/AuditMetaObjectHandler.java
+++ b/jointblock-spring-boot/src/main/java/fun/easycode/jointblock/core/AuditMetaObjectHandler.java
@@ -24,9 +24,9 @@ public class AuditMetaObjectHandler implements MetaObjectHandler {
public void insertFill(MetaObject metaObject) {
LocalDateTime now = LocalDateTime.now();
this.strictInsertFill(metaObject, "createTime", ()-> now, LocalDateTime.class);
- this.strictInsertFill(metaObject, "createBy", UserHolder.getInstance()::getUserId, String.class);
+ this.strictInsertFill(metaObject, "createBy",UserHolder.getInstance().getLoginUser()::getId, String.class);
this.strictInsertFill(metaObject, "updateTime", ()-> now, LocalDateTime.class);
- this.strictInsertFill(metaObject, "updateBy", UserHolder.getInstance()::getUserId, String.class);
+ this.strictInsertFill(metaObject, "updateBy", UserHolder.getInstance().getLoginUser()::getId, String.class);
// 兼容date
Date nowDate = new Date();
@@ -38,7 +38,7 @@ public class AuditMetaObjectHandler implements MetaObjectHandler {
public void updateFill(MetaObject metaObject) {
LocalDateTime now = LocalDateTime.now();
this.strictUpdateFill(metaObject, "updateTime", () -> now, LocalDateTime.class);
- this.strictUpdateFill(metaObject, "updateBy", UserHolder.getInstance()::getUserId, String.class);
+ this.strictUpdateFill(metaObject, "updateBy", UserHolder.getInstance().getLoginUser()::getId, String.class);
// 兼容date
Date nowDate = new Date();
diff --git a/jointblock-spring-boot/src/main/java/fun/easycode/jointblock/mybatisplus/BatchMapper.java b/jointblock-spring-boot/src/main/java/fun/easycode/jointblock/core/BatchMapper.java
similarity index 90%
rename from jointblock-spring-boot/src/main/java/fun/easycode/jointblock/mybatisplus/BatchMapper.java
rename to jointblock-spring-boot/src/main/java/fun/easycode/jointblock/core/BatchMapper.java
index 36eb6f19f4e4892446fe077bb2d471e98cd33346..9b454695d7d9f00408e1f1111617001d383ab1d6 100644
--- a/jointblock-spring-boot/src/main/java/fun/easycode/jointblock/mybatisplus/BatchMapper.java
+++ b/jointblock-spring-boot/src/main/java/fun/easycode/jointblock/core/BatchMapper.java
@@ -1,4 +1,4 @@
-package fun.easycode.jointblock.mybatisplus;
+package fun.easycode.jointblock.core;
import java.util.List;
diff --git a/jointblock-spring-boot/src/main/java/fun/easycode/jointblock/exception/CheckException.java b/jointblock-spring-boot/src/main/java/fun/easycode/jointblock/core/CheckException.java
similarity index 35%
rename from jointblock-spring-boot/src/main/java/fun/easycode/jointblock/exception/CheckException.java
rename to jointblock-spring-boot/src/main/java/fun/easycode/jointblock/core/CheckException.java
index 9e4ad40dc35ec23beb05337cd7efaa912b259ed3..fe677db562fd2635306303346a944c953f5dd09f 100644
--- a/jointblock-spring-boot/src/main/java/fun/easycode/jointblock/exception/CheckException.java
+++ b/jointblock-spring-boot/src/main/java/fun/easycode/jointblock/core/CheckException.java
@@ -1,14 +1,11 @@
-package fun.easycode.jointblock.exception;
+package fun.easycode.jointblock.core;
-import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
-import lombok.Getter;
/**
* 通用逻辑异常
- * @Author: xuzhen97
- * @Date: 2023/03/22
+ * @author xuzhen97
*/
@EqualsAndHashCode(callSuper = true)
@Data
@@ -27,46 +24,53 @@ public class CheckException extends RuntimeException{
* @Date: 2023/03/22
*/
private final Integer code;
+ private final String message;
+
/**
- * 错误信息
- * @Author: xuzhen97
- * @Date: 2023/03/22
+ * 通用逻辑异常
+ * @param message 错误信息
*/
- private final String msg;
-
- public CheckException(String msg){
- super(msg);
+ public CheckException(String message){
+ super(message);
this.code = DEFAULT_CODE;
- this.msg = msg;
+ this.message = message;
}
- public CheckException(Integer code, String msg){
- super(msg);
+ /**
+ * 通用逻辑异常
+ * @param code 错误码
+ * @param message 错误信息
+ */
+ public CheckException(Integer code, String message){
+ super(message);
this.code = code;
- this.msg = msg;
+ this.message = message;
}
/**
- * 返回结果
- * @Author: xuzhen97
- * @Date: 2023/03/22
+ * 返回错误信息
+ * @return 错误信息
*/
- public Result result(){
- return new Result(code, msg);
- }
-
- public static Result toResult(Integer code, String msg){
- return new Result(code, msg);
+ public ErrorDto error(){
+ return new ErrorDto(code, message);
}
- public static Result toResult(String msg){
- return new Result(DEFAULT_CODE, msg);
+ /**
+ * 返回错误信息
+ * @param code 错误码
+ * @param message 错误信息
+ * @return 错误信息
+ */
+ public static ErrorDto error(Integer code, String message){
+ return new ErrorDto(code, message);
}
- @AllArgsConstructor
- @Getter
- public static class Result{
- private final Integer code;
- private final String msg;
+ /**
+ * 返回错误信息
+ * @param msg 错误信息
+ * @return 错误信息
+ */
+ public static ErrorDto error(String msg){
+ return new ErrorDto(DEFAULT_CODE, msg);
}
}
diff --git a/jointblock-spring-boot/src/main/java/fun/easycode/jointblock/core/CloudUserHolder.java b/jointblock-spring-boot/src/main/java/fun/easycode/jointblock/core/CloudUserHolder.java
deleted file mode 100644
index 3e3361bda0b83ab8b97052cd17c6914e4817717a..0000000000000000000000000000000000000000
--- a/jointblock-spring-boot/src/main/java/fun/easycode/jointblock/core/CloudUserHolder.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package fun.easycode.jointblock.core;
-
-import fun.easycode.jointblock.exception.CheckException;
-import org.springframework.util.StringUtils;
-
-/**
- * 微服务UserHolder实例
- * @author xuzhe
- */
-public class CloudUserHolder extends UserHolder{
- @Override
- public String getUserId() {
- String currUserId = RequestHolder.getRequest().getHeader("x-currUserId");
- if(StringUtils.isEmpty(currUserId)){
- throw new CheckException("x-currUserId header未传入!");
- }
- return currUserId;
- }
-}
diff --git a/jointblock-spring-boot/src/main/java/fun/easycode/jointblock/core/Condition.java b/jointblock-spring-boot/src/main/java/fun/easycode/jointblock/core/Condition.java
deleted file mode 100644
index ad50f41029738d7677b491a54d979d0ebe2fb204..0000000000000000000000000000000000000000
--- a/jointblock-spring-boot/src/main/java/fun/easycode/jointblock/core/Condition.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package fun.easycode.jointblock.core;
-
-import java.lang.annotation.*;
-
-/**
- * 条件注解,在修改的时候标识这是条件,不是set
- * @author xuzhe
- */
-@Documented
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ElementType.FIELD})
-public @interface Condition {
-
-}
\ No newline at end of file
diff --git a/jointblock-spring-boot/src/main/java/fun/easycode/jointblock/core/Constant.java b/jointblock-spring-boot/src/main/java/fun/easycode/jointblock/core/Constant.java
deleted file mode 100644
index 04b0f877c9e516b9c0e34c3773e038835e9ca59d..0000000000000000000000000000000000000000
--- a/jointblock-spring-boot/src/main/java/fun/easycode/jointblock/core/Constant.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package fun.easycode.jointblock.core;
-
-/**
- * 框架常量
- * @author xuzhe
- */
-public interface Constant {
-
- /**
- * 当前页
- */
- int CURRENT = 1;
- /**
- * 页大小
- */
- int SIZE = 10;
-
- /**
- * 总条数 header key
- */
- String TOTAL_SIZE_HEADER = "x-pagination-count";
-
- /**
- * 总页数 header key
- */
- String TOTAL_PAGE_HEADER = "x-pagination-pages";
- /**
- * 页大小 header key
- */
- String SIZE_HEADER = "x-pagination-size";
- /**
- * 当前页 header key
- */
- String CURRENT_HEADER = "x-pagination-number";
-
- /**
- * 当前操作人 header key
- */
- String CURRENT_USER_ID_HEADER = "x-currUserId";
-}
diff --git a/jointblock-spring-boot/src/main/java/fun/easycode/jointblock/core/DeleteResultConvert.java b/jointblock-spring-boot/src/main/java/fun/easycode/jointblock/core/DeleteResultConvert.java
deleted file mode 100644
index 7b94781d6aaf6d7b8a8919e6e5b901e7519dcebc..0000000000000000000000000000000000000000
--- a/jointblock-spring-boot/src/main/java/fun/easycode/jointblock/core/DeleteResultConvert.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package fun.easycode.jointblock.core;
-
-/**
- * 删除返回结果转换
- * @author xuzhe
- */
-@FunctionalInterface
-public interface DeleteResultConvert {
- /**
- * 数据库实体T转换为返回结果R
- * @param entity 数据库实体
- * @return R
- */
- R to(T entity);
-}
diff --git a/jointblock-spring-boot/src/main/java/fun/easycode/jointblock/core/DynamicOperate.java b/jointblock-spring-boot/src/main/java/fun/easycode/jointblock/core/DynamicOperate.java
index 73c4804f7e4405258be60b6b1164704069f41afc..3e1ff19e6e3c40c60ef2f3b757f705125101a7fa 100644
--- a/jointblock-spring-boot/src/main/java/fun/easycode/jointblock/core/DynamicOperate.java
+++ b/jointblock-spring-boot/src/main/java/fun/easycode/jointblock/core/DynamicOperate.java
@@ -1,21 +1,20 @@
package fun.easycode.jointblock.core;
import cn.hutool.core.annotation.AnnotationUtil;
-import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.ReflectUtil;
import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import fun.easycode.jointblock.exception.CheckException;
-import fun.easycode.jointblock.util.LogUtil;
import lombok.extern.slf4j.Slf4j;
+import static fun.easycode.jointblock.util.CamelUnderUtil.*;
import java.lang.reflect.Field;
-import java.time.LocalDateTime;
-import java.util.*;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
import java.util.stream.Collectors;
/**
@@ -24,59 +23,6 @@ import java.util.stream.Collectors;
*/
@Slf4j
public final class DynamicOperate {
-
- /**
- * 等于
- */
- public static final String EQ = "Eq";
- /**
- * 模糊查询
- */
- public static final String LIKE = "Like";
- /**
- * 模糊查询左
- */
- public static final String LIKE_LEFT = "LikeLeft";
- /**
- * 模糊查询右
- */
- public static final String LIKE_RIGHT = "LikeRight";
- /**
- * 大于
- */
- public static final String GT = "Gt";
- /**
- * 小于
- */
- public static final String LT = "Lt";
- /**
- * 大于等于
- */
- public static final String GE = "Ge";
- /**
- * 小于等于
- */
- public static final String LE = "Le";
-
- /**
- * in 集合查询
- */
- public static final String IN = "In";
-
- /**
- * not in 集合查询
- */
- public static final String NOT_IN = "NotIn";
-
- /**
- * is null 查询
- */
- public static final String IS_NULL = "IsNull";
-
- /**
- * 排序
- */
- public static final String SORT = "Sort";
/**
* 跳过字段, queryWrapper中跳过
*/
@@ -110,7 +56,7 @@ public final class DynamicOperate {
* @param 查询指令
* @param 转换的返回结果
*/
- public static PageDto page(K qry
+ public static PageDto page(K qry
, BaseMapper mapper
, QueryResultConvert resultConvert){
QueryWrapper queryWrapper = queryWrapper(qry);
@@ -118,230 +64,6 @@ public final class DynamicOperate {
return PageDto.toPageDto(page, resultConvert::to);
}
- /**
- * 修改工具方法,注意此方法cmd中的值必须传入,如果未传,数据库会被设置为Null
- * @param cmd 修改指令实体
- * @param mapper mybatis mapper
- * @param callback 修改回调,用于自定义修改逻辑
- * @param resultConvert 修改实体返回转换
- * @param skipFields 跳过字段,用于那些需要自定义逻辑的字段配合修改回调
- * @return 返回修改后的实体
- * @param 数据库实体
- * @param 修改指令
- * @param 修改后的实体
- */
- public static Optional update(K cmd, BaseMapper mapper
- , UpdateCallback callback
- , UpdateResultConvert resultConvert
- , String... skipFields) {
- return update(cmd, mapper, callback, resultConvert, false, false, skipFields);
- }
-
- /**
- * 修改工具方法,注意此方法cmd中的值必须传入,如果未传,数据库会被设置为Null
- * 此方法进行审计信息的填充update_by、update_time
- * 单个对象修改,根据条件必须唯一锁定一条数据
- *
- * @param cmd 修改指令实体
- * @param mapper mybatis mapper
- * @param callback 修改回调,用于自定义修改逻辑
- * @param resultConvert 修改实体返回转换
- * @param skipFields 跳过字段,用于那些需要自定义逻辑的字段配合修改回调
- * @param 数据库实体
- * @param 修改指令
- * @param 修改后的实体
- * @return 返回修改后的实体
- */
- public static Optional updateNotAudit(K cmd, BaseMapper mapper
- , UpdateCallback callback
- , UpdateResultConvert resultConvert
- , String... skipFields) {
- return update(cmd, mapper, callback, resultConvert, false, true, skipFields);
- }
-
- /**
- * 修改工具方法
- *
- * @param cmd 修改指令实体
- * @param mapper mybatis mapper
- * @param callback 修改回调,用于自定义修改逻辑
- * @param resultConvert 修改实体返回转换
- * @param skipEmpty 是否跳过cmd的empty字段,如果要跳过,那么不传入的字段,或者是""这种都不进行修改
- * @param skipAudit 是否跳过审计字段update_by和update_time就不自动传参
- * @param skipFields 跳过字段,用于那些需要自定义逻辑的字段配合修改回调
- * @param 数据库实体
- * @param 修改指令
- * @param 修改后的实体
- * @return 返回修改后的实体
- */
- private static Optional update(K cmd
- , BaseMapper mapper
- , UpdateCallback callback
- , UpdateResultConvert resultConvert
- , boolean skipEmpty
- , boolean skipAudit
- , String... skipFields) {
-
- Map fieldMap = ReflectUtil.getFieldMap(cmd.getClass());
- List skipFieldList = Arrays.asList(skipFields);
- // 生成修改id, 用来记录修改的具体情况,用于打印日志
- String updateId = IdUtil.getSnowflakeNextIdStr();
- UpdateWrapper wrapper = new LogUpdateWrapper<>(updateId);
- Queue